From 6245c2d9b737583aa1d8e49404c6157bba8c0665 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Thu, 18 Jun 2026 20:19:13 +0200 Subject: [PATCH 01/22] refactor(i18n): strip dead keys, normalize locales, fix broken refs - Remove 110 unused translation keys across all 8 locales - Add 36 keys to en (33 were English-only via inline defaultValue, 3 fixed broken refs: createFk.nameRequired, editor.notebook.exportError, views.alterView) - Add missing MySQL sslModes set (disabled/preferred/required/ verify_ca/verify_identity); coexists with the PostgreSQL set - Align all locales to en's key-set with English placeholders for gaps; preserve Russian's richer plural forms (_few/_many) - Fix t("general.error") -> t("common.error") in DataGrid and Editor (general namespace never existed; rendered the raw key to users) --- src/components/ui/DataGrid.tsx | 2 +- src/i18n/locales/de.json | 279 ++++++++++++------------- src/i18n/locales/en.json | 178 +++++----------- src/i18n/locales/es.json | 304 +++++++++++++++------------- src/i18n/locales/fr.json | 279 ++++++++++++------------- src/i18n/locales/it.json | 244 +++++++++++----------- src/i18n/locales/ja.json | 256 ++++++++++------------- src/i18n/locales/ru.json | 360 +++++++++++++++------------------ src/i18n/locales/zh.json | 334 +++++++++++++++++------------- src/pages/Editor.tsx | 2 +- 10 files changed, 1064 insertions(+), 1174 deletions(-) diff --git a/src/components/ui/DataGrid.tsx b/src/components/ui/DataGrid.tsx index a5bdd9e6..87094022 100644 --- a/src/components/ui/DataGrid.tsx +++ b/src/components/ui/DataGrid.tsx @@ -1008,7 +1008,7 @@ export const DataGrid = React.memo( } }) .catch((err) => { - showAlert(String(err), { title: t("general.error"), kind: "error" }); + showAlert(String(err), { title: t("common.error"), kind: "error" }); }); }, [ contextMenu, diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index f02407c4..27365822 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -29,15 +29,14 @@ "cancel": "Abbrechen", "delete": "Löschen", "edit": "Bearbeiten", - "clone": "Klonen", - "connect": "Verbinden", - "disconnect": "Trennen", "loading": "Wird geladen...", "search": "Suchen...", "noResults": "Keine Ergebnisse gefunden", "error": "Fehler", "success": "Erfolg", - "ok": "OK" + "ok": "OK", + "clear": "Clear", + "refresh": "Refresh" }, "sidebar": { "connections": "Verbindungen", @@ -105,6 +104,19 @@ "procedures": "Prozeduren", "noRoutines": "Keine Routinen gefunden", "refreshRoutines": "Routinen aktualisieren", + "triggers": "Triggers", + "noTriggers": "No triggers found", + "filterTriggers": "Filter triggers...", + "noTriggersMatch": "No triggers match your filter", + "createTrigger": "Create New Trigger", + "editTrigger": "Edit Trigger", + "dropTrigger": "Drop Trigger", + "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", + "viewTriggerDefinition": "View Definition", + "failDropTrigger": "Failed to drop trigger: ", + "failGetTriggerDefinition": "Failed to get trigger definition: ", + "refreshTriggers": "Refresh Triggers", + "onTable": "on {{table}}", "objectSummary": "Objekte", "databases": "Datenbanken", "failGetRoutineDefinition": "Abrufen der Routinen-Definition fehlgeschlagen: ", @@ -177,7 +189,6 @@ "subtitle": "Verbinde Tabularis mit Claude Desktop, Cursor und mehr", "description": "Das Model Context Protocol (MCP) ermöglicht KI-Assistenten (wie Claude), sich mit deinen lokalen Tools zu verbinden. Tabularis stellt einen MCP-Server bereit, über den KI dein Datenbankschema lesen und Abfragen sicher ausführen kann.", "checking": "Konfiguration wird geprüft...", - "configPath": "Konfigurationsdatei", "notFound": "Konfigurationsdatei nicht gefunden (manuell erstellen)", "installed": "Installiert", "install": "Konfiguration installieren", @@ -220,11 +231,9 @@ "noConnections": "Keine aktiven Verbindungen", "createFirst": "Erstelle deine erste Verbindung", "active": "Aktiv", - "sshEnabled": "SSH-Tunnel aktiviert", "disconnect": "Trennen", "connect": "Verbinden", "edit": "Bearbeiten", - "duplicate": "Duplizieren", "delete": "Löschen", "clone": "Klonen", "confirmDelete": "Möchtest du diese Verbindung wirklich löschen?", @@ -232,7 +241,6 @@ "failConnect": "Verbindung zu {{name}} fehlgeschlagen. Bitte prüfe deine Einstellungen oder stelle sicher, dass die Datenbank läuft.", "failDisconnect": "Trennen von der Datenbank fehlgeschlagen", "failDuplicate": "Duplizieren der Verbindung fehlgeschlagen", - "connecting": "Verbinden...", "open": "Öffnen", "pluginDisabled": "Plugin deaktiviert", "connectionCount": "{{count}} Verbindung(en)", @@ -251,7 +259,6 @@ "accentColor": "Akzentfarbe", "customColor": "Benutzerdefiniert", "resetColor": "Auf Treiber-Standard zurücksetzen", - "resetIcon": "Auf Treiber-Standard zurücksetzen", "icon": "Symbol", "tabs": { "default": "Standard", @@ -259,16 +266,22 @@ "emoji": "Emoji", "image": "Bild" }, + "previewLabel": "Preview", + "defaultHint": "Using the driver's default icon.", + "emojiSelected": "Selected emoji", + "emojiHint": "Click another emoji below to change.", + "removeEmoji": "Clear", "chooseImage": "Bild auswählen…", "removeImage": "Entfernen", "imageHint": "PNG, JPG, WebP oder SVG · max. 512 KB", - "errors": { - "invalidEmoji": "Bitte genau ein Emoji eingeben", - "invalidHex": "Bitte einen gültigen Hex-Wert wie #1a2b3c eingeben" - } + "errors": {}, + "emojiSearch": "Search emoji…", + "iconNoResults": "No icons match.", + "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", + "iconSearch": "Search icons…", + "noPreview": "No preview" }, "settings": { - "title": "Einstellungen", "general": "Allgemein", "info": "Info", "dataEditor": "Dateneditor", @@ -290,8 +303,6 @@ "themeSelection": "Themaauswahl", "fontFamily": "Schriftfamilie", "fonts": { - "system": "Systemstandard", - "systemDesc": "Verwendet die Standardschrift deines Betriebssystems", "custom": "Benutzerdefinierte Schrift", "customPlaceholder": "z. B. Comic Sans MS", "enterFontName": "Schriftnamen oben eingeben" @@ -322,17 +333,15 @@ "title": "config.json", "saveAndRestart": "Speichern und neu starten", "restartNow": "Jetzt neu starten", - "restartLater": "Später", "restartRequired": "Ein Neustart ist erforderlich, um Änderungen anzuwenden.", - "restartMessage": "Die Konfigurationsdatei wurde gespeichert. Jetzt neu starten, um die Änderungen anzuwenden?", - "invalidJson": "Ungültiges JSON — bitte behebe die Fehler vor dem Speichern." + "restartMessage": "Die Konfigurationsdatei wurde gespeichert. Jetzt neu starten, um die Änderungen anzuwenden?" }, "language": "Sprache", "languageDesc": "Wähle deine bevorzugte Sprache. \"Auto\" verwendet die Systemsprache.", "auto": "Auto (System)", - "english": "Englisch", - "italian": "Italienisch", - "spanish": "Spanisch", + "timezone": "Timezone", + "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", + "timezoneSearch": "Search timezones...", "projectStatus": "Projektstatus", "roadmapDesc": "Dieses Projekt ist Work in Progress (WIP). Die Kernfunktionen sind stabil, aber wir haben große Pläne.", "support": "Entwicklung unterstützen", @@ -486,15 +495,10 @@ "filterInstalled": "Installiert", "filterUpdates": "Updates", "searchNoResults": "Keine Plugins entsprechen der Suche.", - "version": "Version", "requiresVersion": "Erfordert Tabularis ≥ {{version}}", - "installedPlugins": "Installierte Plugins", - "installedDesc": "Datenbanktreiber aktivieren oder deaktivieren. Integrierte Treiber können nicht deaktiviert werden.", "remove": "Entfernen", "removeTitle": "Plugin entfernen", "confirmRemove": "Möchtest du \"{{name}}\" wirklich entfernen? Dadurch werden die Plugin-Dateien gelöscht.", - "enabled": "Aktiviert", - "disabled": "Deaktiviert", "installError": { "title": "Installation fehlgeschlagen", "subtitle": "Bei der Installation des Plugins ist ein Fehler aufgetreten. Siehe Details unten.", @@ -565,7 +569,6 @@ "notOverridable": "Integriert, nicht anpassbar", "pressKeys": "Tastenkombination drücken...", "notebookRunAll": "Alle Zellen ausführen", - "categories_notebook": "Notebook", "pasteImportClipboard": "Aus Zwischenablage importieren", "quickNavigator": "Schnellnavigation" }, @@ -575,44 +578,23 @@ "newVersionAvailable": "Neue Version verfügbar", "version": "Version", "releaseNotes": "Release Notes", - "downloads": "Downloads", - "download": "Herunterladen", "downloadAndInstall": "Herunterladen und installieren", "downloading": "Wird heruntergeladen...", "installing": "Wird installiert...", "installingMessage": "Die App wird nach der Installation automatisch neu gestartet", "viewOnGitHub": "Auf GitHub ansehen", "remindLater": "Später erinnern", - "skipVersion": "Diese Version überspringen", - "checkingForUpdates": "Suche nach Updates...", "upToDate": "Du bist auf dem neuesten Stand", "updateAvailable": "Version {{version}} ist verfügbar", "error": "Update-Fehler", - "currentVersion": "Aktuelle Version", "managedByPackageManager": "Updates werden von {{source}} verwaltet", "managedByPackageManagerDesc": "Verwende deinen Paketmanager, um Tabularis zu aktualisieren." }, "ai": { - "assist": "AI Assist", "explain": "Erklären", - "generateSql": "SQL generieren", - "generating": "Wird generiert...", - "explainQuery": "KI-Abfrageerklärung", - "queryLabel": "Abfrage", - "explanationLabel": "Erklärung", - "generatingExplanation": "Erklärung wird generiert...", - "configRequired": "⚠️ KI-Anbieter nicht konfiguriert. Bitte gehe zu Einstellungen > KI.", - "enterPrompt": "Beschreibe deine Abfrage in natürlicher Sprache", - "promptPlaceholder": "z. B. Finde alle Benutzer, die sich letzten Monat registriert und einen 'Premium'-Plan bestellt haben...", - "readingSchema": "Datenbankschema wird gelesen...", - "schemaError": "Laden des Datenbankschema-Kontexts fehlgeschlagen", - "configError": "Bitte konfiguriere einen KI-Anbieter in den Einstellungen und gib einen Prompt ein." + "generateSql": "SQL generieren" }, "newConnection": { - "titleNew": "Neue Verbindung", - "titleEdit": "Verbindung bearbeiten", - "subtitle": "Datenbankverbindungseinstellungen konfigurieren", - "name": "Verbindungsname", "namePlaceholder": "Gib deinen Verbindungsnamen an", "nameRequired": "Verbindungsname ist erforderlich", "dbNameRequired": "Datenbankname ist erforderlich", @@ -621,7 +603,6 @@ "port": "Port", "username": "Benutzername", "password": "Passwort", - "passwordMissing": "Passwort fehlt oder ist nicht gesetzt. Bitte erneut eingeben.", "passwordPlaceholder": "Passwort eingeben", "usernamePlaceholder": "Benutzername eingeben", "filePath": "Dateipfad", @@ -668,7 +649,12 @@ "prefer": "Bevorzugen", "require": "Erforderlich", "verify-ca": "CA prüfen", - "verify-full": "Vollständig prüfen" + "verify-full": "Vollständig prüfen", + "disabled": "Disabled", + "preferred": "Preferred", + "required": "Required", + "verify_ca": "Verify CA", + "verify_identity": "Verify Identity" }, "chooseContext": "Kontext auswählen...", "chooseK8s": "Verbindung auswählen...", @@ -691,7 +677,20 @@ "selectK8sConnection": "K8s-Verbindung auswählen", "selectTypeFirst": "Zuerst Kontext/Namespace/Typ auswählen", "useK8s": "Kubernetes-Port-Forward verwenden", - "useK8sConnection": "Gespeicherte Verbindung" + "useK8sConnection": "Gespeicherte Verbindung", + "connectionString": "Connection String", + "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", + "general": "General", + "loadDatabasesHint": "Click Load Databases to fetch available databases.", + "noGeneralSettings": "No general settings available for this driver.", + "selectDatabasesHint": "Select the databases to include in this connection.", + "sshNotAvailable": "SSH is not available for this driver.", + "sslCa": "CA Certificate", + "sslCert": "Client Certificate", + "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", + "sslDescription": "Configure SSL/TLS for secure database connections (optional).", + "sslKey": "Client Key", + "unnamedConnection": "Unnamed connection" }, "sshConnections": { "title": "SSH-Verbindungen", @@ -719,27 +718,19 @@ "dataGrid": { "newRow": "NEU", "noData": "Keine Daten zum Anzeigen", - "editRow": "Zeile bearbeiten", "deleteRow": "Zeile löschen", "deleteRows": "{{count}} Zeilen löschen", - "confirmDelete": "Möchtest du diese Zeile wirklich löschen?", - "deleteTitle": "Zeile löschen", "updateFailed": "Aktualisierung fehlgeschlagen: ", - "deleteFailed": "Löschen der Zeile fehlgeschlagen: ", "null": "null", "sortByAsc": "Nach {{col}} ASC sortieren", "sortByDesc": "Nach {{col}} DESC sortieren", "clearSort": "Sortierung löschen", "copyCell": "Zelle kopieren", - "copyRow": "Zeile kopieren", "copySelectedRows": "Ausgewählte Zeile(n) kopieren", "copyColumnName": "Spaltennamen kopieren", "copyColumnNameQuoted": "Als `column` kopieren", "copyColumnNameTable": "Als table.column kopieren", - "copyCells": "{{count}} Zelle(n) kopieren", - "copyRows": "{{count}} Zeile(n) kopieren", "copied": "In Zwischenablage kopiert", - "discardInsertion": "Klicken, um diese Zeile zu verwerfen (Rollback)", "duplicateRow": "Zeile duplizieren", "revertSelected": "Auswahl zurücksetzen", "setGenerate": "GENERATED setzen", @@ -750,23 +741,11 @@ "previewReferenced": "Verknüpften Datensatz anzeigen", "openReferenced": "Referenzierte Zeile in {{table}} öffnen" }, - "editRow": { - "title": "Zeile bearbeiten", - "save": "Änderungen speichern", - "cancel": "Abbrechen", - "success": "Zeile erfolgreich aktualisiert", - "failLoad": "Laden des Schemas zur Bearbeitung fehlgeschlagen", - "failUpdate": "Aktualisierung der Zeile fehlgeschlagen: ", - "loading": "Wird geladen...", - "selectValue": "Wert auswählen...", - "noOptions": "Keine Optionen gefunden", - "current": "Aktuell" - }, + "editRow": {}, "newRow": { "title": "Neue Zeile", "insert": "Einfügen", "cancel": "Abbrechen", - "success": "Zeile erfolgreich eingefügt", "failInsert": "Einfügen der Zeile fehlgeschlagen: ", "failLoad": "Laden des Schemas fehlgeschlagen: ", "loading": "Wird geladen...", @@ -778,26 +757,6 @@ "auto": "Auto" }, "editor": { - "quickNavigator": { - "placeholder": "Tabellen, Views, Routinen, Trigger suchen...", - "noResults": "Keine passenden Elemente gefunden", - "count_one": "1 Element", - "count_other": "{{count}} Elemente", - "navigationHint": "↑↓ zum Navigieren, Enter zum Öffnen", - "escHint": "Esc zum Schließen", - "type_table": "Tabelle", - "type_view": "View", - "type_routine": "Routine", - "type_trigger": "Trigger", - "actions": { - "inspect": "Struktur anzeigen", - "newConsole": "Neue Konsole", - "generateSql": "SQL-Vorlagen generieren", - "countRows": "Zeilen zählen", - "query": "SELECT-Abfrage ausführen", - "copyName": "Namen kopieren" - } - }, "noTabs": "Keine geöffneten Tabs für diese Verbindung.", "newConsole": "Neue Konsole", "noActiveSession": "Keine aktive Sitzung. Bitte wähle eine Verbindung aus.", @@ -807,7 +766,6 @@ "connected": "Verbunden", "disconnected": "Getrennt", "newRow": "Neue Zeile", - "editing": "Bearbeitung: {{table}}", "rowsRetrieved": "{{count}} Zeilen abgerufen", "autoPaginated": "Automatisch paginiert", "pageOf": "Seite {{current}} von {{total}}", @@ -844,6 +802,26 @@ "tabs_other": "{{count}} Tabs", "escHint": "Esc zum Schließen" }, + "quickNavigator": { + "placeholder": "Tabellen, Views, Routinen, Trigger suchen...", + "noResults": "Keine passenden Elemente gefunden", + "count_one": "1 Element", + "count_other": "{{count}} Elemente", + "navigationHint": "↑↓ zum Navigieren, Enter zum Öffnen", + "escHint": "Esc zum Schließen", + "type_table": "Tabelle", + "type_view": "View", + "type_routine": "Routine", + "type_trigger": "Trigger", + "actions": { + "inspect": "Struktur anzeigen", + "newConsole": "Neue Konsole", + "generateSql": "SQL-Vorlagen generieren", + "countRows": "Zeilen zählen", + "query": "SELECT-Abfrage ausführen", + "copyName": "Namen kopieren" + } + }, "submitChanges": "Änderungen übernehmen", "rollbackChanges": "Änderungen zurückrollen", "applyToAll": "Auf alle anwenden", @@ -856,13 +834,11 @@ "paramValuePlaceholder": "Wert (z. B. 'Text' oder 123)", "failedCreateRow": "Erstellen einer neuen Zeile fehlgeschlagen: ", "failedProcessInsertions": "Verarbeitung von Einfügungen fehlgeschlagen: ", - "fieldRequired": "Dieses Feld ist erforderlich", "newNotebook": "Neues Notebook", "visualExplain": { "title": "Visual Explain", "buttonShort": "Plan erklären", "loading": "EXPLAIN wird ausgeführt...", - "error": "Ausführen von EXPLAIN fehlgeschlagen", "planningTime": "Planung", "executionTime": "Ausführung", "totalCost": "Gesamtkosten", @@ -878,7 +854,6 @@ "rawOutput": "Rohausgabe", "analyze": "Analysieren", "analyzeWarning": "ANALYZE führt die Abfrage aus. Bei datenverändernden Statements mit Vorsicht verwenden.", - "notSupported": "EXPLAIN wird für diesen Verbindungstyp nicht unterstützt.", "notExplainable": "EXPLAIN wird nur für DML-Statements (SELECT, INSERT, UPDATE, DELETE) unterstützt. DDL-Statements wie CREATE, DROP oder ALTER können nicht erklärt werden.", "contextMenuExplain": "Plan erklären", "rerun": "Erneut ausführen", @@ -908,8 +883,6 @@ "overview": "Übersicht", "showOverview": "Übersicht anzeigen", "hideOverview": "Übersicht ausblenden", - "showNotes": "Hinweise anzeigen", - "hideNotes": "Hinweise ausblenden", "postgresAnalyzeLegend1": "PostgreSQL ANALYZE enthält tatsächliche Zeilen, Laufzeit, Schleifen und Buffer-Zähler, sofern verfügbar.", "postgresAnalyzeLegend2": "Große Schätzabweichungen deuten meist auf veraltete Statistiken oder Prädikate hin, die der Planner schlecht modellieren kann.", "postgresEstimateLegend1": "PostgreSQL ohne ANALYZE zeigt nur Schätzungen des Planners.", @@ -920,11 +893,6 @@ "mysqlEstimateLegend2": "Fehlen Zeitwerte, hat der Server wahrscheinlich nur einen geschätzten Plan geliefert.", "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN ist leichtgewichtig und hauptsächlich strukturell.", "sqliteLegend2": "Kosten, Laufzeit und Zeilenschätzungen sind im Vergleich zu PostgreSQL und MySQL oft nicht verfügbar.", - "copySnapshot": "Snapshot kopieren", - "exportRaw": "Rohdaten exportieren", - "snapshotCopied": "Explain-Snapshot in Zwischenablage kopiert", - "rawExported": "Rohe Explain-Ausgabe exportiert", - "noRawOutput": "Keine rohe Explain-Ausgabe zum Exportieren verfügbar.", "aiAnalysis": "KI-Analyse", "aiAnalysisTitle": "KI-Analyse des Abfrageplans", "aiAnalyzing": "Abfrageplan wird mit KI analysiert...", @@ -950,8 +918,6 @@ "invalidFile": "Ungültiges Notebook-Dateiformat", "importSuccess": "Notebook erfolgreich importiert", "exportSuccess": "Notebook erfolgreich exportiert", - "convertToConsole": "In Konsole umwandeln", - "runningAll": "Alle Zellen werden ausgeführt...", "cellResult": "{{count}} Zeilen · {{time}} ms", "stopOnError": "Bei Fehler stoppen", "stopOnErrorTooltip": "Ausführung stoppen, wenn eine Zelle fehlschlägt", @@ -978,8 +944,6 @@ "collapseAll": "Alle einklappen", "expandAll": "Alle ausklappen", "outline": "Gliederung", - "aiGenerate": "SQL mit KI generieren", - "aiExplain": "Diese Abfrage mit KI erklären", "cellNamePlaceholder": "Ohne Titel", "editCellName": "Zellnamen bearbeiten", "aiGenerateName": "Namen mit KI generieren", @@ -1005,13 +969,12 @@ "stopOnError": "Bei Fehler stoppen umgeschaltet", "other": "Notebook bearbeitet" } - } + }, + "exportError": "Export failed" }, "querySelection": { "title": "Abfrage zum Ausführen auswählen", "queriesFound": "{{count}} Abfragen gefunden", - "escToCancel": "Esc zum Abbrechen", - "numberHint": "Drücke 1-9 zum Auswählen, Pfeile zum Navigieren", "runAll": "Alle ausführen", "runSelected": "Ausgewählte ausführen ({{count}})", "runSingle": "Diese Abfrage ausführen", @@ -1027,8 +990,6 @@ "cancel": "abbrechen" }, "multiResult": { - "query": "Abfrage {{index}}", - "summary": "{{total}} Abfragen: {{succeeded}} erfolgreich, {{failed}} fehlgeschlagen", "rerun": "Abfrage erneut ausführen", "close": "Tab schließen", "rename": "Umbenennen", @@ -1039,8 +1000,7 @@ "queryPrefix": "Abfrage", "results": "Ergebnisse", "collapseAll": "Alle einklappen", - "expandAll": "Alle ausklappen", - "collapsed": "Eingeklappt" + "expandAll": "Alle ausklappen" } }, "createTable": { @@ -1056,14 +1016,13 @@ "colNn": "NN", "colAi": "AI", "colDefault": "Standardwert", - "showSql": "SQL-Vorschau anzeigen", - "hideSql": "SQL-Vorschau ausblenden", "create": "Tabelle erstellen", "cancel": "Abbrechen", "nameRequired": "Tabellenname ist erforderlich", "colRequired": "Mindestens eine Spalte ist erforderlich", "failCreate": "Erstellen der Tabelle fehlgeschlagen: ", - "requiresExtension": "Erfordert Erweiterung: {{ext}}" + "requiresExtension": "Erfordert Erweiterung: {{ext}}", + "sqlPreview": "SQL Preview" }, "schema": { "title": "Schema: {{table}}", @@ -1073,7 +1032,8 @@ "colNullable": "Nullable", "colKey": "Schlüssel", "yes": "JA", - "no": "NEIN" + "no": "NEIN", + "close": "Close" }, "generateSQL": { "title": "Generiertes SQL: {{table}}", @@ -1104,8 +1064,6 @@ "cancel": "Abbrechen", "nameRequired": "Spaltenname ist erforderlich", "fail": "Fehlgeschlagen: ", - "noChanges": "Keine Änderungen erkannt", - "unsupported": "Nicht unterstützter Treiber", "pkNotSupported": "Dieser Treiber unterstützt Primärschlüssel nur beim Erstellen einer Tabelle", "requiresExtension": "Erfordert Erweiterung: {{ext}}" }, @@ -1131,15 +1089,13 @@ "sqlPreview": "SQL-Vorschau", "create": "Fremdschlüssel erstellen", "cancel": "Abbrechen", - "colRequired": "Bitte lokale und referenzierte Spalten auswählen", - "tableRequired": "Bitte eine referenzierte Tabelle auswählen" + "nameRequired": "Name is required" }, "healthCheck": { "title": "Verbindung verloren", "connectionLost": "Eine Datenbankverbindung wurde verloren" }, "erDiagram": { - "title": "ER-Diagramm", "enterFullscreen": "Vollbild", "exitFullscreen": "Vollbild verlassen", "noConnection": "Keine Verbindungs-ID", @@ -1161,7 +1117,6 @@ "viewName": "Ansichtsname", "viewNamePlaceholder": "z. B. active_users, order_summary", "viewDefinition": "Ansichtsdefinition (SQL)", - "definitionPlaceholder": "SELECT * FROM ...", "preview": "Vorschau", "runPreview": "Vorschau ausführen", "previewEmpty": "Klicke auf 'Vorschau ausführen', um Ergebnisse zu sehen", @@ -1175,7 +1130,36 @@ "createSuccess": "Ansicht erfolgreich erstellt", "alterSuccess": "Ansicht erfolgreich aktualisiert", "saveError": "Speichern der Ansicht fehlgeschlagen: ", - "confirmAlter": "Möchtest du die Ansicht \"{{view}}\" wirklich ändern?" + "confirmAlter": "Möchtest du die Ansicht \"{{view}}\" wirklich ändern?", + "alterView": "Alter View" + }, + "triggers": { + "createTrigger": "Create Trigger", + "editTrigger": "Edit Trigger", + "createSubtitle": "Create a new database trigger", + "editSubtitle": "Editing trigger: {{name}}", + "triggerName": "Trigger Name", + "triggerNamePlaceholder": "e.g. before_insert_user", + "tableName": "Table Name", + "tableNamePlaceholder": "e.g. users", + "timing": "Timing", + "events": "Events", + "body": "Trigger Body (SQL)", + "sqlPreview": "Generated SQL Preview", + "rawSql": "Raw SQL", + "guidedMode": "Guided", + "rawSqlMode": "Raw SQL", + "loading": "Loading trigger definition...", + "create": "Create Trigger", + "save": "Save Changes", + "sqlRequired": "Trigger SQL is required", + "failLoadDefinition": "Failed to load trigger definition: ", + "dropError": "Failed to drop existing trigger: ", + "saveError": "Failed to save trigger: ", + "createSuccess": "Trigger created successfully", + "updateSuccess": "Trigger updated successfully", + "recreateTrigger": "Recreate Trigger", + "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" }, "community": { "title": "Der Community beitreten", @@ -1207,12 +1191,10 @@ "selectAll": "Alle auswählen", "deselectAll": "Alle abwählen", "export": "Exportieren", - "exporting": "Wird exportiert...", "success": "Datenbank erfolgreich exportiert", "failure": "Export fehlgeschlagen: ", "errorNoOption": "Bitte wähle mindestens Struktur oder Daten", "errorNoTables": "Bitte wähle mindestens eine Tabelle", - "importStarted": "Import gestartet...", "importSuccess": "SQL-Datei erfolgreich ausgeführt", "importFailure": "Import fehlgeschlagen: ", "importCancelled": "Import abgebrochen", @@ -1226,7 +1208,6 @@ "sqlMode": "SQL-Modus", "wktMode": "WKT-Modus", "sqlHelper": "Gib eine vollständige SQL-Funktion ein (z. B. ST_GeomFromText('POINT(30 40)', 4326))", - "wktHelper": "Gib das WKT-Format ein (z. B. POINT(30 40))", "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", "wktPlaceholder": "POINT(30 40)", "toggleTooltip": "SQL-Funktionen" @@ -1242,12 +1223,9 @@ "raw": "Rohtext" }, "expand": "Aufklappen", - "collapse": "Zuklappen", "search": "Suchen", - "copyPath": "Pfad kopieren", - "copyValue": "Wert kopieren", - "addItem": "Element hinzufügen", - "removeItem": "Element entfernen" + "diff": "Diff", + "sideBySide": "Side by side" }, "jsonViewer": { "close": "Schließen", @@ -1257,12 +1235,21 @@ "expand": "JSON-Baum ein-/ausklappen", "openViewer": "JSON-Viewer öffnen" }, + "textCell": { + "expand": "Toggle inline text editor" + }, + "textInput": { + "diff": "Diff", + "sideBySide": "Side by side" + }, + "textViewer": { + "save": "Save" + }, "rowEditor": { "title": "Zeile bearbeiten", "subtitle": "Zeile #{{row}}", - "save": "Änderungen speichern", - "cancel": "Abbrechen", - "enterValue": "Wert eingeben..." + "enterValue": "Wert eingeben...", + "resize": "Resize sidebar" }, "contextMenu": { "openSidebar": "Seitenleisten-Editor öffnen", @@ -1358,9 +1345,7 @@ } }, "groups": { - "title": "Gruppen", "newGroup": "Neue Gruppe", - "createGroup": "Gruppe erstellen", "rename": "Umbenennen", "delete": "Löschen", "deleteConfirm": "Möchtest du die Gruppe \"{{name}}\" wirklich löschen? Verbindungen in dieser Gruppe werden in Ungruppiert verschoben.", @@ -1368,13 +1353,12 @@ "connection": "Verbindung", "connections": "Verbindungen", "ungrouped": "Ungruppiert", - "moveToGroup": "In Gruppe verschieben", "removeFromGroup": "Aus Gruppe entfernen", - "noGroups": "Noch keine Gruppen", - "createFirst": "Erstelle deine erste Gruppe, um Verbindungen zu organisieren", "groupName": "Gruppenname", - "dragHint": "Verbindungen hierher ziehen", - "createError": "Erstellen der Gruppe fehlgeschlagen" + "createError": "Erstellen der Gruppe fehlgeschlagen", + "deleteError": "Failed to delete group", + "moveError": "Failed to move connection", + "renameError": "Failed to rename group" }, "queryModal": { "database": "Datenbank", @@ -1499,7 +1483,9 @@ "write": "Schreiben", "ddl": "DDL", "unknown": "Unbekannt" - } + }, + "exportCsv": "Export CSV", + "exportJson": "Export JSON" }, "aiApproval": { "title": "KI möchte in die Datenbank schreiben", @@ -1542,7 +1528,6 @@ "port": "Container-Port", "test": "Testen", "testing": "Wird getestet...", - "validationFailed": "Validierung fehlgeschlagen", "errors": { "nameRequired": "Der Verbindungsname ist erforderlich", "contextRequired": "Der Kubernetes-Kontext ist erforderlich", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 47b30cab..e2699901 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -29,15 +29,14 @@ "cancel": "Cancel", "delete": "Delete", "edit": "Edit", - "clone": "Clone", - "connect": "Connect", - "disconnect": "Disconnect", "loading": "Loading...", "search": "Search...", "noResults": "No results found", "error": "Error", "success": "Success", - "ok": "OK" + "ok": "OK", + "clear": "Clear", + "refresh": "Refresh" }, "sidebar": { "connections": "Connections", @@ -190,7 +189,6 @@ "subtitle": "Connect Tabularis to Claude Desktop, Cursor, and more", "description": "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely.", "checking": "Checking configuration...", - "configPath": "Config File", "notFound": "Config file not found (create manually)", "installed": "Installed", "install": "Install Config", @@ -233,11 +231,9 @@ "noConnections": "No active connections", "createFirst": "Create your first connection", "active": "Active", - "sshEnabled": "SSH Tunnel Enabled", "disconnect": "Disconnect", "connect": "Connect", "edit": "Edit", - "duplicate": "Duplicate", "delete": "Delete", "clone": "Clone", "confirmDelete": "Are you sure you want to delete this connection?", @@ -245,7 +241,6 @@ "failConnect": "Failed to connect to {{name}}. Please check your settings or ensuring the database is running.", "failDisconnect": "Failed to disconnect from database", "failDuplicate": "Failed to duplicate connection", - "connecting": "Connecting...", "open": "Open", "pluginDisabled": "Plugin disabled", "connectionCount": "{{count}} connection(s)", @@ -264,7 +259,6 @@ "accentColor": "Accent color", "customColor": "Custom", "resetColor": "Reset to driver default", - "resetIcon": "Reset to driver default", "icon": "Icon", "tabs": { "default": "Default", @@ -280,13 +274,14 @@ "chooseImage": "Choose image…", "removeImage": "Remove", "imageHint": "PNG, JPG, WebP or SVG · max 512 KB", - "errors": { - "invalidEmoji": "Please enter exactly one emoji", - "invalidHex": "Please enter a valid hex color like #1a2b3c" - } + "errors": {}, + "emojiSearch": "Search emoji…", + "iconNoResults": "No icons match.", + "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", + "iconSearch": "Search icons…", + "noPreview": "No preview" }, "settings": { - "title": "Settings", "general": "General", "info": "Info", "dataEditor": "Data Editor", @@ -308,8 +303,6 @@ "themeSelection": "Theme Selection", "fontFamily": "Font Family", "fonts": { - "system": "System Default", - "systemDesc": "Uses your OS default font", "custom": "Custom Font", "customPlaceholder": "e.g., Comic Sans MS", "enterFontName": "Enter font name above" @@ -340,10 +333,8 @@ "title": "config.json", "saveAndRestart": "Save & Restart", "restartNow": "Restart Now", - "restartLater": "Later", "restartRequired": "A restart is required to apply changes.", - "restartMessage": "The configuration file has been saved. Restart now to apply the changes?", - "invalidJson": "Invalid JSON — please fix errors before saving." + "restartMessage": "The configuration file has been saved. Restart now to apply the changes?" }, "language": "Language", "languageDesc": "Choose your preferred language. 'Auto' will use your system language.", @@ -351,9 +342,6 @@ "timezone": "Timezone", "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", "timezoneSearch": "Search timezones...", - "english": "English", - "italian": "Italiano", - "spanish": "Spanish", "projectStatus": "Project Status", "roadmapDesc": "This project is a Work In Progress (WIP). Core features are stable, but we have big plans.", "support": "Support the Development", @@ -507,15 +495,10 @@ "filterInstalled": "Installed", "filterUpdates": "Updates", "searchNoResults": "No plugins match your search.", - "version": "Version", "requiresVersion": "Requires Tabularis ≥ {{version}}", - "installedPlugins": "Installed Plugins", - "installedDesc": "Enable or disable database drivers. Built-in drivers cannot be disabled.", "remove": "Remove", "removeTitle": "Remove Plugin", "confirmRemove": "Are you sure you want to remove \"{{name}}\"? This will delete the plugin files.", - "enabled": "Enabled", - "disabled": "Disabled", "installError": { "title": "Installation Failed", "subtitle": "An error occurred while installing the plugin. See the details below.", @@ -586,7 +569,6 @@ "notOverridable": "Built-in, not customizable", "pressKeys": "Press key combination...", "notebookRunAll": "Run All Cells", - "categories_notebook": "Notebook", "pasteImportClipboard": "Import from Clipboard", "quickNavigator": "Quick Navigator" }, @@ -596,44 +578,23 @@ "newVersionAvailable": "New Version Available", "version": "Version", "releaseNotes": "Release Notes", - "downloads": "Downloads", - "download": "Download", "downloadAndInstall": "Download & Install", "downloading": "Downloading...", "installing": "Installing...", "installingMessage": "The app will restart automatically after installation", "viewOnGitHub": "View on GitHub", "remindLater": "Remind Me Later", - "skipVersion": "Skip This Version", - "checkingForUpdates": "Checking for updates...", "upToDate": "You're up to date", "updateAvailable": "Version {{version}} is available", "error": "Update Error", - "currentVersion": "Current version", "managedByPackageManager": "Updates managed by {{source}}", "managedByPackageManagerDesc": "Use your package manager to update Tabularis." }, "ai": { - "assist": "AI Assist", "explain": "Explain", - "generateSql": "Generate SQL", - "generating": "Generating...", - "explainQuery": "AI Query Explanation", - "queryLabel": "Query", - "explanationLabel": "Explanation", - "generatingExplanation": "Generating explanation...", - "configRequired": "⚠️ AI Provider not configured. Please go to Settings > AI.", - "enterPrompt": "Describe your query in natural language", - "promptPlaceholder": "e.g. Find all users who signed up last month and ordered a 'Premium' plan...", - "readingSchema": "Reading database schema...", - "schemaError": "Failed to load database schema context", - "configError": "Please configure AI provider in Settings and enter a prompt." + "generateSql": "Generate SQL" }, "newConnection": { - "titleNew": "New Connection", - "titleEdit": "Edit Connection", - "subtitle": "Configure database connection settings", - "name": "Connection Name", "namePlaceholder": "Provide your connection name", "nameRequired": "Connection name is required", "dbNameRequired": "Database name is required", @@ -642,7 +603,6 @@ "port": "Port", "username": "Username", "password": "Password", - "passwordMissing": "Password missing or not set. Please re-enter.", "passwordPlaceholder": "Enter password", "usernamePlaceholder": "Enter username", "filePath": "File Path", @@ -689,7 +649,12 @@ "prefer": "Prefer", "require": "Require", "verify-ca": "Verify CA", - "verify-full": "Verify Full" + "verify-full": "Verify Full", + "disabled": "Disabled", + "preferred": "Preferred", + "required": "Required", + "verify_ca": "Verify CA", + "verify_identity": "Verify Identity" }, "chooseContext": "Choose a context...", "chooseK8s": "Choose a connection...", @@ -712,7 +677,20 @@ "selectK8sConnection": "Select K8s Connection", "selectTypeFirst": "Select context/namespace/type first", "useK8s": "Use Kubernetes Port-Forward", - "useK8sConnection": "Saved Connection" + "useK8sConnection": "Saved Connection", + "connectionString": "Connection String", + "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", + "general": "General", + "loadDatabasesHint": "Click Load Databases to fetch available databases.", + "noGeneralSettings": "No general settings available for this driver.", + "selectDatabasesHint": "Select the databases to include in this connection.", + "sshNotAvailable": "SSH is not available for this driver.", + "sslCa": "CA Certificate", + "sslCert": "Client Certificate", + "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", + "sslDescription": "Configure SSL/TLS for secure database connections (optional).", + "sslKey": "Client Key", + "unnamedConnection": "Unnamed connection" }, "sshConnections": { "title": "SSH Connections", @@ -740,27 +718,19 @@ "dataGrid": { "newRow": "NEW", "noData": "No data to display", - "editRow": "Edit Row", "deleteRow": "Delete Row", "deleteRows": "Delete {{count}} rows", - "confirmDelete": "Are you sure you want to delete this row?", - "deleteTitle": "Delete Row", "updateFailed": "Update failed: ", - "deleteFailed": "Failed to delete row: ", "null": "null", "sortByAsc": "Sort by {{col}} ASC", "sortByDesc": "Sort by {{col}} DESC", "clearSort": "Clear sort", "copyCell": "Copy Cell", - "copyRow": "Copy Row", "copySelectedRows": "Copy selected row(s)", "copyColumnName": "Copy column name", "copyColumnNameQuoted": "Copy as `column`", "copyColumnNameTable": "Copy as table.column", - "copyCells": "Copy {{count}} Cells", - "copyRows": "Copy {{count}} Rows", "copied": "Copied to clipboard", - "discardInsertion": "Click to discard this row (rollback)", "duplicateRow": "Duplicate Row", "revertSelected": "Revert Selected", "setGenerate": "Set GENERATED", @@ -771,23 +741,11 @@ "previewReferenced": "Preview related record", "openReferenced": "Open referenced row in {{table}}" }, - "editRow": { - "title": "Edit Row", - "save": "Save Changes", - "cancel": "Cancel", - "success": "Row updated successfully", - "failLoad": "Failed to load schema for edit", - "failUpdate": "Failed to update row: ", - "loading": "Loading...", - "selectValue": "Select Value...", - "noOptions": "No options found", - "current": "Current" - }, + "editRow": {}, "newRow": { "title": "New Row", "insert": "Insert", "cancel": "Cancel", - "success": "Row inserted successfully", "failInsert": "Failed to insert row: ", "failLoad": "Failed to load schema: ", "loading": "Loading...", @@ -808,7 +766,6 @@ "connected": "Connected", "disconnected": "Disconnected", "newRow": "New Row", - "editing": "Editing: {{table}}", "rowsRetrieved": "{{count}} rows retrieved", "autoPaginated": "Auto paginated", "pageOf": "Page {{current}} of {{total}}", @@ -877,13 +834,11 @@ "paramValuePlaceholder": "Value (e.g. 'text' or 123)", "failedCreateRow": "Failed to create new row: ", "failedProcessInsertions": "Failed to process insertions: ", - "fieldRequired": "This field is required", "newNotebook": "New Notebook", "visualExplain": { "title": "Visual Explain", "buttonShort": "Explain Plan", "loading": "Running EXPLAIN...", - "error": "Failed to run EXPLAIN", "planningTime": "Planning", "executionTime": "Execution", "totalCost": "Total Cost", @@ -899,7 +854,6 @@ "rawOutput": "Raw Output", "analyze": "Analyze", "analyzeWarning": "ANALYZE executes the query. Use with caution on data-modifying statements.", - "notSupported": "EXPLAIN is not supported for this connection type.", "notExplainable": "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained.", "contextMenuExplain": "Explain Plan", "rerun": "Re-run", @@ -929,8 +883,6 @@ "overview": "Overview", "showOverview": "Show overview", "hideOverview": "Hide overview", - "showNotes": "Show notes", - "hideNotes": "Hide notes", "postgresAnalyzeLegend1": "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.", "postgresAnalyzeLegend2": "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well.", "postgresEstimateLegend1": "PostgreSQL without ANALYZE shows planner estimates only.", @@ -941,11 +893,6 @@ "mysqlEstimateLegend2": "If timing is missing, the server likely returned an estimate-only plan.", "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.", "sqliteLegend2": "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL.", - "copySnapshot": "Copy Snapshot", - "exportRaw": "Export Raw", - "snapshotCopied": "Explain snapshot copied to clipboard", - "rawExported": "Raw explain output exported", - "noRawOutput": "No raw explain output available to export.", "aiAnalysis": "AI Analysis", "aiAnalysisTitle": "AI Query Plan Analysis", "aiAnalyzing": "Analyzing query plan with AI...", @@ -971,8 +918,6 @@ "invalidFile": "Invalid notebook file format", "importSuccess": "Notebook imported successfully", "exportSuccess": "Notebook exported successfully", - "convertToConsole": "Convert to Console", - "runningAll": "Running all cells...", "cellResult": "{{count}} rows · {{time}}ms", "stopOnError": "Stop on Error", "stopOnErrorTooltip": "Stop execution when a cell fails", @@ -999,8 +944,6 @@ "collapseAll": "Collapse All", "expandAll": "Expand All", "outline": "Outline", - "aiGenerate": "Generate SQL with AI", - "aiExplain": "Explain this Query with AI", "cellNamePlaceholder": "Untitled", "editCellName": "Edit cell name", "aiGenerateName": "Generate name with AI", @@ -1026,13 +969,12 @@ "stopOnError": "Toggled stop on error", "other": "Edited notebook" } - } + }, + "exportError": "Export failed" }, "querySelection": { "title": "Select Query to Execute", "queriesFound": "{{count}} queries found", - "escToCancel": "Esc to cancel", - "numberHint": "Press 1-9 to select, arrows to navigate", "runAll": "Run All", "runSelected": "Run Selected ({{count}})", "runSingle": "Run this query", @@ -1048,8 +990,6 @@ "cancel": "cancel" }, "multiResult": { - "query": "Query {{index}}", - "summary": "{{total}} queries: {{succeeded}} succeeded, {{failed}} failed", "rerun": "Re-run query", "close": "Close tab", "rename": "Rename", @@ -1060,8 +1000,7 @@ "queryPrefix": "Query", "results": "Results", "collapseAll": "Collapse all", - "expandAll": "Expand all", - "collapsed": "Collapsed" + "expandAll": "Expand all" } }, "createTable": { @@ -1077,14 +1016,13 @@ "colNn": "NN", "colAi": "AI", "colDefault": "Default", - "showSql": "Show SQL Preview", - "hideSql": "Hide SQL Preview", "create": "Create Table", "cancel": "Cancel", "nameRequired": "Table name is required", "colRequired": "At least one column is required", "failCreate": "Failed to create table: ", - "requiresExtension": "Requires extension: {{ext}}" + "requiresExtension": "Requires extension: {{ext}}", + "sqlPreview": "SQL Preview" }, "schema": { "title": "Schema: {{table}}", @@ -1094,7 +1032,8 @@ "colNullable": "Nullable", "colKey": "Key", "yes": "YES", - "no": "NO" + "no": "NO", + "close": "Close" }, "generateSQL": { "title": "Generated SQL: {{table}}", @@ -1125,8 +1064,6 @@ "cancel": "Cancel", "nameRequired": "Column name is required", "fail": "Failed: ", - "noChanges": "No changes detected", - "unsupported": "Unsupported driver", "pkNotSupported": "This driver only supports primary keys at table creation time", "requiresExtension": "Requires extension: {{ext}}" }, @@ -1152,15 +1089,13 @@ "sqlPreview": "SQL Preview", "create": "Create Foreign Key", "cancel": "Cancel", - "colRequired": "Please select local and referenced columns", - "tableRequired": "Please select a referenced table" + "nameRequired": "Name is required" }, "healthCheck": { "title": "Connection Lost", "connectionLost": "A database connection was lost" }, "erDiagram": { - "title": "ER Diagram", "enterFullscreen": "Fullscreen", "exitFullscreen": "Exit Fullscreen", "noConnection": "No Connection ID", @@ -1182,7 +1117,6 @@ "viewName": "View Name", "viewNamePlaceholder": "e.g. active_users, order_summary", "viewDefinition": "View Definition (SQL)", - "definitionPlaceholder": "SELECT * FROM ...", "preview": "Preview", "runPreview": "Run Preview", "previewEmpty": "Click 'Run Preview' to see results", @@ -1196,7 +1130,8 @@ "createSuccess": "View created successfully", "alterSuccess": "View updated successfully", "saveError": "Failed to save view: ", - "confirmAlter": "Are you sure you want to modify view \"{{view}}\"?" + "confirmAlter": "Are you sure you want to modify view \"{{view}}\"?", + "alterView": "Alter View" }, "triggers": { "createTrigger": "Create Trigger", @@ -1256,12 +1191,10 @@ "selectAll": "Select All", "deselectAll": "Deselect All", "export": "Export", - "exporting": "Exporting...", "success": "Database exported successfully", "failure": "Export failed: ", "errorNoOption": "Please select at least Structure or Data", "errorNoTables": "Please select at least one table", - "importStarted": "Import started...", "importSuccess": "SQL file executed successfully", "importFailure": "Import failed: ", "importCancelled": "Import cancelled", @@ -1275,7 +1208,6 @@ "sqlMode": "SQL Mode", "wktMode": "WKT Mode", "sqlHelper": "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))", - "wktHelper": "Enter WKT format (e.g., POINT(30 40))", "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", "wktPlaceholder": "POINT(30 40)", "toggleTooltip": "SQL Functions" @@ -1291,12 +1223,7 @@ "raw": "Raw" }, "expand": "Expand", - "collapse": "Collapse", "search": "Search", - "copyPath": "Copy Path", - "copyValue": "Copy Value", - "addItem": "Add Item", - "removeItem": "Remove Item", "diff": "Diff", "sideBySide": "Side by side" }, @@ -1321,9 +1248,8 @@ "rowEditor": { "title": "Edit Row", "subtitle": "Row #{{row}}", - "save": "Save Changes", - "cancel": "Cancel", - "enterValue": "Enter value..." + "enterValue": "Enter value...", + "resize": "Resize sidebar" }, "contextMenu": { "openSidebar": "Open Sidebar Editor", @@ -1419,9 +1345,7 @@ } }, "groups": { - "title": "Groups", "newGroup": "New Group", - "createGroup": "Create Group", "rename": "Rename", "delete": "Delete", "deleteConfirm": "Are you sure you want to delete group \"{{name}}\"? Connections in this group will be moved to ungrouped.", @@ -1429,13 +1353,12 @@ "connection": "connection", "connections": "connections", "ungrouped": "Ungrouped", - "moveToGroup": "Move to Group", "removeFromGroup": "Remove from Group", - "noGroups": "No groups yet", - "createFirst": "Create your first group to organize connections", "groupName": "Group name", - "dragHint": "Drag connections here", - "createError": "Failed to create group" + "createError": "Failed to create group", + "deleteError": "Failed to delete group", + "moveError": "Failed to move connection", + "renameError": "Failed to rename group" }, "queryModal": { "database": "Database", @@ -1560,7 +1483,9 @@ "write": "Write", "ddl": "DDL", "unknown": "Unknown" - } + }, + "exportCsv": "Export CSV", + "exportJson": "Export JSON" }, "aiApproval": { "title": "AI requested a database write", @@ -1603,7 +1528,6 @@ "port": "Container Port", "test": "Test", "testing": "Testing...", - "validationFailed": "Validation failed", "errors": { "nameRequired": "Connection name is required", "contextRequired": "Kubernetes context is required", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index a4c4b600..9219c49a 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -29,15 +29,14 @@ "cancel": "Cancelar", "delete": "Eliminar", "edit": "Editar", - "clone": "Clonar", - "connect": "Conectar", - "disconnect": "Desconectar", "loading": "Cargando...", "search": "Buscar...", "noResults": "No se encontraron resultados", "error": "Error", "success": "Éxito", - "ok": "OK" + "ok": "OK", + "clear": "Clear", + "refresh": "Refresh" }, "sidebar": { "connections": "Conexiones", @@ -105,6 +104,19 @@ "procedures": "Procedimientos", "noRoutines": "No se encontraron rutinas", "refreshRoutines": "Actualizar Rutinas", + "triggers": "Triggers", + "noTriggers": "No triggers found", + "filterTriggers": "Filter triggers...", + "noTriggersMatch": "No triggers match your filter", + "createTrigger": "Create New Trigger", + "editTrigger": "Edit Trigger", + "dropTrigger": "Drop Trigger", + "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", + "viewTriggerDefinition": "View Definition", + "failDropTrigger": "Failed to drop trigger: ", + "failGetTriggerDefinition": "Failed to get trigger definition: ", + "refreshTriggers": "Refresh Triggers", + "onTable": "on {{table}}", "objectSummary": "Objetos", "databases": "Bases de Datos", "failGetRoutineDefinition": "Error al obtener la definición de la rutina: ", @@ -177,7 +189,6 @@ "subtitle": "Conecta Tabularis a Claude Desktop, Cursor y más", "description": "El Model Context Protocol (MCP) permite a los asistentes de IA (como Claude) conectarse a tus herramientas locales. Tabularis expone un servidor MCP que permite a la IA leer el esquema de tu base de datos y ejecutar consultas de forma segura.", "checking": "Verificando configuración...", - "configPath": "Archivo de Configuración", "notFound": "Archivo de configuración no encontrado (crear manualmente)", "installed": "Instalado", "install": "Instalar Configuración", @@ -220,11 +231,9 @@ "noConnections": "No hay conexiones activas", "createFirst": "Crea tu primera conexión", "active": "Activa", - "sshEnabled": "Túnel SSH habilitado", "disconnect": "Desconectar", "connect": "Conectar", "edit": "Editar", - "duplicate": "Duplicar", "delete": "Eliminar", "clone": "Clonar", "confirmDelete": "¿Estás seguro de que deseas eliminar esta conexión?", @@ -232,7 +241,6 @@ "failConnect": "Error al conectar a {{name}}. Verifica tu configuración o asegúrate de que la base de datos esté en ejecución.", "failDisconnect": "No se pudo desconectar de la base de datos", "failDuplicate": "Error al duplicar la conexión", - "connecting": "Conectando...", "open": "Abierta", "pluginDisabled": "Plugin desactivado", "connectionCount": "{{count}} conexión/es", @@ -251,7 +259,6 @@ "accentColor": "Color de acento", "customColor": "Personalizado", "resetColor": "Restablecer al valor predeterminado", - "resetIcon": "Restablecer al valor predeterminado", "icon": "Icono", "tabs": { "default": "Predeterminado", @@ -267,13 +274,14 @@ "chooseImage": "Elegir imagen…", "removeImage": "Quitar", "imageHint": "PNG, JPG, WebP o SVG · máx. 512 KB", - "errors": { - "invalidEmoji": "Introduce exactamente un emoji", - "invalidHex": "Introduce un color hex válido como #1a2b3c" - } + "errors": {}, + "emojiSearch": "Search emoji…", + "iconNoResults": "No icons match.", + "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", + "iconSearch": "Search icons…", + "noPreview": "No preview" }, "settings": { - "title": "Configuración", "general": "General", "info": "Info", "dataEditor": "Editor de Datos", @@ -295,8 +303,6 @@ "themeSelection": "Selección de Tema", "fontFamily": "Familia de Fuente", "fonts": { - "system": "Sistema", - "systemDesc": "Usa la fuente predeterminada del sistema", "custom": "Fuente Personalizada", "customPlaceholder": "ej. Comic Sans MS", "enterFontName": "Ingresa el nombre de la fuente arriba" @@ -327,17 +333,15 @@ "title": "config.json", "saveAndRestart": "Guardar y Reiniciar", "restartNow": "Reiniciar Ahora", - "restartLater": "Más tarde", "restartRequired": "Se requiere reinicio para aplicar los cambios.", - "restartMessage": "El archivo de configuración ha sido guardado. ¿Reiniciar ahora para aplicar los cambios?", - "invalidJson": "JSON inválido — corrige los errores antes de guardar." + "restartMessage": "El archivo de configuración ha sido guardado. ¿Reiniciar ahora para aplicar los cambios?" }, "language": "Idioma", "languageDesc": "Elige tu idioma preferido. 'Auto' usará el idioma del sistema.", "auto": "Auto (Sistema)", - "english": "English", - "italian": "Italiano", - "spanish": "Español", + "timezone": "Timezone", + "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", + "timezoneSearch": "Search timezones...", "projectStatus": "Estado del Proyecto", "roadmapDesc": "Este proyecto es un Work In Progress (WIP). Las funciones principales son estables, pero tenemos grandes planes.", "support": "Apoya el Desarrollo", @@ -491,15 +495,10 @@ "filterInstalled": "Instalados", "filterUpdates": "Actualizaciones", "searchNoResults": "Ningún plugin coincide con la búsqueda.", - "version": "Versión", "requiresVersion": "Requiere Tabularis ≥ {{version}}", - "installedPlugins": "Plugins Instalados", - "installedDesc": "Habilita o deshabilita los drivers de base de datos. Los drivers integrados no se pueden deshabilitar.", "remove": "Eliminar", "removeTitle": "Eliminar Plugin", "confirmRemove": "¿Estás seguro de que deseas eliminar \"{{name}}\"? Los archivos del plugin serán eliminados.", - "enabled": "Habilitado", - "disabled": "Deshabilitado", "installError": { "title": "Instalación fallida", "subtitle": "Ocurrió un error al instalar el plugin. Consulta los detalles a continuación.", @@ -570,7 +569,6 @@ "notOverridable": "Integrado, no personalizable", "pressKeys": "Pulsa la combinación de teclas...", "notebookRunAll": "Ejecutar Todas las Celdas", - "categories_notebook": "Notebook", "pasteImportClipboard": "Importar desde Portapapeles", "quickNavigator": "Navegador rápido" }, @@ -580,44 +578,23 @@ "newVersionAvailable": "Nueva Versión Disponible", "version": "Versión", "releaseNotes": "Notas de la Versión", - "downloads": "Descargas", - "download": "Descargar", "downloadAndInstall": "Descargar e Instalar", "downloading": "Descargando...", "installing": "Instalando...", "installingMessage": "La aplicación se reiniciará automáticamente después de la instalación", "viewOnGitHub": "Ver en GitHub", "remindLater": "Recordar Después", - "skipVersion": "Omitir Esta Versión", - "checkingForUpdates": "Buscando actualizaciones...", "upToDate": "Estás actualizado", "updateAvailable": "La versión {{version}} está disponible", "error": "Error de Actualización", - "currentVersion": "Versión actual", "managedByPackageManager": "Actualizaciones gestionadas por {{source}}", "managedByPackageManagerDesc": "Usa tu gestor de paquetes para actualizar Tabularis." }, "ai": { - "assist": "Asistente IA", "explain": "Explicar", - "generateSql": "Generar SQL", - "generating": "Generando...", - "explainQuery": "Explicación de Consulta IA", - "queryLabel": "Consulta", - "explanationLabel": "Explicación", - "generatingExplanation": "Generando explicación...", - "configRequired": "⚠️ Proveedor de IA no configurado. Ve a Configuración > IA.", - "enterPrompt": "Describe tu consulta en lenguaje natural", - "promptPlaceholder": "ej. Encuentra todos los usuarios que se registraron el mes pasado y pidieron un plan 'Premium'...", - "readingSchema": "Leyendo esquema de la base de datos...", - "schemaError": "Error al cargar el contexto del esquema de la base de datos", - "configError": "Configura el proveedor de IA en Configuración e ingresa un prompt." + "generateSql": "Generar SQL" }, "newConnection": { - "titleNew": "Nueva Conexión", - "titleEdit": "Editar Conexión", - "subtitle": "Configurar los ajustes de conexión a la base de datos", - "name": "Nombre de Conexión", "namePlaceholder": "Ingresa el nombre de tu conexión", "nameRequired": "El nombre de la conexión es requerido", "dbNameRequired": "El nombre de la base de datos es requerido", @@ -626,7 +603,6 @@ "port": "Puerto", "username": "Usuario", "password": "Contraseña", - "passwordMissing": "Contraseña faltante. Por favor, ingrésala de nuevo.", "passwordPlaceholder": "Ingresa la contraseña", "usernamePlaceholder": "Ingresa el nombre de usuario", "filePath": "Ruta del Archivo", @@ -673,7 +649,12 @@ "prefer": "Preferido", "require": "Requerido", "verify-ca": "Verificar CA", - "verify-full": "Verificación completa" + "verify-full": "Verificación completa", + "disabled": "Disabled", + "preferred": "Preferred", + "required": "Required", + "verify_ca": "Verify CA", + "verify_identity": "Verify Identity" }, "chooseContext": "Elige un contexto...", "chooseK8s": "Elige una conexión...", @@ -696,7 +677,20 @@ "selectK8sConnection": "Selecciona conexión de K8s", "selectTypeFirst": "Selecciona primero contexto/namespace/tipo", "useK8s": "Usar Port-Forward de Kubernetes", - "useK8sConnection": "Conexión guardada" + "useK8sConnection": "Conexión guardada", + "connectionString": "Connection String", + "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", + "general": "General", + "loadDatabasesHint": "Click Load Databases to fetch available databases.", + "noGeneralSettings": "No general settings available for this driver.", + "selectDatabasesHint": "Select the databases to include in this connection.", + "sshNotAvailable": "SSH is not available for this driver.", + "sslCa": "CA Certificate", + "sslCert": "Client Certificate", + "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", + "sslDescription": "Configure SSL/TLS for secure database connections (optional).", + "sslKey": "Client Key", + "unnamedConnection": "Unnamed connection" }, "sshConnections": { "title": "Conexiones SSH", @@ -724,48 +718,34 @@ "dataGrid": { "newRow": "NUEVA", "noData": "No hay datos para mostrar", - "editRow": "Editar Fila", "deleteRow": "Eliminar Fila", "deleteRows": "Eliminar {{count}} filas", - "confirmDelete": "¿Estás seguro de que deseas eliminar esta fila?", - "deleteTitle": "Eliminar Fila", "updateFailed": "Error en la actualización: ", - "deleteFailed": "Error al eliminar la fila: ", "null": "null", "sortByAsc": "Ordenar por {{col}} ASC", "sortByDesc": "Ordenar por {{col}} DESC", "clearSort": "Quitar ordenamiento", "copyCell": "Copiar Celda", - "copyRow": "Copiar Fila", "copySelectedRows": "Copiar fila(s) seleccionada(s)", "copyColumnName": "Copiar nombre de columna", "copyColumnNameQuoted": "Copiar como `columna`", "copyColumnNameTable": "Copiar como tabla.columna", - "copyCells": "Copiar {{count}} Celdas", - "copyRows": "Copiar {{count}} Filas", "copied": "Copiado al portapapeles", "duplicateRow": "Duplicar Fila", + "revertSelected": "Revert Selected", + "setGenerate": "Set GENERATED", + "setNull": "Set NULL", + "setDefault": "Set DEFAULT", + "setEmpty": "Set EMPTY", "setServerNow": "Insertar marca de tiempo actual", "previewReferenced": "Vista previa del registro relacionado", "openReferenced": "Abrir fila referenciada en {{table}}" }, - "editRow": { - "title": "Editar Fila", - "save": "Guardar Cambios", - "cancel": "Cancelar", - "success": "Fila actualizada correctamente", - "failLoad": "Error al cargar el esquema para editar", - "failUpdate": "Error al actualizar la fila: ", - "loading": "Cargando...", - "selectValue": "Seleccionar Valor...", - "noOptions": "No se encontraron opciones", - "current": "Actual" - }, + "editRow": {}, "newRow": { "title": "Nueva Fila", "insert": "Insertar", "cancel": "Cancelar", - "success": "Fila insertada correctamente", "failInsert": "Error al insertar la fila: ", "failLoad": "Error al cargar el esquema: ", "loading": "Cargando...", @@ -777,26 +757,6 @@ "auto": "Auto" }, "editor": { - "quickNavigator": { - "placeholder": "Buscar tablas, vistas, rutinas, triggers...", - "noResults": "No se encontraron elementos coincidentes", - "count_one": "1 elemento", - "count_other": "{{count}} elementos", - "navigationHint": "↑↓ para navegar, Enter para abrir", - "escHint": "Esc para cerrar", - "type_table": "tabla", - "type_view": "vista", - "type_routine": "rutina", - "type_trigger": "trigger", - "actions": { - "inspect": "Inspeccionar estructura", - "newConsole": "Nueva consola", - "generateSql": "Generar plantillas SQL", - "countRows": "Contar filas", - "query": "Ejecutar consulta SELECT", - "copyName": "Copiar nombre" - } - }, "noTabs": "No hay pestañas abiertas para esta conexión.", "newConsole": "Nueva Consola", "noActiveSession": "No hay sesión activa. Selecciona una conexión.", @@ -806,7 +766,6 @@ "connected": "Conectado", "disconnected": "Desconectado", "newRow": "Nueva Fila", - "editing": "Editando: {{table}}", "rowsRetrieved": "{{count}} filas obtenidas", "autoPaginated": "Paginación automática", "pageOf": "Página {{current}} de {{total}}", @@ -814,6 +773,7 @@ "jumpToPage": "Clic para ir a la página", "loadRowCount": "Cargar conteo de filas", "executePrompt": "Ejecuta una consulta para ver resultados", + "tableRunPrompt": "Press Run (Ctrl/Command+F5) to load table data", "closeTab": "Cerrar Pestaña", "closeOthers": "Cerrar Otras Pestañas", "closeRight": "Cerrar Pestañas a la Derecha", @@ -842,6 +802,26 @@ "tabs_other": "{{count}} pestañas", "escHint": "Esc para cerrar" }, + "quickNavigator": { + "placeholder": "Buscar tablas, vistas, rutinas, triggers...", + "noResults": "No se encontraron elementos coincidentes", + "count_one": "1 elemento", + "count_other": "{{count}} elementos", + "navigationHint": "↑↓ para navegar, Enter para abrir", + "escHint": "Esc para cerrar", + "type_table": "tabla", + "type_view": "vista", + "type_routine": "rutina", + "type_trigger": "trigger", + "actions": { + "inspect": "Inspeccionar estructura", + "newConsole": "Nueva consola", + "generateSql": "Generar plantillas SQL", + "countRows": "Contar filas", + "query": "Ejecutar consulta SELECT", + "copyName": "Copiar nombre" + } + }, "submitChanges": "Enviar Cambios", "rollbackChanges": "Revertir Cambios", "applyToAll": "Aplicar a todo", @@ -852,12 +832,13 @@ "convertToConsole": "Convertir a Consola", "parameters": "Parámetros", "paramValuePlaceholder": "Valor (ej. 'texto' o 123)", + "failedCreateRow": "Failed to create new row: ", + "failedProcessInsertions": "Failed to process insertions: ", "newNotebook": "Nuevo Notebook", "visualExplain": { "title": "Visual Explain", "buttonShort": "Plan de Query", "loading": "Ejecutando EXPLAIN...", - "error": "Error al ejecutar EXPLAIN", "planningTime": "Planificacion", "executionTime": "Ejecucion", "totalCost": "Costo Total", @@ -873,7 +854,6 @@ "rawOutput": "Salida Sin Procesar", "analyze": "Analizar", "analyzeWarning": "ANALYZE ejecuta la consulta. Usar con precaucion en instrucciones que modifican datos.", - "notSupported": "EXPLAIN no esta soportado para este tipo de conexion.", "notExplainable": "EXPLAIN solo es compatible con instrucciones DML (SELECT, INSERT, UPDATE, DELETE). Las instrucciones DDL como CREATE, DROP o ALTER no se pueden analizar.", "contextMenuExplain": "Plan de Query", "rerun": "Reejecutar", @@ -903,8 +883,6 @@ "overview": "Resumen", "showOverview": "Mostrar resumen", "hideOverview": "Ocultar resumen", - "showNotes": "Mostrar notas", - "hideNotes": "Ocultar notas", "postgresAnalyzeLegend1": "PostgreSQL ANALYZE incluye filas reales, tiempos, bucles y contadores de buffer cuando estan disponibles.", "postgresAnalyzeLegend2": "Las grandes diferencias entre estimacion y realidad suelen indicar estadisticas desactualizadas o predicados dificiles de modelar.", "postgresEstimateLegend1": "PostgreSQL sin ANALYZE muestra solo estimaciones del planner.", @@ -915,11 +893,6 @@ "mysqlEstimateLegend2": "Si falta el tiempo, es probable que el servidor devolviera un plan solo estimado.", "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN es ligero y principalmente estructural.", "sqliteLegend2": "Costo, tiempo y estimaciones de filas suelen no estar disponibles como en PostgreSQL y MySQL.", - "copySnapshot": "Copiar Snapshot", - "exportRaw": "Exportar Raw", - "snapshotCopied": "Snapshot del explain copiado al portapapeles", - "rawExported": "Salida raw del explain exportada", - "noRawOutput": "No hay salida raw del explain disponible para exportar.", "aiAnalysis": "Analisis IA", "aiAnalysisTitle": "Analisis IA del Plan de Ejecucion", "aiAnalyzing": "Analizando plan de ejecucion con IA...", @@ -945,8 +918,6 @@ "invalidFile": "Formato de archivo notebook no válido", "importSuccess": "Notebook importado exitosamente", "exportSuccess": "Notebook exportado exitosamente", - "convertToConsole": "Convertir a Consola", - "runningAll": "Ejecutando todas las celdas...", "cellResult": "{{count}} filas · {{time}}ms", "stopOnError": "Detener en Error", "stopOnErrorTooltip": "Detener la ejecución cuando una celda falla", @@ -973,8 +944,6 @@ "collapseAll": "Contraer Todo", "expandAll": "Expandir Todo", "outline": "Esquema", - "aiGenerate": "Generar SQL con IA", - "aiExplain": "Explicar esta Consulta con IA", "cellNamePlaceholder": "Sin nombre", "editCellName": "Editar nombre de celda", "aiGenerateName": "Generar nombre con IA", @@ -1000,13 +969,12 @@ "stopOnError": "Detener en error alternado", "other": "Notebook editado" } - } + }, + "exportError": "Export failed" }, "querySelection": { "title": "Seleccionar consulta a ejecutar", "queriesFound": "{{count}} consultas encontradas", - "escToCancel": "Esc para cancelar", - "numberHint": "Pulsa 1-9 para seleccionar, flechas para navegar", "runAll": "Ejecutar todas", "runSelected": "Ejecutar seleccionadas ({{count}})", "runSingle": "Ejecutar esta consulta", @@ -1022,8 +990,6 @@ "cancel": "cancelar" }, "multiResult": { - "query": "Consulta {{index}}", - "summary": "{{total}} consultas: {{succeeded}} completadas, {{failed}} fallidas", "rerun": "Reejecutar consulta", "close": "Cerrar pestaña", "rename": "Renombrar", @@ -1034,8 +1000,7 @@ "queryPrefix": "Consulta", "results": "Resultados", "collapseAll": "Contraer todo", - "expandAll": "Expandir todo", - "collapsed": "Contraído" + "expandAll": "Expandir todo" } }, "createTable": { @@ -1051,14 +1016,13 @@ "colNn": "NN", "colAi": "AI", "colDefault": "Predeterminado", - "showSql": "Mostrar Vista Previa SQL", - "hideSql": "Ocultar Vista Previa SQL", "create": "Crear Tabla", "cancel": "Cancelar", "nameRequired": "El nombre de la tabla es requerido", "colRequired": "Se requiere al menos una columna", "failCreate": "Error al crear la tabla: ", - "requiresExtension": "Requiere extensión: {{ext}}" + "requiresExtension": "Requiere extensión: {{ext}}", + "sqlPreview": "SQL Preview" }, "schema": { "title": "Esquema: {{table}}", @@ -1068,7 +1032,8 @@ "colNullable": "Nullable", "colKey": "Clave", "yes": "SÍ", - "no": "NO" + "no": "NO", + "close": "Close" }, "generateSQL": { "title": "SQL Generado: {{table}}", @@ -1099,8 +1064,6 @@ "cancel": "Cancelar", "nameRequired": "El nombre de la columna es requerido", "fail": "Error: ", - "noChanges": "No se detectaron cambios", - "unsupported": "Driver no soportado", "pkNotSupported": "Este driver solo soporta claves primarias en la creación de la tabla", "requiresExtension": "Requiere extensión: {{ext}}" }, @@ -1126,15 +1089,13 @@ "sqlPreview": "Vista Previa SQL", "create": "Crear Clave Foránea", "cancel": "Cancelar", - "colRequired": "Selecciona las columnas locales y referenciadas", - "tableRequired": "Selecciona una tabla referenciada" + "nameRequired": "Name is required" }, "healthCheck": { "title": "Conexión Perdida", "connectionLost": "Se ha perdido una conexión a la base de datos" }, "erDiagram": { - "title": "Diagrama ER", "enterFullscreen": "Pantalla Completa", "exitFullscreen": "Salir de Pantalla Completa", "noConnection": "Sin ID de Conexión", @@ -1156,7 +1117,6 @@ "viewName": "Nombre de Vista", "viewNamePlaceholder": "ej. usuarios_activos, resumen_pedidos", "viewDefinition": "Definición de Vista (SQL)", - "definitionPlaceholder": "SELECT * FROM ...", "preview": "Vista Previa", "runPreview": "Ejecutar Vista Previa", "previewEmpty": "Haz clic en 'Ejecutar Vista Previa' para ver resultados", @@ -1170,7 +1130,55 @@ "createSuccess": "Vista creada correctamente", "alterSuccess": "Vista actualizada correctamente", "saveError": "Error al guardar la vista: ", - "confirmAlter": "¿Estás seguro de que deseas modificar la vista \"{{view}}\"?" + "confirmAlter": "¿Estás seguro de que deseas modificar la vista \"{{view}}\"?", + "alterView": "Alter View" + }, + "triggers": { + "createTrigger": "Create Trigger", + "editTrigger": "Edit Trigger", + "createSubtitle": "Create a new database trigger", + "editSubtitle": "Editing trigger: {{name}}", + "triggerName": "Trigger Name", + "triggerNamePlaceholder": "e.g. before_insert_user", + "tableName": "Table Name", + "tableNamePlaceholder": "e.g. users", + "timing": "Timing", + "events": "Events", + "body": "Trigger Body (SQL)", + "sqlPreview": "Generated SQL Preview", + "rawSql": "Raw SQL", + "guidedMode": "Guided", + "rawSqlMode": "Raw SQL", + "loading": "Loading trigger definition...", + "create": "Create Trigger", + "save": "Save Changes", + "sqlRequired": "Trigger SQL is required", + "failLoadDefinition": "Failed to load trigger definition: ", + "dropError": "Failed to drop existing trigger: ", + "saveError": "Failed to save trigger: ", + "createSuccess": "Trigger created successfully", + "updateSuccess": "Trigger updated successfully", + "recreateTrigger": "Recreate Trigger", + "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" + }, + "community": { + "title": "Join the Community", + "subtitle": "Help tabularis grow", + "description": "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.", + "starTitle": "Star on GitHub", + "starDesc": "A star helps others discover the project", + "discordTitle": "Join Discord", + "discordDesc": "Chat with the community, get help, suggest features", + "dismiss": "Maybe later" + }, + "whatsNew": { + "title": "What's New", + "subtitle": "Version {{version}}", + "features": "New Features", + "bugFixes": "Bug Fixes", + "breakingChanges": "Breaking Changes", + "readMore": "Read more", + "dismiss": "Got it" }, "dump": { "title": "Exportar Base de Datos", @@ -1183,12 +1191,10 @@ "selectAll": "Seleccionar Todo", "deselectAll": "Deseleccionar Todo", "export": "Exportar", - "exporting": "Exportando...", "success": "Base de datos exportada correctamente", "failure": "Error en la exportación: ", "errorNoOption": "Selecciona al menos Estructura o Datos", "errorNoTables": "Selecciona al menos una tabla", - "importStarted": "Importación iniciada...", "importSuccess": "Archivo SQL ejecutado correctamente", "importFailure": "Error en la importación: ", "importCancelled": "Importación cancelada", @@ -1202,7 +1208,6 @@ "sqlMode": "Modo SQL", "wktMode": "Modo WKT", "sqlHelper": "Ingrese una función SQL completa (ej: ST_GeomFromText('POINT(30 40)', 4326))", - "wktHelper": "Ingrese formato WKT (ej: POINT(30 40))", "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", "wktPlaceholder": "POINT(30 40)", "toggleTooltip": "Funciones SQL" @@ -1218,12 +1223,9 @@ "raw": "Sin formato" }, "expand": "Expandir", - "collapse": "Contraer", "search": "Buscar", - "copyPath": "Copiar ruta", - "copyValue": "Copiar valor", - "addItem": "Agregar elemento", - "removeItem": "Eliminar elemento" + "diff": "Diff", + "sideBySide": "Side by side" }, "jsonViewer": { "close": "Cerrar", @@ -1233,12 +1235,21 @@ "expand": "Expandir/contraer árbol JSON", "openViewer": "Abrir visor JSON" }, + "textCell": { + "expand": "Toggle inline text editor" + }, + "textInput": { + "diff": "Diff", + "sideBySide": "Side by side" + }, + "textViewer": { + "save": "Save" + }, "rowEditor": { "title": "Editar Fila", "subtitle": "Fila #{{row}}", - "save": "Guardar Cambios", - "cancel": "Cancelar", - "enterValue": "Ingresar valor..." + "enterValue": "Ingresar valor...", + "resize": "Resize sidebar" }, "contextMenu": { "openSidebar": "Abrir Barra Lateral", @@ -1333,6 +1344,22 @@ } } }, + "groups": { + "newGroup": "New Group", + "rename": "Rename", + "delete": "Delete", + "deleteConfirm": "Are you sure you want to delete group \"{{name}}\"? Connections in this group will be moved to ungrouped.", + "deleteTitle": "Delete Group", + "connection": "connection", + "connections": "connections", + "ungrouped": "Ungrouped", + "removeFromGroup": "Remove from Group", + "groupName": "Group name", + "createError": "Failed to create group", + "deleteError": "Failed to delete group", + "moveError": "Failed to move connection", + "renameError": "Failed to rename group" + }, "queryModal": { "database": "Base de datos", "noDatabase": "Sin base de datos" @@ -1456,7 +1483,9 @@ "write": "Escritura", "ddl": "DDL", "unknown": "Desconocido" - } + }, + "exportCsv": "Export CSV", + "exportJson": "Export JSON" }, "aiApproval": { "title": "La IA quiere ejecutar una escritura en la base de datos", @@ -1499,7 +1528,6 @@ "port": "Puerto del contenedor", "test": "Probar", "testing": "Probando...", - "validationFailed": "Error de validación", "errors": { "nameRequired": "El nombre de la conexión es obligatorio", "contextRequired": "El contexto de Kubernetes es obligatorio", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index acd8c9da..41bae944 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -29,15 +29,14 @@ "cancel": "Annuler", "delete": "Supprimer", "edit": "Modifier", - "clone": "Cloner", - "connect": "Connecter", - "disconnect": "Déconnecter", "loading": "Chargement...", "search": "Rechercher...", "noResults": "Aucun résultat trouvé", "error": "Erreur", "success": "Succès", - "ok": "OK" + "ok": "OK", + "clear": "Clear", + "refresh": "Refresh" }, "sidebar": { "connections": "Connexions", @@ -105,6 +104,19 @@ "procedures": "Procédures", "noRoutines": "Aucune routine trouvée", "refreshRoutines": "Actualiser les routines", + "triggers": "Triggers", + "noTriggers": "No triggers found", + "filterTriggers": "Filter triggers...", + "noTriggersMatch": "No triggers match your filter", + "createTrigger": "Create New Trigger", + "editTrigger": "Edit Trigger", + "dropTrigger": "Drop Trigger", + "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", + "viewTriggerDefinition": "View Definition", + "failDropTrigger": "Failed to drop trigger: ", + "failGetTriggerDefinition": "Failed to get trigger definition: ", + "refreshTriggers": "Refresh Triggers", + "onTable": "on {{table}}", "objectSummary": "Objets", "databases": "Bases de données", "failGetRoutineDefinition": "Échec de récupération de la définition de la routine : ", @@ -177,7 +189,6 @@ "subtitle": "Connectez Tabularis à Claude Desktop, Cursor et plus encore", "description": "Le Model Context Protocol (MCP) permet aux assistants IA (comme Claude) de se connecter à vos outils locaux. Tabularis expose un serveur MCP permettant à l’IA de lire le schéma de votre base de données et d’exécuter des requêtes en toute sécurité.", "checking": "Vérification de la configuration...", - "configPath": "Fichier de configuration", "notFound": "Fichier de configuration introuvable (à créer manuellement)", "installed": "Installé", "install": "Installer la configuration", @@ -220,11 +231,9 @@ "noConnections": "Aucune connexion active", "createFirst": "Créez votre première connexion", "active": "Active", - "sshEnabled": "Tunnel SSH activé", "disconnect": "Déconnecter", "connect": "Connecter", "edit": "Modifier", - "duplicate": "Dupliquer", "delete": "Supprimer", "clone": "Cloner", "confirmDelete": "Voulez-vous vraiment supprimer cette connexion ?", @@ -232,7 +241,6 @@ "failConnect": "Échec de connexion à {{name}}. Vérifiez vos paramètres ou assurez-vous que la base de données est en cours d’exécution.", "failDisconnect": "Échec de la déconnexion de la base de données", "failDuplicate": "Échec de duplication de la connexion", - "connecting": "Connexion...", "open": "Ouvrir", "pluginDisabled": "Plugin désactivé", "connectionCount": "{{count}} connexion(s)", @@ -251,7 +259,6 @@ "accentColor": "Couleur d'accent", "customColor": "Personnalisé", "resetColor": "Réinitialiser au défaut du pilote", - "resetIcon": "Réinitialiser au défaut du pilote", "icon": "Icône", "tabs": { "default": "Défaut", @@ -259,16 +266,22 @@ "emoji": "Emoji", "image": "Image" }, + "previewLabel": "Preview", + "defaultHint": "Using the driver's default icon.", + "emojiSelected": "Selected emoji", + "emojiHint": "Click another emoji below to change.", + "removeEmoji": "Clear", "chooseImage": "Choisir une image…", "removeImage": "Supprimer", "imageHint": "PNG, JPG, WebP ou SVG · max. 512 Ko", - "errors": { - "invalidEmoji": "Veuillez saisir un seul emoji", - "invalidHex": "Veuillez saisir une couleur hex valide comme #1a2b3c" - } + "errors": {}, + "emojiSearch": "Search emoji…", + "iconNoResults": "No icons match.", + "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", + "iconSearch": "Search icons…", + "noPreview": "No preview" }, "settings": { - "title": "Paramètres", "general": "Général", "info": "Infos", "dataEditor": "Éditeur de données", @@ -290,8 +303,6 @@ "themeSelection": "Choix du thème", "fontFamily": "Famille de police", "fonts": { - "system": "Police système par défaut", - "systemDesc": "Utilise la police par défaut de votre OS", "custom": "Police personnalisée", "customPlaceholder": "ex. Comic Sans MS", "enterFontName": "Saisissez le nom de la police ci-dessus" @@ -322,17 +333,15 @@ "title": "config.json", "saveAndRestart": "Enregistrer et redémarrer", "restartNow": "Redémarrer maintenant", - "restartLater": "Plus tard", "restartRequired": "Un redémarrage est nécessaire pour appliquer les changements.", - "restartMessage": "Le fichier de configuration a été enregistré. Redémarrer maintenant pour appliquer les changements ?", - "invalidJson": "JSON invalide — corrigez les erreurs avant d’enregistrer." + "restartMessage": "Le fichier de configuration a été enregistré. Redémarrer maintenant pour appliquer les changements ?" }, "language": "Langue", "languageDesc": "Choisissez votre langue préférée. \"Auto\" utilisera la langue de votre système.", "auto": "Auto (Système)", - "english": "Anglais", - "italian": "Italien", - "spanish": "Espagnol", + "timezone": "Timezone", + "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", + "timezoneSearch": "Search timezones...", "projectStatus": "État du projet", "roadmapDesc": "Ce projet est un Work In Progress (WIP). Les fonctionnalités principales sont stables, mais nous avons de grands projets.", "support": "Soutenir le développement", @@ -486,15 +495,10 @@ "filterInstalled": "Installés", "filterUpdates": "Mises à jour", "searchNoResults": "Aucun plugin ne correspond à la recherche.", - "version": "Version", "requiresVersion": "Nécessite Tabularis ≥ {{version}}", - "installedPlugins": "Plugins installés", - "installedDesc": "Activer ou désactiver les pilotes de base de données. Les pilotes intégrés ne peuvent pas être désactivés.", "remove": "Supprimer", "removeTitle": "Supprimer le plugin", "confirmRemove": "Voulez-vous vraiment supprimer \"{{name}}\" ? Cela supprimera les fichiers du plugin.", - "enabled": "Activé", - "disabled": "Désactivé", "installError": { "title": "Échec de l’installation", "subtitle": "Une erreur s’est produite lors de l’installation du plugin. Voir les détails ci-dessous.", @@ -565,7 +569,6 @@ "notOverridable": "Intégré, non personnalisable", "pressKeys": "Appuyez sur une combinaison de touches...", "notebookRunAll": "Exécuter toutes les cellules", - "categories_notebook": "Notebook", "pasteImportClipboard": "Importer depuis le Presse-papiers", "quickNavigator": "Navigateur rapide" }, @@ -575,44 +578,23 @@ "newVersionAvailable": "Nouvelle version disponible", "version": "Version", "releaseNotes": "Notes de version", - "downloads": "Téléchargements", - "download": "Télécharger", "downloadAndInstall": "Télécharger et installer", "downloading": "Téléchargement...", "installing": "Installation...", "installingMessage": "L’application redémarrera automatiquement après l’installation", "viewOnGitHub": "Voir sur GitHub", "remindLater": "Me le rappeler plus tard", - "skipVersion": "Ignorer cette version", - "checkingForUpdates": "Recherche de mises à jour...", "upToDate": "Vous êtes à jour", "updateAvailable": "La version {{version}} est disponible", "error": "Erreur de mise à jour", - "currentVersion": "Version actuelle", "managedByPackageManager": "Mises à jour gérées par {{source}}", "managedByPackageManagerDesc": "Utilisez votre gestionnaire de paquets pour mettre à jour Tabularis." }, "ai": { - "assist": "AI Assist", "explain": "Expliquer", - "generateSql": "Générer du SQL", - "generating": "Génération...", - "explainQuery": "Explication IA de la requête", - "queryLabel": "Requête", - "explanationLabel": "Explication", - "generatingExplanation": "Génération de l’explication...", - "configRequired": "⚠️ Fournisseur IA non configuré. Veuillez aller dans Paramètres > IA.", - "enterPrompt": "Décrivez votre requête en langage naturel", - "promptPlaceholder": "ex. Trouver tous les utilisateurs inscrits le mois dernier ayant commandé une offre \"Premium\"...", - "readingSchema": "Lecture du schéma de la base de données...", - "schemaError": "Échec du chargement du contexte du schéma de la base de données", - "configError": "Veuillez configurer un fournisseur IA dans les paramètres et saisir un prompt." + "generateSql": "Générer du SQL" }, "newConnection": { - "titleNew": "Nouvelle connexion", - "titleEdit": "Modifier la connexion", - "subtitle": "Configurer les paramètres de connexion à la base de données", - "name": "Nom de la connexion", "namePlaceholder": "Indiquez le nom de votre connexion", "nameRequired": "Le nom de la connexion est requis", "dbNameRequired": "Le nom de la base de données est requis", @@ -621,7 +603,6 @@ "port": "Port", "username": "Nom d’utilisateur", "password": "Mot de passe", - "passwordMissing": "Mot de passe manquant ou non défini. Veuillez le ressaisir.", "passwordPlaceholder": "Saisir le mot de passe", "usernamePlaceholder": "Saisir le nom d'utilisateur", "filePath": "Chemin du fichier", @@ -668,7 +649,12 @@ "prefer": "Préférer", "require": "Exiger", "verify-ca": "Vérifier CA", - "verify-full": "Vérification complète" + "verify-full": "Vérification complète", + "disabled": "Disabled", + "preferred": "Preferred", + "required": "Required", + "verify_ca": "Verify CA", + "verify_identity": "Verify Identity" }, "chooseContext": "Choisir un contexte...", "chooseK8s": "Choisir une connexion...", @@ -691,7 +677,20 @@ "selectK8sConnection": "Sélectionner une connexion K8s", "selectTypeFirst": "Sélectionnez d'abord contexte/namespace/type", "useK8s": "Utiliser le Port-Forward Kubernetes", - "useK8sConnection": "Connexion enregistrée" + "useK8sConnection": "Connexion enregistrée", + "connectionString": "Connection String", + "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", + "general": "General", + "loadDatabasesHint": "Click Load Databases to fetch available databases.", + "noGeneralSettings": "No general settings available for this driver.", + "selectDatabasesHint": "Select the databases to include in this connection.", + "sshNotAvailable": "SSH is not available for this driver.", + "sslCa": "CA Certificate", + "sslCert": "Client Certificate", + "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", + "sslDescription": "Configure SSL/TLS for secure database connections (optional).", + "sslKey": "Client Key", + "unnamedConnection": "Unnamed connection" }, "sshConnections": { "title": "Connexions SSH", @@ -719,27 +718,19 @@ "dataGrid": { "newRow": "NOUVELLE", "noData": "Aucune donnée à afficher", - "editRow": "Modifier la ligne", "deleteRow": "Supprimer la ligne", "deleteRows": "Supprimer {{count}} lignes", - "confirmDelete": "Voulez-vous vraiment supprimer cette ligne ?", - "deleteTitle": "Supprimer la ligne", "updateFailed": "Échec de la mise à jour : ", - "deleteFailed": "Échec de la suppression de la ligne : ", "null": "null", "sortByAsc": "Trier par {{col}} ASC", "sortByDesc": "Trier par {{col}} DESC", "clearSort": "Effacer le tri", "copyCell": "Copier la cellule", - "copyRow": "Copier la ligne", "copySelectedRows": "Copier la/les ligne(s) sélectionnée(s)", "copyColumnName": "Copier le nom de colonne", "copyColumnNameQuoted": "Copier comme `column`", "copyColumnNameTable": "Copier comme table.column", - "copyCells": "Copier {{count}} cellule(s)", - "copyRows": "Copier {{count}} ligne(s)", "copied": "Copié dans le presse-papiers", - "discardInsertion": "Cliquez pour annuler cette ligne (rollback)", "duplicateRow": "Dupliquer la ligne", "revertSelected": "Annuler la sélection", "setGenerate": "Définir GENERATED", @@ -750,23 +741,11 @@ "previewReferenced": "Aperçu de l'enregistrement lié", "openReferenced": "Ouvrir la ligne référencée dans {{table}}" }, - "editRow": { - "title": "Modifier la ligne", - "save": "Enregistrer les modifications", - "cancel": "Annuler", - "success": "Ligne mise à jour avec succès", - "failLoad": "Échec du chargement du schéma pour l’édition", - "failUpdate": "Échec de la mise à jour de la ligne : ", - "loading": "Chargement...", - "selectValue": "Sélectionner une valeur...", - "noOptions": "Aucune option trouvée", - "current": "Actuel" - }, + "editRow": {}, "newRow": { "title": "Nouvelle ligne", "insert": "Insérer", "cancel": "Annuler", - "success": "Ligne insérée avec succès", "failInsert": "Échec de l’insertion de la ligne : ", "failLoad": "Échec du chargement du schéma : ", "loading": "Chargement...", @@ -778,26 +757,6 @@ "auto": "Auto" }, "editor": { - "quickNavigator": { - "placeholder": "Rechercher tables, vues, routines, triggers...", - "noResults": "Aucun élément correspondant trouvé", - "count_one": "1 élément", - "count_other": "{{count}} éléments", - "navigationHint": "↑↓ pour naviguer, Entrée pour ouvrir", - "escHint": "Échap pour fermer", - "type_table": "table", - "type_view": "vue", - "type_routine": "routine", - "type_trigger": "trigger", - "actions": { - "inspect": "Inspecter la structure", - "newConsole": "Nouvelle console", - "generateSql": "Générer des modèles SQL", - "countRows": "Compter les lignes", - "query": "Exécuter une requête SELECT", - "copyName": "Copier le nom" - } - }, "noTabs": "Aucun onglet ouvert pour cette connexion.", "newConsole": "Nouvelle console", "noActiveSession": "Aucune session active. Veuillez sélectionner une connexion.", @@ -807,7 +766,6 @@ "connected": "Connecté", "disconnected": "Déconnecté", "newRow": "Nouvelle ligne", - "editing": "Modification : {{table}}", "rowsRetrieved": "{{count}} lignes récupérées", "autoPaginated": "Pagination automatique", "pageOf": "Page {{current}} sur {{total}}", @@ -844,6 +802,26 @@ "tabs_other": "{{count}} onglets", "escHint": "Esc pour fermer" }, + "quickNavigator": { + "placeholder": "Rechercher tables, vues, routines, triggers...", + "noResults": "Aucun élément correspondant trouvé", + "count_one": "1 élément", + "count_other": "{{count}} éléments", + "navigationHint": "↑↓ pour naviguer, Entrée pour ouvrir", + "escHint": "Échap pour fermer", + "type_table": "table", + "type_view": "vue", + "type_routine": "routine", + "type_trigger": "trigger", + "actions": { + "inspect": "Inspecter la structure", + "newConsole": "Nouvelle console", + "generateSql": "Générer des modèles SQL", + "countRows": "Compter les lignes", + "query": "Exécuter une requête SELECT", + "copyName": "Copier le nom" + } + }, "submitChanges": "Soumettre les modifications", "rollbackChanges": "Annuler les modifications", "applyToAll": "Appliquer à tout", @@ -856,13 +834,11 @@ "paramValuePlaceholder": "Valeur (ex. 'texte' ou 123)", "failedCreateRow": "Échec de création de la nouvelle ligne : ", "failedProcessInsertions": "Échec du traitement des insertions : ", - "fieldRequired": "Ce champ est requis", "newNotebook": "Nouveau notebook", "visualExplain": { "title": "Visual Explain", "buttonShort": "Expliquer le plan", "loading": "Exécution d’EXPLAIN...", - "error": "Échec d’exécution d’EXPLAIN", "planningTime": "Planification", "executionTime": "Exécution", "totalCost": "Coût total", @@ -878,7 +854,6 @@ "rawOutput": "Sortie brute", "analyze": "Analyser", "analyzeWarning": "ANALYZE exécute la requête. Utilisez-le avec prudence pour les instructions modifiant les données.", - "notSupported": "EXPLAIN n’est pas pris en charge pour ce type de connexion.", "notExplainable": "EXPLAIN est uniquement pris en charge pour les instructions DML (SELECT, INSERT, UPDATE, DELETE). Les instructions DDL comme CREATE, DROP ou ALTER ne peuvent pas être expliquées.", "contextMenuExplain": "Expliquer le plan", "rerun": "Relancer", @@ -908,8 +883,6 @@ "overview": "Vue d’ensemble", "showOverview": "Afficher la vue d’ensemble", "hideOverview": "Masquer la vue d’ensemble", - "showNotes": "Afficher les notes", - "hideNotes": "Masquer les notes", "postgresAnalyzeLegend1": "PostgreSQL ANALYZE inclut les lignes réelles, le temps, les boucles et les compteurs de buffer lorsqu’ils sont disponibles.", "postgresAnalyzeLegend2": "De grands écarts d’estimation indiquent généralement des statistiques obsolètes ou des prédicats mal modélisés par le planificateur.", "postgresEstimateLegend1": "PostgreSQL sans ANALYZE n’affiche que les estimations du planificateur.", @@ -920,11 +893,6 @@ "mysqlEstimateLegend2": "Si le temps manque, le serveur a probablement renvoyé un plan uniquement estimé.", "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN est léger et principalement structurel.", "sqliteLegend2": "Le coût, le temps et les estimations de lignes sont souvent indisponibles comparés à PostgreSQL et MySQL.", - "copySnapshot": "Copier l’instantané", - "exportRaw": "Exporter la sortie brute", - "snapshotCopied": "Instantané Explain copié dans le presse-papiers", - "rawExported": "Sortie brute d’Explain exportée", - "noRawOutput": "Aucune sortie brute Explain disponible à exporter.", "aiAnalysis": "Analyse IA", "aiAnalysisTitle": "Analyse IA du plan de requête", "aiAnalyzing": "Analyse du plan de requête avec l’IA...", @@ -950,8 +918,6 @@ "invalidFile": "Format de fichier notebook invalide", "importSuccess": "Notebook importé avec succès", "exportSuccess": "Notebook exporté avec succès", - "convertToConsole": "Convertir en console", - "runningAll": "Exécution de toutes les cellules...", "cellResult": "{{count}} lignes · {{time}} ms", "stopOnError": "Arrêter en cas d’erreur", "stopOnErrorTooltip": "Arrêter l’exécution lorsqu’une cellule échoue", @@ -978,8 +944,6 @@ "collapseAll": "Tout réduire", "expandAll": "Tout développer", "outline": "Plan", - "aiGenerate": "Générer du SQL avec l’IA", - "aiExplain": "Expliquer cette requête avec l’IA", "cellNamePlaceholder": "Sans titre", "editCellName": "Modifier le nom de la cellule", "aiGenerateName": "Générer un nom avec l’IA", @@ -1005,13 +969,12 @@ "stopOnError": "Arrêt en cas d'erreur basculé", "other": "Notebook modifié" } - } + }, + "exportError": "Export failed" }, "querySelection": { "title": "Sélectionner la requête à exécuter", "queriesFound": "{{count}} requêtes trouvées", - "escToCancel": "Esc pour annuler", - "numberHint": "Appuyez sur 1-9 pour sélectionner, flèches pour naviguer", "runAll": "Tout exécuter", "runSelected": "Exécuter la sélection ({{count}})", "runSingle": "Exécuter cette requête", @@ -1027,8 +990,6 @@ "cancel": "annuler" }, "multiResult": { - "query": "Requête {{index}}", - "summary": "{{total}} requêtes : {{succeeded}} réussies, {{failed}} échouées", "rerun": "Relancer la requête", "close": "Fermer l’onglet", "rename": "Renommer", @@ -1039,8 +1000,7 @@ "queryPrefix": "Requête", "results": "Résultats", "collapseAll": "Tout réduire", - "expandAll": "Tout développer", - "collapsed": "Réduit" + "expandAll": "Tout développer" } }, "createTable": { @@ -1056,14 +1016,13 @@ "colNn": "NN", "colAi": "AI", "colDefault": "Valeur par défaut", - "showSql": "Afficher l’aperçu SQL", - "hideSql": "Masquer l’aperçu SQL", "create": "Créer la table", "cancel": "Annuler", "nameRequired": "Le nom de la table est requis", "colRequired": "Au moins une colonne est requise", "failCreate": "Échec de la création de la table : ", - "requiresExtension": "Extension requise : {{ext}}" + "requiresExtension": "Extension requise : {{ext}}", + "sqlPreview": "SQL Preview" }, "schema": { "title": "Schéma : {{table}}", @@ -1073,7 +1032,8 @@ "colNullable": "Nullable", "colKey": "Clé", "yes": "OUI", - "no": "NON" + "no": "NON", + "close": "Close" }, "generateSQL": { "title": "SQL généré : {{table}}", @@ -1104,8 +1064,6 @@ "cancel": "Annuler", "nameRequired": "Le nom de la colonne est requis", "fail": "Échec : ", - "noChanges": "Aucun changement détecté", - "unsupported": "Pilote non pris en charge", "pkNotSupported": "Ce pilote ne prend en charge les clés primaires qu’à la création de la table", "requiresExtension": "Extension requise : {{ext}}" }, @@ -1131,15 +1089,13 @@ "sqlPreview": "Aperçu SQL", "create": "Créer la clé étrangère", "cancel": "Annuler", - "colRequired": "Veuillez sélectionner les colonnes locale et référencée", - "tableRequired": "Veuillez sélectionner une table référencée" + "nameRequired": "Name is required" }, "healthCheck": { "title": "Connexion perdue", "connectionLost": "Une connexion à la base de données a été perdue" }, "erDiagram": { - "title": "Diagramme ER", "enterFullscreen": "Plein écran", "exitFullscreen": "Quitter le plein écran", "noConnection": "Aucun ID de connexion", @@ -1161,7 +1117,6 @@ "viewName": "Nom de la vue", "viewNamePlaceholder": "ex. active_users, order_summary", "viewDefinition": "Définition de la vue (SQL)", - "definitionPlaceholder": "SELECT * FROM ...", "preview": "Aperçu", "runPreview": "Exécuter l’aperçu", "previewEmpty": "Cliquez sur \"Exécuter l’aperçu\" pour voir les résultats", @@ -1175,7 +1130,36 @@ "createSuccess": "Vue créée avec succès", "alterSuccess": "Vue mise à jour avec succès", "saveError": "Échec de l’enregistrement de la vue : ", - "confirmAlter": "Voulez-vous vraiment modifier la vue \"{{view}}\" ?" + "confirmAlter": "Voulez-vous vraiment modifier la vue \"{{view}}\" ?", + "alterView": "Alter View" + }, + "triggers": { + "createTrigger": "Create Trigger", + "editTrigger": "Edit Trigger", + "createSubtitle": "Create a new database trigger", + "editSubtitle": "Editing trigger: {{name}}", + "triggerName": "Trigger Name", + "triggerNamePlaceholder": "e.g. before_insert_user", + "tableName": "Table Name", + "tableNamePlaceholder": "e.g. users", + "timing": "Timing", + "events": "Events", + "body": "Trigger Body (SQL)", + "sqlPreview": "Generated SQL Preview", + "rawSql": "Raw SQL", + "guidedMode": "Guided", + "rawSqlMode": "Raw SQL", + "loading": "Loading trigger definition...", + "create": "Create Trigger", + "save": "Save Changes", + "sqlRequired": "Trigger SQL is required", + "failLoadDefinition": "Failed to load trigger definition: ", + "dropError": "Failed to drop existing trigger: ", + "saveError": "Failed to save trigger: ", + "createSuccess": "Trigger created successfully", + "updateSuccess": "Trigger updated successfully", + "recreateTrigger": "Recreate Trigger", + "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" }, "community": { "title": "Rejoindre la communauté", @@ -1207,12 +1191,10 @@ "selectAll": "Tout sélectionner", "deselectAll": "Tout désélectionner", "export": "Exporter", - "exporting": "Exportation...", "success": "Base de données exportée avec succès", "failure": "Échec de l’export : ", "errorNoOption": "Veuillez sélectionner au moins Structure ou Données", "errorNoTables": "Veuillez sélectionner au moins une table", - "importStarted": "Import démarré...", "importSuccess": "Fichier SQL exécuté avec succès", "importFailure": "Échec de l’import : ", "importCancelled": "Import annulé", @@ -1226,7 +1208,6 @@ "sqlMode": "Mode SQL", "wktMode": "Mode WKT", "sqlHelper": "Saisissez une fonction SQL complète (ex. ST_GeomFromText('POINT(30 40)', 4326))", - "wktHelper": "Saisissez le format WKT (ex. POINT(30 40))", "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", "wktPlaceholder": "POINT(30 40)", "toggleTooltip": "Fonctions SQL" @@ -1242,12 +1223,9 @@ "raw": "Brut" }, "expand": "Développer", - "collapse": "Réduire", "search": "Rechercher", - "copyPath": "Copier le chemin", - "copyValue": "Copier la valeur", - "addItem": "Ajouter un élément", - "removeItem": "Supprimer l'élément" + "diff": "Diff", + "sideBySide": "Side by side" }, "jsonViewer": { "close": "Fermer", @@ -1257,12 +1235,21 @@ "expand": "Afficher/masquer l'arbre JSON", "openViewer": "Ouvrir le visualiseur JSON" }, + "textCell": { + "expand": "Toggle inline text editor" + }, + "textInput": { + "diff": "Diff", + "sideBySide": "Side by side" + }, + "textViewer": { + "save": "Save" + }, "rowEditor": { "title": "Modifier la ligne", "subtitle": "Ligne n°{{row}}", - "save": "Enregistrer les modifications", - "cancel": "Annuler", - "enterValue": "Saisir une valeur..." + "enterValue": "Saisir une valeur...", + "resize": "Resize sidebar" }, "contextMenu": { "openSidebar": "Ouvrir l’éditeur latéral", @@ -1358,9 +1345,7 @@ } }, "groups": { - "title": "Groupes", "newGroup": "Nouveau groupe", - "createGroup": "Créer un groupe", "rename": "Renommer", "delete": "Supprimer", "deleteConfirm": "Voulez-vous vraiment supprimer le groupe \"{{name}}\" ? Les connexions de ce groupe seront déplacées vers Non groupées.", @@ -1368,13 +1353,12 @@ "connection": "connexion", "connections": "connexions", "ungrouped": "Non groupé", - "moveToGroup": "Déplacer vers le groupe", "removeFromGroup": "Retirer du groupe", - "noGroups": "Aucun groupe pour le moment", - "createFirst": "Créez votre premier groupe pour organiser vos connexions", "groupName": "Nom du groupe", - "dragHint": "Glissez les connexions ici", - "createError": "Échec de création du groupe" + "createError": "Échec de création du groupe", + "deleteError": "Failed to delete group", + "moveError": "Failed to move connection", + "renameError": "Failed to rename group" }, "queryModal": { "database": "Base de données", @@ -1499,7 +1483,9 @@ "write": "Écriture", "ddl": "DDL", "unknown": "Inconnu" - } + }, + "exportCsv": "Export CSV", + "exportJson": "Export JSON" }, "aiApproval": { "title": "L'IA veut exécuter une écriture", @@ -1542,7 +1528,6 @@ "port": "Port du conteneur", "test": "Tester", "testing": "Test en cours...", - "validationFailed": "Échec de la validation", "errors": { "nameRequired": "Le nom de la connexion est requis", "contextRequired": "Le contexte Kubernetes est requis", diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index bc178b56..e1138d37 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -29,15 +29,14 @@ "cancel": "Annulla", "delete": "Elimina", "edit": "Modifica", - "clone": "Clona", - "connect": "Connetti", - "disconnect": "Disconnetti", "loading": "Caricamento...", "search": "Cerca...", "noResults": "Nessun risultato trovato", "error": "Errore", "success": "Successo", - "ok": "OK" + "ok": "OK", + "clear": "Clear", + "refresh": "Refresh" }, "sidebar": { "connections": "Connessioni", @@ -105,6 +104,19 @@ "procedures": "Procedure", "noRoutines": "Nessuna routine trovata", "refreshRoutines": "Aggiorna Routine", + "triggers": "Triggers", + "noTriggers": "No triggers found", + "filterTriggers": "Filter triggers...", + "noTriggersMatch": "No triggers match your filter", + "createTrigger": "Create New Trigger", + "editTrigger": "Edit Trigger", + "dropTrigger": "Drop Trigger", + "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", + "viewTriggerDefinition": "View Definition", + "failDropTrigger": "Failed to drop trigger: ", + "failGetTriggerDefinition": "Failed to get trigger definition: ", + "refreshTriggers": "Refresh Triggers", + "onTable": "on {{table}}", "objectSummary": "Oggetti", "databases": "Database", "failGetRoutineDefinition": "Impossibile recuperare la definizione della routine: ", @@ -177,7 +189,6 @@ "subtitle": "Connetti Tabularis a Claude Desktop, Cursor e altri", "description": "Il Model Context Protocol (MCP) permette agli assistenti AI (come Claude) di connettersi ai tuoi strumenti locali. Tabularis espone un server MCP che permette all'AI di leggere lo schema del database ed eseguire query in sicurezza.", "checking": "Verifica configurazione...", - "configPath": "File di Configurazione", "notFound": "File config non trovato (crealo manualmente)", "installed": "Installato", "install": "Installa Config", @@ -220,11 +231,9 @@ "noConnections": "Nessuna connessione attiva", "createFirst": "Crea la tua prima connessione", "active": "Attiva", - "sshEnabled": "Tunnel SSH abilitato", "disconnect": "Disconnetti", "connect": "Connetti", "edit": "Modifica", - "duplicate": "Duplica", "delete": "Elimina", "clone": "Clona", "confirmDelete": "Sei sicuro di voler eliminare questa connessione?", @@ -232,7 +241,6 @@ "failConnect": "Impossibile connettersi a {{name}}. Verifica le impostazioni o assicurati che il database sia in esecuzione.", "failDisconnect": "Impossibile disconnettersi dal database", "failDuplicate": "Impossibile duplicare la connessione", - "connecting": "Connessione in corso...", "open": "Aperta", "pluginDisabled": "Plugin disabilitato", "connectionCount": "{{count}} connessione/i", @@ -251,7 +259,6 @@ "accentColor": "Colore di accento", "customColor": "Personalizzato", "resetColor": "Ripristina predefinito", - "resetIcon": "Ripristina predefinito", "icon": "Icona", "tabs": { "default": "Predefinito", @@ -267,13 +274,14 @@ "chooseImage": "Scegli immagine…", "removeImage": "Rimuovi", "imageHint": "PNG, JPG, WebP o SVG · max 512 KB", - "errors": { - "invalidEmoji": "Inserisci esattamente un emoji", - "invalidHex": "Inserisci un colore hex valido come #1a2b3c" - } + "errors": {}, + "emojiSearch": "Search emoji…", + "iconNoResults": "No icons match.", + "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", + "iconSearch": "Search icons…", + "noPreview": "No preview" }, "settings": { - "title": "Impostazioni", "general": "Generali", "info": "Info", "dataEditor": "Editor Dati", @@ -295,8 +303,6 @@ "themeSelection": "Selezione Tema", "fontFamily": "Famiglia Font", "fonts": { - "system": "Sistema", - "systemDesc": "Usa il font di default del sistema", "custom": "Font Personalizzato", "customPlaceholder": "es. Comic Sans MS", "enterFontName": "Inserisci il nome del font sopra" @@ -327,17 +333,15 @@ "title": "config.json", "saveAndRestart": "Salva e Riavvia", "restartNow": "Riavvia Ora", - "restartLater": "Più tardi", "restartRequired": "È necessario un riavvio per applicare le modifiche.", - "restartMessage": "Il file di configurazione è stato salvato. Riavviare ora per applicare le modifiche?", - "invalidJson": "JSON non valido — correggi gli errori prima di salvare." + "restartMessage": "Il file di configurazione è stato salvato. Riavviare ora per applicare le modifiche?" }, "language": "Lingua", "languageDesc": "Scegli la tua lingua preferita. 'Auto' userà la lingua di sistema.", "auto": "Auto (Sistema)", - "english": "Inglese", - "italian": "Italiano", - "spanish": "Spagnolo", + "timezone": "Timezone", + "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", + "timezoneSearch": "Search timezones...", "projectStatus": "Stato del Progetto", "roadmapDesc": "Questo progetto è un Work In Progress (WIP). Le funzioni principali sono stabili, ma abbiamo grandi piani.", "support": "Supporta lo Sviluppo", @@ -491,15 +495,10 @@ "filterInstalled": "Installati", "filterUpdates": "Aggiornamenti", "searchNoResults": "Nessun plugin corrisponde alla ricerca.", - "version": "Versione", "requiresVersion": "Richiede Tabularis ≥ {{version}}", - "installedPlugins": "Plugin Installati", - "installedDesc": "Abilita o disabilita i driver database. I driver integrati non possono essere disabilitati.", "remove": "Rimuovi", "removeTitle": "Rimuovi Plugin", "confirmRemove": "Sei sicuro di voler rimuovere \"{{name}}\"? I file del plugin verranno eliminati.", - "enabled": "Abilitato", - "disabled": "Disabilitato", "installError": { "title": "Installazione fallita", "subtitle": "Si è verificato un errore durante l'installazione del plugin. Vedi i dettagli qui sotto.", @@ -570,7 +569,6 @@ "notOverridable": "Integrata, non personalizzabile", "pressKeys": "Premi la combinazione di tasti...", "notebookRunAll": "Esegui Tutte le Celle", - "categories_notebook": "Notebook", "pasteImportClipboard": "Importa dagli Appunti", "quickNavigator": "Navigatore rapido" }, @@ -580,44 +578,23 @@ "newVersionAvailable": "Nuova Versione Disponibile", "version": "Versione", "releaseNotes": "Note di Rilascio", - "downloads": "Download", - "download": "Scarica", "downloadAndInstall": "Scarica e Installa", "downloading": "Download in corso...", "installing": "Installazione in corso...", "installingMessage": "L'app si riavvierà automaticamente dopo l'installazione", "viewOnGitHub": "Visualizza su GitHub", "remindLater": "Ricordamelo Dopo", - "skipVersion": "Salta Questa Versione", - "checkingForUpdates": "Controllo aggiornamenti...", "upToDate": "Sei aggiornato", "updateAvailable": "La versione {{version}} è disponibile", "error": "Errore Aggiornamento", - "currentVersion": "Versione attuale", "managedByPackageManager": "Aggiornamenti gestiti da {{source}}", "managedByPackageManagerDesc": "Usa il tuo package manager per aggiornare Tabularis." }, "ai": { - "assist": "AI Assist", "explain": "Spiega", - "generateSql": "Genera SQL", - "generating": "Generazione...", - "explainQuery": "Spiegazione Query AI", - "queryLabel": "Query", - "explanationLabel": "Spiegazione", - "generatingExplanation": "Generazione spiegazione...", - "configRequired": "⚠️ Provider AI non configurato. Vai su Impostazioni > AI.", - "enterPrompt": "Descrivi la tua query in linguaggio naturale", - "promptPlaceholder": "es. Trova tutti gli utenti iscritti il mese scorso che hanno ordinato un piano 'Premium'...", - "readingSchema": "Lettura schema database...", - "schemaError": "Impossibile caricare il contesto dello schema del database", - "configError": "Configura il provider AI nelle Impostazioni e inserisci un prompt." + "generateSql": "Genera SQL" }, "newConnection": { - "titleNew": "Nuova Connessione", - "titleEdit": "Modifica Connessione", - "subtitle": "Configura le impostazioni di connessione al database", - "name": "Nome Connessione", "namePlaceholder": "Inserisci il nome della connessione", "nameRequired": "Il nome della connessione è richiesto", "dbNameRequired": "Il nome del database è richiesto", @@ -626,7 +603,6 @@ "port": "Porta", "username": "Nome utente", "password": "Password", - "passwordMissing": "Password mancante. Per favore reinseriscila.", "passwordPlaceholder": "Inserisci password", "usernamePlaceholder": "Inserisci nome utente", "filePath": "Percorso File", @@ -673,7 +649,12 @@ "prefer": "Preferito", "require": "Richiesto", "verify-ca": "Verifica CA", - "verify-full": "Verifica completa" + "verify-full": "Verifica completa", + "disabled": "Disabled", + "preferred": "Preferred", + "required": "Required", + "verify_ca": "Verify CA", + "verify_identity": "Verify Identity" }, "chooseContext": "Scegli un contesto...", "chooseK8s": "Scegli una connessione...", @@ -696,7 +677,20 @@ "selectK8sConnection": "Seleziona connessione K8s", "selectTypeFirst": "Seleziona prima contesto/namespace/tipo", "useK8s": "Usa Port-Forward Kubernetes", - "useK8sConnection": "Connessione salvata" + "useK8sConnection": "Connessione salvata", + "connectionString": "Connection String", + "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", + "general": "General", + "loadDatabasesHint": "Click Load Databases to fetch available databases.", + "noGeneralSettings": "No general settings available for this driver.", + "selectDatabasesHint": "Select the databases to include in this connection.", + "sshNotAvailable": "SSH is not available for this driver.", + "sslCa": "CA Certificate", + "sslCert": "Client Certificate", + "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", + "sslDescription": "Configure SSL/TLS for secure database connections (optional).", + "sslKey": "Client Key", + "unnamedConnection": "Unnamed connection" }, "sshConnections": { "title": "Connessioni SSH", @@ -724,52 +718,34 @@ "dataGrid": { "newRow": "NUOVA", "noData": "Nessun dato da visualizzare", - "editRow": "Modifica riga", "deleteRow": "Elimina riga", "deleteRows": "Elimina {{count}} righe", - "confirmDelete": "Sei sicuro di voler eliminare questa riga?", - "deleteTitle": "Elimina riga", "updateFailed": "Aggiornamento fallito: ", - "deleteFailed": "Eliminazione riga fallita: ", "null": "null", "sortByAsc": "Ordina per {{col}} ASC", "sortByDesc": "Ordina per {{col}} DESC", "clearSort": "Rimuovi ordinamento", "copyCell": "Copia cella", - "copyRow": "Copia riga", "copySelectedRows": "Copia riga/righe selezionate", "copyColumnName": "Copia nome colonna", "copyColumnNameQuoted": "Copia come `colonna`", "copyColumnNameTable": "Copia come tabella.colonna", - "copyCells": "Copia {{count}} celle", - "copyRows": "Copia {{count}} righe", "copied": "Copiato negli appunti", - "discardInsertion": "Clicca per scartare questa riga (rollback)", + "duplicateRow": "Duplicate Row", "revertSelected": "Ripristina selezionato", "setGenerate": "Imposta GENERATED", "setNull": "Imposta NULL", "setDefault": "Imposta DEFAULT", "setEmpty": "Imposta VUOTO", + "setServerNow": "Insert Current Timestamp", "previewReferenced": "Anteprima record correlato", "openReferenced": "Apri la riga referenziata in {{table}}" }, - "editRow": { - "title": "Modifica riga", - "save": "Salva modifiche", - "cancel": "Annulla", - "success": "Riga aggiornata con successo", - "failLoad": "Impossibile caricare lo schema per la modifica", - "failUpdate": "Aggiornamento riga fallito: ", - "loading": "Caricamento...", - "selectValue": "Seleziona valore...", - "noOptions": "Nessuna opzione trovata", - "current": "Attuale" - }, + "editRow": {}, "newRow": { "title": "Nuova riga", "insert": "Inserisci", "cancel": "Annulla", - "success": "Riga inserita con successo", "failInsert": "Inserimento riga fallito: ", "failLoad": "Caricamento schema fallito: ", "loading": "Caricamento...", @@ -790,7 +766,6 @@ "connected": "Connesso", "disconnected": "Disconnesso", "newRow": "Nuova riga", - "editing": "Modifica: {{table}}", "rowsRetrieved": "{{count}} righe recuperate", "autoPaginated": "Impaginazione automatica", "pageOf": "Pagina {{current}} di {{total}}", @@ -823,7 +798,8 @@ "tabSwitcher": { "title": "Tab Aperte", "hint": "Ctrl+Tab", - "tabs": "{{count}} tab", + "tabs_one": "{{count}} tab", + "tabs_other": "{{count}} tabs", "escHint": "Esc per chiudere" }, "quickNavigator": { @@ -858,13 +834,11 @@ "paramValuePlaceholder": "Valore (es. 'testo' o 123)", "failedCreateRow": "Impossibile creare nuova riga: ", "failedProcessInsertions": "Impossibile processare gli inserimenti: ", - "fieldRequired": "Questo campo è obbligatorio", "newNotebook": "Nuovo Notebook", "visualExplain": { "title": "Visual Explain", "buttonShort": "Piano Query", "loading": "Esecuzione EXPLAIN...", - "error": "Errore nell'esecuzione di EXPLAIN", "planningTime": "Pianificazione", "executionTime": "Esecuzione", "totalCost": "Costo Totale", @@ -880,7 +854,6 @@ "rawOutput": "Output Grezzo", "analyze": "Analizza", "analyzeWarning": "ANALYZE esegue la query. Usare con cautela su istruzioni che modificano dati.", - "notSupported": "EXPLAIN non supportato per questo tipo di connessione.", "notExplainable": "EXPLAIN è supportato solo per istruzioni DML (SELECT, INSERT, UPDATE, DELETE). Le istruzioni DDL come CREATE, DROP o ALTER non possono essere analizzate.", "contextMenuExplain": "Piano Query", "rerun": "Riesegui", @@ -910,8 +883,6 @@ "overview": "Panoramica", "showOverview": "Mostra panoramica", "hideOverview": "Nascondi panoramica", - "showNotes": "Mostra note", - "hideNotes": "Nascondi note", "postgresAnalyzeLegend1": "PostgreSQL ANALYZE include righe reali, tempi, cicli e contatori buffer quando disponibili.", "postgresAnalyzeLegend2": "Scostamenti elevati tra stima e reale indicano spesso statistiche non aggiornate o predicati difficili da modellare.", "postgresEstimateLegend1": "PostgreSQL senza ANALYZE mostra solo le stime del planner.", @@ -922,11 +893,6 @@ "mysqlEstimateLegend2": "Se il tempo manca, il server ha probabilmente restituito un piano solo stimato.", "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN è leggero e soprattutto strutturale.", "sqliteLegend2": "Costo, tempi e stime di righe spesso non sono disponibili come in PostgreSQL e MySQL.", - "copySnapshot": "Copia Snapshot", - "exportRaw": "Esporta Raw", - "snapshotCopied": "Snapshot dell'explain copiato negli appunti", - "rawExported": "Output raw dell'explain esportato", - "noRawOutput": "Nessun output raw dell'explain disponibile da esportare.", "aiAnalysis": "Analisi AI", "aiAnalysisTitle": "Analisi AI del Piano di Esecuzione", "aiAnalyzing": "Analisi del piano di esecuzione con AI...", @@ -952,8 +918,6 @@ "invalidFile": "Formato file notebook non valido", "importSuccess": "Notebook importato con successo", "exportSuccess": "Notebook esportato con successo", - "convertToConsole": "Converti in Console", - "runningAll": "Esecuzione di tutte le celle...", "cellResult": "{{count}} righe · {{time}}ms", "stopOnError": "Ferma su Errore", "stopOnErrorTooltip": "Ferma l'esecuzione quando una cella fallisce", @@ -980,8 +944,6 @@ "collapseAll": "Comprimi Tutto", "expandAll": "Espandi Tutto", "outline": "Sommario", - "aiGenerate": "Genera SQL con AI", - "aiExplain": "Spiega questa Query con AI", "cellNamePlaceholder": "Senza nome", "editCellName": "Modifica nome cella", "aiGenerateName": "Genera nome con AI", @@ -1007,13 +969,12 @@ "stopOnError": "Stop on error commutato", "other": "Notebook modificato" } - } + }, + "exportError": "Export failed" }, "querySelection": { "title": "Seleziona la query da eseguire", "queriesFound": "{{count}} query trovate", - "escToCancel": "Esc per annullare", - "numberHint": "Premi 1-9 per selezionare, frecce per navigare", "runAll": "Esegui tutte", "runSelected": "Esegui selezionate ({{count}})", "runSingle": "Esegui questa query", @@ -1029,8 +990,6 @@ "cancel": "annulla" }, "multiResult": { - "query": "Query {{index}}", - "summary": "{{total}} query: {{succeeded}} completate, {{failed}} fallite", "rerun": "Riesegui query", "close": "Chiudi tab", "rename": "Rinomina", @@ -1041,8 +1000,7 @@ "queryPrefix": "Query", "results": "Risultati", "collapseAll": "Comprimi tutto", - "expandAll": "Espandi tutto", - "collapsed": "Compresso" + "expandAll": "Espandi tutto" } }, "createTable": { @@ -1058,14 +1016,13 @@ "colNn": "NN", "colAi": "AI", "colDefault": "Default", - "showSql": "Mostra Anteprima SQL", - "hideSql": "Nascondi Anteprima SQL", "create": "Crea Tabella", "cancel": "Annulla", "nameRequired": "Il nome della tabella è richiesto", "colRequired": "È richiesta almeno una colonna", "failCreate": "Creazione tabella fallita: ", - "requiresExtension": "Richiede estensione: {{ext}}" + "requiresExtension": "Richiede estensione: {{ext}}", + "sqlPreview": "SQL Preview" }, "schema": { "title": "Schema: {{table}}", @@ -1075,7 +1032,8 @@ "colNullable": "Nullable", "colKey": "Chiave", "yes": "SÌ", - "no": "NO" + "no": "NO", + "close": "Close" }, "generateSQL": { "title": "SQL Generato: {{table}}", @@ -1106,8 +1064,6 @@ "cancel": "Annulla", "nameRequired": "Il nome della colonna è richiesto", "fail": "Fallito: ", - "noChanges": "Nessuna modifica rilevata", - "unsupported": "Driver non supportato", "pkNotSupported": "Questo driver supporta le chiavi primarie solo in fase di creazione della tabella", "requiresExtension": "Richiede estensione: {{ext}}" }, @@ -1133,15 +1089,13 @@ "sqlPreview": "Anteprima SQL", "create": "Crea Chiave Esterna", "cancel": "Annulla", - "colRequired": "Seleziona le colonne locali e riferite", - "tableRequired": "Seleziona una tabella riferita" + "nameRequired": "Name is required" }, "healthCheck": { "title": "Connessione Persa", "connectionLost": "Una connessione al database è stata persa" }, "erDiagram": { - "title": "Diagramma ER", "enterFullscreen": "Schermo Intero", "exitFullscreen": "Esci da Schermo Intero", "noConnection": "Nessun ID Connessione", @@ -1163,7 +1117,6 @@ "viewName": "Nome Vista", "viewNamePlaceholder": "es. utenti_attivi, riepilogo_ordini", "viewDefinition": "Definizione Vista (SQL)", - "definitionPlaceholder": "SELECT * FROM ...", "preview": "Anteprima", "runPreview": "Esegui Anteprima", "previewEmpty": "Clicca 'Esegui Anteprima' per vedere i risultati", @@ -1177,7 +1130,36 @@ "createSuccess": "Vista creata con successo", "alterSuccess": "Vista aggiornata con successo", "saveError": "Salvataggio vista fallito: ", - "confirmAlter": "Sei sicuro di voler modificare la vista \"{{view}}\"?" + "confirmAlter": "Sei sicuro di voler modificare la vista \"{{view}}\"?", + "alterView": "Alter View" + }, + "triggers": { + "createTrigger": "Create Trigger", + "editTrigger": "Edit Trigger", + "createSubtitle": "Create a new database trigger", + "editSubtitle": "Editing trigger: {{name}}", + "triggerName": "Trigger Name", + "triggerNamePlaceholder": "e.g. before_insert_user", + "tableName": "Table Name", + "tableNamePlaceholder": "e.g. users", + "timing": "Timing", + "events": "Events", + "body": "Trigger Body (SQL)", + "sqlPreview": "Generated SQL Preview", + "rawSql": "Raw SQL", + "guidedMode": "Guided", + "rawSqlMode": "Raw SQL", + "loading": "Loading trigger definition...", + "create": "Create Trigger", + "save": "Save Changes", + "sqlRequired": "Trigger SQL is required", + "failLoadDefinition": "Failed to load trigger definition: ", + "dropError": "Failed to drop existing trigger: ", + "saveError": "Failed to save trigger: ", + "createSuccess": "Trigger created successfully", + "updateSuccess": "Trigger updated successfully", + "recreateTrigger": "Recreate Trigger", + "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" }, "community": { "title": "Unisciti alla Community", @@ -1209,12 +1191,10 @@ "selectAll": "Seleziona Tutto", "deselectAll": "Deseleziona Tutto", "export": "Esporta", - "exporting": "Esportazione...", "success": "Database esportato con successo", "failure": "Esportazione fallita: ", "errorNoOption": "Seleziona almeno Struttura o Dati", "errorNoTables": "Seleziona almeno una tabella", - "importStarted": "Importazione avviata...", "importSuccess": "File SQL eseguito con successo", "importFailure": "Importazione fallita: ", "importCancelled": "Importazione annullata", @@ -1228,7 +1208,6 @@ "sqlMode": "Modalità SQL", "wktMode": "Modalità WKT", "sqlHelper": "Inserisci una funzione SQL completa (es: ST_GeomFromText('POINT(30 40)', 4326))", - "wktHelper": "Inserisci formato WKT (es: POINT(30 40))", "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", "wktPlaceholder": "POINT(30 40)", "toggleTooltip": "Funzioni SQL" @@ -1244,12 +1223,9 @@ "raw": "Grezzo" }, "expand": "Espandi", - "collapse": "Comprimi", "search": "Cerca", - "copyPath": "Copia percorso", - "copyValue": "Copia valore", - "addItem": "Aggiungi elemento", - "removeItem": "Rimuovi elemento" + "diff": "Diff", + "sideBySide": "Side by side" }, "jsonViewer": { "close": "Chiudi", @@ -1259,12 +1235,21 @@ "expand": "Espandi/comprimi albero JSON", "openViewer": "Apri visualizzatore JSON" }, + "textCell": { + "expand": "Toggle inline text editor" + }, + "textInput": { + "diff": "Diff", + "sideBySide": "Side by side" + }, + "textViewer": { + "save": "Save" + }, "rowEditor": { "title": "Modifica Riga", "subtitle": "Riga #{{row}}", - "save": "Salva Modifiche", - "cancel": "Annulla", - "enterValue": "Inserisci valore..." + "enterValue": "Inserisci valore...", + "resize": "Resize sidebar" }, "contextMenu": { "openSidebar": "Apri Barra Laterale", @@ -1359,6 +1344,22 @@ } } }, + "groups": { + "newGroup": "New Group", + "rename": "Rename", + "delete": "Delete", + "deleteConfirm": "Are you sure you want to delete group \"{{name}}\"? Connections in this group will be moved to ungrouped.", + "deleteTitle": "Delete Group", + "connection": "connection", + "connections": "connections", + "ungrouped": "Ungrouped", + "removeFromGroup": "Remove from Group", + "groupName": "Group name", + "createError": "Failed to create group", + "deleteError": "Failed to delete group", + "moveError": "Failed to move connection", + "renameError": "Failed to rename group" + }, "queryModal": { "database": "Database", "noDatabase": "Nessun database" @@ -1482,7 +1483,9 @@ "write": "Scrittura", "ddl": "DDL", "unknown": "Sconosciuto" - } + }, + "exportCsv": "Export CSV", + "exportJson": "Export JSON" }, "aiApproval": { "title": "L'AI vuole eseguire una scrittura sul database", @@ -1525,7 +1528,6 @@ "port": "Porta container", "test": "Test", "testing": "Test in corso...", - "validationFailed": "Validazione fallita", "errors": { "nameRequired": "Il nome della connessione è obbligatorio", "contextRequired": "Il contesto Kubernetes è obbligatorio", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 313fb88b..868d2cc3 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -29,15 +29,14 @@ "cancel": "キャンセル", "delete": "削除", "edit": "編集", - "clone": "複製", - "connect": "接続", - "disconnect": "切断", "loading": "読み込み中...", "search": "検索...", "noResults": "結果が見つかりません", "error": "エラー", "success": "成功", - "ok": "OK" + "ok": "OK", + "clear": "Clear", + "refresh": "Refresh" }, "sidebar": { "connections": "接続", @@ -190,7 +189,6 @@ "subtitle": "Tabularis を Claude Desktop、Cursor などに接続", "description": "Model Context Protocol (MCP) を使うと、AI アシスタント (Claude など) がローカルツールに接続できます。Tabularis は MCP サーバーを公開しており、AI がデータベーススキーマを読み取り、クエリを安全に実行できるようにします。", "checking": "設定を確認中...", - "configPath": "設定ファイル", "notFound": "設定ファイルが見つかりません (手動で作成してください)", "installed": "インストール済み", "install": "設定をインストール", @@ -233,11 +231,9 @@ "noConnections": "アクティブな接続はありません", "createFirst": "最初の接続を作成", "active": "アクティブ", - "sshEnabled": "SSH トンネル有効", "disconnect": "切断", "connect": "接続", "edit": "編集", - "duplicate": "複製", "delete": "削除", "clone": "複製", "confirmDelete": "この接続を削除してもよろしいですか?", @@ -245,7 +241,6 @@ "failConnect": "{{name}} への接続に失敗しました。設定を確認するか、データベースが稼働していることを確認してください。", "failDisconnect": "データベースからの切断に失敗しました", "failDuplicate": "接続の複製に失敗しました", - "connecting": "接続中...", "open": "開く", "pluginDisabled": "プラグインが無効", "connectionCount": "{{count}} 件の接続", @@ -264,7 +259,6 @@ "accentColor": "アクセントカラー", "customColor": "カスタム", "resetColor": "ドライバーの初期設定に戻す", - "resetIcon": "ドライバーの初期設定に戻す", "icon": "アイコン", "tabs": { "default": "デフォルト", @@ -272,16 +266,22 @@ "emoji": "絵文字", "image": "画像" }, + "previewLabel": "Preview", + "defaultHint": "Using the driver's default icon.", + "emojiSelected": "Selected emoji", + "emojiHint": "Click another emoji below to change.", + "removeEmoji": "Clear", "chooseImage": "画像を選択…", "removeImage": "削除", "imageHint": "PNG、JPG、WebP または SVG · 最大 512 KB", - "errors": { - "invalidEmoji": "絵文字を 1 つだけ入力してください", - "invalidHex": "#1a2b3c のような有効な 16 進カラーを入力してください" - } + "errors": {}, + "emojiSearch": "Search emoji…", + "iconNoResults": "No icons match.", + "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", + "iconSearch": "Search icons…", + "noPreview": "No preview" }, "settings": { - "title": "設定", "general": "一般", "info": "情報", "dataEditor": "データエディタ", @@ -296,13 +296,13 @@ "delimiterSemicolon": "セミコロン (;)", "delimiterTab": "タブ", "delimiterPipe": "パイプ (|)", + "detectJsonInTextColumns": "Detect JSON in text columns", + "detectJsonInTextColumnsDesc": "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.", "appearance": "外観", "localization": "ローカライズ", "themeSelection": "テーマ選択", "fontFamily": "フォントファミリー", "fonts": { - "system": "システム既定", - "systemDesc": "OS の既定フォントを使用します", "custom": "カスタムフォント", "customPlaceholder": "例: Comic Sans MS", "enterFontName": "上にフォント名を入力してください" @@ -333,10 +333,8 @@ "title": "config.json", "saveAndRestart": "保存して再起動", "restartNow": "今すぐ再起動", - "restartLater": "あとで", "restartRequired": "変更を反映するには再起動が必要です。", - "restartMessage": "設定ファイルを保存しました。変更を反映するために今すぐ再起動しますか?", - "invalidJson": "JSON が不正です — 保存前にエラーを修正してください。" + "restartMessage": "設定ファイルを保存しました。変更を反映するために今すぐ再起動しますか?" }, "language": "言語", "languageDesc": "使用する言語を選択します。「自動」はシステムの言語を使用します。", @@ -344,9 +342,6 @@ "timezone": "タイムゾーン", "timezoneDesc": "タイムスタンプの表示とエクスポートに使用するタイムゾーン。「自動」はシステムのタイムゾーンに従います。", "timezoneSearch": "タイムゾーンを検索...", - "english": "英語", - "italian": "イタリア語", - "spanish": "スペイン語", "projectStatus": "プロジェクトの状態", "roadmapDesc": "このプロジェクトは現在開発中 (WIP) です。主要機能は安定していますが、より大きな構想も進めています。", "support": "開発をサポート", @@ -500,15 +495,10 @@ "filterInstalled": "インストール済み", "filterUpdates": "アップデート", "searchNoResults": "検索に一致するプラグインがありません。", - "version": "バージョン", "requiresVersion": "Tabularis ≥ {{version}} が必要です", - "installedPlugins": "インストール済みプラグイン", - "installedDesc": "データベースドライバを有効化・無効化します。組み込みドライバは無効化できません。", "remove": "削除", "removeTitle": "プラグインを削除", "confirmRemove": "「{{name}}」を削除してもよろしいですか?プラグインファイルが削除されます。", - "enabled": "有効", - "disabled": "無効", "installError": { "title": "インストール失敗", "subtitle": "プラグインのインストール中にエラーが発生しました。詳細は下記を参照してください。", @@ -579,7 +569,6 @@ "notOverridable": "組み込み、カスタマイズ不可", "pressKeys": "キーの組み合わせを押してください...", "notebookRunAll": "すべてのセルを実行", - "categories_notebook": "ノートブック", "pasteImportClipboard": "クリップボードからインポート", "quickNavigator": "クイックナビゲーター" }, @@ -589,44 +578,23 @@ "newVersionAvailable": "新しいバージョンが利用可能", "version": "バージョン", "releaseNotes": "リリースノート", - "downloads": "ダウンロード", - "download": "ダウンロード", "downloadAndInstall": "ダウンロードしてインストール", "downloading": "ダウンロード中...", "installing": "インストール中...", "installingMessage": "インストール後にアプリは自動的に再起動します", "viewOnGitHub": "GitHub で表示", "remindLater": "あとで通知", - "skipVersion": "このバージョンをスキップ", - "checkingForUpdates": "アップデートを確認中...", "upToDate": "最新の状態です", "updateAvailable": "バージョン {{version}} が利用可能です", "error": "アップデートエラー", - "currentVersion": "現在のバージョン", "managedByPackageManager": "アップデートは {{source}} によって管理されています", "managedByPackageManagerDesc": "Tabularis のアップデートにはパッケージマネージャを使用してください。" }, "ai": { - "assist": "AI Assist", "explain": "Explain", - "generateSql": "SQL を生成", - "generating": "生成中...", - "explainQuery": "AI によるクエリ説明", - "queryLabel": "クエリ", - "explanationLabel": "説明", - "generatingExplanation": "説明を生成中...", - "configRequired": "⚠️ AI プロバイダが未設定です。設定 > AI に移動してください。", - "enterPrompt": "クエリを自然言語で記述してください", - "promptPlaceholder": "例: 先月登録し、「Premium」プランを購入したすべてのユーザーを検索...", - "readingSchema": "データベーススキーマを読み込み中...", - "schemaError": "データベーススキーマのコンテキスト読み込みに失敗しました", - "configError": "設定で AI プロバイダを構成し、プロンプトを入力してください。" + "generateSql": "SQL を生成" }, "newConnection": { - "titleNew": "新規接続", - "titleEdit": "接続を編集", - "subtitle": "データベース接続の設定を構成します", - "name": "接続名", "namePlaceholder": "接続名を入力", "nameRequired": "接続名は必須です", "dbNameRequired": "データベース名は必須です", @@ -635,7 +603,6 @@ "port": "ポート", "username": "ユーザー名", "password": "パスワード", - "passwordMissing": "パスワードが未入力または未設定です。再入力してください。", "passwordPlaceholder": "パスワードを入力", "usernamePlaceholder": "ユーザー名を入力", "filePath": "ファイルパス", @@ -682,7 +649,12 @@ "prefer": "優先", "require": "必須", "verify-ca": "CAを検証", - "verify-full": "完全検証" + "verify-full": "完全検証", + "disabled": "Disabled", + "preferred": "Preferred", + "required": "Required", + "verify_ca": "Verify CA", + "verify_identity": "Verify Identity" }, "chooseContext": "コンテキストを選択...", "chooseK8s": "接続を選択...", @@ -705,7 +677,20 @@ "selectK8sConnection": "K8s 接続を選択", "selectTypeFirst": "先にコンテキスト/ネームスペース/タイプを選択してください", "useK8s": "Kubernetes ポートフォワードを使用", - "useK8sConnection": "保存された接続" + "useK8sConnection": "保存された接続", + "connectionString": "Connection String", + "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", + "general": "General", + "loadDatabasesHint": "Click Load Databases to fetch available databases.", + "noGeneralSettings": "No general settings available for this driver.", + "selectDatabasesHint": "Select the databases to include in this connection.", + "sshNotAvailable": "SSH is not available for this driver.", + "sslCa": "CA Certificate", + "sslCert": "Client Certificate", + "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", + "sslDescription": "Configure SSL/TLS for secure database connections (optional).", + "sslKey": "Client Key", + "unnamedConnection": "Unnamed connection" }, "sshConnections": { "title": "SSH 接続", @@ -731,28 +716,21 @@ "savedInKeychain": "パスワードをシステムのキーチェーンに保存しました" }, "dataGrid": { + "newRow": "NEW", "noData": "表示するデータがありません", - "editRow": "行を編集", "deleteRow": "行を削除", "deleteRows": "{{count}} 行を削除", - "confirmDelete": "この行を削除してもよろしいですか?", - "deleteTitle": "行を削除", "updateFailed": "更新に失敗しました: ", - "deleteFailed": "行の削除に失敗しました: ", "null": "null", "sortByAsc": "{{col}} を昇順で並べ替え", "sortByDesc": "{{col}} を降順で並べ替え", "clearSort": "並べ替えを解除", "copyCell": "セルをコピー", - "copyRow": "行をコピー", "copySelectedRows": "選択した行をコピー", "copyColumnName": "カラム名をコピー", "copyColumnNameQuoted": "`column` 形式でコピー", "copyColumnNameTable": "table.column 形式でコピー", - "copyCells": "{{count}} 個のセルをコピー", - "copyRows": "{{count}} 行をコピー", "copied": "クリップボードにコピーしました", - "discardInsertion": "クリックしてこの行を破棄 (ロールバック)", "duplicateRow": "行を複製", "revertSelected": "選択を元に戻す", "setGenerate": "GENERATED に設定", @@ -763,23 +741,11 @@ "previewReferenced": "関連レコードをプレビュー", "openReferenced": "{{table}} で参照行を開く" }, - "editRow": { - "title": "行を編集", - "save": "変更を保存", - "cancel": "キャンセル", - "success": "行を正常に更新しました", - "failLoad": "編集用のスキーマ読み込みに失敗しました", - "failUpdate": "行の更新に失敗しました: ", - "loading": "読み込み中...", - "selectValue": "値を選択...", - "noOptions": "選択肢が見つかりません", - "current": "現在" - }, + "editRow": {}, "newRow": { "title": "新規行", "insert": "挿入", "cancel": "キャンセル", - "success": "行を正常に挿入しました", "failInsert": "行の挿入に失敗しました: ", "failLoad": "スキーマの読み込みに失敗しました: ", "loading": "読み込み中...", @@ -791,26 +757,6 @@ "auto": "自動" }, "editor": { - "quickNavigator": { - "placeholder": "テーブル、ビュー、ルーチン、トリガーを検索...", - "noResults": "一致する要素が見つかりません", - "count_one": "1件", - "count_other": "{{count}}件", - "navigationHint": "↑↓で移動、Enterで開く", - "escHint": "Escで閉じる", - "type_table": "テーブル", - "type_view": "ビュー", - "type_routine": "ルーチン", - "type_trigger": "トリガー", - "actions": { - "inspect": "構造を表示", - "newConsole": "新規コンソール", - "generateSql": "SQLテンプレートを生成", - "countRows": "行数をカウント", - "query": "SELECTクエリを実行", - "copyName": "名前をコピー" - } - }, "noTabs": "この接続に対して開いているタブはありません。", "newConsole": "新規コンソール", "noActiveSession": "アクティブなセッションがありません。接続を選択してください。", @@ -820,7 +766,6 @@ "connected": "接続済み", "disconnected": "切断済み", "newRow": "新規行", - "editing": "編集中: {{table}}", "rowsRetrieved": "{{count}} 行を取得しました", "autoPaginated": "自動ページング", "pageOf": "{{current}} / {{total}} ページ", @@ -853,9 +798,30 @@ "tabSwitcher": { "title": "開いているタブ", "hint": "Ctrl+Tab", - "tabs": "{{count}} タブ", + "tabs_one": "{{count}} tab", + "tabs_other": "{{count}} tabs", "escHint": "Esc で閉じる" }, + "quickNavigator": { + "placeholder": "テーブル、ビュー、ルーチン、トリガーを検索...", + "noResults": "一致する要素が見つかりません", + "count_one": "1件", + "count_other": "{{count}}件", + "navigationHint": "↑↓で移動、Enterで開く", + "escHint": "Escで閉じる", + "type_table": "テーブル", + "type_view": "ビュー", + "type_routine": "ルーチン", + "type_trigger": "トリガー", + "actions": { + "inspect": "構造を表示", + "newConsole": "新規コンソール", + "generateSql": "SQLテンプレートを生成", + "countRows": "行数をカウント", + "query": "SELECTクエリを実行", + "copyName": "名前をコピー" + } + }, "submitChanges": "変更を送信", "rollbackChanges": "変更をロールバック", "applyToAll": "すべてに適用", @@ -868,13 +834,11 @@ "paramValuePlaceholder": "値 (例: 'text' や 123)", "failedCreateRow": "新規行の作成に失敗しました: ", "failedProcessInsertions": "挿入の処理に失敗しました: ", - "fieldRequired": "この項目は必須です", "newNotebook": "新規ノートブック", "visualExplain": { "title": "ビジュアル Explain", "buttonShort": "実行計画", "loading": "EXPLAIN を実行中...", - "error": "EXPLAIN の実行に失敗しました", "planningTime": "プランニング", "executionTime": "実行", "totalCost": "総コスト", @@ -890,7 +854,6 @@ "rawOutput": "生出力", "analyze": "分析", "analyzeWarning": "ANALYZE はクエリを実行します。データを変更するステートメントでは注意して使用してください。", - "notSupported": "この接続タイプでは EXPLAIN はサポートされていません。", "notExplainable": "EXPLAIN は DML ステートメント (SELECT, INSERT, UPDATE, DELETE) のみサポートされます。CREATE、DROP、ALTER などの DDL は説明できません。", "contextMenuExplain": "実行計画", "rerun": "再実行", @@ -920,8 +883,6 @@ "overview": "概要", "showOverview": "概要を表示", "hideOverview": "概要を非表示", - "showNotes": "補足を表示", - "hideNotes": "補足を非表示", "postgresAnalyzeLegend1": "PostgreSQL の ANALYZE では、利用可能な場合は実行行数、時間、ループ、バッファカウンタが含まれます。", "postgresAnalyzeLegend2": "大きな推定乖離は通常、古い統計やプランナーがモデル化しきれない述語を示します。", "postgresEstimateLegend1": "ANALYZE なしの PostgreSQL はプランナーの推定のみを表示します。", @@ -932,11 +893,6 @@ "mysqlEstimateLegend2": "タイミングが欠落している場合、サーバーは推定のみのプランを返している可能性があります。", "sqliteLegend1": "SQLite の EXPLAIN QUERY PLAN は軽量で、主に構造情報のみを提供します。", "sqliteLegend2": "コスト、タイミング、行数推定は PostgreSQL や MySQL と比べて得られないことが多いです。", - "copySnapshot": "スナップショットをコピー", - "exportRaw": "生データをエクスポート", - "snapshotCopied": "Explain スナップショットをクリップボードにコピーしました", - "rawExported": "生の Explain 出力をエクスポートしました", - "noRawOutput": "エクスポート可能な生の Explain 出力がありません。", "aiAnalysis": "AI 分析", "aiAnalysisTitle": "AI によるクエリ計画分析", "aiAnalyzing": "AI でクエリ計画を分析中...", @@ -962,8 +918,6 @@ "invalidFile": "不正なノートブックファイル形式です", "importSuccess": "ノートブックを正常にインポートしました", "exportSuccess": "ノートブックを正常にエクスポートしました", - "convertToConsole": "コンソールに変換", - "runningAll": "すべてのセルを実行中...", "cellResult": "{{count}} 行 · {{time}}ms", "stopOnError": "エラー時に停止", "stopOnErrorTooltip": "セルが失敗したら実行を停止します", @@ -990,8 +944,6 @@ "collapseAll": "すべて折りたたむ", "expandAll": "すべて展開", "outline": "アウトライン", - "aiGenerate": "AI で SQL を生成", - "aiExplain": "このクエリを AI で説明", "cellNamePlaceholder": "無題", "editCellName": "セル名を編集", "aiGenerateName": "AI で名前を生成", @@ -1017,13 +969,12 @@ "stopOnError": "エラー時に停止を切り替え", "other": "ノートブックを編集" } - } + }, + "exportError": "Export failed" }, "querySelection": { "title": "実行するクエリを選択", "queriesFound": "{{count}} 件のクエリが見つかりました", - "escToCancel": "Esc でキャンセル", - "numberHint": "1〜9 で選択、矢印キーで移動", "runAll": "すべて実行", "runSelected": "選択したものを実行 ({{count}})", "runSingle": "このクエリを実行", @@ -1039,8 +990,6 @@ "cancel": "キャンセル" }, "multiResult": { - "query": "クエリ {{index}}", - "summary": "{{total}} 件のクエリ: {{succeeded}} 件成功、{{failed}} 件失敗", "rerun": "クエリを再実行", "close": "タブを閉じる", "rename": "名前を変更", @@ -1051,8 +1000,7 @@ "queryPrefix": "クエリ", "results": "結果", "collapseAll": "すべて折りたたむ", - "expandAll": "すべて展開", - "collapsed": "折りたたみ中" + "expandAll": "すべて展開" } }, "createTable": { @@ -1068,14 +1016,13 @@ "colNn": "NN", "colAi": "AI", "colDefault": "デフォルト", - "showSql": "SQL プレビューを表示", - "hideSql": "SQL プレビューを非表示", "create": "テーブルを作成", "cancel": "キャンセル", "nameRequired": "テーブル名は必須です", "colRequired": "少なくとも 1 つのカラムが必要です", "failCreate": "テーブルの作成に失敗しました: ", - "requiresExtension": "拡張機能が必要: {{ext}}" + "requiresExtension": "拡張機能が必要: {{ext}}", + "sqlPreview": "SQL Preview" }, "schema": { "title": "スキーマ: {{table}}", @@ -1085,7 +1032,8 @@ "colNullable": "NULL 許可", "colKey": "キー", "yes": "はい", - "no": "いいえ" + "no": "いいえ", + "close": "Close" }, "generateSQL": { "title": "生成された SQL: {{table}}", @@ -1116,8 +1064,6 @@ "cancel": "キャンセル", "nameRequired": "カラム名は必須です", "fail": "失敗: ", - "noChanges": "変更は検出されませんでした", - "unsupported": "サポートされていないドライバ", "pkNotSupported": "このドライバはテーブル作成時のみ主キーをサポートします", "requiresExtension": "拡張機能が必要: {{ext}}" }, @@ -1143,15 +1089,13 @@ "sqlPreview": "SQL プレビュー", "create": "外部キーを作成", "cancel": "キャンセル", - "colRequired": "ローカルカラムと参照カラムを選択してください", - "tableRequired": "参照テーブルを選択してください" + "nameRequired": "Name is required" }, "healthCheck": { "title": "接続が失われました", "connectionLost": "データベース接続が失われました" }, "erDiagram": { - "title": "ER 図", "enterFullscreen": "フルスクリーン", "exitFullscreen": "フルスクリーンを終了", "noConnection": "接続 ID がありません", @@ -1173,7 +1117,6 @@ "viewName": "ビュー名", "viewNamePlaceholder": "例: active_users, order_summary", "viewDefinition": "ビュー定義 (SQL)", - "definitionPlaceholder": "SELECT * FROM ...", "preview": "プレビュー", "runPreview": "プレビューを実行", "previewEmpty": "「プレビューを実行」をクリックすると結果が表示されます", @@ -1187,7 +1130,8 @@ "createSuccess": "ビューを正常に作成しました", "alterSuccess": "ビューを正常に更新しました", "saveError": "ビューの保存に失敗しました: ", - "confirmAlter": "ビュー「{{view}}」を変更してもよろしいですか?" + "confirmAlter": "ビュー「{{view}}」を変更してもよろしいですか?", + "alterView": "Alter View" }, "triggers": { "createTrigger": "トリガーを作成", @@ -1247,12 +1191,10 @@ "selectAll": "すべて選択", "deselectAll": "すべて解除", "export": "エクスポート", - "exporting": "エクスポート中...", "success": "データベースを正常にエクスポートしました", "failure": "エクスポートに失敗しました: ", "errorNoOption": "構造かデータのいずれかを選択してください", "errorNoTables": "少なくとも 1 つのテーブルを選択してください", - "importStarted": "インポートを開始しました...", "importSuccess": "SQL ファイルを正常に実行しました", "importFailure": "インポートに失敗しました: ", "importCancelled": "インポートをキャンセルしました", @@ -1266,7 +1208,6 @@ "sqlMode": "SQL モード", "wktMode": "WKT モード", "sqlHelper": "完全な SQL 関数を入力してください (例: ST_GeomFromText('POINT(30 40)', 4326))", - "wktHelper": "WKT 形式を入力してください (例: POINT(30 40))", "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", "wktPlaceholder": "POINT(30 40)", "toggleTooltip": "SQL 関数" @@ -1275,17 +1216,44 @@ "placeholder": "JSON を入力...", "format": "整形", "valid": "有効な JSON", - "invalid": "無効な JSON" + "invalid": "無効な JSON", + "mode": { + "code": "Code", + "tree": "Tree", + "raw": "Raw" + }, + "expand": "Expand", + "search": "Search", + "diff": "Diff", + "sideBySide": "Side by side" + }, + "jsonViewer": { + "close": "Close", + "save": "Save" + }, + "jsonCell": { + "expand": "Toggle inline JSON tree", + "openViewer": "Open JSON viewer" + }, + "textCell": { + "expand": "Toggle inline text editor" + }, + "textInput": { + "diff": "Diff", + "sideBySide": "Side by side" + }, + "textViewer": { + "save": "Save" }, "rowEditor": { "title": "行を編集", "subtitle": "行 #{{row}}", - "save": "変更を保存", - "cancel": "キャンセル", - "enterValue": "値を入力..." + "enterValue": "値を入力...", + "resize": "Resize sidebar" }, "contextMenu": { - "openSidebar": "サイドバーエディタで開く" + "openSidebar": "サイドバーエディタで開く", + "openJsonEditor": "Open in JSON Editor" }, "blobInput": { "noData": "BLOB データなし", @@ -1377,9 +1345,7 @@ } }, "groups": { - "title": "グループ", "newGroup": "新規グループ", - "createGroup": "グループを作成", "rename": "名前を変更", "delete": "削除", "deleteConfirm": "グループ「{{name}}」を削除してもよろしいですか?このグループ内の接続は未分類に移動されます。", @@ -1387,13 +1353,12 @@ "connection": "接続", "connections": "接続", "ungrouped": "未分類", - "moveToGroup": "グループに移動", "removeFromGroup": "グループから削除", - "noGroups": "グループはまだありません", - "createFirst": "最初のグループを作成して接続を整理しましょう", "groupName": "グループ名", - "dragHint": "接続をここにドラッグ", - "createError": "グループの作成に失敗しました" + "createError": "グループの作成に失敗しました", + "deleteError": "Failed to delete group", + "moveError": "Failed to move connection", + "renameError": "Failed to rename group" }, "queryModal": { "database": "データベース", @@ -1518,7 +1483,9 @@ "write": "書き込み", "ddl": "DDL", "unknown": "不明" - } + }, + "exportCsv": "Export CSV", + "exportJson": "Export JSON" }, "aiApproval": { "title": "AI がデータベース書き込みを要求しています", @@ -1561,7 +1528,6 @@ "port": "コンテナポート", "test": "テスト", "testing": "テスト中...", - "validationFailed": "検証に失敗しました", "errors": { "nameRequired": "接続名は必須です", "contextRequired": "Kubernetes コンテキストは必須です", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 3d2f3520..91323ff6 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -29,15 +29,14 @@ "cancel": "Отменить", "delete": "Удалить", "edit": "Изменить", - "clone": "Клонировать", - "connect": "Подключиться", - "disconnect": "Отключиться", "loading": "Загрузка...", "search": "Поиск...", "noResults": "Ничего не найдено", "error": "Ошибка", "success": "Готово", - "ok": "ОК" + "ok": "ОК", + "clear": "Clear", + "refresh": "Refresh" }, "sidebar": { "connections": "Подключения", @@ -190,7 +189,6 @@ "subtitle": "Подключить Tabularis к Claude Desktop, Cursor и другим клиентам", "description": "Model Context Protocol (MCP) позволяет AI-ассистентам (например, Claude) подключаться к локальным инструментам. Tabularis предоставляет MCP-сервер, через который AI читает схему базы данных и выполняет запросы.", "checking": "Проверка конфигурации...", - "configPath": "Файл конфигурации", "notFound": "Файл конфигурации не найден (создайте вручную)", "installed": "Установлено", "install": "Установить конфигурацию", @@ -233,11 +231,9 @@ "noConnections": "Нет активных подключений", "createFirst": "Создайте первое подключение", "active": "Активно", - "sshEnabled": "SSH-туннель включён", "disconnect": "Отключиться", "connect": "Подключиться", "edit": "Изменить", - "duplicate": "Дублировать", "delete": "Удалить", "clone": "Клонировать", "confirmDelete": "Удалить это подключение?", @@ -245,13 +241,8 @@ "failConnect": "Не удалось подключиться к {{name}}. Проверьте настройки или убедитесь, что база данных запущена.", "failDisconnect": "Не удалось отключиться от базы данных", "failDuplicate": "Не удалось дублировать подключение", - "connecting": "Подключение...", "open": "Открыть", "pluginDisabled": "Плагин отключён", - "connectionCount_one": "{{count}} подключение", - "connectionCount_few": "{{count}} подключения", - "connectionCount_many": "{{count}} подключений", - "connectionCount_other": "{{count}} подключения", "noConnectionsHint": "Создайте первое подключение, чтобы начать работу.", "searchPlaceholder": "Поиск подключений...", "noSearchResults": "Подключения по запросу \"{{query}}\" не найдены", @@ -260,10 +251,40 @@ "export": "Экспортировать подключения", "import": "Импортировать подключения", "exportTitle": "Экспорт подключений", - "exportWarning": "Экспортируемый файл будет содержать пароли к базам данных и SSH в открытом виде. Храните его в надёжном месте!" + "exportWarning": "Экспортируемый файл будет содержать пароли к базам данных и SSH в открытом виде. Храните его в надёжном месте!", + "connectionCount_one": "{{count}} подключение", + "connectionCount_few": "{{count}} подключения", + "connectionCount_many": "{{count}} подключений", + "connectionCount_other": "{{count}} подключения" + }, + "connectionAppearance": { + "section": "Appearance", + "accentColor": "Accent color", + "customColor": "Custom", + "resetColor": "Reset to driver default", + "icon": "Icon", + "tabs": { + "default": "Default", + "pack": "Icon", + "emoji": "Emoji", + "image": "Image" + }, + "previewLabel": "Preview", + "defaultHint": "Using the driver's default icon.", + "emojiSelected": "Selected emoji", + "emojiHint": "Click another emoji below to change.", + "removeEmoji": "Clear", + "chooseImage": "Choose image…", + "removeImage": "Remove", + "imageHint": "PNG, JPG, WebP or SVG · max 512 KB", + "errors": {}, + "emojiSearch": "Search emoji…", + "iconNoResults": "No icons match.", + "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", + "iconSearch": "Search icons…", + "noPreview": "No preview" }, "settings": { - "title": "Настройки", "general": "Общие", "info": "Информация", "dataEditor": "Редактор данных", @@ -285,8 +306,6 @@ "themeSelection": "Выбор темы", "fontFamily": "Шрифт", "fonts": { - "system": "Системный по умолчанию", - "systemDesc": "Использует системный шрифт ОС", "custom": "Пользовательский шрифт", "customPlaceholder": "например, Comic Sans MS", "enterFontName": "Введите название шрифта выше" @@ -317,17 +336,15 @@ "title": "config.json", "saveAndRestart": "Сохранить и перезапустить", "restartNow": "Перезапустить сейчас", - "restartLater": "Позже", "restartRequired": "Изменения вступят в силу после перезапуска.", - "restartMessage": "Файл конфигурации сохранён. Перезапустить сейчас?", - "invalidJson": "Некорректный JSON — исправьте ошибки перед сохранением." + "restartMessage": "Файл конфигурации сохранён. Перезапустить сейчас?" }, "language": "Язык", "languageDesc": "Выберите язык интерфейса. «Авто» использует язык системы.", "auto": "Авто (системный)", - "english": "English", - "italian": "Italiano", - "spanish": "Español", + "timezone": "Timezone", + "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", + "timezoneSearch": "Search timezones...", "projectStatus": "Статус проекта", "roadmapDesc": "Проект находится в активной разработке (WIP). Основные функции стабильны, впереди много интересного.", "support": "Поддержать разработку", @@ -481,15 +498,10 @@ "filterInstalled": "Установленные", "filterUpdates": "Обновления", "searchNoResults": "Плагины не найдены.", - "version": "Версия", "requiresVersion": "Требуется Tabularis ≥ {{version}}", - "installedPlugins": "Установленные плагины", - "installedDesc": "Включайте или отключайте драйверы баз данных. Встроенные драйверы нельзя отключить.", "remove": "Удалить", "removeTitle": "Удалить плагин", "confirmRemove": "Удалить «{{name}}»? Файлы плагина будут удалены.", - "enabled": "Включён", - "disabled": "Отключён", "installError": { "title": "Ошибка установки", "subtitle": "Ошибка при установке плагина. Подробности ниже.", @@ -560,7 +572,6 @@ "notOverridable": "Встроенное, не настраивается", "pressKeys": "Нажмите сочетание клавиш...", "notebookRunAll": "Выполнить все ячейки", - "categories_notebook": "Ноутбук", "pasteImportClipboard": "Импортировать из буфера обмена", "quickNavigator": "Быстрый навигатор" }, @@ -570,44 +581,23 @@ "newVersionAvailable": "Доступна новая версия", "version": "Версия", "releaseNotes": "Что нового", - "downloads": "Загрузки", - "download": "Скачать", "downloadAndInstall": "Скачать и установить", "downloading": "Загрузка...", "installing": "Установка...", "installingMessage": "Приложение автоматически перезапустится после установки", "viewOnGitHub": "Открыть на GitHub", "remindLater": "Напомнить позже", - "skipVersion": "Пропустить эту версию", - "checkingForUpdates": "Проверка обновлений...", "upToDate": "Используется актуальная версия", "updateAvailable": "Доступна версия {{version}}", "error": "Ошибка обновления", - "currentVersion": "Текущая версия", "managedByPackageManager": "Обновления управляются через {{source}}", "managedByPackageManagerDesc": "Для обновления Tabularis используйте менеджер пакетов." }, "ai": { - "assist": "AI-помощник", "explain": "Объяснить", - "generateSql": "Сгенерировать SQL", - "generating": "Генерация...", - "explainQuery": "AI-объяснение запроса", - "queryLabel": "Запрос", - "explanationLabel": "Объяснение", - "generatingExplanation": "Генерация объяснения...", - "configRequired": "⚠️ AI-провайдер не настроен. Перейдите в Настройки > AI.", - "enterPrompt": "Опишите запрос на естественном языке", - "promptPlaceholder": "например: найти всех пользователей, которые зарегистрировались в прошлом месяце и оформили тариф «Premium»...", - "readingSchema": "Чтение схемы базы данных...", - "schemaError": "Не удалось загрузить контекст схемы базы данных", - "configError": "Настройте AI-провайдера в разделе «Настройки» и введите запрос." + "generateSql": "Сгенерировать SQL" }, "newConnection": { - "titleNew": "Новое подключение", - "titleEdit": "Изменить подключение", - "subtitle": "Настройте параметры подключения к базе данных", - "name": "Название подключения", "namePlaceholder": "Введите название подключения", "nameRequired": "Название подключения обязательно", "dbNameRequired": "Название базы данных обязательно", @@ -616,7 +606,6 @@ "port": "Порт", "username": "Пользователь", "password": "Пароль", - "passwordMissing": "Пароль не задан или отсутствует. Введите заново.", "passwordPlaceholder": "Введите пароль", "usernamePlaceholder": "Введите имя пользователя", "filePath": "Путь к файлу", @@ -626,6 +615,7 @@ "loadDatabases": "Загрузить базы данных", "loadingDatabases": "Загрузка...", "selectDatabases": "Базы данных", + "appearance": "Внешний вид", "noDatabasesSelected": "Выберите хотя бы одну базу данных", "selectedDatabases": "Выбрано баз данных: {{count}}", "selectDatabase": "Выберите базу данных", @@ -660,7 +650,14 @@ "disable": "Отключён", "allow": "Разрешён", "prefer": "Предпочтительный", - "require": "Обязательный" + "require": "Обязательный", + "verify-ca": "Verify CA", + "verify-full": "Verify Full", + "disabled": "Disabled", + "preferred": "Preferred", + "required": "Required", + "verify_ca": "Verify CA", + "verify_identity": "Verify Identity" }, "chooseContext": "Выберите контекст...", "chooseK8s": "Выберите подключение...", @@ -684,7 +681,19 @@ "selectTypeFirst": "Сначала выберите контекст/пространство имён/тип", "useK8s": "Использовать проброс портов Kubernetes", "useK8sConnection": "Сохранённое подключение", - "appearance": "Внешний вид" + "connectionString": "Connection String", + "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", + "general": "General", + "loadDatabasesHint": "Click Load Databases to fetch available databases.", + "noGeneralSettings": "No general settings available for this driver.", + "selectDatabasesHint": "Select the databases to include in this connection.", + "sshNotAvailable": "SSH is not available for this driver.", + "sslCa": "CA Certificate", + "sslCert": "Client Certificate", + "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", + "sslDescription": "Configure SSL/TLS for secure database connections (optional).", + "sslKey": "Client Key", + "unnamedConnection": "Unnamed connection" }, "sshConnections": { "title": "SSH-подключения", @@ -712,30 +721,18 @@ "dataGrid": { "newRow": "НОВАЯ", "noData": "Нет данных для отображения", - "editRow": "Изменить строку", "deleteRow": "Удалить строку", - "deleteRows_one": "Удалить {{count}} строку", - "deleteRows_few": "Удалить {{count}} строки", - "deleteRows_many": "Удалить {{count}} строк", - "deleteRows_other": "Удалить {{count}} строки", - "confirmDelete": "Удалить эту строку?", - "deleteTitle": "Удалить строку", "updateFailed": "Ошибка обновления: ", - "deleteFailed": "Не удалось удалить строку: ", "null": "null", "sortByAsc": "Сортировать по {{col}} ASC", "sortByDesc": "Сортировать по {{col}} DESC", "clearSort": "Сбросить сортировку", "copyCell": "Копировать ячейку", - "copyRow": "Копировать строку", "copySelectedRows": "Копировать выбранные строки", "copyColumnName": "Копировать имя столбца", "copyColumnNameQuoted": "Копировать как `column`", "copyColumnNameTable": "Копировать как table.column", - "copyCells": "Копировать {{count}} ячеек", - "copyRows": "Копировать {{count}} строк", "copied": "Скопировано в буфер обмена", - "discardInsertion": "Нажмите, чтобы отменить добавление строки (откат)", "duplicateRow": "Дублировать строку", "revertSelected": "Отменить выбранные изменения", "setGenerate": "Установить GENERATED", @@ -743,25 +740,18 @@ "setDefault": "Установить DEFAULT", "setEmpty": "Установить EMPTY", "setServerNow": "Вставить текущую метку времени", - "openReferenced": "Открыть связанную строку в {{table}}" - }, - "editRow": { - "title": "Изменить строку", - "save": "Сохранить изменения", - "cancel": "Отменить", - "success": "Строка обновлена", - "failLoad": "Не удалось загрузить схему для редактирования", - "failUpdate": "Не удалось обновить строку: ", - "loading": "Загрузка...", - "selectValue": "Выберите значение...", - "noOptions": "Варианты не найдены", - "current": "Текущее" + "previewReferenced": "Preview related record", + "openReferenced": "Открыть связанную строку в {{table}}", + "deleteRows_one": "Удалить {{count}} строку", + "deleteRows_few": "Удалить {{count}} строки", + "deleteRows_many": "Удалить {{count}} строк", + "deleteRows_other": "Удалить {{count}} строки" }, + "editRow": {}, "newRow": { "title": "Новая строка", "insert": "Вставить", "cancel": "Отменить", - "success": "Строка добавлена", "failInsert": "Не удалось добавить строку: ", "failLoad": "Не удалось загрузить схему: ", "loading": "Загрузка...", @@ -773,26 +763,6 @@ "auto": "Авто" }, "editor": { - "quickNavigator": { - "placeholder": "Поиск таблиц, представлений, процедур, триггеров...", - "noResults": "Совпадающие элементы не найдены", - "count_one": "1 элемент", - "count_other": "{{count}} элементов", - "navigationHint": "↑↓ для навигации, Enter для открытия", - "escHint": "Esc для закрытия", - "type_table": "таблица", - "type_view": "представление", - "type_routine": "процедура", - "type_trigger": "триггер", - "actions": { - "inspect": "Показать структуру", - "newConsole": "Новая консоль", - "generateSql": "Сгенерировать SQL-шаблоны", - "countRows": "Подсчитать строки", - "query": "Выполнить SELECT-запрос", - "copyName": "Скопировать имя" - } - }, "noTabs": "Нет открытых вкладок для этого подключения.", "newConsole": "Новая консоль", "noActiveSession": "Нет активной сессии. Выберите подключение.", @@ -802,7 +772,6 @@ "connected": "Подключено", "disconnected": "Отключено", "newRow": "Новая строка", - "editing": "Редактирование: {{table}}", "rowsRetrieved": "Строк: {{count}}", "autoPaginated": "Автопостраничный вывод", "pageOf": "Страница {{current}} из {{total}}", @@ -836,10 +805,30 @@ "title": "Открытые вкладки", "hint": "Ctrl+Tab", "tabs_one": "{{count}} вкладка", - "tabs_few": "{{count}} вкладки", - "tabs_many": "{{count}} вкладок", "tabs_other": "{{count}} вкладки", - "escHint": "Esc для закрытия" + "escHint": "Esc для закрытия", + "tabs_few": "{{count}} вкладки", + "tabs_many": "{{count}} вкладок" + }, + "quickNavigator": { + "placeholder": "Поиск таблиц, представлений, процедур, триггеров...", + "noResults": "Совпадающие элементы не найдены", + "count_one": "1 элемент", + "count_other": "{{count}} элементов", + "navigationHint": "↑↓ для навигации, Enter для открытия", + "escHint": "Esc для закрытия", + "type_table": "таблица", + "type_view": "представление", + "type_routine": "процедура", + "type_trigger": "триггер", + "actions": { + "inspect": "Показать структуру", + "newConsole": "Новая консоль", + "generateSql": "Сгенерировать SQL-шаблоны", + "countRows": "Подсчитать строки", + "query": "Выполнить SELECT-запрос", + "copyName": "Скопировать имя" + } }, "submitChanges": "Применить изменения", "rollbackChanges": "Откатить изменения", @@ -853,13 +842,11 @@ "paramValuePlaceholder": "Значение (например, 'текст' или 123)", "failedCreateRow": "Не удалось создать новую строку: ", "failedProcessInsertions": "Не удалось обработать вставки: ", - "fieldRequired": "Это поле обязательно", "newNotebook": "Новый ноутбук", "visualExplain": { "title": "Визуальный Explain", "buttonShort": "План выполнения", "loading": "Выполнение EXPLAIN...", - "error": "Не удалось выполнить EXPLAIN", "planningTime": "Планирование", "executionTime": "Выполнение", "totalCost": "Общая стоимость", @@ -875,7 +862,6 @@ "rawOutput": "Сырой вывод", "analyze": "Анализ", "analyzeWarning": "ANALYZE выполняет запрос. Осторожно с операторами изменения данных.", - "notSupported": "EXPLAIN не поддерживается для данного типа подключения.", "notExplainable": "EXPLAIN поддерживается только для DML-запросов (SELECT, INSERT, UPDATE, DELETE). DDL-запросы (CREATE, DROP, ALTER) не поддерживаются.", "contextMenuExplain": "План выполнения", "rerun": "Перезапустить", @@ -905,8 +891,6 @@ "overview": "Обзор", "showOverview": "Показать обзор", "hideOverview": "Скрыть обзор", - "showNotes": "Показать примечания", - "hideNotes": "Скрыть примечания", "postgresAnalyzeLegend1": "PostgreSQL ANALYZE включает реальные строки, время, итерации и счётчики буферов при наличии.", "postgresAnalyzeLegend2": "Большие расхождения в оценках обычно указывают на устаревшую статистику или предикаты, которые планировщик не может смоделировать точно.", "postgresEstimateLegend1": "PostgreSQL без ANALYZE показывает только оценки планировщика.", @@ -917,11 +901,6 @@ "mysqlEstimateLegend2": "Если время отсутствует, сервер вернул только оценочный план.", "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN — лёгкий инструмент преимущественно для анализа структуры.", "sqliteLegend2": "Стоимость, время и оценки строк зачастую недоступны по сравнению с PostgreSQL и MySQL.", - "copySnapshot": "Копировать снимок", - "exportRaw": "Экспортировать сырой вывод", - "snapshotCopied": "Снимок explain скопирован в буфер обмена", - "rawExported": "Сырой вывод explain экспортирован", - "noRawOutput": "Нет сырого вывода для экспорта.", "aiAnalysis": "AI-анализ", "aiAnalysisTitle": "AI-анализ плана запроса", "aiAnalyzing": "Анализ плана запроса с помощью AI...", @@ -947,12 +926,6 @@ "invalidFile": "Недопустимый формат файла ноутбука", "importSuccess": "Ноутбук импортирован", "exportSuccess": "Ноутбук экспортирован", - "convertToConsole": "Преобразовать в консоль", - "runningAll": "Выполнение всех ячеек...", - "cellResult_one": "{{count}} строка · {{time}}мс", - "cellResult_few": "{{count}} строки · {{time}}мс", - "cellResult_many": "{{count}} строк · {{time}}мс", - "cellResult_other": "{{count}} строки · {{time}}мс", "stopOnError": "Остановить при ошибке", "stopOnErrorTooltip": "Прекратить выполнение при ошибке в ячейке", "runAllComplete": "Выполнение завершено", @@ -978,8 +951,6 @@ "collapseAll": "Свернуть все", "expandAll": "Развернуть все", "outline": "Структура", - "aiGenerate": "Сгенерировать SQL с помощью AI", - "aiExplain": "Объяснить запрос с помощью AI", "cellNamePlaceholder": "Без названия", "editCellName": "Изменить название ячейки", "aiGenerateName": "Сгенерировать название с помощью AI", @@ -1005,36 +976,37 @@ "stopOnError": "Переключён останов при ошибке", "other": "Блокнот изменён" } - } + }, + "exportError": "Export failed", + "cellResult_one": "{{count}} строка · {{time}}мс", + "cellResult_few": "{{count}} строки · {{time}}мс", + "cellResult_many": "{{count}} строк · {{time}}мс", + "cellResult_other": "{{count}} строки · {{time}}мс" }, "querySelection": { "title": "Выбрать запрос для выполнения", - "queriesFound_one": "{{count}} запрос", - "queriesFound_few": "{{count}} запроса", - "queriesFound_many": "{{count}} запросов", - "queriesFound_other": "{{count}} запроса", - "escToCancel": "Esc для отмены", - "numberHint": "Нажмите 1–9 для выбора, стрелки для навигации", "runAll": "Запустить все", "runSelected": "Запустить выбранные ({{count}})", "runSingle": "Запустить этот запрос", "selectAll": "Выбрать все", - "deselectAll": "Снять выбор" - }, - "explainSelection": { - "title": "Выбрать запрос для объяснения", + "deselectAll": "Снять выбор", "queriesFound_one": "{{count}} запрос", "queriesFound_few": "{{count}} запроса", "queriesFound_many": "{{count}} запросов", - "queriesFound_other": "{{count}} запроса", + "queriesFound_other": "{{count}} запроса" + }, + "explainSelection": { + "title": "Выбрать запрос для объяснения", "explainSingle": "Объяснить этот запрос", "explainFocused": "объяснить активный", "explainNth": "объяснить N-й", - "cancel": "отменить" + "cancel": "отменить", + "queriesFound_one": "{{count}} запрос", + "queriesFound_few": "{{count}} запроса", + "queriesFound_many": "{{count}} запросов", + "queriesFound_other": "{{count}} запроса" }, "multiResult": { - "query": "Запрос {{index}}", - "summary": "{{total}} запросов: {{succeeded}} успешно, {{failed}} с ошибкой", "rerun": "Перезапустить запрос", "close": "Закрыть вкладку", "rename": "Переименовать", @@ -1045,8 +1017,7 @@ "queryPrefix": "Запрос", "results": "Результаты", "collapseAll": "Свернуть все", - "expandAll": "Развернуть все", - "collapsed": "Свёрнуто" + "expandAll": "Развернуть все" } }, "createTable": { @@ -1062,14 +1033,13 @@ "colNn": "NN", "colAi": "AI", "colDefault": "По умолчанию", - "showSql": "Показать предпросмотр SQL", - "hideSql": "Скрыть предпросмотр SQL", "create": "Создать таблицу", "cancel": "Отменить", "nameRequired": "Название таблицы обязательно", "colRequired": "Требуется хотя бы один столбец", "failCreate": "Не удалось создать таблицу: ", - "requiresExtension": "Требуется расширение: {{ext}}" + "requiresExtension": "Требуется расширение: {{ext}}", + "sqlPreview": "SQL Preview" }, "schema": { "title": "Схема: {{table}}", @@ -1079,7 +1049,8 @@ "colNullable": "Nullable", "colKey": "Ключ", "yes": "Да", - "no": "Нет" + "no": "Нет", + "close": "Close" }, "generateSQL": { "title": "Сгенерированный SQL: {{table}}", @@ -1110,8 +1081,6 @@ "cancel": "Отменить", "nameRequired": "Имя столбца обязательно", "fail": "Ошибка: ", - "noChanges": "Изменений не обнаружено", - "unsupported": "Драйвер не поддерживается", "pkNotSupported": "Этот драйвер поддерживает первичные ключи только при создании таблицы", "requiresExtension": "Требуется расширение: {{ext}}" }, @@ -1137,15 +1106,13 @@ "sqlPreview": "Предпросмотр SQL", "create": "Создать внешний ключ", "cancel": "Отменить", - "colRequired": "Выберите локальный и ссылочный столбцы", - "tableRequired": "Выберите ссылочную таблицу" + "nameRequired": "Name is required" }, "healthCheck": { "title": "Подключение потеряно", "connectionLost": "Соединение с базой данных прервано" }, "erDiagram": { - "title": "ER-диаграмма", "enterFullscreen": "На весь экран", "exitFullscreen": "Выйти из полноэкранного режима", "noConnection": "Нет ID подключения", @@ -1167,7 +1134,6 @@ "viewName": "Название представления", "viewNamePlaceholder": "например, active_users, order_summary", "viewDefinition": "Определение представления (SQL)", - "definitionPlaceholder": "SELECT * FROM ...", "preview": "Предпросмотр", "runPreview": "Запустить предпросмотр", "previewEmpty": "Нажмите «Запустить предпросмотр», чтобы увидеть результаты", @@ -1181,7 +1147,8 @@ "createSuccess": "Представление создано", "alterSuccess": "Представление обновлено", "saveError": "Не удалось сохранить представление: ", - "confirmAlter": "Изменить представление \"{{view}}\"?" + "confirmAlter": "Изменить представление \"{{view}}\"?", + "alterView": "Alter View" }, "triggers": { "createTrigger": "Создать триггер", @@ -1241,12 +1208,10 @@ "selectAll": "Выбрать все", "deselectAll": "Снять выбор", "export": "Экспортировать", - "exporting": "Экспорт...", "success": "База данных экспортирована", "failure": "Ошибка экспорта: ", "errorNoOption": "Выберите хотя бы структуру или данные", "errorNoTables": "Выберите хотя бы одну таблицу", - "importStarted": "Импорт начат...", "importSuccess": "SQL-файл выполнен", "importFailure": "Ошибка импорта: ", "importCancelled": "Импорт отменён", @@ -1260,7 +1225,6 @@ "sqlMode": "Режим SQL", "wktMode": "Режим WKT", "sqlHelper": "Введите полную SQL-функцию (например, ST_GeomFromText('POINT(30 40)', 4326))", - "wktHelper": "Введите формат WKT (например, POINT(30 40))", "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", "wktPlaceholder": "POINT(30 40)", "toggleTooltip": "SQL-функции" @@ -1276,12 +1240,7 @@ "raw": "Сырой" }, "expand": "Развернуть", - "collapse": "Свернуть", "search": "Поиск", - "copyPath": "Копировать путь", - "copyValue": "Копировать значение", - "addItem": "Добавить элемент", - "removeItem": "Удалить элемент", "diff": "Сравнение", "sideBySide": "Рядом" }, @@ -1306,9 +1265,8 @@ "rowEditor": { "title": "Изменить строку", "subtitle": "Строка #{{row}}", - "save": "Сохранить изменения", - "cancel": "Отменить", - "enterValue": "Введите значение..." + "enterValue": "Введите значение...", + "resize": "Resize sidebar" }, "contextMenu": { "openSidebar": "Открыть в боковом редакторе", @@ -1358,9 +1316,9 @@ "diskRead": "Чтение с диска/с", "diskWrite": "Запись на диск/с", "processCount_one": "{{count}} системный процесс", + "processCount_other": "{{count}} системных процессов", "processCount_few": "{{count}} системных процесса", - "processCount_many": "{{count}} системных процессов", - "processCount_other": "{{count}} системных процессов" + "processCount_many": "{{count}} системных процессов" }, "tabularisProcess": { "title": "Процесс Tabularis", @@ -1369,8 +1327,6 @@ "diskRead": "Чтение с диска/с", "diskWrite": "Запись на диск/с", "childCount_one": "{{count}} дочерний процесс", - "childCount_few": "{{count}} дочерних процесса", - "childCount_many": "{{count}} дочерних процессов", "childCount_other": "{{count}} дочерних процессов", "noChildren": "Нет дочерних процессов", "treeTotal": "Итого по дереву: {{size}}", @@ -1380,7 +1336,9 @@ "colName": "Имя", "colCpu": "CPU", "colRam": "RAM", - "refresh": "Обновить" + "refresh": "Обновить", + "childCount_few": "{{count}} дочерних процесса", + "childCount_many": "{{count}} дочерних процессов" }, "pluginProcesses": { "title": "Процессы плагинов", @@ -1398,21 +1356,19 @@ "kill": "Завершить", "collapseChildren": "Свернуть дочерние процессы", "childCount_one": "{{count}} дочерний процесс", - "childCount_few": "{{count}} дочерних процесса", - "childCount_many": "{{count}} дочерних процессов", "childCount_other": "{{count}} дочерних процессов", "childProcess": "дочерний процесс", "status": { "running": "работает", "stopped": "остановлен", "unknown": "неизвестно" - } + }, + "childCount_few": "{{count}} дочерних процесса", + "childCount_many": "{{count}} дочерних процессов" } }, "groups": { - "title": "Группы", "newGroup": "Новая группа", - "createGroup": "Создать группу", "rename": "Переименовать", "delete": "Удалить", "deleteConfirm": "Удалить группу «{{name}}»? Подключения переместятся в раздел без группы.", @@ -1420,13 +1376,12 @@ "connection": "подключение", "connections": "подключений", "ungrouped": "Без группы", - "moveToGroup": "Переместить в группу", "removeFromGroup": "Убрать из группы", - "noGroups": "Групп пока нет", - "createFirst": "Создайте первую группу для организации подключений", "groupName": "Название группы", - "dragHint": "Перетащите подключения сюда", - "createError": "Не удалось создать группу" + "createError": "Не удалось создать группу", + "deleteError": "Failed to delete group", + "moveError": "Failed to move connection", + "renameError": "Failed to rename group" }, "queryModal": { "database": "База данных", @@ -1453,28 +1408,12 @@ "dataPreview": "Предпросмотр данных", "sample": "Примеры значений", "lowConfidence": "Обнаружены смешанные типы, использован TEXT", - "rowsTotal_one": "{{count}} строка", - "rowsTotal_few": "{{count}} строки", - "rowsTotal_many": "{{count}} строк", - "rowsTotal_other": "{{count}} строки", "showingFirst": "показаны первые {{count}}", - "import_one": "Импортировать {{count}} строку", - "import_few": "Импортировать {{count}} строки", - "import_many": "Импортировать {{count}} строк", - "import_other": "Импортировать {{count}} строки", "importing": "Импорт...", - "success_one": "{{count}} строка импортирована в «{{table}}»", - "success_few": "{{count}} строки импортированы в «{{table}}»", - "success_many": "{{count}} строк импортировано в «{{table}}»", - "success_other": "{{count}} строки импортированы в «{{table}}»", "tableCreated": "Новая таблица создана", "openTable": "Закрыть", "noData": "В буфере обмена нет данных", "retry": "Попробовать снова", - "warningsCount_one": "{{count}} предупреждение при разборе", - "warningsCount_few": "{{count}} предупреждения при разборе", - "warningsCount_many": "{{count}} предупреждений при разборе", - "warningsCount_other": "{{count}} предупреждения при разборе", "columnsLabel": "столбцы", "rowsLabel": "строки", "stepConfigure": "Настроить назначение", @@ -1490,7 +1429,23 @@ "targetColumn": "Целевой столбец", "targetColumnPlaceholder": "Выберите цель...", "skipColumn": "Пропустить (не импортировать)", - "createNewColumn": "Создать новый столбец" + "createNewColumn": "Создать новый столбец", + "rowsTotal_one": "{{count}} строка", + "rowsTotal_few": "{{count}} строки", + "rowsTotal_many": "{{count}} строк", + "rowsTotal_other": "{{count}} строки", + "import_one": "Импортировать {{count}} строку", + "import_few": "Импортировать {{count}} строки", + "import_many": "Импортировать {{count}} строк", + "import_other": "Импортировать {{count}} строки", + "success_one": "{{count}} строка импортирована в «{{table}}»", + "success_few": "{{count}} строки импортированы в «{{table}}»", + "success_many": "{{count}} строк импортировано в «{{table}}»", + "success_other": "{{count}} строки импортированы в «{{table}}»", + "warningsCount_one": "{{count}} предупреждение при разборе", + "warningsCount_few": "{{count}} предупреждения при разборе", + "warningsCount_many": "{{count}} предупреждений при разборе", + "warningsCount_other": "{{count}} предупреждения при разборе" }, "aiActivity": { "title": "Активность AI", @@ -1501,20 +1456,12 @@ }, "empty": "Нет активности MCP.", "eventsCount_one": "{{count}} событие", - "eventsCount_few": "{{count}} события", - "eventsCount_many": "{{count}} событий", "eventsCount_other": "{{count}} событий", "blockedCount_one": "{{count}} заблокированное", - "blockedCount_few": "{{count}} заблокированных", - "blockedCount_many": "{{count}} заблокированных", "blockedCount_other": "{{count}} заблокированных", "errorsCount_one": "{{count}} ошибка", - "errorsCount_few": "{{count}} ошибки", - "errorsCount_many": "{{count}} ошибок", "errorsCount_other": "{{count}} ошибок", "sessionsCount_one": "{{count}} сессия", - "sessionsCount_few": "{{count}} сессии", - "sessionsCount_many": "{{count}} сессий", "sessionsCount_other": "{{count}} сессий", "events": "События", "runQueries": "Запросы", @@ -1571,7 +1518,17 @@ "write": "Запись", "ddl": "DDL", "unknown": "Неизвестно" - } + }, + "exportCsv": "Export CSV", + "exportJson": "Export JSON", + "eventsCount_few": "{{count}} события", + "eventsCount_many": "{{count}} событий", + "blockedCount_few": "{{count}} заблокированных", + "blockedCount_many": "{{count}} заблокированных", + "errorsCount_few": "{{count}} ошибки", + "errorsCount_many": "{{count}} ошибок", + "sessionsCount_few": "{{count}} сессии", + "sessionsCount_many": "{{count}} сессий" }, "aiApproval": { "title": "AI запрашивает запись в базу данных", @@ -1614,7 +1571,6 @@ "port": "Порт контейнера", "test": "Проверить", "testing": "Проверка...", - "validationFailed": "Ошибка проверки", "errors": { "nameRequired": "Имя подключения обязательно", "contextRequired": "Контекст Kubernetes обязателен", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index ac0a38a1..8e6b74f5 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -29,14 +29,14 @@ "cancel": "取消", "delete": "删除", "edit": "编辑", - "clone": "克隆", - "connect": "连接", - "disconnect": "断开连接", "loading": "加载中...", "search": "搜索...", + "noResults": "No results found", "error": "错误", "success": "成功", - "ok": "OK" + "ok": "OK", + "clear": "Clear", + "refresh": "Refresh" }, "sidebar": { "connections": "连接", @@ -104,6 +104,19 @@ "procedures": "存储过程", "noRoutines": "未找到存储过程", "refreshRoutines": "刷新存储过程", + "triggers": "Triggers", + "noTriggers": "No triggers found", + "filterTriggers": "Filter triggers...", + "noTriggersMatch": "No triggers match your filter", + "createTrigger": "Create New Trigger", + "editTrigger": "Edit Trigger", + "dropTrigger": "Drop Trigger", + "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", + "viewTriggerDefinition": "View Definition", + "failDropTrigger": "Failed to drop trigger: ", + "failGetTriggerDefinition": "Failed to get trigger definition: ", + "refreshTriggers": "Refresh Triggers", + "onTable": "on {{table}}", "objectSummary": "对象", "databases": "数据库", "failGetRoutineDefinition": "获取存储过程定义失败:", @@ -176,7 +189,6 @@ "subtitle": "将 Tabularis 连接到 Claude Desktop、Cursor 等", "description": "模型上下文协议 (MCP) 允许 AI 助手(如 Claude)连接到您的本地工具。Tabularis 暴露了一个 MCP 服务器,让 AI 可以安全地读取数据库模式并执行查询。", "checking": "检查配置中...", - "configPath": "配置文件", "notFound": "未找到配置文件(请手动创建)", "installed": "已安装", "install": "安装配置", @@ -219,11 +231,9 @@ "noConnections": "无活动连接", "createFirst": "创建您的第一个连接", "active": "活动", - "sshEnabled": "SSH 隧道已启用", "disconnect": "断开连接", "connect": "连接", "edit": "编辑", - "duplicate": "复制", "delete": "删除", "clone": "克隆", "confirmDelete": "确定要删除此连接吗?", @@ -231,7 +241,6 @@ "failConnect": "连接到 {{name}} 失败。请检查您的设置或确保数据库正在运行。", "failDisconnect": "断开数据库连接失败", "failDuplicate": "复制连接失败", - "connecting": "连接中...", "open": "打开", "pluginDisabled": "插件已禁用", "connectionCount": "{{count}} 个连接", @@ -250,7 +259,6 @@ "accentColor": "强调色", "customColor": "自定义", "resetColor": "重置为驱动默认", - "resetIcon": "重置为驱动默认", "icon": "图标", "tabs": { "default": "默认", @@ -258,16 +266,22 @@ "emoji": "表情", "image": "图片" }, + "previewLabel": "Preview", + "defaultHint": "Using the driver's default icon.", + "emojiSelected": "Selected emoji", + "emojiHint": "Click another emoji below to change.", + "removeEmoji": "Clear", "chooseImage": "选择图片…", "removeImage": "移除", "imageHint": "PNG、JPG、WebP 或 SVG · 最大 512 KB", - "errors": { - "invalidEmoji": "请输入正好一个表情", - "invalidHex": "请输入有效的十六进制颜色,例如 #1a2b3c" - } + "errors": {}, + "emojiSearch": "Search emoji…", + "iconNoResults": "No icons match.", + "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", + "iconSearch": "Search icons…", + "noPreview": "No preview" }, "settings": { - "title": "设置", "general": "通用", "info": "信息", "dataEditor": "数据编辑器", @@ -289,8 +303,6 @@ "themeSelection": "主题选择", "fontFamily": "字体", "fonts": { - "system": "系统默认", - "systemDesc": "使用您的操作系统默认字体", "custom": "自定义字体", "customPlaceholder": "例如:微软雅黑", "enterFontName": "在上方输入字体名称" @@ -300,12 +312,36 @@ "fontSizeDesc": "调整整个应用使用的基础字体大小(10-20px)。", "preview": "预览", "fontPreviewText": "The quick brown fox jumps over the lazy dog", + "appearance_general": "General", + "appearance_sqlEditor": "SQL Editor", + "appearance_editorTheme": "Editor Theme", + "appearance_editorThemeDesc": "Choose an independent theme for the SQL editor, or keep it in sync with the app theme.", + "appearance_sameAsApp": "Same as App", + "appearance_editorFontFamily": "Editor Font Family", + "appearance_editorFontSize": "Editor Font Size", + "appearance_editorLineHeight": "Line Height", + "appearance_editorTabSize": "Tab Size", + "appearance_editorWordWrap": "Word Wrap", + "appearance_editorWordWrapDesc": "Wrap long lines in the editor instead of scrolling horizontally.", + "appearance_editorShowLineNumbers": "Show Line Numbers", + "appearance_editorShowLineNumbersDesc": "Display line numbers in the editor gutter.", + "appearance_editorAcceptSuggestionOnEnter": "Accept Suggestion with Enter", + "appearance_editorAcceptSuggestionOnEnterDesc": "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.", + "editConfigJson": "Edit config.json", + "editConfigJsonDesc": "Directly edit the raw configuration file. A restart is required to apply changes.", + "configJsonModal": { + "title": "config.json", + "saveAndRestart": "Save & Restart", + "restartNow": "Restart Now", + "restartRequired": "A restart is required to apply changes.", + "restartMessage": "The configuration file has been saved. Restart now to apply the changes?" + }, "language": "语言", "languageDesc": "选择您的首选语言。自动\"将使用您的系统语言。", "auto": "自动(系统)", - "english": "English", - "italian": "Italiano", - "spanish": "Español", + "timezone": "Timezone", + "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", + "timezoneSearch": "Search timezones...", "projectStatus": "项目状态", "roadmapDesc": "此项目是正在进行的工作 (WIP)。核心功能已稳定,但我们有更大的计划。", "support": "支持开发", @@ -418,6 +454,10 @@ "debug": "调试", "warn": "警告", "error": "错误", + "connectionHealthCheck": "Connection Health Check", + "pingInterval": "Ping Interval", + "pingIntervalDesc": "How often to check if active connections are still alive. Set to 0 to disable.", + "seconds": "seconds", "entries": "条目", "queryHistory": "查询历史", "queryHistoryMaxEntries": "最大历史条目", @@ -455,15 +495,10 @@ "filterInstalled": "已安装", "filterUpdates": "更新", "searchNoResults": "没有匹配的插件。", - "version": "版本", "requiresVersion": "需要 Tabularis ≥ {{version}}", - "installedPlugins": "已安装插件", - "installedDesc": "启用或禁用数据库驱动程序。内置驱动程序无法禁用。", "remove": "移除", "removeTitle": "移除插件", "confirmRemove": "确定要移除 \"{{name}}\" 吗?这将删除插件文件。", - "enabled": "已启用", - "disabled": "已禁用", "installError": { "title": "安装失败", "subtitle": "安装插件时发生错误。请参阅下面的详细信息。", @@ -534,7 +569,7 @@ "notOverridable": "内置,不可自定义", "pressKeys": "按下组合键...", "notebookRunAll": "运行所有单元格", - "categories_notebook": "笔记本", + "pasteImportClipboard": "Import from Clipboard", "quickNavigator": "快速导航" }, "aiActivity": "AI 活动" @@ -543,44 +578,23 @@ "newVersionAvailable": "有新版本可用", "version": "版本", "releaseNotes": "发布说明", - "downloads": "下载", - "download": "下载", "downloadAndInstall": "下载并安装", "downloading": "下载中...", "installing": "安装中...", "installingMessage": "安装后应用将自动重启", "viewOnGitHub": "在 GitHub 上查看", "remindLater": "稍后提醒我", - "skipVersion": "跳过此版本", - "checkingForUpdates": "检查更新中...", "upToDate": "已是最新版本", "updateAvailable": "版本 {{version}} 可用", "error": "更新错误", - "currentVersion": "当前版本", "managedByPackageManager": "更新由 {{source}} 管理", "managedByPackageManagerDesc": "使用您的包管理器更新 Tabularis。" }, "ai": { - "assist": "AI 辅助", "explain": "解释", - "generateSql": "生成 SQL", - "generating": "生成中...", - "explainQuery": "AI 查询解释", - "queryLabel": "查询", - "explanationLabel": "解释", - "generatingExplanation": "生成解释中...", - "configRequired": "⚠️ 未配置 AI 提供商。请前往设置 > AI。", - "enterPrompt": "用自然语言描述您的查询", - "promptPlaceholder": "例如:查找所有上个月注册并订购了\"高级\"方案的用户...", - "readingSchema": "读取数据库模式中...", - "schemaError": "加载数据库模式上下文失败", - "configError": "请在设置中配置 AI 提供商并输入提示词。" + "generateSql": "生成 SQL" }, "newConnection": { - "titleNew": "新建连接", - "titleEdit": "编辑连接", - "subtitle": "配置数据库连接设置", - "name": "连接名称", "namePlaceholder": "输入您的连接名称", "nameRequired": "连接名称是必需的", "dbNameRequired": "数据库名称是必需的", @@ -589,7 +603,6 @@ "port": "端口", "username": "用户名", "password": "密码", - "passwordMissing": "密码缺失或未设置。请重新输入。", "passwordPlaceholder": "输入密码", "usernamePlaceholder": "输入用户名", "filePath": "文件路径", @@ -636,7 +649,12 @@ "prefer": "首选", "require": "要求", "verify-ca": "验证 CA", - "verify-full": "完全验证" + "verify-full": "完全验证", + "disabled": "Disabled", + "preferred": "Preferred", + "required": "Required", + "verify_ca": "Verify CA", + "verify_identity": "Verify Identity" }, "chooseContext": "选择上下文...", "chooseK8s": "选择连接...", @@ -659,7 +677,20 @@ "selectK8sConnection": "选择 K8s 连接", "selectTypeFirst": "请先选择上下文/命名空间/类型", "useK8s": "使用 Kubernetes 端口转发", - "useK8sConnection": "已保存的连接" + "useK8sConnection": "已保存的连接", + "connectionString": "Connection String", + "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", + "general": "General", + "loadDatabasesHint": "Click Load Databases to fetch available databases.", + "noGeneralSettings": "No general settings available for this driver.", + "selectDatabasesHint": "Select the databases to include in this connection.", + "sshNotAvailable": "SSH is not available for this driver.", + "sslCa": "CA Certificate", + "sslCert": "Client Certificate", + "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", + "sslDescription": "Configure SSL/TLS for secure database connections (optional).", + "sslKey": "Client Key", + "unnamedConnection": "Unnamed connection" }, "sshConnections": { "title": "SSH 连接", @@ -687,27 +718,19 @@ "dataGrid": { "newRow": "新建", "noData": "无数据显示", - "editRow": "编辑行", "deleteRow": "删除行", "deleteRows": "删除 {{count}} 行", - "confirmDelete": "确定要删除此行吗?", - "deleteTitle": "删除行", "updateFailed": "更新失败:", - "deleteFailed": "删除行失败:", "null": "null", "sortByAsc": "按 {{col}} 升序排序", "sortByDesc": "按 {{col}} 降序排序", "clearSort": "清除排序", "copyCell": "复制单元格", - "copyRow": "复制行", "copySelectedRows": "复制选中的行", "copyColumnName": "复制列名", "copyColumnNameQuoted": "复制为 `列`", "copyColumnNameTable": "复制为 表.列", - "copyCells": "复制 {{count}} 个单元格", - "copyRows": "复制 {{count}} 行", "copied": "已复制到剪贴板", - "discardInsertion": "点击放弃此行(回滚)", "duplicateRow": "复制行", "revertSelected": "还原选中", "setGenerate": "设为 GENERATED", @@ -718,23 +741,11 @@ "previewReferenced": "预览相关记录", "openReferenced": "在 {{table}} 中打开引用的行" }, - "editRow": { - "title": "编辑行", - "save": "保存更改", - "cancel": "取消", - "success": "行更新成功", - "failLoad": "加载编辑模式失败", - "failUpdate": "更新行失败:", - "loading": "加载中...", - "selectValue": "选择值...", - "noOptions": "未找到选项", - "current": "当前" - }, + "editRow": {}, "newRow": { "title": "新建行", "insert": "插入", "cancel": "取消", - "success": "行插入成功", "failInsert": "插入行失败:", "failLoad": "加载模式失败:", "loading": "加载中...", @@ -746,26 +757,6 @@ "auto": "自动" }, "editor": { - "quickNavigator": { - "placeholder": "搜索表、视图、例程、触发器...", - "noResults": "未找到匹配的元素", - "count_one": "1 个元素", - "count_other": "{{count}} 个元素", - "navigationHint": "↑↓ 导航,Enter 打开", - "escHint": "Esc 关闭", - "type_table": "表", - "type_view": "视图", - "type_routine": "例程", - "type_trigger": "触发器", - "actions": { - "inspect": "查看结构", - "newConsole": "新建控制台", - "generateSql": "生成 SQL 模板", - "countRows": "统计行数", - "query": "执行 SELECT 查询", - "copyName": "复制名称" - } - }, "noTabs": "此连接无打开的标签。", "newConsole": "新建控制台", "noActiveSession": "无活动会话。请选择一个连接。", @@ -775,7 +766,6 @@ "connected": "已连接", "disconnected": "已断开", "newRow": "新建行", - "editing": "编辑中:{{table}}", "rowsRetrieved": "已检索 {{count}} 行", "autoPaginated": "自动分页", "pageOf": "第 {{current}} 页,共 {{total}} 页", @@ -808,9 +798,30 @@ "tabSwitcher": { "title": "打开的标签", "hint": "Ctrl+Tab", - "tabs": "{{count}} 标签", + "tabs_one": "{{count}} tab", + "tabs_other": "{{count}} tabs", "escHint": "按 Esc 关闭" }, + "quickNavigator": { + "placeholder": "搜索表、视图、例程、触发器...", + "noResults": "未找到匹配的元素", + "count_one": "1 个元素", + "count_other": "{{count}} 个元素", + "navigationHint": "↑↓ 导航,Enter 打开", + "escHint": "Esc 关闭", + "type_table": "表", + "type_view": "视图", + "type_routine": "例程", + "type_trigger": "触发器", + "actions": { + "inspect": "查看结构", + "newConsole": "新建控制台", + "generateSql": "生成 SQL 模板", + "countRows": "统计行数", + "query": "执行 SELECT 查询", + "copyName": "复制名称" + } + }, "submitChanges": "提交更改", "rollbackChanges": "回滚更改", "applyToAll": "应用到全部", @@ -823,13 +834,11 @@ "paramValuePlaceholder": "值(例如 'text' 或 123)", "failedCreateRow": "创建新行失败:", "failedProcessInsertions": "处理插入失败:", - "fieldRequired": "此字段是必需的", "newNotebook": "新建笔记本", "visualExplain": { "title": "可视化执行计划", "buttonShort": "执行计划", "loading": "正在执行 EXPLAIN...", - "error": "EXPLAIN 执行失败", "planningTime": "规划时间", "executionTime": "执行时间", "totalCost": "总成本", @@ -845,8 +854,8 @@ "rawOutput": "原始输出", "analyze": "分析", "analyzeWarning": "ANALYZE 会实际执行查询。对数据修改语句请谨慎使用。", - "notSupported": "此连接类型不支持 EXPLAIN。", "notExplainable": "EXPLAIN 仅支持 DML 语句(SELECT、INSERT、UPDATE、DELETE)。DDL 语句(如 CREATE、DROP、ALTER)无法进行分析。", + "contextMenuExplain": "Explain Plan", "rerun": "重新运行", "close": "关闭", "graphView": "图形", @@ -874,8 +883,6 @@ "overview": "概览", "showOverview": "显示概览", "hideOverview": "隐藏概览", - "showNotes": "显示说明", - "hideNotes": "隐藏说明", "postgresAnalyzeLegend1": "PostgreSQL 的 ANALYZE 会在可用时包含实际行数、耗时、循环次数和缓冲区计数。", "postgresAnalyzeLegend2": "估算与实际差距过大通常意味着统计信息过旧,或存在规划器难以建模的谓词。", "postgresEstimateLegend1": "未启用 ANALYZE 的 PostgreSQL 仅显示规划器估算值。", @@ -886,11 +893,6 @@ "mysqlEstimateLegend2": "如果缺少耗时信息,服务器很可能返回的是仅估算的计划。", "sqliteLegend1": "SQLite 的 EXPLAIN QUERY PLAN 很轻量,主要用于展示结构。", "sqliteLegend2": "与 PostgreSQL 和 MySQL 相比,成本、耗时和行数估算通常不可用。", - "copySnapshot": "复制快照", - "exportRaw": "导出原始输出", - "snapshotCopied": "Explain 快照已复制到剪贴板", - "rawExported": "Explain 原始输出已导出", - "noRawOutput": "没有可导出的 Explain 原始输出。", "aiAnalysis": "AI 分析", "aiAnalysisTitle": "AI 执行计划分析", "aiAnalyzing": "正在使用 AI 分析执行计划...", @@ -916,8 +918,6 @@ "invalidFile": "无效的笔记本文件格式", "importSuccess": "笔记本导入成功", "exportSuccess": "笔记本导出成功", - "convertToConsole": "转换为控制台", - "runningAll": "正在运行所有单元格...", "cellResult": "{{count}} 行 · {{time}}毫秒", "stopOnError": "出错时停止", "stopOnErrorTooltip": "当单元格失败时停止执行", @@ -944,8 +944,6 @@ "collapseAll": "全部折叠", "expandAll": "全部展开", "outline": "大纲", - "aiGenerate": "使用 AI 生成 SQL", - "aiExplain": "使用 AI 解释此查询", "cellNamePlaceholder": "未命名", "editCellName": "编辑单元格名称", "aiGenerateName": "使用 AI 生成名称", @@ -971,27 +969,38 @@ "stopOnError": "切换了出错时停止", "other": "编辑了笔记本" } - } + }, + "exportError": "Export failed" }, "querySelection": { "title": "选择要执行的查询", "queriesFound": "找到 {{count}} 个查询", - "escToCancel": "Esc 取消", - "numberHint": "按 1-9 选择,方向键导航", "runAll": "全部执行", "runSelected": "执行选中 ({{count}})", "runSingle": "执行此查询", "selectAll": "全选", "deselectAll": "取消全选" }, + "explainSelection": { + "title": "Select Query to Explain", + "queriesFound": "{{count}} explainable queries found", + "explainSingle": "Explain this query", + "explainFocused": "explain focused", + "explainNth": "explain Nth", + "cancel": "cancel" + }, "multiResult": { - "query": "查询 {{index}}", - "summary": "{{total}} 个查询: {{succeeded}} 成功, {{failed}} 失败", "rerun": "重新执行查询", "close": "关闭标签", "rename": "重命名", "aiGenerateName": "使用 AI 生成名称", - "generatingName": "正在生成名称..." + "generatingName": "正在生成名称...", + "viewTabs": "Tab view", + "viewStacked": "Stacked view", + "queryPrefix": "Query", + "results": "Results", + "collapseAll": "Collapse all", + "expandAll": "Expand all" } }, "createTable": { @@ -1007,13 +1016,13 @@ "colNn": "非空", "colAi": "自增", "colDefault": "默认值", - "showSql": "显示 SQL 预览", - "hideSql": "隐藏 SQL 预览", "create": "创建表", "cancel": "取消", "nameRequired": "表名称是必需的", "colRequired": "至少需要一列", - "failCreate": "创建表失败:" + "failCreate": "创建表失败:", + "requiresExtension": "Requires extension: {{ext}}", + "sqlPreview": "SQL Preview" }, "schema": { "title": "模式:{{table}}", @@ -1023,7 +1032,8 @@ "colNullable": "可为空", "colKey": "键", "yes": "是", - "no": "否" + "no": "否", + "close": "Close" }, "generateSQL": { "title": "生成的 SQL:{{table}}", @@ -1054,9 +1064,8 @@ "cancel": "取消", "nameRequired": "列名称是必需的", "fail": "失败:", - "noChanges": "未检测到更改", - "unsupported": "不支持的驱动程序", - "pkNotSupported": "此驱动程序仅在表创建时支持主键" + "pkNotSupported": "此驱动程序仅在表创建时支持主键", + "requiresExtension": "Requires extension: {{ext}}" }, "createIndex": { "title": "创建索引", @@ -1080,11 +1089,13 @@ "sqlPreview": "SQL 预览", "create": "创建外键", "cancel": "取消", - "colRequired": "请选择本地列和引用列", - "tableRequired": "请选择一个引用表" + "nameRequired": "Name is required" + }, + "healthCheck": { + "title": "Connection Lost", + "connectionLost": "A database connection was lost" }, "erDiagram": { - "title": "ER 图", "enterFullscreen": "全屏", "exitFullscreen": "退出全屏", "noConnection": "无连接 ID", @@ -1106,7 +1117,6 @@ "viewName": "视图名称", "viewNamePlaceholder": "例如:active_users, order_summary", "viewDefinition": "视图定义 (SQL)", - "definitionPlaceholder": "SELECT * FROM ...", "preview": "预览", "runPreview": "运行预览", "previewEmpty": "点击\"运行预览\"查看结果", @@ -1120,7 +1130,36 @@ "createSuccess": "视图创建成功", "alterSuccess": "视图更新成功", "saveError": "保存视图失败:", - "confirmAlter": "确定要修改视图 \"{{view}}\" 吗?" + "confirmAlter": "确定要修改视图 \"{{view}}\" 吗?", + "alterView": "Alter View" + }, + "triggers": { + "createTrigger": "Create Trigger", + "editTrigger": "Edit Trigger", + "createSubtitle": "Create a new database trigger", + "editSubtitle": "Editing trigger: {{name}}", + "triggerName": "Trigger Name", + "triggerNamePlaceholder": "e.g. before_insert_user", + "tableName": "Table Name", + "tableNamePlaceholder": "e.g. users", + "timing": "Timing", + "events": "Events", + "body": "Trigger Body (SQL)", + "sqlPreview": "Generated SQL Preview", + "rawSql": "Raw SQL", + "guidedMode": "Guided", + "rawSqlMode": "Raw SQL", + "loading": "Loading trigger definition...", + "create": "Create Trigger", + "save": "Save Changes", + "sqlRequired": "Trigger SQL is required", + "failLoadDefinition": "Failed to load trigger definition: ", + "dropError": "Failed to drop existing trigger: ", + "saveError": "Failed to save trigger: ", + "createSuccess": "Trigger created successfully", + "updateSuccess": "Trigger updated successfully", + "recreateTrigger": "Recreate Trigger", + "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" }, "community": { "title": "加入社区", @@ -1152,12 +1191,10 @@ "selectAll": "全选", "deselectAll": "取消全选", "export": "导出", - "exporting": "导出中...", "success": "数据库导出成功", "failure": "导出失败:", "errorNoOption": "请至少选择结构或数据", "errorNoTables": "请至少选择一个表", - "importStarted": "导入开始...", "importSuccess": "SQL 文件执行成功", "importFailure": "导入失败:", "importCancelled": "导入已取消", @@ -1171,7 +1208,6 @@ "sqlMode": "SQL 模式", "wktMode": "WKT 模式", "sqlHelper": "输入完整的 SQL 函数(例如 ST_GeomFromText('POINT(30 40)', 4326))", - "wktHelper": "输入 WKT 格式(例如 POINT(30 40))", "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", "wktPlaceholder": "POINT(30 40)", "toggleTooltip": "SQL 函数" @@ -1187,12 +1223,9 @@ "raw": "原始" }, "expand": "展开", - "collapse": "折叠", "search": "搜索", - "copyPath": "复制路径", - "copyValue": "复制值", - "addItem": "添加项", - "removeItem": "删除项" + "diff": "Diff", + "sideBySide": "Side by side" }, "jsonViewer": { "close": "关闭", @@ -1202,12 +1235,21 @@ "expand": "展开/收起 JSON 树", "openViewer": "打开 JSON 查看器" }, + "textCell": { + "expand": "Toggle inline text editor" + }, + "textInput": { + "diff": "Diff", + "sideBySide": "Side by side" + }, + "textViewer": { + "save": "Save" + }, "rowEditor": { "title": "编辑行", "subtitle": "行 #{{row}}", - "save": "保存更改", - "cancel": "取消", - "enterValue": "输入值..." + "enterValue": "输入值...", + "resize": "Resize sidebar" }, "contextMenu": { "openSidebar": "打开侧边栏编辑器", @@ -1303,9 +1345,7 @@ } }, "groups": { - "title": "分组", "newGroup": "新建分组", - "createGroup": "创建分组", "rename": "重命名", "delete": "删除", "deleteConfirm": "确定要删除分组 \"{{name}}\" 吗?此分组中的连接将移至未分组。", @@ -1313,13 +1353,12 @@ "connection": "连接", "connections": "连接", "ungrouped": "未分组", - "moveToGroup": "移动到分组", "removeFromGroup": "从分组中移除", - "noGroups": "暂无分组", - "createFirst": "创建您的第一个分组以组织连接", "groupName": "分组名称", - "dragHint": "将连接拖到此处", - "createError": "创建分组失败" + "createError": "创建分组失败", + "deleteError": "Failed to delete group", + "moveError": "Failed to move connection", + "renameError": "Failed to rename group" }, "queryModal": { "database": "数据库", @@ -1381,9 +1420,13 @@ "sessions": "会话" }, "empty": "暂无 MCP 活动。", + "eventsCount_one": "{{count}} event", "eventsCount_other": "{{count}} 个事件", + "blockedCount_one": "{{count}} blocked", "blockedCount_other": "{{count}} 个被阻止", + "errorsCount_one": "{{count}} error", "errorsCount_other": "{{count}} 个错误", + "sessionsCount_one": "{{count}} session", "sessionsCount_other": "{{count}} 个会话", "events": "事件", "runQueries": "查询", @@ -1440,7 +1483,9 @@ "write": "写入", "ddl": "DDL", "unknown": "未知" - } + }, + "exportCsv": "Export CSV", + "exportJson": "Export JSON" }, "aiApproval": { "title": "AI 请求执行数据库写入", @@ -1483,7 +1528,6 @@ "port": "容器端口", "test": "测试", "testing": "测试中...", - "validationFailed": "验证失败", "errors": { "nameRequired": "连接名称为必填项", "contextRequired": "Kubernetes 上下文为必填项", diff --git a/src/pages/Editor.tsx b/src/pages/Editor.tsx index bbf47298..695d4f3b 100644 --- a/src/pages/Editor.tsx +++ b/src/pages/Editor.tsx @@ -1751,7 +1751,7 @@ export const Editor = () => { } catch (err) { console.error("Failed to create new row:", err); showAlert(t("editor.failedCreateRow") + String(err), { - title: t("general.error"), + title: t("common.error"), kind: "error", }); } From f8e2a17ff238b6241bb9ca353c54b4f4acde6737 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Thu, 18 Jun 2026 20:20:47 +0200 Subject: [PATCH 02/22] refactor(i18n): drop redundant inline defaultValue fallbacks Now that every key exists in en.json (the fallback locale), the inline defaultValue passed to t() merely duplicated the JSON value in code. Remove 110 single-option defaultValue fallbacks across 16 files so the JSON stays the single source of truth. Left intact: newConnection.browseFile (code "Browse" vs json "Browse file") and 4 calls whose object also carries interpolation variables. --- .../modals/ClipboardImportModal.tsx | 2 +- src/components/modals/CreateTableModal.tsx | 2 +- src/components/modals/K8sConnectionsModal.tsx | 11 +- src/components/modals/NewConnectionModal.tsx | 167 ++++++------------ .../NewConnectionModal/AppearanceSection.tsx | 22 +-- src/components/modals/SchemaModal.tsx | 2 +- .../ai-activity/AiActivityEventsTab.tsx | 12 +- .../ai-activity/AiActivitySessionsTab.tsx | 40 ++--- src/components/ui/DataGrid.tsx | 2 +- src/components/ui/JsonExpansionEditor.tsx | 8 +- src/components/ui/JsonInput.tsx | 8 +- src/components/ui/RowEditorSidebar.tsx | 6 +- src/components/ui/TextCell.tsx | 8 +- src/components/ui/TextExpansionEditor.tsx | 10 +- src/components/ui/TextInput.tsx | 8 +- src/pages/Connections.tsx | 6 +- 16 files changed, 110 insertions(+), 204 deletions(-) diff --git a/src/components/modals/ClipboardImportModal.tsx b/src/components/modals/ClipboardImportModal.tsx index 4c151110..69afc600 100644 --- a/src/components/modals/ClipboardImportModal.tsx +++ b/src/components/modals/ClipboardImportModal.tsx @@ -403,7 +403,7 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm )} @@ -1123,7 +1117,7 @@ export const NewConnectionModal = ({ onChange={setAppearance} connectionId={effectiveConnectionId} driverManifest={activeDriver} - connectionName={name || t("newConnection.unnamedConnection", { defaultValue: "Unnamed connection" })} + connectionName={name || t("newConnection.unnamedConnection")} onImageUploaded={handleImageUploaded} /> ); @@ -1133,9 +1127,7 @@ export const NewConnectionModal = ({

- {t("newConnection.selectDatabasesHint", { - defaultValue: "Select the databases to include in this connection.", - })} + {t("newConnection.selectDatabasesHint")}

)} @@ -1266,15 +1255,13 @@ export const NewConnectionModal = ({ const sslTabContent = (

- {t("newConnection.sslDescription", { - defaultValue: "Configure SSL/TLS for secure database connections (optional).", - })} + {t("newConnection.sslDescription")}

{/* SSL Mode */}
- {t("newConnection.sshNotAvailable", { - defaultValue: "SSH is not available for this driver.", - })} + {t("newConnection.sshNotAvailable")}

) : (
@@ -1632,9 +1615,7 @@ export const NewConnectionModal = ({ // ── rendered K8s tab content ── const k8sTabContent = !isNetworkDriver ? (

- {t("newConnection.k8sNotAvailable", { - defaultValue: "Kubernetes is not available for this driver.", - })} + {t("newConnection.k8sNotAvailable")}

) : (
@@ -1655,9 +1636,7 @@ export const NewConnectionModal = ({ className="accent-blue-500 w-3.5 h-3.5 rounded" /> - {t("newConnection.useK8s", { - defaultValue: "Use Kubernetes Port-Forward", - })} + {t("newConnection.useK8s")} @@ -1690,12 +1669,8 @@ export const NewConnectionModal = ({ )} > {mode === "existing" - ? t("newConnection.useK8sConnection", { - defaultValue: "Saved Connection", - }) - : t("newConnection.createInlineK8s", { - defaultValue: "Inline", - })} + ? t("newConnection.useK8sConnection") + : t("newConnection.createInlineK8s")} ))}
@@ -1705,9 +1680,7 @@ export const NewConnectionModal = ({
{ updateField("k8s_resource_type", val); }} - placeholder={t("newConnection.k8sSelectType", { - defaultValue: "Select type...", - })} + placeholder={t("newConnection.k8sSelectType")} searchable={false} />
setSearch(e.target.value)} className="h-9 w-full rounded border border-strong bg-base pl-9 pr-3 text-sm text-primary placeholder:text-muted focus:border-blue-500 focus:outline-none" @@ -77,9 +75,7 @@ export function AiActivitySessionsTab() { options={sortOptions} labels={sortLabels} onChange={(value) => setSortField(value as SessionSortField)} - placeholder={t("aiActivity.sort.sortByPlaceholder", { - defaultValue: "Sort by…", - })} + placeholder={t("aiActivity.sort.sortByPlaceholder")} searchable={false} className="min-w-0" /> @@ -88,32 +84,24 @@ export function AiActivitySessionsTab() { className="flex h-9 items-center gap-1.5 rounded border border-strong bg-base px-2.5 text-xs text-muted transition-colors hover:bg-surface-tertiary hover:text-primary" title={ sortDir === "asc" - ? t("aiActivity.sort.toggleDescending", { - defaultValue: "Sort descending", - }) - : t("aiActivity.sort.toggleAscending", { - defaultValue: "Sort ascending", - }) + ? t("aiActivity.sort.toggleDescending") + : t("aiActivity.sort.toggleAscending") } aria-label={ sortDir === "asc" - ? t("aiActivity.sort.toggleDescending", { - defaultValue: "Sort descending", - }) - : t("aiActivity.sort.toggleAscending", { - defaultValue: "Sort ascending", - }) + ? t("aiActivity.sort.toggleDescending") + : t("aiActivity.sort.toggleAscending") } > {sortDir === "asc" ? : } {sortDir === "asc" - ? t("aiActivity.sort.ascending", { defaultValue: "Asc" }) - : t("aiActivity.sort.descending", { defaultValue: "Desc" })} + ? t("aiActivity.sort.ascending") + : t("aiActivity.sort.descending")} @@ -142,9 +130,7 @@ export function AiActivitySessionsTab() {
{sessions.length === 0 ? t("aiActivity.empty") - : t("aiActivity.noMatches", { - defaultValue: "No sessions match the current filters.", - })} + : t("aiActivity.noMatches")}
) : (
diff --git a/src/components/ui/DataGrid.tsx b/src/components/ui/DataGrid.tsx index 87094022..fadbd185 100644 --- a/src/components/ui/DataGrid.tsx +++ b/src/components/ui/DataGrid.tsx @@ -268,7 +268,7 @@ export const DataGrid = React.memo( const buildRowLabel = useCallback( (rowData: unknown[], rowIndex: number, isInsertion: boolean): string => { - if (isInsertion) return t("dataGrid.newRow", { defaultValue: "NEW" }); + if (isInsertion) return t("dataGrid.newRow"); if (pkColumn && pkIndexMap !== null) { const pkVal = rowData[pkIndexMap]; if (pkVal !== null && pkVal !== undefined && pkVal !== "") { diff --git a/src/components/ui/JsonExpansionEditor.tsx b/src/components/ui/JsonExpansionEditor.tsx index 06fdcc66..0ad968d9 100644 --- a/src/components/ui/JsonExpansionEditor.tsx +++ b/src/components/ui/JsonExpansionEditor.tsx @@ -80,10 +80,10 @@ export const JsonExpansionEditor = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("jsonInput.diff", { defaultValue: "Diff" })} + title={t("jsonInput.diff")} > - {t("jsonInput.diff", { defaultValue: "Diff" })} + {t("jsonInput.diff")} {hasDiff && ( - {t("jsonInput.sideBySide", { defaultValue: "Side by side" })} + {t("jsonInput.sideBySide")} )}
diff --git a/src/components/ui/JsonInput.tsx b/src/components/ui/JsonInput.tsx index f6cc5ab3..f94ea76b 100644 --- a/src/components/ui/JsonInput.tsx +++ b/src/components/ui/JsonInput.tsx @@ -307,10 +307,10 @@ export const JsonInput: React.FC = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("jsonInput.diff", { defaultValue: "Diff" })} + title={t("jsonInput.diff")} > - {t("jsonInput.diff", { defaultValue: "Diff" })} + {t("jsonInput.diff")} {hasDiff && ( = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("jsonInput.sideBySide", { defaultValue: "Side by side" })} + title={t("jsonInput.sideBySide")} > - {t("jsonInput.sideBySide", { defaultValue: "Side by side" })} + {t("jsonInput.sideBySide")} )} {!disableExpand && ( diff --git a/src/components/ui/RowEditorSidebar.tsx b/src/components/ui/RowEditorSidebar.tsx index a9d06d92..32e90f51 100644 --- a/src/components/ui/RowEditorSidebar.tsx +++ b/src/components/ui/RowEditorSidebar.tsx @@ -88,10 +88,8 @@ export const RowEditorSidebar = ({ diff --git a/src/components/ui/TextExpansionEditor.tsx b/src/components/ui/TextExpansionEditor.tsx index dd052a3c..0a9a2cff 100644 --- a/src/components/ui/TextExpansionEditor.tsx +++ b/src/components/ui/TextExpansionEditor.tsx @@ -67,10 +67,10 @@ export const TextExpansionEditor = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("textInput.diff", { defaultValue: "Diff" })} + title={t("textInput.diff")} > - {t("textInput.diff", { defaultValue: "Diff" })} + {t("textInput.diff")} {hasDiff && ( - {t("textInput.sideBySide", { defaultValue: "Side by side" })} + {t("textInput.sideBySide")} )}
@@ -113,7 +113,7 @@ export const TextExpansionEditor = ({ disabled={!isDirty} className="px-3 py-1 bg-blue-600 hover:bg-blue-500 disabled:opacity-40 disabled:cursor-not-allowed text-white rounded font-medium transition-colors" > - {t("textViewer.save", { defaultValue: "Save" })} + {t("textViewer.save")}
)} diff --git a/src/components/ui/TextInput.tsx b/src/components/ui/TextInput.tsx index 223359d3..f254c111 100644 --- a/src/components/ui/TextInput.tsx +++ b/src/components/ui/TextInput.tsx @@ -106,10 +106,10 @@ export const TextInput: React.FC = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("textInput.diff", { defaultValue: "Diff" })} + title={t("textInput.diff")} > - {t("textInput.diff", { defaultValue: "Diff" })} + {t("textInput.diff")} {hasDiff && ( = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("textInput.sideBySide", { defaultValue: "Side by side" })} + title={t("textInput.sideBySide")} > - {t("textInput.sideBySide", { defaultValue: "Side by side" })} + {t("textInput.sideBySide")} )}
diff --git a/src/pages/Connections.tsx b/src/pages/Connections.tsx index 685979d0..47ac2814 100644 --- a/src/pages/Connections.tsx +++ b/src/pages/Connections.tsx @@ -212,7 +212,7 @@ export const Connections = () => { await loadConnections(); } catch (e) { console.error("Failed to rename group:", e); - setError(t("groups.renameError", { defaultValue: "Failed to rename group" }) + `: ${toErrorMessage(e)}`); + setError(t("groups.renameError") + `: ${toErrorMessage(e)}`); } }; @@ -228,7 +228,7 @@ export const Connections = () => { await loadConnections(); } catch (e) { console.error("Failed to delete group:", e); - setError(t("groups.deleteError", { defaultValue: "Failed to delete group" }) + `: ${toErrorMessage(e)}`); + setError(t("groups.deleteError") + `: ${toErrorMessage(e)}`); } }, }); @@ -243,7 +243,7 @@ export const Connections = () => { await loadConnections(); } catch (e) { console.error("Failed to move connection:", e); - setError(t("groups.moveError", { defaultValue: "Failed to move connection" }) + `: ${toErrorMessage(e)}`); + setError(t("groups.moveError") + `: ${toErrorMessage(e)}`); } }; From 98eeb4d76fc5f48b16ddb9874a9bc46f783aeb3d Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Thu, 18 Jun 2026 20:34:24 +0200 Subject: [PATCH 03/22] refactor(i18n): sparse target locales + consistent plurals for Tolgee Prepare for Tolgee import (base language en, sparse targets): - Drop the English placeholders that were filled into non-en locales during normalization; Tolgee tracks them as untranslated instead of importing English text as a real translation. Runtime is unaffected (i18next falls back to en). Genuinely English pre-existing values (CPU, RAM, OK, ...) are kept. - Pluralize 9 stems that were plain in en but plural in ru (clipboardImport.success, dataGrid.deleteRows, connections.connectionCount, ...) so the key shape is consistent across languages on import; also fixes the latent English plural bug (proper _one/_other forms). --- src/i18n/locales/de.json | 152 ++++++---------------------- src/i18n/locales/en.json | 27 +++-- src/i18n/locales/es.json | 185 ++++++---------------------------- src/i18n/locales/fr.json | 152 ++++++---------------------- src/i18n/locales/it.json | 162 ++++++------------------------ src/i18n/locales/ja.json | 131 ++++++------------------ src/i18n/locales/ru.json | 83 ++-------------- src/i18n/locales/zh.json | 210 ++++++--------------------------------- 8 files changed, 212 insertions(+), 890 deletions(-) diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 27365822..4f31085f 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -34,9 +34,7 @@ "noResults": "Keine Ergebnisse gefunden", "error": "Fehler", "success": "Erfolg", - "ok": "OK", - "clear": "Clear", - "refresh": "Refresh" + "ok": "OK" }, "sidebar": { "connections": "Verbindungen", @@ -104,19 +102,6 @@ "procedures": "Prozeduren", "noRoutines": "Keine Routinen gefunden", "refreshRoutines": "Routinen aktualisieren", - "triggers": "Triggers", - "noTriggers": "No triggers found", - "filterTriggers": "Filter triggers...", - "noTriggersMatch": "No triggers match your filter", - "createTrigger": "Create New Trigger", - "editTrigger": "Edit Trigger", - "dropTrigger": "Drop Trigger", - "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", - "viewTriggerDefinition": "View Definition", - "failDropTrigger": "Failed to drop trigger: ", - "failGetTriggerDefinition": "Failed to get trigger definition: ", - "refreshTriggers": "Refresh Triggers", - "onTable": "on {{table}}", "objectSummary": "Objekte", "databases": "Datenbanken", "failGetRoutineDefinition": "Abrufen der Routinen-Definition fehlgeschlagen: ", @@ -243,7 +228,8 @@ "failDuplicate": "Duplizieren der Verbindung fehlgeschlagen", "open": "Öffnen", "pluginDisabled": "Plugin deaktiviert", - "connectionCount": "{{count}} Verbindung(en)", + "connectionCount_one": "{{count}} Verbindung(en)", + "connectionCount_other": "{{count}} Verbindung(en)", "noConnectionsHint": "Erstelle deine erste Verbindung, um loszulegen.", "searchPlaceholder": "Verbindungen suchen...", "noSearchResults": "Keine Verbindung entspricht \"{{query}}\"", @@ -266,20 +252,9 @@ "emoji": "Emoji", "image": "Bild" }, - "previewLabel": "Preview", - "defaultHint": "Using the driver's default icon.", - "emojiSelected": "Selected emoji", - "emojiHint": "Click another emoji below to change.", - "removeEmoji": "Clear", "chooseImage": "Bild auswählen…", "removeImage": "Entfernen", - "imageHint": "PNG, JPG, WebP oder SVG · max. 512 KB", - "errors": {}, - "emojiSearch": "Search emoji…", - "iconNoResults": "No icons match.", - "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", - "iconSearch": "Search icons…", - "noPreview": "No preview" + "imageHint": "PNG, JPG, WebP oder SVG · max. 512 KB" }, "settings": { "general": "Allgemein", @@ -339,9 +314,6 @@ "language": "Sprache", "languageDesc": "Wähle deine bevorzugte Sprache. \"Auto\" verwendet die Systemsprache.", "auto": "Auto (System)", - "timezone": "Timezone", - "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", - "timezoneSearch": "Search timezones...", "projectStatus": "Projektstatus", "roadmapDesc": "Dieses Projekt ist Work in Progress (WIP). Die Kernfunktionen sind stabil, aber wir haben große Pläne.", "support": "Entwicklung unterstützen", @@ -649,12 +621,7 @@ "prefer": "Bevorzugen", "require": "Erforderlich", "verify-ca": "CA prüfen", - "verify-full": "Vollständig prüfen", - "disabled": "Disabled", - "preferred": "Preferred", - "required": "Required", - "verify_ca": "Verify CA", - "verify_identity": "Verify Identity" + "verify-full": "Vollständig prüfen" }, "chooseContext": "Kontext auswählen...", "chooseK8s": "Verbindung auswählen...", @@ -677,20 +644,7 @@ "selectK8sConnection": "K8s-Verbindung auswählen", "selectTypeFirst": "Zuerst Kontext/Namespace/Typ auswählen", "useK8s": "Kubernetes-Port-Forward verwenden", - "useK8sConnection": "Gespeicherte Verbindung", - "connectionString": "Connection String", - "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", - "general": "General", - "loadDatabasesHint": "Click Load Databases to fetch available databases.", - "noGeneralSettings": "No general settings available for this driver.", - "selectDatabasesHint": "Select the databases to include in this connection.", - "sshNotAvailable": "SSH is not available for this driver.", - "sslCa": "CA Certificate", - "sslCert": "Client Certificate", - "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", - "sslDescription": "Configure SSL/TLS for secure database connections (optional).", - "sslKey": "Client Key", - "unnamedConnection": "Unnamed connection" + "useK8sConnection": "Gespeicherte Verbindung" }, "sshConnections": { "title": "SSH-Verbindungen", @@ -719,7 +673,8 @@ "newRow": "NEU", "noData": "Keine Daten zum Anzeigen", "deleteRow": "Zeile löschen", - "deleteRows": "{{count}} Zeilen löschen", + "deleteRows_one": "{{count}} Zeilen löschen", + "deleteRows_other": "{{count}} Zeilen löschen", "updateFailed": "Aktualisierung fehlgeschlagen: ", "null": "null", "sortByAsc": "Nach {{col}} ASC sortieren", @@ -741,7 +696,6 @@ "previewReferenced": "Verknüpften Datensatz anzeigen", "openReferenced": "Referenzierte Zeile in {{table}} öffnen" }, - "editRow": {}, "newRow": { "title": "Neue Zeile", "insert": "Einfügen", @@ -918,7 +872,8 @@ "invalidFile": "Ungültiges Notebook-Dateiformat", "importSuccess": "Notebook erfolgreich importiert", "exportSuccess": "Notebook erfolgreich exportiert", - "cellResult": "{{count}} Zeilen · {{time}} ms", + "cellResult_one": "{{count}} Zeilen · {{time}} ms", + "cellResult_other": "{{count}} Zeilen · {{time}} ms", "stopOnError": "Bei Fehler stoppen", "stopOnErrorTooltip": "Ausführung stoppen, wenn eine Zelle fehlschlägt", "runAllComplete": "Alle Ausführungen abgeschlossen", @@ -969,12 +924,12 @@ "stopOnError": "Bei Fehler stoppen umgeschaltet", "other": "Notebook bearbeitet" } - }, - "exportError": "Export failed" + } }, "querySelection": { "title": "Abfrage zum Ausführen auswählen", - "queriesFound": "{{count}} Abfragen gefunden", + "queriesFound_one": "{{count}} Abfragen gefunden", + "queriesFound_other": "{{count}} Abfragen gefunden", "runAll": "Alle ausführen", "runSelected": "Ausgewählte ausführen ({{count}})", "runSingle": "Diese Abfrage ausführen", @@ -983,7 +938,8 @@ }, "explainSelection": { "title": "Abfrage zum Erklären auswählen", - "queriesFound": "{{count}} erklärbare Abfragen gefunden", + "queriesFound_one": "{{count}} erklärbare Abfragen gefunden", + "queriesFound_other": "{{count}} erklärbare Abfragen gefunden", "explainSingle": "Diese Abfrage erklären", "explainFocused": "fokussierte erklären", "explainNth": "n-te erklären", @@ -1021,8 +977,7 @@ "nameRequired": "Tabellenname ist erforderlich", "colRequired": "Mindestens eine Spalte ist erforderlich", "failCreate": "Erstellen der Tabelle fehlgeschlagen: ", - "requiresExtension": "Erfordert Erweiterung: {{ext}}", - "sqlPreview": "SQL Preview" + "requiresExtension": "Erfordert Erweiterung: {{ext}}" }, "schema": { "title": "Schema: {{table}}", @@ -1032,8 +987,7 @@ "colNullable": "Nullable", "colKey": "Schlüssel", "yes": "JA", - "no": "NEIN", - "close": "Close" + "no": "NEIN" }, "generateSQL": { "title": "Generiertes SQL: {{table}}", @@ -1088,8 +1042,7 @@ "onUpdate": "Bei Aktualisierung", "sqlPreview": "SQL-Vorschau", "create": "Fremdschlüssel erstellen", - "cancel": "Abbrechen", - "nameRequired": "Name is required" + "cancel": "Abbrechen" }, "healthCheck": { "title": "Verbindung verloren", @@ -1130,36 +1083,7 @@ "createSuccess": "Ansicht erfolgreich erstellt", "alterSuccess": "Ansicht erfolgreich aktualisiert", "saveError": "Speichern der Ansicht fehlgeschlagen: ", - "confirmAlter": "Möchtest du die Ansicht \"{{view}}\" wirklich ändern?", - "alterView": "Alter View" - }, - "triggers": { - "createTrigger": "Create Trigger", - "editTrigger": "Edit Trigger", - "createSubtitle": "Create a new database trigger", - "editSubtitle": "Editing trigger: {{name}}", - "triggerName": "Trigger Name", - "triggerNamePlaceholder": "e.g. before_insert_user", - "tableName": "Table Name", - "tableNamePlaceholder": "e.g. users", - "timing": "Timing", - "events": "Events", - "body": "Trigger Body (SQL)", - "sqlPreview": "Generated SQL Preview", - "rawSql": "Raw SQL", - "guidedMode": "Guided", - "rawSqlMode": "Raw SQL", - "loading": "Loading trigger definition...", - "create": "Create Trigger", - "save": "Save Changes", - "sqlRequired": "Trigger SQL is required", - "failLoadDefinition": "Failed to load trigger definition: ", - "dropError": "Failed to drop existing trigger: ", - "saveError": "Failed to save trigger: ", - "createSuccess": "Trigger created successfully", - "updateSuccess": "Trigger updated successfully", - "recreateTrigger": "Recreate Trigger", - "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" + "confirmAlter": "Möchtest du die Ansicht \"{{view}}\" wirklich ändern?" }, "community": { "title": "Der Community beitreten", @@ -1223,9 +1147,7 @@ "raw": "Rohtext" }, "expand": "Aufklappen", - "search": "Suchen", - "diff": "Diff", - "sideBySide": "Side by side" + "search": "Suchen" }, "jsonViewer": { "close": "Schließen", @@ -1235,21 +1157,10 @@ "expand": "JSON-Baum ein-/ausklappen", "openViewer": "JSON-Viewer öffnen" }, - "textCell": { - "expand": "Toggle inline text editor" - }, - "textInput": { - "diff": "Diff", - "sideBySide": "Side by side" - }, - "textViewer": { - "save": "Save" - }, "rowEditor": { "title": "Zeile bearbeiten", "subtitle": "Zeile #{{row}}", - "enterValue": "Wert eingeben...", - "resize": "Resize sidebar" + "enterValue": "Wert eingeben..." }, "contextMenu": { "openSidebar": "Seitenleisten-Editor öffnen", @@ -1355,10 +1266,7 @@ "ungrouped": "Ungruppiert", "removeFromGroup": "Aus Gruppe entfernen", "groupName": "Gruppenname", - "createError": "Erstellen der Gruppe fehlgeschlagen", - "deleteError": "Failed to delete group", - "moveError": "Failed to move connection", - "renameError": "Failed to rename group" + "createError": "Erstellen der Gruppe fehlgeschlagen" }, "queryModal": { "database": "Datenbank", @@ -1385,16 +1293,20 @@ "dataPreview": "Datenvorschau", "sample": "Beispielwerte", "lowConfidence": "Gemischte Typen erkannt, Standard TEXT", - "rowsTotal": "{{count}} Zeilen", + "rowsTotal_one": "{{count}} Zeilen", + "rowsTotal_other": "{{count}} Zeilen", "showingFirst": "erste {{count}}", - "import": "{{count}} Zeilen importieren", + "import_one": "{{count}} Zeilen importieren", + "import_other": "{{count}} Zeilen importieren", "importing": "Importiert...", - "success": "{{count}} Zeilen in \"{{table}}\" importiert", + "success_one": "{{count}} Zeilen in \"{{table}}\" importiert", + "success_other": "{{count}} Zeilen in \"{{table}}\" importiert", "tableCreated": "Neue Tabelle erstellt", "openTable": "Schließen", "noData": "Keine Daten in der Zwischenablage", "retry": "Erneut versuchen", - "warningsCount": "{{count}} Parser-Warnungen", + "warningsCount_one": "{{count}} Parser-Warnungen", + "warningsCount_other": "{{count}} Parser-Warnungen", "columnsLabel": "Spalten", "rowsLabel": "Zeilen", "stepConfigure": "Ziel konfigurieren", @@ -1483,9 +1395,7 @@ "write": "Schreiben", "ddl": "DDL", "unknown": "Unbekannt" - }, - "exportCsv": "Export CSV", - "exportJson": "Export JSON" + } }, "aiApproval": { "title": "KI möchte in die Datenbank schreiben", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index e2699901..bb80eb57 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -243,7 +243,8 @@ "failDuplicate": "Failed to duplicate connection", "open": "Open", "pluginDisabled": "Plugin disabled", - "connectionCount": "{{count}} connection(s)", + "connectionCount_one": "{{count}} connection", + "connectionCount_other": "{{count}} connections", "noConnectionsHint": "Create your first connection to get started.", "searchPlaceholder": "Search connections...", "noSearchResults": "No connections match \"{{query}}\"", @@ -719,7 +720,8 @@ "newRow": "NEW", "noData": "No data to display", "deleteRow": "Delete Row", - "deleteRows": "Delete {{count}} rows", + "deleteRows_one": "Delete {{count}} row", + "deleteRows_other": "Delete {{count}} rows", "updateFailed": "Update failed: ", "null": "null", "sortByAsc": "Sort by {{col}} ASC", @@ -918,7 +920,8 @@ "invalidFile": "Invalid notebook file format", "importSuccess": "Notebook imported successfully", "exportSuccess": "Notebook exported successfully", - "cellResult": "{{count}} rows · {{time}}ms", + "cellResult_one": "{{count}} row · {{time}}ms", + "cellResult_other": "{{count}} rows · {{time}}ms", "stopOnError": "Stop on Error", "stopOnErrorTooltip": "Stop execution when a cell fails", "runAllComplete": "Run All Complete", @@ -974,7 +977,8 @@ }, "querySelection": { "title": "Select Query to Execute", - "queriesFound": "{{count}} queries found", + "queriesFound_one": "{{count}} query found", + "queriesFound_other": "{{count}} queries found", "runAll": "Run All", "runSelected": "Run Selected ({{count}})", "runSingle": "Run this query", @@ -983,7 +987,8 @@ }, "explainSelection": { "title": "Select Query to Explain", - "queriesFound": "{{count}} explainable queries found", + "queriesFound_one": "{{count}} explainable query found", + "queriesFound_other": "{{count}} explainable queries found", "explainSingle": "Explain this query", "explainFocused": "explain focused", "explainNth": "explain Nth", @@ -1385,16 +1390,20 @@ "dataPreview": "Data Preview", "sample": "Sample values", "lowConfidence": "Mixed types detected, defaulted to TEXT", - "rowsTotal": "{{count}} rows", + "rowsTotal_one": "{{count}} row", + "rowsTotal_other": "{{count}} rows", "showingFirst": "showing first {{count}}", - "import": "Import {{count}} rows", + "import_one": "Import {{count}} row", + "import_other": "Import {{count}} rows", "importing": "Importing...", - "success": "{{count}} rows imported into \"{{table}}\"", + "success_one": "{{count}} row imported into \"{{table}}\"", + "success_other": "{{count}} rows imported into \"{{table}}\"", "tableCreated": "New table created", "openTable": "Close", "noData": "No data found in clipboard", "retry": "Try again", - "warningsCount": "{{count}} parsing warnings", + "warningsCount_one": "{{count}} parsing warning", + "warningsCount_other": "{{count}} parsing warnings", "columnsLabel": "columns", "rowsLabel": "rows", "stepConfigure": "Configure destination", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 9219c49a..f279736d 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -34,9 +34,7 @@ "noResults": "No se encontraron resultados", "error": "Error", "success": "Éxito", - "ok": "OK", - "clear": "Clear", - "refresh": "Refresh" + "ok": "OK" }, "sidebar": { "connections": "Conexiones", @@ -104,19 +102,6 @@ "procedures": "Procedimientos", "noRoutines": "No se encontraron rutinas", "refreshRoutines": "Actualizar Rutinas", - "triggers": "Triggers", - "noTriggers": "No triggers found", - "filterTriggers": "Filter triggers...", - "noTriggersMatch": "No triggers match your filter", - "createTrigger": "Create New Trigger", - "editTrigger": "Edit Trigger", - "dropTrigger": "Drop Trigger", - "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", - "viewTriggerDefinition": "View Definition", - "failDropTrigger": "Failed to drop trigger: ", - "failGetTriggerDefinition": "Failed to get trigger definition: ", - "refreshTriggers": "Refresh Triggers", - "onTable": "on {{table}}", "objectSummary": "Objetos", "databases": "Bases de Datos", "failGetRoutineDefinition": "Error al obtener la definición de la rutina: ", @@ -243,7 +228,8 @@ "failDuplicate": "Error al duplicar la conexión", "open": "Abierta", "pluginDisabled": "Plugin desactivado", - "connectionCount": "{{count}} conexión/es", + "connectionCount_one": "{{count}} conexión/es", + "connectionCount_other": "{{count}} conexión/es", "noConnectionsHint": "Crea tu primera conexión para empezar.", "searchPlaceholder": "Buscar conexiones...", "noSearchResults": "Ninguna conexión coincide con \"{{query}}\"", @@ -273,13 +259,7 @@ "removeEmoji": "Quitar", "chooseImage": "Elegir imagen…", "removeImage": "Quitar", - "imageHint": "PNG, JPG, WebP o SVG · máx. 512 KB", - "errors": {}, - "emojiSearch": "Search emoji…", - "iconNoResults": "No icons match.", - "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", - "iconSearch": "Search icons…", - "noPreview": "No preview" + "imageHint": "PNG, JPG, WebP o SVG · máx. 512 KB" }, "settings": { "general": "General", @@ -339,9 +319,6 @@ "language": "Idioma", "languageDesc": "Elige tu idioma preferido. 'Auto' usará el idioma del sistema.", "auto": "Auto (Sistema)", - "timezone": "Timezone", - "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", - "timezoneSearch": "Search timezones...", "projectStatus": "Estado del Proyecto", "roadmapDesc": "Este proyecto es un Work In Progress (WIP). Las funciones principales son estables, pero tenemos grandes planes.", "support": "Apoya el Desarrollo", @@ -649,12 +626,7 @@ "prefer": "Preferido", "require": "Requerido", "verify-ca": "Verificar CA", - "verify-full": "Verificación completa", - "disabled": "Disabled", - "preferred": "Preferred", - "required": "Required", - "verify_ca": "Verify CA", - "verify_identity": "Verify Identity" + "verify-full": "Verificación completa" }, "chooseContext": "Elige un contexto...", "chooseK8s": "Elige una conexión...", @@ -677,20 +649,7 @@ "selectK8sConnection": "Selecciona conexión de K8s", "selectTypeFirst": "Selecciona primero contexto/namespace/tipo", "useK8s": "Usar Port-Forward de Kubernetes", - "useK8sConnection": "Conexión guardada", - "connectionString": "Connection String", - "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", - "general": "General", - "loadDatabasesHint": "Click Load Databases to fetch available databases.", - "noGeneralSettings": "No general settings available for this driver.", - "selectDatabasesHint": "Select the databases to include in this connection.", - "sshNotAvailable": "SSH is not available for this driver.", - "sslCa": "CA Certificate", - "sslCert": "Client Certificate", - "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", - "sslDescription": "Configure SSL/TLS for secure database connections (optional).", - "sslKey": "Client Key", - "unnamedConnection": "Unnamed connection" + "useK8sConnection": "Conexión guardada" }, "sshConnections": { "title": "Conexiones SSH", @@ -719,7 +678,8 @@ "newRow": "NUEVA", "noData": "No hay datos para mostrar", "deleteRow": "Eliminar Fila", - "deleteRows": "Eliminar {{count}} filas", + "deleteRows_one": "Eliminar {{count}} filas", + "deleteRows_other": "Eliminar {{count}} filas", "updateFailed": "Error en la actualización: ", "null": "null", "sortByAsc": "Ordenar por {{col}} ASC", @@ -732,16 +692,10 @@ "copyColumnNameTable": "Copiar como tabla.columna", "copied": "Copiado al portapapeles", "duplicateRow": "Duplicar Fila", - "revertSelected": "Revert Selected", - "setGenerate": "Set GENERATED", - "setNull": "Set NULL", - "setDefault": "Set DEFAULT", - "setEmpty": "Set EMPTY", "setServerNow": "Insertar marca de tiempo actual", "previewReferenced": "Vista previa del registro relacionado", "openReferenced": "Abrir fila referenciada en {{table}}" }, - "editRow": {}, "newRow": { "title": "Nueva Fila", "insert": "Insertar", @@ -773,7 +727,6 @@ "jumpToPage": "Clic para ir a la página", "loadRowCount": "Cargar conteo de filas", "executePrompt": "Ejecuta una consulta para ver resultados", - "tableRunPrompt": "Press Run (Ctrl/Command+F5) to load table data", "closeTab": "Cerrar Pestaña", "closeOthers": "Cerrar Otras Pestañas", "closeRight": "Cerrar Pestañas a la Derecha", @@ -832,8 +785,6 @@ "convertToConsole": "Convertir a Consola", "parameters": "Parámetros", "paramValuePlaceholder": "Valor (ej. 'texto' o 123)", - "failedCreateRow": "Failed to create new row: ", - "failedProcessInsertions": "Failed to process insertions: ", "newNotebook": "Nuevo Notebook", "visualExplain": { "title": "Visual Explain", @@ -918,7 +869,8 @@ "invalidFile": "Formato de archivo notebook no válido", "importSuccess": "Notebook importado exitosamente", "exportSuccess": "Notebook exportado exitosamente", - "cellResult": "{{count}} filas · {{time}}ms", + "cellResult_one": "{{count}} filas · {{time}}ms", + "cellResult_other": "{{count}} filas · {{time}}ms", "stopOnError": "Detener en Error", "stopOnErrorTooltip": "Detener la ejecución cuando una celda falla", "runAllComplete": "Ejecución Completada", @@ -969,12 +921,12 @@ "stopOnError": "Detener en error alternado", "other": "Notebook editado" } - }, - "exportError": "Export failed" + } }, "querySelection": { "title": "Seleccionar consulta a ejecutar", - "queriesFound": "{{count}} consultas encontradas", + "queriesFound_one": "{{count}} consultas encontradas", + "queriesFound_other": "{{count}} consultas encontradas", "runAll": "Ejecutar todas", "runSelected": "Ejecutar seleccionadas ({{count}})", "runSingle": "Ejecutar esta consulta", @@ -983,7 +935,8 @@ }, "explainSelection": { "title": "Seleccionar consulta a analizar", - "queriesFound": "{{count}} consultas analizables encontradas", + "queriesFound_one": "{{count}} consultas analizables encontradas", + "queriesFound_other": "{{count}} consultas analizables encontradas", "explainSingle": "Analizar esta consulta", "explainFocused": "analizar seleccionada", "explainNth": "analizar N-esima", @@ -1021,8 +974,7 @@ "nameRequired": "El nombre de la tabla es requerido", "colRequired": "Se requiere al menos una columna", "failCreate": "Error al crear la tabla: ", - "requiresExtension": "Requiere extensión: {{ext}}", - "sqlPreview": "SQL Preview" + "requiresExtension": "Requiere extensión: {{ext}}" }, "schema": { "title": "Esquema: {{table}}", @@ -1032,8 +984,7 @@ "colNullable": "Nullable", "colKey": "Clave", "yes": "SÍ", - "no": "NO", - "close": "Close" + "no": "NO" }, "generateSQL": { "title": "SQL Generado: {{table}}", @@ -1088,8 +1039,7 @@ "onUpdate": "Al Actualizar", "sqlPreview": "Vista Previa SQL", "create": "Crear Clave Foránea", - "cancel": "Cancelar", - "nameRequired": "Name is required" + "cancel": "Cancelar" }, "healthCheck": { "title": "Conexión Perdida", @@ -1130,55 +1080,7 @@ "createSuccess": "Vista creada correctamente", "alterSuccess": "Vista actualizada correctamente", "saveError": "Error al guardar la vista: ", - "confirmAlter": "¿Estás seguro de que deseas modificar la vista \"{{view}}\"?", - "alterView": "Alter View" - }, - "triggers": { - "createTrigger": "Create Trigger", - "editTrigger": "Edit Trigger", - "createSubtitle": "Create a new database trigger", - "editSubtitle": "Editing trigger: {{name}}", - "triggerName": "Trigger Name", - "triggerNamePlaceholder": "e.g. before_insert_user", - "tableName": "Table Name", - "tableNamePlaceholder": "e.g. users", - "timing": "Timing", - "events": "Events", - "body": "Trigger Body (SQL)", - "sqlPreview": "Generated SQL Preview", - "rawSql": "Raw SQL", - "guidedMode": "Guided", - "rawSqlMode": "Raw SQL", - "loading": "Loading trigger definition...", - "create": "Create Trigger", - "save": "Save Changes", - "sqlRequired": "Trigger SQL is required", - "failLoadDefinition": "Failed to load trigger definition: ", - "dropError": "Failed to drop existing trigger: ", - "saveError": "Failed to save trigger: ", - "createSuccess": "Trigger created successfully", - "updateSuccess": "Trigger updated successfully", - "recreateTrigger": "Recreate Trigger", - "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" - }, - "community": { - "title": "Join the Community", - "subtitle": "Help tabularis grow", - "description": "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.", - "starTitle": "Star on GitHub", - "starDesc": "A star helps others discover the project", - "discordTitle": "Join Discord", - "discordDesc": "Chat with the community, get help, suggest features", - "dismiss": "Maybe later" - }, - "whatsNew": { - "title": "What's New", - "subtitle": "Version {{version}}", - "features": "New Features", - "bugFixes": "Bug Fixes", - "breakingChanges": "Breaking Changes", - "readMore": "Read more", - "dismiss": "Got it" + "confirmAlter": "¿Estás seguro de que deseas modificar la vista \"{{view}}\"?" }, "dump": { "title": "Exportar Base de Datos", @@ -1223,9 +1125,7 @@ "raw": "Sin formato" }, "expand": "Expandir", - "search": "Buscar", - "diff": "Diff", - "sideBySide": "Side by side" + "search": "Buscar" }, "jsonViewer": { "close": "Cerrar", @@ -1235,21 +1135,10 @@ "expand": "Expandir/contraer árbol JSON", "openViewer": "Abrir visor JSON" }, - "textCell": { - "expand": "Toggle inline text editor" - }, - "textInput": { - "diff": "Diff", - "sideBySide": "Side by side" - }, - "textViewer": { - "save": "Save" - }, "rowEditor": { "title": "Editar Fila", "subtitle": "Fila #{{row}}", - "enterValue": "Ingresar valor...", - "resize": "Resize sidebar" + "enterValue": "Ingresar valor..." }, "contextMenu": { "openSidebar": "Abrir Barra Lateral", @@ -1344,22 +1233,6 @@ } } }, - "groups": { - "newGroup": "New Group", - "rename": "Rename", - "delete": "Delete", - "deleteConfirm": "Are you sure you want to delete group \"{{name}}\"? Connections in this group will be moved to ungrouped.", - "deleteTitle": "Delete Group", - "connection": "connection", - "connections": "connections", - "ungrouped": "Ungrouped", - "removeFromGroup": "Remove from Group", - "groupName": "Group name", - "createError": "Failed to create group", - "deleteError": "Failed to delete group", - "moveError": "Failed to move connection", - "renameError": "Failed to rename group" - }, "queryModal": { "database": "Base de datos", "noDatabase": "Sin base de datos" @@ -1385,16 +1258,20 @@ "dataPreview": "Vista Previa de Datos", "sample": "Valores de muestra", "lowConfidence": "Tipos mixtos detectados, por defecto TEXT", - "rowsTotal": "{{count}} filas", + "rowsTotal_one": "{{count}} filas", + "rowsTotal_other": "{{count}} filas", "showingFirst": "primeras {{count}}", - "import": "Importar {{count}} filas", + "import_one": "Importar {{count}} filas", + "import_other": "Importar {{count}} filas", "importing": "Importando...", - "success": "{{count}} filas importadas en \"{{table}}\"", + "success_one": "{{count}} filas importadas en \"{{table}}\"", + "success_other": "{{count}} filas importadas en \"{{table}}\"", "tableCreated": "Nueva tabla creada", "openTable": "Cerrar", "noData": "No hay datos en el portapapeles", "retry": "Reintentar", - "warningsCount": "{{count}} avisos de análisis", + "warningsCount_one": "{{count}} avisos de análisis", + "warningsCount_other": "{{count}} avisos de análisis", "columnsLabel": "columnas", "rowsLabel": "filas", "stepConfigure": "Configurar destino", @@ -1483,9 +1360,7 @@ "write": "Escritura", "ddl": "DDL", "unknown": "Desconocido" - }, - "exportCsv": "Export CSV", - "exportJson": "Export JSON" + } }, "aiApproval": { "title": "La IA quiere ejecutar una escritura en la base de datos", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 41bae944..7c71dc27 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -34,9 +34,7 @@ "noResults": "Aucun résultat trouvé", "error": "Erreur", "success": "Succès", - "ok": "OK", - "clear": "Clear", - "refresh": "Refresh" + "ok": "OK" }, "sidebar": { "connections": "Connexions", @@ -104,19 +102,6 @@ "procedures": "Procédures", "noRoutines": "Aucune routine trouvée", "refreshRoutines": "Actualiser les routines", - "triggers": "Triggers", - "noTriggers": "No triggers found", - "filterTriggers": "Filter triggers...", - "noTriggersMatch": "No triggers match your filter", - "createTrigger": "Create New Trigger", - "editTrigger": "Edit Trigger", - "dropTrigger": "Drop Trigger", - "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", - "viewTriggerDefinition": "View Definition", - "failDropTrigger": "Failed to drop trigger: ", - "failGetTriggerDefinition": "Failed to get trigger definition: ", - "refreshTriggers": "Refresh Triggers", - "onTable": "on {{table}}", "objectSummary": "Objets", "databases": "Bases de données", "failGetRoutineDefinition": "Échec de récupération de la définition de la routine : ", @@ -243,7 +228,8 @@ "failDuplicate": "Échec de duplication de la connexion", "open": "Ouvrir", "pluginDisabled": "Plugin désactivé", - "connectionCount": "{{count}} connexion(s)", + "connectionCount_one": "{{count}} connexion(s)", + "connectionCount_other": "{{count}} connexion(s)", "noConnectionsHint": "Créez votre première connexion pour commencer.", "searchPlaceholder": "Rechercher des connexions...", "noSearchResults": "Aucune connexion ne correspond à \"{{query}}\"", @@ -266,20 +252,9 @@ "emoji": "Emoji", "image": "Image" }, - "previewLabel": "Preview", - "defaultHint": "Using the driver's default icon.", - "emojiSelected": "Selected emoji", - "emojiHint": "Click another emoji below to change.", - "removeEmoji": "Clear", "chooseImage": "Choisir une image…", "removeImage": "Supprimer", - "imageHint": "PNG, JPG, WebP ou SVG · max. 512 Ko", - "errors": {}, - "emojiSearch": "Search emoji…", - "iconNoResults": "No icons match.", - "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", - "iconSearch": "Search icons…", - "noPreview": "No preview" + "imageHint": "PNG, JPG, WebP ou SVG · max. 512 Ko" }, "settings": { "general": "Général", @@ -339,9 +314,6 @@ "language": "Langue", "languageDesc": "Choisissez votre langue préférée. \"Auto\" utilisera la langue de votre système.", "auto": "Auto (Système)", - "timezone": "Timezone", - "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", - "timezoneSearch": "Search timezones...", "projectStatus": "État du projet", "roadmapDesc": "Ce projet est un Work In Progress (WIP). Les fonctionnalités principales sont stables, mais nous avons de grands projets.", "support": "Soutenir le développement", @@ -649,12 +621,7 @@ "prefer": "Préférer", "require": "Exiger", "verify-ca": "Vérifier CA", - "verify-full": "Vérification complète", - "disabled": "Disabled", - "preferred": "Preferred", - "required": "Required", - "verify_ca": "Verify CA", - "verify_identity": "Verify Identity" + "verify-full": "Vérification complète" }, "chooseContext": "Choisir un contexte...", "chooseK8s": "Choisir une connexion...", @@ -677,20 +644,7 @@ "selectK8sConnection": "Sélectionner une connexion K8s", "selectTypeFirst": "Sélectionnez d'abord contexte/namespace/type", "useK8s": "Utiliser le Port-Forward Kubernetes", - "useK8sConnection": "Connexion enregistrée", - "connectionString": "Connection String", - "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", - "general": "General", - "loadDatabasesHint": "Click Load Databases to fetch available databases.", - "noGeneralSettings": "No general settings available for this driver.", - "selectDatabasesHint": "Select the databases to include in this connection.", - "sshNotAvailable": "SSH is not available for this driver.", - "sslCa": "CA Certificate", - "sslCert": "Client Certificate", - "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", - "sslDescription": "Configure SSL/TLS for secure database connections (optional).", - "sslKey": "Client Key", - "unnamedConnection": "Unnamed connection" + "useK8sConnection": "Connexion enregistrée" }, "sshConnections": { "title": "Connexions SSH", @@ -719,7 +673,8 @@ "newRow": "NOUVELLE", "noData": "Aucune donnée à afficher", "deleteRow": "Supprimer la ligne", - "deleteRows": "Supprimer {{count}} lignes", + "deleteRows_one": "Supprimer {{count}} lignes", + "deleteRows_other": "Supprimer {{count}} lignes", "updateFailed": "Échec de la mise à jour : ", "null": "null", "sortByAsc": "Trier par {{col}} ASC", @@ -741,7 +696,6 @@ "previewReferenced": "Aperçu de l'enregistrement lié", "openReferenced": "Ouvrir la ligne référencée dans {{table}}" }, - "editRow": {}, "newRow": { "title": "Nouvelle ligne", "insert": "Insérer", @@ -918,7 +872,8 @@ "invalidFile": "Format de fichier notebook invalide", "importSuccess": "Notebook importé avec succès", "exportSuccess": "Notebook exporté avec succès", - "cellResult": "{{count}} lignes · {{time}} ms", + "cellResult_one": "{{count}} lignes · {{time}} ms", + "cellResult_other": "{{count}} lignes · {{time}} ms", "stopOnError": "Arrêter en cas d’erreur", "stopOnErrorTooltip": "Arrêter l’exécution lorsqu’une cellule échoue", "runAllComplete": "Exécution complète", @@ -969,12 +924,12 @@ "stopOnError": "Arrêt en cas d'erreur basculé", "other": "Notebook modifié" } - }, - "exportError": "Export failed" + } }, "querySelection": { "title": "Sélectionner la requête à exécuter", - "queriesFound": "{{count}} requêtes trouvées", + "queriesFound_one": "{{count}} requêtes trouvées", + "queriesFound_other": "{{count}} requêtes trouvées", "runAll": "Tout exécuter", "runSelected": "Exécuter la sélection ({{count}})", "runSingle": "Exécuter cette requête", @@ -983,7 +938,8 @@ }, "explainSelection": { "title": "Sélectionner la requête à expliquer", - "queriesFound": "{{count}} requêtes explicables trouvées", + "queriesFound_one": "{{count}} requêtes explicables trouvées", + "queriesFound_other": "{{count}} requêtes explicables trouvées", "explainSingle": "Expliquer cette requête", "explainFocused": "expliquer la sélection", "explainNth": "expliquer la n-ième", @@ -1021,8 +977,7 @@ "nameRequired": "Le nom de la table est requis", "colRequired": "Au moins une colonne est requise", "failCreate": "Échec de la création de la table : ", - "requiresExtension": "Extension requise : {{ext}}", - "sqlPreview": "SQL Preview" + "requiresExtension": "Extension requise : {{ext}}" }, "schema": { "title": "Schéma : {{table}}", @@ -1032,8 +987,7 @@ "colNullable": "Nullable", "colKey": "Clé", "yes": "OUI", - "no": "NON", - "close": "Close" + "no": "NON" }, "generateSQL": { "title": "SQL généré : {{table}}", @@ -1088,8 +1042,7 @@ "onUpdate": "À la mise à jour", "sqlPreview": "Aperçu SQL", "create": "Créer la clé étrangère", - "cancel": "Annuler", - "nameRequired": "Name is required" + "cancel": "Annuler" }, "healthCheck": { "title": "Connexion perdue", @@ -1130,36 +1083,7 @@ "createSuccess": "Vue créée avec succès", "alterSuccess": "Vue mise à jour avec succès", "saveError": "Échec de l’enregistrement de la vue : ", - "confirmAlter": "Voulez-vous vraiment modifier la vue \"{{view}}\" ?", - "alterView": "Alter View" - }, - "triggers": { - "createTrigger": "Create Trigger", - "editTrigger": "Edit Trigger", - "createSubtitle": "Create a new database trigger", - "editSubtitle": "Editing trigger: {{name}}", - "triggerName": "Trigger Name", - "triggerNamePlaceholder": "e.g. before_insert_user", - "tableName": "Table Name", - "tableNamePlaceholder": "e.g. users", - "timing": "Timing", - "events": "Events", - "body": "Trigger Body (SQL)", - "sqlPreview": "Generated SQL Preview", - "rawSql": "Raw SQL", - "guidedMode": "Guided", - "rawSqlMode": "Raw SQL", - "loading": "Loading trigger definition...", - "create": "Create Trigger", - "save": "Save Changes", - "sqlRequired": "Trigger SQL is required", - "failLoadDefinition": "Failed to load trigger definition: ", - "dropError": "Failed to drop existing trigger: ", - "saveError": "Failed to save trigger: ", - "createSuccess": "Trigger created successfully", - "updateSuccess": "Trigger updated successfully", - "recreateTrigger": "Recreate Trigger", - "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" + "confirmAlter": "Voulez-vous vraiment modifier la vue \"{{view}}\" ?" }, "community": { "title": "Rejoindre la communauté", @@ -1223,9 +1147,7 @@ "raw": "Brut" }, "expand": "Développer", - "search": "Rechercher", - "diff": "Diff", - "sideBySide": "Side by side" + "search": "Rechercher" }, "jsonViewer": { "close": "Fermer", @@ -1235,21 +1157,10 @@ "expand": "Afficher/masquer l'arbre JSON", "openViewer": "Ouvrir le visualiseur JSON" }, - "textCell": { - "expand": "Toggle inline text editor" - }, - "textInput": { - "diff": "Diff", - "sideBySide": "Side by side" - }, - "textViewer": { - "save": "Save" - }, "rowEditor": { "title": "Modifier la ligne", "subtitle": "Ligne n°{{row}}", - "enterValue": "Saisir une valeur...", - "resize": "Resize sidebar" + "enterValue": "Saisir une valeur..." }, "contextMenu": { "openSidebar": "Ouvrir l’éditeur latéral", @@ -1355,10 +1266,7 @@ "ungrouped": "Non groupé", "removeFromGroup": "Retirer du groupe", "groupName": "Nom du groupe", - "createError": "Échec de création du groupe", - "deleteError": "Failed to delete group", - "moveError": "Failed to move connection", - "renameError": "Failed to rename group" + "createError": "Échec de création du groupe" }, "queryModal": { "database": "Base de données", @@ -1385,16 +1293,20 @@ "dataPreview": "Aperçu des données", "sample": "Exemples de valeurs", "lowConfidence": "Types mixtes détectés, défaut TEXT", - "rowsTotal": "{{count}} lignes", + "rowsTotal_one": "{{count}} lignes", + "rowsTotal_other": "{{count}} lignes", "showingFirst": "premières {{count}}", - "import": "Importer {{count}} lignes", + "import_one": "Importer {{count}} lignes", + "import_other": "Importer {{count}} lignes", "importing": "Importation...", - "success": "{{count}} lignes importées dans \"{{table}}\"", + "success_one": "{{count}} lignes importées dans \"{{table}}\"", + "success_other": "{{count}} lignes importées dans \"{{table}}\"", "tableCreated": "Nouvelle table créée", "openTable": "Fermer", "noData": "Aucune donnée dans le presse-papiers", "retry": "Réessayer", - "warningsCount": "{{count}} avertissements d'analyse", + "warningsCount_one": "{{count}} avertissements d'analyse", + "warningsCount_other": "{{count}} avertissements d'analyse", "columnsLabel": "colonnes", "rowsLabel": "lignes", "stepConfigure": "Configurer la destination", @@ -1483,9 +1395,7 @@ "write": "Écriture", "ddl": "DDL", "unknown": "Inconnu" - }, - "exportCsv": "Export CSV", - "exportJson": "Export JSON" + } }, "aiApproval": { "title": "L'IA veut exécuter une écriture", diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index e1138d37..e8c1796a 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -34,9 +34,7 @@ "noResults": "Nessun risultato trovato", "error": "Errore", "success": "Successo", - "ok": "OK", - "clear": "Clear", - "refresh": "Refresh" + "ok": "OK" }, "sidebar": { "connections": "Connessioni", @@ -104,19 +102,6 @@ "procedures": "Procedure", "noRoutines": "Nessuna routine trovata", "refreshRoutines": "Aggiorna Routine", - "triggers": "Triggers", - "noTriggers": "No triggers found", - "filterTriggers": "Filter triggers...", - "noTriggersMatch": "No triggers match your filter", - "createTrigger": "Create New Trigger", - "editTrigger": "Edit Trigger", - "dropTrigger": "Drop Trigger", - "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", - "viewTriggerDefinition": "View Definition", - "failDropTrigger": "Failed to drop trigger: ", - "failGetTriggerDefinition": "Failed to get trigger definition: ", - "refreshTriggers": "Refresh Triggers", - "onTable": "on {{table}}", "objectSummary": "Oggetti", "databases": "Database", "failGetRoutineDefinition": "Impossibile recuperare la definizione della routine: ", @@ -243,7 +228,8 @@ "failDuplicate": "Impossibile duplicare la connessione", "open": "Aperta", "pluginDisabled": "Plugin disabilitato", - "connectionCount": "{{count}} connessione/i", + "connectionCount_one": "{{count}} connessione/i", + "connectionCount_other": "{{count}} connessione/i", "noConnectionsHint": "Crea la tua prima connessione per iniziare.", "searchPlaceholder": "Cerca connessioni...", "noSearchResults": "Nessuna connessione corrisponde a \"{{query}}\"", @@ -273,13 +259,7 @@ "removeEmoji": "Rimuovi", "chooseImage": "Scegli immagine…", "removeImage": "Rimuovi", - "imageHint": "PNG, JPG, WebP o SVG · max 512 KB", - "errors": {}, - "emojiSearch": "Search emoji…", - "iconNoResults": "No icons match.", - "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", - "iconSearch": "Search icons…", - "noPreview": "No preview" + "imageHint": "PNG, JPG, WebP o SVG · max 512 KB" }, "settings": { "general": "Generali", @@ -339,9 +319,6 @@ "language": "Lingua", "languageDesc": "Scegli la tua lingua preferita. 'Auto' userà la lingua di sistema.", "auto": "Auto (Sistema)", - "timezone": "Timezone", - "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", - "timezoneSearch": "Search timezones...", "projectStatus": "Stato del Progetto", "roadmapDesc": "Questo progetto è un Work In Progress (WIP). Le funzioni principali sono stabili, ma abbiamo grandi piani.", "support": "Supporta lo Sviluppo", @@ -649,12 +626,7 @@ "prefer": "Preferito", "require": "Richiesto", "verify-ca": "Verifica CA", - "verify-full": "Verifica completa", - "disabled": "Disabled", - "preferred": "Preferred", - "required": "Required", - "verify_ca": "Verify CA", - "verify_identity": "Verify Identity" + "verify-full": "Verifica completa" }, "chooseContext": "Scegli un contesto...", "chooseK8s": "Scegli una connessione...", @@ -677,20 +649,7 @@ "selectK8sConnection": "Seleziona connessione K8s", "selectTypeFirst": "Seleziona prima contesto/namespace/tipo", "useK8s": "Usa Port-Forward Kubernetes", - "useK8sConnection": "Connessione salvata", - "connectionString": "Connection String", - "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", - "general": "General", - "loadDatabasesHint": "Click Load Databases to fetch available databases.", - "noGeneralSettings": "No general settings available for this driver.", - "selectDatabasesHint": "Select the databases to include in this connection.", - "sshNotAvailable": "SSH is not available for this driver.", - "sslCa": "CA Certificate", - "sslCert": "Client Certificate", - "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", - "sslDescription": "Configure SSL/TLS for secure database connections (optional).", - "sslKey": "Client Key", - "unnamedConnection": "Unnamed connection" + "useK8sConnection": "Connessione salvata" }, "sshConnections": { "title": "Connessioni SSH", @@ -719,7 +678,8 @@ "newRow": "NUOVA", "noData": "Nessun dato da visualizzare", "deleteRow": "Elimina riga", - "deleteRows": "Elimina {{count}} righe", + "deleteRows_one": "Elimina {{count}} righe", + "deleteRows_other": "Elimina {{count}} righe", "updateFailed": "Aggiornamento fallito: ", "null": "null", "sortByAsc": "Ordina per {{col}} ASC", @@ -731,17 +691,14 @@ "copyColumnNameQuoted": "Copia come `colonna`", "copyColumnNameTable": "Copia come tabella.colonna", "copied": "Copiato negli appunti", - "duplicateRow": "Duplicate Row", "revertSelected": "Ripristina selezionato", "setGenerate": "Imposta GENERATED", "setNull": "Imposta NULL", "setDefault": "Imposta DEFAULT", "setEmpty": "Imposta VUOTO", - "setServerNow": "Insert Current Timestamp", "previewReferenced": "Anteprima record correlato", "openReferenced": "Apri la riga referenziata in {{table}}" }, - "editRow": {}, "newRow": { "title": "Nuova riga", "insert": "Inserisci", @@ -798,8 +755,6 @@ "tabSwitcher": { "title": "Tab Aperte", "hint": "Ctrl+Tab", - "tabs_one": "{{count}} tab", - "tabs_other": "{{count}} tabs", "escHint": "Esc per chiudere" }, "quickNavigator": { @@ -918,7 +873,8 @@ "invalidFile": "Formato file notebook non valido", "importSuccess": "Notebook importato con successo", "exportSuccess": "Notebook esportato con successo", - "cellResult": "{{count}} righe · {{time}}ms", + "cellResult_one": "{{count}} righe · {{time}}ms", + "cellResult_other": "{{count}} righe · {{time}}ms", "stopOnError": "Ferma su Errore", "stopOnErrorTooltip": "Ferma l'esecuzione quando una cella fallisce", "runAllComplete": "Esecuzione Completata", @@ -969,12 +925,12 @@ "stopOnError": "Stop on error commutato", "other": "Notebook modificato" } - }, - "exportError": "Export failed" + } }, "querySelection": { "title": "Seleziona la query da eseguire", - "queriesFound": "{{count}} query trovate", + "queriesFound_one": "{{count}} query trovate", + "queriesFound_other": "{{count}} query trovate", "runAll": "Esegui tutte", "runSelected": "Esegui selezionate ({{count}})", "runSingle": "Esegui questa query", @@ -983,7 +939,8 @@ }, "explainSelection": { "title": "Seleziona la query da analizzare", - "queriesFound": "{{count}} query analizzabili trovate", + "queriesFound_one": "{{count}} query analizzabili trovate", + "queriesFound_other": "{{count}} query analizzabili trovate", "explainSingle": "Analizza questa query", "explainFocused": "analizza selezionata", "explainNth": "analizza N-esima", @@ -1021,8 +978,7 @@ "nameRequired": "Il nome della tabella è richiesto", "colRequired": "È richiesta almeno una colonna", "failCreate": "Creazione tabella fallita: ", - "requiresExtension": "Richiede estensione: {{ext}}", - "sqlPreview": "SQL Preview" + "requiresExtension": "Richiede estensione: {{ext}}" }, "schema": { "title": "Schema: {{table}}", @@ -1032,8 +988,7 @@ "colNullable": "Nullable", "colKey": "Chiave", "yes": "SÌ", - "no": "NO", - "close": "Close" + "no": "NO" }, "generateSQL": { "title": "SQL Generato: {{table}}", @@ -1088,8 +1043,7 @@ "onUpdate": "All'Update", "sqlPreview": "Anteprima SQL", "create": "Crea Chiave Esterna", - "cancel": "Annulla", - "nameRequired": "Name is required" + "cancel": "Annulla" }, "healthCheck": { "title": "Connessione Persa", @@ -1130,36 +1084,7 @@ "createSuccess": "Vista creata con successo", "alterSuccess": "Vista aggiornata con successo", "saveError": "Salvataggio vista fallito: ", - "confirmAlter": "Sei sicuro di voler modificare la vista \"{{view}}\"?", - "alterView": "Alter View" - }, - "triggers": { - "createTrigger": "Create Trigger", - "editTrigger": "Edit Trigger", - "createSubtitle": "Create a new database trigger", - "editSubtitle": "Editing trigger: {{name}}", - "triggerName": "Trigger Name", - "triggerNamePlaceholder": "e.g. before_insert_user", - "tableName": "Table Name", - "tableNamePlaceholder": "e.g. users", - "timing": "Timing", - "events": "Events", - "body": "Trigger Body (SQL)", - "sqlPreview": "Generated SQL Preview", - "rawSql": "Raw SQL", - "guidedMode": "Guided", - "rawSqlMode": "Raw SQL", - "loading": "Loading trigger definition...", - "create": "Create Trigger", - "save": "Save Changes", - "sqlRequired": "Trigger SQL is required", - "failLoadDefinition": "Failed to load trigger definition: ", - "dropError": "Failed to drop existing trigger: ", - "saveError": "Failed to save trigger: ", - "createSuccess": "Trigger created successfully", - "updateSuccess": "Trigger updated successfully", - "recreateTrigger": "Recreate Trigger", - "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" + "confirmAlter": "Sei sicuro di voler modificare la vista \"{{view}}\"?" }, "community": { "title": "Unisciti alla Community", @@ -1223,9 +1148,7 @@ "raw": "Grezzo" }, "expand": "Espandi", - "search": "Cerca", - "diff": "Diff", - "sideBySide": "Side by side" + "search": "Cerca" }, "jsonViewer": { "close": "Chiudi", @@ -1235,21 +1158,10 @@ "expand": "Espandi/comprimi albero JSON", "openViewer": "Apri visualizzatore JSON" }, - "textCell": { - "expand": "Toggle inline text editor" - }, - "textInput": { - "diff": "Diff", - "sideBySide": "Side by side" - }, - "textViewer": { - "save": "Save" - }, "rowEditor": { "title": "Modifica Riga", "subtitle": "Riga #{{row}}", - "enterValue": "Inserisci valore...", - "resize": "Resize sidebar" + "enterValue": "Inserisci valore..." }, "contextMenu": { "openSidebar": "Apri Barra Laterale", @@ -1344,22 +1256,6 @@ } } }, - "groups": { - "newGroup": "New Group", - "rename": "Rename", - "delete": "Delete", - "deleteConfirm": "Are you sure you want to delete group \"{{name}}\"? Connections in this group will be moved to ungrouped.", - "deleteTitle": "Delete Group", - "connection": "connection", - "connections": "connections", - "ungrouped": "Ungrouped", - "removeFromGroup": "Remove from Group", - "groupName": "Group name", - "createError": "Failed to create group", - "deleteError": "Failed to delete group", - "moveError": "Failed to move connection", - "renameError": "Failed to rename group" - }, "queryModal": { "database": "Database", "noDatabase": "Nessun database" @@ -1385,16 +1281,20 @@ "dataPreview": "Anteprima Dati", "sample": "Valori campione", "lowConfidence": "Tipi misti rilevati, default TEXT", - "rowsTotal": "{{count}} righe", + "rowsTotal_one": "{{count}} righe", + "rowsTotal_other": "{{count}} righe", "showingFirst": "prime {{count}}", - "import": "Importa {{count}} righe", + "import_one": "Importa {{count}} righe", + "import_other": "Importa {{count}} righe", "importing": "Importazione...", - "success": "{{count}} righe importate in \"{{table}}\"", + "success_one": "{{count}} righe importate in \"{{table}}\"", + "success_other": "{{count}} righe importate in \"{{table}}\"", "tableCreated": "Nuova tabella creata", "openTable": "Chiudi", "noData": "Nessun dato negli appunti", "retry": "Riprova", - "warningsCount": "{{count}} avvisi di parsing", + "warningsCount_one": "{{count}} avvisi di parsing", + "warningsCount_other": "{{count}} avvisi di parsing", "columnsLabel": "colonne", "rowsLabel": "righe", "stepConfigure": "Configura destinazione", @@ -1483,9 +1383,7 @@ "write": "Scrittura", "ddl": "DDL", "unknown": "Sconosciuto" - }, - "exportCsv": "Export CSV", - "exportJson": "Export JSON" + } }, "aiApproval": { "title": "L'AI vuole eseguire una scrittura sul database", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 868d2cc3..71750357 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -34,9 +34,7 @@ "noResults": "結果が見つかりません", "error": "エラー", "success": "成功", - "ok": "OK", - "clear": "Clear", - "refresh": "Refresh" + "ok": "OK" }, "sidebar": { "connections": "接続", @@ -243,7 +241,8 @@ "failDuplicate": "接続の複製に失敗しました", "open": "開く", "pluginDisabled": "プラグインが無効", - "connectionCount": "{{count}} 件の接続", + "connectionCount_one": "{{count}} 件の接続", + "connectionCount_other": "{{count}} 件の接続", "noConnectionsHint": "最初の接続を作成して始めましょう。", "searchPlaceholder": "接続を検索...", "noSearchResults": "「{{query}}」に一致する接続はありません", @@ -266,20 +265,9 @@ "emoji": "絵文字", "image": "画像" }, - "previewLabel": "Preview", - "defaultHint": "Using the driver's default icon.", - "emojiSelected": "Selected emoji", - "emojiHint": "Click another emoji below to change.", - "removeEmoji": "Clear", "chooseImage": "画像を選択…", "removeImage": "削除", - "imageHint": "PNG、JPG、WebP または SVG · 最大 512 KB", - "errors": {}, - "emojiSearch": "Search emoji…", - "iconNoResults": "No icons match.", - "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", - "iconSearch": "Search icons…", - "noPreview": "No preview" + "imageHint": "PNG、JPG、WebP または SVG · 最大 512 KB" }, "settings": { "general": "一般", @@ -296,8 +284,6 @@ "delimiterSemicolon": "セミコロン (;)", "delimiterTab": "タブ", "delimiterPipe": "パイプ (|)", - "detectJsonInTextColumns": "Detect JSON in text columns", - "detectJsonInTextColumnsDesc": "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.", "appearance": "外観", "localization": "ローカライズ", "themeSelection": "テーマ選択", @@ -649,12 +635,7 @@ "prefer": "優先", "require": "必須", "verify-ca": "CAを検証", - "verify-full": "完全検証", - "disabled": "Disabled", - "preferred": "Preferred", - "required": "Required", - "verify_ca": "Verify CA", - "verify_identity": "Verify Identity" + "verify-full": "完全検証" }, "chooseContext": "コンテキストを選択...", "chooseK8s": "接続を選択...", @@ -677,20 +658,7 @@ "selectK8sConnection": "K8s 接続を選択", "selectTypeFirst": "先にコンテキスト/ネームスペース/タイプを選択してください", "useK8s": "Kubernetes ポートフォワードを使用", - "useK8sConnection": "保存された接続", - "connectionString": "Connection String", - "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", - "general": "General", - "loadDatabasesHint": "Click Load Databases to fetch available databases.", - "noGeneralSettings": "No general settings available for this driver.", - "selectDatabasesHint": "Select the databases to include in this connection.", - "sshNotAvailable": "SSH is not available for this driver.", - "sslCa": "CA Certificate", - "sslCert": "Client Certificate", - "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", - "sslDescription": "Configure SSL/TLS for secure database connections (optional).", - "sslKey": "Client Key", - "unnamedConnection": "Unnamed connection" + "useK8sConnection": "保存された接続" }, "sshConnections": { "title": "SSH 接続", @@ -716,10 +684,10 @@ "savedInKeychain": "パスワードをシステムのキーチェーンに保存しました" }, "dataGrid": { - "newRow": "NEW", "noData": "表示するデータがありません", "deleteRow": "行を削除", - "deleteRows": "{{count}} 行を削除", + "deleteRows_one": "{{count}} 行を削除", + "deleteRows_other": "{{count}} 行を削除", "updateFailed": "更新に失敗しました: ", "null": "null", "sortByAsc": "{{col}} を昇順で並べ替え", @@ -741,7 +709,6 @@ "previewReferenced": "関連レコードをプレビュー", "openReferenced": "{{table}} で参照行を開く" }, - "editRow": {}, "newRow": { "title": "新規行", "insert": "挿入", @@ -798,8 +765,6 @@ "tabSwitcher": { "title": "開いているタブ", "hint": "Ctrl+Tab", - "tabs_one": "{{count}} tab", - "tabs_other": "{{count}} tabs", "escHint": "Esc で閉じる" }, "quickNavigator": { @@ -918,7 +883,8 @@ "invalidFile": "不正なノートブックファイル形式です", "importSuccess": "ノートブックを正常にインポートしました", "exportSuccess": "ノートブックを正常にエクスポートしました", - "cellResult": "{{count}} 行 · {{time}}ms", + "cellResult_one": "{{count}} 行 · {{time}}ms", + "cellResult_other": "{{count}} 行 · {{time}}ms", "stopOnError": "エラー時に停止", "stopOnErrorTooltip": "セルが失敗したら実行を停止します", "runAllComplete": "すべての実行が完了", @@ -969,12 +935,12 @@ "stopOnError": "エラー時に停止を切り替え", "other": "ノートブックを編集" } - }, - "exportError": "Export failed" + } }, "querySelection": { "title": "実行するクエリを選択", - "queriesFound": "{{count}} 件のクエリが見つかりました", + "queriesFound_one": "{{count}} 件のクエリが見つかりました", + "queriesFound_other": "{{count}} 件のクエリが見つかりました", "runAll": "すべて実行", "runSelected": "選択したものを実行 ({{count}})", "runSingle": "このクエリを実行", @@ -983,7 +949,8 @@ }, "explainSelection": { "title": "説明するクエリを選択", - "queriesFound": "説明可能なクエリが {{count}} 件見つかりました", + "queriesFound_one": "説明可能なクエリが {{count}} 件見つかりました", + "queriesFound_other": "説明可能なクエリが {{count}} 件見つかりました", "explainSingle": "このクエリを説明", "explainFocused": "フォーカス中のものを説明", "explainNth": "N 番目を説明", @@ -1021,8 +988,7 @@ "nameRequired": "テーブル名は必須です", "colRequired": "少なくとも 1 つのカラムが必要です", "failCreate": "テーブルの作成に失敗しました: ", - "requiresExtension": "拡張機能が必要: {{ext}}", - "sqlPreview": "SQL Preview" + "requiresExtension": "拡張機能が必要: {{ext}}" }, "schema": { "title": "スキーマ: {{table}}", @@ -1032,8 +998,7 @@ "colNullable": "NULL 許可", "colKey": "キー", "yes": "はい", - "no": "いいえ", - "close": "Close" + "no": "いいえ" }, "generateSQL": { "title": "生成された SQL: {{table}}", @@ -1088,8 +1053,7 @@ "onUpdate": "更新時", "sqlPreview": "SQL プレビュー", "create": "外部キーを作成", - "cancel": "キャンセル", - "nameRequired": "Name is required" + "cancel": "キャンセル" }, "healthCheck": { "title": "接続が失われました", @@ -1130,8 +1094,7 @@ "createSuccess": "ビューを正常に作成しました", "alterSuccess": "ビューを正常に更新しました", "saveError": "ビューの保存に失敗しました: ", - "confirmAlter": "ビュー「{{view}}」を変更してもよろしいですか?", - "alterView": "Alter View" + "confirmAlter": "ビュー「{{view}}」を変更してもよろしいですか?" }, "triggers": { "createTrigger": "トリガーを作成", @@ -1216,44 +1179,15 @@ "placeholder": "JSON を入力...", "format": "整形", "valid": "有効な JSON", - "invalid": "無効な JSON", - "mode": { - "code": "Code", - "tree": "Tree", - "raw": "Raw" - }, - "expand": "Expand", - "search": "Search", - "diff": "Diff", - "sideBySide": "Side by side" - }, - "jsonViewer": { - "close": "Close", - "save": "Save" - }, - "jsonCell": { - "expand": "Toggle inline JSON tree", - "openViewer": "Open JSON viewer" - }, - "textCell": { - "expand": "Toggle inline text editor" - }, - "textInput": { - "diff": "Diff", - "sideBySide": "Side by side" - }, - "textViewer": { - "save": "Save" + "invalid": "無効な JSON" }, "rowEditor": { "title": "行を編集", "subtitle": "行 #{{row}}", - "enterValue": "値を入力...", - "resize": "Resize sidebar" + "enterValue": "値を入力..." }, "contextMenu": { - "openSidebar": "サイドバーエディタで開く", - "openJsonEditor": "Open in JSON Editor" + "openSidebar": "サイドバーエディタで開く" }, "blobInput": { "noData": "BLOB データなし", @@ -1355,10 +1289,7 @@ "ungrouped": "未分類", "removeFromGroup": "グループから削除", "groupName": "グループ名", - "createError": "グループの作成に失敗しました", - "deleteError": "Failed to delete group", - "moveError": "Failed to move connection", - "renameError": "Failed to rename group" + "createError": "グループの作成に失敗しました" }, "queryModal": { "database": "データベース", @@ -1385,16 +1316,20 @@ "dataPreview": "データプレビュー", "sample": "サンプル値", "lowConfidence": "混在タイプを検出、TEXT にデフォルト設定", - "rowsTotal": "{{count}} 行", + "rowsTotal_one": "{{count}} 行", + "rowsTotal_other": "{{count}} 行", "showingFirst": "先頭 {{count}} 行を表示中", - "import": "{{count}} 行をインポート", + "import_one": "{{count}} 行をインポート", + "import_other": "{{count}} 行をインポート", "importing": "インポート中...", - "success": "{{count}} 行を「{{table}}」にインポートしました", + "success_one": "{{count}} 行を「{{table}}」にインポートしました", + "success_other": "{{count}} 行を「{{table}}」にインポートしました", "tableCreated": "新規テーブルを作成しました", "openTable": "閉じる", "noData": "クリップボードにデータが見つかりません", "retry": "再試行", - "warningsCount": "{{count}} 件の解析警告", + "warningsCount_one": "{{count}} 件の解析警告", + "warningsCount_other": "{{count}} 件の解析警告", "columnsLabel": "カラム", "rowsLabel": "行", "stepConfigure": "インポート先を設定", @@ -1483,9 +1418,7 @@ "write": "書き込み", "ddl": "DDL", "unknown": "不明" - }, - "exportCsv": "Export CSV", - "exportJson": "Export JSON" + } }, "aiApproval": { "title": "AI がデータベース書き込みを要求しています", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 91323ff6..ef0c8229 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -34,9 +34,7 @@ "noResults": "Ничего не найдено", "error": "Ошибка", "success": "Готово", - "ok": "ОК", - "clear": "Clear", - "refresh": "Refresh" + "ok": "ОК" }, "sidebar": { "connections": "Подключения", @@ -257,33 +255,6 @@ "connectionCount_many": "{{count}} подключений", "connectionCount_other": "{{count}} подключения" }, - "connectionAppearance": { - "section": "Appearance", - "accentColor": "Accent color", - "customColor": "Custom", - "resetColor": "Reset to driver default", - "icon": "Icon", - "tabs": { - "default": "Default", - "pack": "Icon", - "emoji": "Emoji", - "image": "Image" - }, - "previewLabel": "Preview", - "defaultHint": "Using the driver's default icon.", - "emojiSelected": "Selected emoji", - "emojiHint": "Click another emoji below to change.", - "removeEmoji": "Clear", - "chooseImage": "Choose image…", - "removeImage": "Remove", - "imageHint": "PNG, JPG, WebP or SVG · max 512 KB", - "errors": {}, - "emojiSearch": "Search emoji…", - "iconNoResults": "No icons match.", - "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", - "iconSearch": "Search icons…", - "noPreview": "No preview" - }, "settings": { "general": "Общие", "info": "Информация", @@ -342,9 +313,6 @@ "language": "Язык", "languageDesc": "Выберите язык интерфейса. «Авто» использует язык системы.", "auto": "Авто (системный)", - "timezone": "Timezone", - "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", - "timezoneSearch": "Search timezones...", "projectStatus": "Статус проекта", "roadmapDesc": "Проект находится в активной разработке (WIP). Основные функции стабильны, впереди много интересного.", "support": "Поддержать разработку", @@ -650,14 +618,7 @@ "disable": "Отключён", "allow": "Разрешён", "prefer": "Предпочтительный", - "require": "Обязательный", - "verify-ca": "Verify CA", - "verify-full": "Verify Full", - "disabled": "Disabled", - "preferred": "Preferred", - "required": "Required", - "verify_ca": "Verify CA", - "verify_identity": "Verify Identity" + "require": "Обязательный" }, "chooseContext": "Выберите контекст...", "chooseK8s": "Выберите подключение...", @@ -680,20 +641,7 @@ "selectK8sConnection": "Выберите подключение K8s", "selectTypeFirst": "Сначала выберите контекст/пространство имён/тип", "useK8s": "Использовать проброс портов Kubernetes", - "useK8sConnection": "Сохранённое подключение", - "connectionString": "Connection String", - "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", - "general": "General", - "loadDatabasesHint": "Click Load Databases to fetch available databases.", - "noGeneralSettings": "No general settings available for this driver.", - "selectDatabasesHint": "Select the databases to include in this connection.", - "sshNotAvailable": "SSH is not available for this driver.", - "sslCa": "CA Certificate", - "sslCert": "Client Certificate", - "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", - "sslDescription": "Configure SSL/TLS for secure database connections (optional).", - "sslKey": "Client Key", - "unnamedConnection": "Unnamed connection" + "useK8sConnection": "Сохранённое подключение" }, "sshConnections": { "title": "SSH-подключения", @@ -740,14 +688,12 @@ "setDefault": "Установить DEFAULT", "setEmpty": "Установить EMPTY", "setServerNow": "Вставить текущую метку времени", - "previewReferenced": "Preview related record", "openReferenced": "Открыть связанную строку в {{table}}", "deleteRows_one": "Удалить {{count}} строку", "deleteRows_few": "Удалить {{count}} строки", "deleteRows_many": "Удалить {{count}} строк", "deleteRows_other": "Удалить {{count}} строки" }, - "editRow": {}, "newRow": { "title": "Новая строка", "insert": "Вставить", @@ -977,7 +923,6 @@ "other": "Блокнот изменён" } }, - "exportError": "Export failed", "cellResult_one": "{{count}} строка · {{time}}мс", "cellResult_few": "{{count}} строки · {{time}}мс", "cellResult_many": "{{count}} строк · {{time}}мс", @@ -1038,8 +983,7 @@ "nameRequired": "Название таблицы обязательно", "colRequired": "Требуется хотя бы один столбец", "failCreate": "Не удалось создать таблицу: ", - "requiresExtension": "Требуется расширение: {{ext}}", - "sqlPreview": "SQL Preview" + "requiresExtension": "Требуется расширение: {{ext}}" }, "schema": { "title": "Схема: {{table}}", @@ -1049,8 +993,7 @@ "colNullable": "Nullable", "colKey": "Ключ", "yes": "Да", - "no": "Нет", - "close": "Close" + "no": "Нет" }, "generateSQL": { "title": "Сгенерированный SQL: {{table}}", @@ -1105,8 +1048,7 @@ "onUpdate": "При обновлении", "sqlPreview": "Предпросмотр SQL", "create": "Создать внешний ключ", - "cancel": "Отменить", - "nameRequired": "Name is required" + "cancel": "Отменить" }, "healthCheck": { "title": "Подключение потеряно", @@ -1147,8 +1089,7 @@ "createSuccess": "Представление создано", "alterSuccess": "Представление обновлено", "saveError": "Не удалось сохранить представление: ", - "confirmAlter": "Изменить представление \"{{view}}\"?", - "alterView": "Alter View" + "confirmAlter": "Изменить представление \"{{view}}\"?" }, "triggers": { "createTrigger": "Создать триггер", @@ -1265,8 +1206,7 @@ "rowEditor": { "title": "Изменить строку", "subtitle": "Строка #{{row}}", - "enterValue": "Введите значение...", - "resize": "Resize sidebar" + "enterValue": "Введите значение..." }, "contextMenu": { "openSidebar": "Открыть в боковом редакторе", @@ -1378,10 +1318,7 @@ "ungrouped": "Без группы", "removeFromGroup": "Убрать из группы", "groupName": "Название группы", - "createError": "Не удалось создать группу", - "deleteError": "Failed to delete group", - "moveError": "Failed to move connection", - "renameError": "Failed to rename group" + "createError": "Не удалось создать группу" }, "queryModal": { "database": "База данных", @@ -1519,8 +1456,6 @@ "ddl": "DDL", "unknown": "Неизвестно" }, - "exportCsv": "Export CSV", - "exportJson": "Export JSON", "eventsCount_few": "{{count}} события", "eventsCount_many": "{{count}} событий", "blockedCount_few": "{{count}} заблокированных", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index 8e6b74f5..005f0324 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -31,12 +31,9 @@ "edit": "编辑", "loading": "加载中...", "search": "搜索...", - "noResults": "No results found", "error": "错误", "success": "成功", - "ok": "OK", - "clear": "Clear", - "refresh": "Refresh" + "ok": "OK" }, "sidebar": { "connections": "连接", @@ -104,19 +101,6 @@ "procedures": "存储过程", "noRoutines": "未找到存储过程", "refreshRoutines": "刷新存储过程", - "triggers": "Triggers", - "noTriggers": "No triggers found", - "filterTriggers": "Filter triggers...", - "noTriggersMatch": "No triggers match your filter", - "createTrigger": "Create New Trigger", - "editTrigger": "Edit Trigger", - "dropTrigger": "Drop Trigger", - "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", - "viewTriggerDefinition": "View Definition", - "failDropTrigger": "Failed to drop trigger: ", - "failGetTriggerDefinition": "Failed to get trigger definition: ", - "refreshTriggers": "Refresh Triggers", - "onTable": "on {{table}}", "objectSummary": "对象", "databases": "数据库", "failGetRoutineDefinition": "获取存储过程定义失败:", @@ -243,7 +227,8 @@ "failDuplicate": "复制连接失败", "open": "打开", "pluginDisabled": "插件已禁用", - "connectionCount": "{{count}} 个连接", + "connectionCount_one": "{{count}} 个连接", + "connectionCount_other": "{{count}} 个连接", "noConnectionsHint": "创建您的第一个连接以开始使用。", "searchPlaceholder": "搜索连接...", "noSearchResults": "无匹配 \"{{query}}\" 的连接", @@ -266,20 +251,9 @@ "emoji": "表情", "image": "图片" }, - "previewLabel": "Preview", - "defaultHint": "Using the driver's default icon.", - "emojiSelected": "Selected emoji", - "emojiHint": "Click another emoji below to change.", - "removeEmoji": "Clear", "chooseImage": "选择图片…", "removeImage": "移除", - "imageHint": "PNG、JPG、WebP 或 SVG · 最大 512 KB", - "errors": {}, - "emojiSearch": "Search emoji…", - "iconNoResults": "No icons match.", - "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", - "iconSearch": "Search icons…", - "noPreview": "No preview" + "imageHint": "PNG、JPG、WebP 或 SVG · 最大 512 KB" }, "settings": { "general": "通用", @@ -312,36 +286,9 @@ "fontSizeDesc": "调整整个应用使用的基础字体大小(10-20px)。", "preview": "预览", "fontPreviewText": "The quick brown fox jumps over the lazy dog", - "appearance_general": "General", - "appearance_sqlEditor": "SQL Editor", - "appearance_editorTheme": "Editor Theme", - "appearance_editorThemeDesc": "Choose an independent theme for the SQL editor, or keep it in sync with the app theme.", - "appearance_sameAsApp": "Same as App", - "appearance_editorFontFamily": "Editor Font Family", - "appearance_editorFontSize": "Editor Font Size", - "appearance_editorLineHeight": "Line Height", - "appearance_editorTabSize": "Tab Size", - "appearance_editorWordWrap": "Word Wrap", - "appearance_editorWordWrapDesc": "Wrap long lines in the editor instead of scrolling horizontally.", - "appearance_editorShowLineNumbers": "Show Line Numbers", - "appearance_editorShowLineNumbersDesc": "Display line numbers in the editor gutter.", - "appearance_editorAcceptSuggestionOnEnter": "Accept Suggestion with Enter", - "appearance_editorAcceptSuggestionOnEnterDesc": "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.", - "editConfigJson": "Edit config.json", - "editConfigJsonDesc": "Directly edit the raw configuration file. A restart is required to apply changes.", - "configJsonModal": { - "title": "config.json", - "saveAndRestart": "Save & Restart", - "restartNow": "Restart Now", - "restartRequired": "A restart is required to apply changes.", - "restartMessage": "The configuration file has been saved. Restart now to apply the changes?" - }, "language": "语言", "languageDesc": "选择您的首选语言。自动\"将使用您的系统语言。", "auto": "自动(系统)", - "timezone": "Timezone", - "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", - "timezoneSearch": "Search timezones...", "projectStatus": "项目状态", "roadmapDesc": "此项目是正在进行的工作 (WIP)。核心功能已稳定,但我们有更大的计划。", "support": "支持开发", @@ -454,10 +401,6 @@ "debug": "调试", "warn": "警告", "error": "错误", - "connectionHealthCheck": "Connection Health Check", - "pingInterval": "Ping Interval", - "pingIntervalDesc": "How often to check if active connections are still alive. Set to 0 to disable.", - "seconds": "seconds", "entries": "条目", "queryHistory": "查询历史", "queryHistoryMaxEntries": "最大历史条目", @@ -569,7 +512,6 @@ "notOverridable": "内置,不可自定义", "pressKeys": "按下组合键...", "notebookRunAll": "运行所有单元格", - "pasteImportClipboard": "Import from Clipboard", "quickNavigator": "快速导航" }, "aiActivity": "AI 活动" @@ -649,12 +591,7 @@ "prefer": "首选", "require": "要求", "verify-ca": "验证 CA", - "verify-full": "完全验证", - "disabled": "Disabled", - "preferred": "Preferred", - "required": "Required", - "verify_ca": "Verify CA", - "verify_identity": "Verify Identity" + "verify-full": "完全验证" }, "chooseContext": "选择上下文...", "chooseK8s": "选择连接...", @@ -677,20 +614,7 @@ "selectK8sConnection": "选择 K8s 连接", "selectTypeFirst": "请先选择上下文/命名空间/类型", "useK8s": "使用 Kubernetes 端口转发", - "useK8sConnection": "已保存的连接", - "connectionString": "Connection String", - "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", - "general": "General", - "loadDatabasesHint": "Click Load Databases to fetch available databases.", - "noGeneralSettings": "No general settings available for this driver.", - "selectDatabasesHint": "Select the databases to include in this connection.", - "sshNotAvailable": "SSH is not available for this driver.", - "sslCa": "CA Certificate", - "sslCert": "Client Certificate", - "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", - "sslDescription": "Configure SSL/TLS for secure database connections (optional).", - "sslKey": "Client Key", - "unnamedConnection": "Unnamed connection" + "useK8sConnection": "已保存的连接" }, "sshConnections": { "title": "SSH 连接", @@ -719,7 +643,8 @@ "newRow": "新建", "noData": "无数据显示", "deleteRow": "删除行", - "deleteRows": "删除 {{count}} 行", + "deleteRows_one": "删除 {{count}} 行", + "deleteRows_other": "删除 {{count}} 行", "updateFailed": "更新失败:", "null": "null", "sortByAsc": "按 {{col}} 升序排序", @@ -741,7 +666,6 @@ "previewReferenced": "预览相关记录", "openReferenced": "在 {{table}} 中打开引用的行" }, - "editRow": {}, "newRow": { "title": "新建行", "insert": "插入", @@ -798,8 +722,6 @@ "tabSwitcher": { "title": "打开的标签", "hint": "Ctrl+Tab", - "tabs_one": "{{count}} tab", - "tabs_other": "{{count}} tabs", "escHint": "按 Esc 关闭" }, "quickNavigator": { @@ -855,7 +777,6 @@ "analyze": "分析", "analyzeWarning": "ANALYZE 会实际执行查询。对数据修改语句请谨慎使用。", "notExplainable": "EXPLAIN 仅支持 DML 语句(SELECT、INSERT、UPDATE、DELETE)。DDL 语句(如 CREATE、DROP、ALTER)无法进行分析。", - "contextMenuExplain": "Explain Plan", "rerun": "重新运行", "close": "关闭", "graphView": "图形", @@ -918,7 +839,8 @@ "invalidFile": "无效的笔记本文件格式", "importSuccess": "笔记本导入成功", "exportSuccess": "笔记本导出成功", - "cellResult": "{{count}} 行 · {{time}}毫秒", + "cellResult_one": "{{count}} 行 · {{time}}毫秒", + "cellResult_other": "{{count}} 行 · {{time}}毫秒", "stopOnError": "出错时停止", "stopOnErrorTooltip": "当单元格失败时停止执行", "runAllComplete": "全部运行完成", @@ -969,38 +891,24 @@ "stopOnError": "切换了出错时停止", "other": "编辑了笔记本" } - }, - "exportError": "Export failed" + } }, "querySelection": { "title": "选择要执行的查询", - "queriesFound": "找到 {{count}} 个查询", + "queriesFound_one": "找到 {{count}} 个查询", + "queriesFound_other": "找到 {{count}} 个查询", "runAll": "全部执行", "runSelected": "执行选中 ({{count}})", "runSingle": "执行此查询", "selectAll": "全选", "deselectAll": "取消全选" }, - "explainSelection": { - "title": "Select Query to Explain", - "queriesFound": "{{count}} explainable queries found", - "explainSingle": "Explain this query", - "explainFocused": "explain focused", - "explainNth": "explain Nth", - "cancel": "cancel" - }, "multiResult": { "rerun": "重新执行查询", "close": "关闭标签", "rename": "重命名", "aiGenerateName": "使用 AI 生成名称", - "generatingName": "正在生成名称...", - "viewTabs": "Tab view", - "viewStacked": "Stacked view", - "queryPrefix": "Query", - "results": "Results", - "collapseAll": "Collapse all", - "expandAll": "Expand all" + "generatingName": "正在生成名称..." } }, "createTable": { @@ -1020,9 +928,7 @@ "cancel": "取消", "nameRequired": "表名称是必需的", "colRequired": "至少需要一列", - "failCreate": "创建表失败:", - "requiresExtension": "Requires extension: {{ext}}", - "sqlPreview": "SQL Preview" + "failCreate": "创建表失败:" }, "schema": { "title": "模式:{{table}}", @@ -1032,8 +938,7 @@ "colNullable": "可为空", "colKey": "键", "yes": "是", - "no": "否", - "close": "Close" + "no": "否" }, "generateSQL": { "title": "生成的 SQL:{{table}}", @@ -1064,8 +969,7 @@ "cancel": "取消", "nameRequired": "列名称是必需的", "fail": "失败:", - "pkNotSupported": "此驱动程序仅在表创建时支持主键", - "requiresExtension": "Requires extension: {{ext}}" + "pkNotSupported": "此驱动程序仅在表创建时支持主键" }, "createIndex": { "title": "创建索引", @@ -1088,12 +992,7 @@ "onUpdate": "更新时", "sqlPreview": "SQL 预览", "create": "创建外键", - "cancel": "取消", - "nameRequired": "Name is required" - }, - "healthCheck": { - "title": "Connection Lost", - "connectionLost": "A database connection was lost" + "cancel": "取消" }, "erDiagram": { "enterFullscreen": "全屏", @@ -1130,36 +1029,7 @@ "createSuccess": "视图创建成功", "alterSuccess": "视图更新成功", "saveError": "保存视图失败:", - "confirmAlter": "确定要修改视图 \"{{view}}\" 吗?", - "alterView": "Alter View" - }, - "triggers": { - "createTrigger": "Create Trigger", - "editTrigger": "Edit Trigger", - "createSubtitle": "Create a new database trigger", - "editSubtitle": "Editing trigger: {{name}}", - "triggerName": "Trigger Name", - "triggerNamePlaceholder": "e.g. before_insert_user", - "tableName": "Table Name", - "tableNamePlaceholder": "e.g. users", - "timing": "Timing", - "events": "Events", - "body": "Trigger Body (SQL)", - "sqlPreview": "Generated SQL Preview", - "rawSql": "Raw SQL", - "guidedMode": "Guided", - "rawSqlMode": "Raw SQL", - "loading": "Loading trigger definition...", - "create": "Create Trigger", - "save": "Save Changes", - "sqlRequired": "Trigger SQL is required", - "failLoadDefinition": "Failed to load trigger definition: ", - "dropError": "Failed to drop existing trigger: ", - "saveError": "Failed to save trigger: ", - "createSuccess": "Trigger created successfully", - "updateSuccess": "Trigger updated successfully", - "recreateTrigger": "Recreate Trigger", - "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" + "confirmAlter": "确定要修改视图 \"{{view}}\" 吗?" }, "community": { "title": "加入社区", @@ -1223,9 +1093,7 @@ "raw": "原始" }, "expand": "展开", - "search": "搜索", - "diff": "Diff", - "sideBySide": "Side by side" + "search": "搜索" }, "jsonViewer": { "close": "关闭", @@ -1235,21 +1103,10 @@ "expand": "展开/收起 JSON 树", "openViewer": "打开 JSON 查看器" }, - "textCell": { - "expand": "Toggle inline text editor" - }, - "textInput": { - "diff": "Diff", - "sideBySide": "Side by side" - }, - "textViewer": { - "save": "Save" - }, "rowEditor": { "title": "编辑行", "subtitle": "行 #{{row}}", - "enterValue": "输入值...", - "resize": "Resize sidebar" + "enterValue": "输入值..." }, "contextMenu": { "openSidebar": "打开侧边栏编辑器", @@ -1355,10 +1212,7 @@ "ungrouped": "未分组", "removeFromGroup": "从分组中移除", "groupName": "分组名称", - "createError": "创建分组失败", - "deleteError": "Failed to delete group", - "moveError": "Failed to move connection", - "renameError": "Failed to rename group" + "createError": "创建分组失败" }, "queryModal": { "database": "数据库", @@ -1385,16 +1239,20 @@ "dataPreview": "数据预览", "sample": "示例值", "lowConfidence": "检测到混合类型,默认为 TEXT", - "rowsTotal": "{{count}} 行", + "rowsTotal_one": "{{count}} 行", + "rowsTotal_other": "{{count}} 行", "showingFirst": "前 {{count}} 行", - "import": "导入 {{count}} 行", + "import_one": "导入 {{count}} 行", + "import_other": "导入 {{count}} 行", "importing": "导入中...", - "success": "已将 {{count}} 行导入到 \"{{table}}\"", + "success_one": "已将 {{count}} 行导入到 \"{{table}}\"", + "success_other": "已将 {{count}} 行导入到 \"{{table}}\"", "tableCreated": "新表已创建", "openTable": "关闭", "noData": "剪贴板中没有数据", "retry": "重试", - "warningsCount": "{{count}} 条解析警告", + "warningsCount_one": "{{count}} 条解析警告", + "warningsCount_other": "{{count}} 条解析警告", "columnsLabel": "列", "rowsLabel": "行", "stepConfigure": "配置目标", @@ -1420,13 +1278,9 @@ "sessions": "会话" }, "empty": "暂无 MCP 活动。", - "eventsCount_one": "{{count}} event", "eventsCount_other": "{{count}} 个事件", - "blockedCount_one": "{{count}} blocked", "blockedCount_other": "{{count}} 个被阻止", - "errorsCount_one": "{{count}} error", "errorsCount_other": "{{count}} 个错误", - "sessionsCount_one": "{{count}} session", "sessionsCount_other": "{{count}} 个会话", "events": "事件", "runQueries": "查询", @@ -1483,9 +1337,7 @@ "write": "写入", "ddl": "DDL", "unknown": "未知" - }, - "exportCsv": "Export CSV", - "exportJson": "Export JSON" + } }, "aiApproval": { "title": "AI 请求执行数据库写入", From 7004fdd99fd1e761d5907661f13d538844890a9b Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Thu, 18 Jun 2026 21:17:24 +0200 Subject: [PATCH 04/22] feat(i18n): OTA translation updates via Tolgee CDN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Load translations through a chained backend (localStorage cache -> Tolgee Content Delivery -> bundled JSON). The CDN overrides the shipped bundle when reachable, so translation fixes reach users without a release; the bundle remains an offline-safe fallback. returnEmptyString:false guarantees a missing or empty translation falls back to en instead of rendering blank. OTA is toggleable via localStorage (otaEnabled, default on; otaIntervalMinutes, default 15 — matching Tolgee's CDN propagation window). --- package.json | 4 +++ pnpm-lock.yaml | 39 +++++++++++++++++++++ src/i18n/config.ts | 86 +++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 124 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 538cad3d..441feb43 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,10 @@ "emoji-picker-react": "^4.19.1", "i18next": "^25.10.10", "i18next-browser-languagedetector": "^8.2.1", + "i18next-chained-backend": "^5.0.5", + "i18next-http-backend": "^4.0.0", + "i18next-localstorage-backend": "^4.3.1", + "i18next-resources-to-backend": "^1.2.1", "json-edit-react": "^1.29.1", "lucide-react": "^0.563.0", "monaco-editor": "^0.55.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 096a5f10..a9f154db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,6 +62,18 @@ importers: i18next-browser-languagedetector: specifier: ^8.2.1 version: 8.2.1 + i18next-chained-backend: + specifier: ^5.0.5 + version: 5.0.5 + i18next-http-backend: + specifier: ^4.0.0 + version: 4.0.0 + i18next-localstorage-backend: + specifier: ^4.3.1 + version: 4.3.1 + i18next-resources-to-backend: + specifier: ^1.2.1 + version: 1.2.1 json-edit-react: specifier: ^1.29.1 version: 1.29.1(react@19.2.4) @@ -1900,6 +1912,19 @@ packages: i18next-browser-languagedetector@8.2.1: resolution: {integrity: sha512-bZg8+4bdmaOiApD7N7BPT9W8MLZG+nPTOFlLiJiT8uzKXFjhxw4v2ierCXOwB5sFDMtuA5G4kgYZ0AznZxQ/cw==} + i18next-chained-backend@5.0.5: + resolution: {integrity: sha512-ThdtKUcNdk/zrSuzQyz2t4uH1McomKXP/t7GOf9Cm1oabDlJ6ZbQQJkLB9VlUErL9+45baFHv/ipzgi9MOotUg==} + + i18next-http-backend@4.0.0: + resolution: {integrity: sha512-EgSjO3Q1G6f2Q5oy7u9mmxuesE0oSfzAD97NFBjC8EmkK4guBSYLljM0Fng3DarMWIIkU70jfo4+mUzmyVISTA==} + engines: {node: '>=18'} + + i18next-localstorage-backend@4.3.1: + resolution: {integrity: sha512-ry8WNBanUs55rsRZs9+xaZWRxCoTEMMOf+2vNSfzzJqDPbHaf0eMFMrtYp/2ocxU6Xrxfwz17Fdz0rSs3Kw39Q==} + + i18next-resources-to-backend@1.2.1: + resolution: {integrity: sha512-okHbVA+HZ7n1/76MsfhPqDou0fptl2dAlhRDu2ideXloRRduzHsqDOznJBef+R3DFZnbvWoBW+KxJ7fnFjd6Yw==} + i18next@25.10.10: resolution: {integrity: sha512-cqUW2Z3EkRx7NqSyywjkgCLK7KLCL6IFVFcONG7nVYIJ3ekZ1/N5jUsihHV6Bq37NfhgtczxJcxduELtjTwkuQ==} peerDependencies: @@ -4638,6 +4663,20 @@ snapshots: dependencies: '@babel/runtime': 7.29.2 + i18next-chained-backend@5.0.5: + dependencies: + '@babel/runtime': 7.29.2 + + i18next-http-backend@4.0.0: {} + + i18next-localstorage-backend@4.3.1: + dependencies: + '@babel/runtime': 7.29.2 + + i18next-resources-to-backend@1.2.1: + dependencies: + '@babel/runtime': 7.29.2 + i18next@25.10.10(typescript@5.9.3): dependencies: '@babel/runtime': 7.29.2 diff --git a/src/i18n/config.ts b/src/i18n/config.ts index 968fc10c..9521d582 100644 --- a/src/i18n/config.ts +++ b/src/i18n/config.ts @@ -1,6 +1,10 @@ import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; +import ChainedBackend from 'i18next-chained-backend'; +import HttpBackend from 'i18next-http-backend'; +import LocalStorageBackend from 'i18next-localstorage-backend'; +import resourcesToBackend from 'i18next-resources-to-backend'; import en from './locales/en.json'; import it from './locales/it.json'; @@ -28,21 +32,93 @@ export const SUPPORTED_LANGUAGES = [ export type AppLanguage = "auto" | (typeof SUPPORTED_LANGUAGES)[number]["id"]; -const resources = Object.fromEntries( - SUPPORTED_LANGUAGES.map(({ id, translation }) => [id, { translation }]), -); +// Tolgee Content Delivery (public CDN) — serves /.json +const TOLGEE_CDN_BASE = "https://cdn.tolg.ee/04ebb496deb39eaaf4703e8565ff6e62"; + +const bundledResources: Record = + Object.fromEntries(SUPPORTED_LANGUAGES.map(({ id, translation }) => [id, translation])); + +export const OTA_ENABLED_KEY = "tabularis.i18n.otaEnabled"; +export const OTA_INTERVAL_MIN_KEY = "tabularis.i18n.otaIntervalMinutes"; +const DEFAULT_OTA_INTERVAL_MIN = 15; + +function readOtaEnabled(): boolean { + try { + return localStorage.getItem(OTA_ENABLED_KEY) !== "0"; + } catch { + return true; + } +} + +function readOtaIntervalMs(): number { + try { + const raw = Number(localStorage.getItem(OTA_INTERVAL_MIN_KEY)); + const minutes = Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_OTA_INTERVAL_MIN; + return minutes * 60 * 1000; + } catch { + return DEFAULT_OTA_INTERVAL_MIN * 60 * 1000; + } +} + +function bundledLoader( + language: string, + _namespace: string, + callback: (error: unknown, resources: unknown) => void, +): void { + const resources = bundledResources[language]; + if (resources) callback(null, resources); + else callback(new Error(`no bundled translations for "${language}"`), null); +} + +const otaEnabled = readOtaEnabled(); + +// Backend precedence (first to resolve wins; CDN results are cached back into localStorage): +// localStorage cache -> Tolgee CDN -> bundled JSON. CDN thus overrides the bundle when reachable. +const backends = otaEnabled + ? [LocalStorageBackend, HttpBackend, resourcesToBackend(bundledLoader)] + : [resourcesToBackend(bundledLoader)]; +const backendOptions = otaEnabled + ? [ + { expirationTime: readOtaIntervalMs(), defaultVersion: "v1" }, + { loadPath: `${TOLGEE_CDN_BASE}/{{lng}}.json` }, + {}, + ] + : [{}]; i18n .use(LanguageDetector) + .use(ChainedBackend) .use(initReactI18next) .init({ - resources, - fallbackLng: 'en', + fallbackLng: "en", + supportedLngs: SUPPORTED_LANGUAGES.map(({ id }) => id), + load: "languageOnly", // "de-DE" -> "de": the CDN only has "de.json" + nonExplicitSupportedLngs: true, + returnEmptyString: false, // empty translation -> fall back to en, not blank interpolation: { escapeValue: false, }, + backend: { + backends, + backendOptions, + }, detection: { order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag', 'path', 'subdomain'], caches: ['localStorage', 'cookie'], }, + react: { + useSuspense: false, + }, }); + +export async function refreshTranslationsFromCdn(): Promise { + if (!otaEnabled) return; + try { + localStorage.removeItem(`i18next_res_${i18n.language}-translation`); + } catch { + /* ignore */ + } + await i18n.reloadResources(); +} + +export default i18n; From 5385a376f5ece144ea42c72a94394e91736c86b1 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Thu, 18 Jun 2026 22:03:53 +0200 Subject: [PATCH 05/22] =?UTF-8?q?feat(i18n):=20lingui=20spike=20=E2=80=94?= =?UTF-8?q?=20setup,=20provider,=20id-bridge=20verified?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Install Lingui v6 (@lingui/core, react, message-utils, cli, vite-plugin, babel-plugin-lingui-macro, format-po) - Add lingui.config.ts with PO format (formatter() API required in v6, not "po" string) - Wire @lingui/vite-plugin + babel-plugin-lingui-macro in vite.config.ts - Create src/i18n/lingui.ts (i18n instance + dynamicActivate) - Mount alongside i18next in main.tsx (async IIFE, await dynamicActivate("en")) - Hand-convert SchemaModal.tsx from useTranslation → useLingui (@lingui/react/macro) - Extract (9 messages) + compile (--typescript --namespace es → .ts catalogs) - Add scripts/i18n/verify-id-bridge.mjs: generateMessageId("Close")=yz7wBu ✓ - Fix pre-existing tsc error in src/i18n/config.ts (bundledLoader callback type → ReadCallback) --- lingui.config.ts | 14 + package.json | 10 + pnpm-lock.yaml | 870 +++++++++++++++++++++++++- scripts/i18n/verify-id-bridge.mjs | 15 + src/components/modals/SchemaModal.tsx | 20 +- src/i18n/config.ts | 4 +- src/i18n/lingui.ts | 9 + src/locales/de/messages.js | 1 + src/locales/de/messages.po | 44 ++ src/locales/de/messages.ts | 1 + src/locales/en/messages.po | 44 ++ src/locales/en/messages.ts | 1 + src/locales/es/messages.js | 1 + src/locales/es/messages.po | 44 ++ src/locales/es/messages.ts | 1 + src/locales/fr/messages.js | 1 + src/locales/fr/messages.po | 44 ++ src/locales/fr/messages.ts | 1 + src/locales/it/messages.js | 1 + src/locales/it/messages.po | 44 ++ src/locales/it/messages.ts | 1 + src/locales/ja/messages.js | 1 + src/locales/ja/messages.po | 44 ++ src/locales/ja/messages.ts | 1 + src/locales/ru/messages.js | 1 + src/locales/ru/messages.po | 44 ++ src/locales/ru/messages.ts | 1 + src/locales/zh/messages.js | 1 + src/locales/zh/messages.po | 44 ++ src/locales/zh/messages.ts | 1 + src/main.tsx | 45 +- vite.config.ts | 6 +- 32 files changed, 1325 insertions(+), 35 deletions(-) create mode 100644 lingui.config.ts create mode 100644 scripts/i18n/verify-id-bridge.mjs create mode 100644 src/i18n/lingui.ts create mode 100644 src/locales/de/messages.js create mode 100644 src/locales/de/messages.po create mode 100644 src/locales/de/messages.ts create mode 100644 src/locales/en/messages.po create mode 100644 src/locales/en/messages.ts create mode 100644 src/locales/es/messages.js create mode 100644 src/locales/es/messages.po create mode 100644 src/locales/es/messages.ts create mode 100644 src/locales/fr/messages.js create mode 100644 src/locales/fr/messages.po create mode 100644 src/locales/fr/messages.ts create mode 100644 src/locales/it/messages.js create mode 100644 src/locales/it/messages.po create mode 100644 src/locales/it/messages.ts create mode 100644 src/locales/ja/messages.js create mode 100644 src/locales/ja/messages.po create mode 100644 src/locales/ja/messages.ts create mode 100644 src/locales/ru/messages.js create mode 100644 src/locales/ru/messages.po create mode 100644 src/locales/ru/messages.ts create mode 100644 src/locales/zh/messages.js create mode 100644 src/locales/zh/messages.po create mode 100644 src/locales/zh/messages.ts diff --git a/lingui.config.ts b/lingui.config.ts new file mode 100644 index 00000000..ca5bfb00 --- /dev/null +++ b/lingui.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from "@lingui/cli"; +import { formatter } from "@lingui/format-po"; + +export default defineConfig({ + sourceLocale: "en", + locales: ["en", "it", "es", "zh", "fr", "de", "ja", "ru"], + catalogs: [ + { + path: "src/locales/{locale}/messages", + include: ["src"], + }, + ], + format: formatter({ lineNumbers: false }), +}); diff --git a/package.json b/package.json index 441feb43..8a75199e 100644 --- a/package.json +++ b/package.json @@ -22,12 +22,18 @@ "check:plugin-api": "pnpm --filter @tabularis/plugin-api check:sync", "build:create-plugin": "pnpm --filter @tabularis/create-plugin build", "smoke:create-plugin": "pnpm --filter @tabularis/create-plugin smoke", + "i18n:extract": "lingui extract", + "i18n:compile": "lingui compile --typescript --namespace es", "roadmap": "node scripts/update-roadmap.js", "sync-links": "node scripts/sync-links.js", "sync-sponsors": "node scripts/sync-sponsors.js", "version": "node scripts/sync-version.js && conventional-changelog -p angular -i CHANGELOG.md -s && git add README.md CHANGELOG.md src-tauri/tauri.conf.json src-tauri/Cargo.toml src-tauri/Cargo.lock src/version.ts" }, "dependencies": { + "@lingui/core": "^6.4.0", + "@lingui/format-po": "^6.4.0", + "@lingui/message-utils": "^6.4.0", + "@lingui/react": "^6.4.0", "@monaco-editor/react": "^4.7.0", "@tailwindcss/postcss": "^4.2.2", "@tanstack/react-table": "^8.21.3", @@ -66,6 +72,9 @@ }, "devDependencies": { "@eslint/js": "^9.39.4", + "@lingui/babel-plugin-lingui-macro": "^6.4.0", + "@lingui/cli": "^6.4.0", + "@lingui/vite-plugin": "^6.4.0", "@tauri-apps/cli": "^2.10.1", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", @@ -85,6 +94,7 @@ "jsdom": "^28.1.0", "postcss": "^8.5.8", "tailwindcss": "^4.2.2", + "ts-morph": "^28.0.0", "typescript": "~5.9.3", "typescript-eslint": "^8.58.0", "vite": "^7.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9f154db..25dbb688 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,18 @@ importers: .: dependencies: + '@lingui/core': + specifier: ^6.4.0 + version: 6.4.0 + '@lingui/format-po': + specifier: ^6.4.0 + version: 6.4.0 + '@lingui/message-utils': + specifier: ^6.4.0 + version: 6.4.0 + '@lingui/react': + specifier: ^6.4.0 + version: 6.4.0(react@19.2.4) '@monaco-editor/react': specifier: ^4.7.0 version: 4.7.0(monaco-editor@0.55.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -106,7 +118,7 @@ importers: version: 7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) recharts: specifier: ^3.8.1 - version: 3.8.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@17.0.2)(react@19.2.4)(redux@5.0.1) + version: 3.8.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4)(redux@5.0.1) util: specifier: ^0.12.5 version: 0.12.5 @@ -117,6 +129,15 @@ importers: '@eslint/js': specifier: ^9.39.4 version: 9.39.4 + '@lingui/babel-plugin-lingui-macro': + specifier: ^6.4.0 + version: 6.4.0 + '@lingui/cli': + specifier: ^6.4.0 + version: 6.4.0 + '@lingui/vite-plugin': + specifier: ^6.4.0 + version: 6.4.0(@babel/core@7.29.0)(@lingui/babel-plugin-lingui-macro@6.4.0)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) '@tauri-apps/cli': specifier: ^2.10.1 version: 2.10.1 @@ -174,6 +195,9 @@ importers: tailwindcss: specifier: ^4.2.2 version: 4.2.2 + ts-morph: + specifier: ^28.0.0 + version: 28.0.0 typescript: specifier: ~5.9.3 version: 5.9.3 @@ -344,6 +368,10 @@ packages: resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} hasBin: true + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + '@conventional-changelog/git-client@2.6.0': resolution: {integrity: sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg==} engines: {node: '>=18'} @@ -392,156 +420,312 @@ packages: resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.4': resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.4': resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.4': resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.4': resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.4': resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.4': resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.4': resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.4': resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.4': resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.4': resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.4': resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.4': resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.4': resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.4': resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.4': resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.4': resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.4': resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.4': resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.4': resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.4': resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.4': resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.27.4': resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.4': resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.4': resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.4': resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.4': resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} engines: {node: '>=18'} @@ -611,6 +795,14 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -627,6 +819,75 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@lingui/babel-plugin-extract-messages@6.4.0': + resolution: {integrity: sha512-b9NatQFU1h0muPCC0QGdSVKE/OEdR4w9FQrKAOFYwH0eF7pD2ArafqyqG6xsw2E+7w4PlZQjzOhihQMxI8a6sA==} + engines: {node: '>=22.19.0'} + + '@lingui/babel-plugin-lingui-macro@6.4.0': + resolution: {integrity: sha512-V15kARtjzWgLga/6LOTMMki5pv3F42m9BX8jdI1mBg4yCo1cS0B3szfoBqoveFs7x+nh0iuEPAKcM9lVdSYadw==} + engines: {node: '>=22.19.0'} + + '@lingui/cli@6.4.0': + resolution: {integrity: sha512-OqtEPHFmgQlyroQMmpnda6QRnfAqlAYnRVZpZSX3rZpwwaHI1pD7T1EQoK8n7kin9TGhitc1J33wFom7o/+yyg==} + engines: {node: '>=22.19.0'} + hasBin: true + + '@lingui/conf@6.4.0': + resolution: {integrity: sha512-C+THkLbda72//6dL7QAVyaxIxOnag8mGWKqrMsyIUHgZpStE05KiF8HDwTCMNiaeQmQPym/D8fVm7m8jCau3EA==} + engines: {node: '>=22.19.0'} + + '@lingui/core@6.4.0': + resolution: {integrity: sha512-DVbgp9tn07t3iByH6snsn1WaM8PxjDacOqf45oLVXyIti98PmXadO2UkO+NgCybHSqm3+7GGV4zTr4777Cc9nA==} + engines: {node: '>=22.19.0'} + peerDependencies: + babel-plugin-macros: 2 || 3 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + '@lingui/format-po@6.4.0': + resolution: {integrity: sha512-tu5aNalW9u+xjmcAlNEjfw4ahzMHFeC4nKz+zYHcv44Drpy9/bWnrr5j7Pi4rc9u4PILtXikwAsLh28u284WiA==} + engines: {node: '>=22.19.0'} + + '@lingui/message-utils@6.4.0': + resolution: {integrity: sha512-Bkt2V7vI57/CEVyJCO+93jssN2MhLJ07M6S0d16tHvigNftP5Ndl+2xX1HKWD6eozidc5lOeTZMtrEL9jzXEsg==} + engines: {node: '>=22.19.0'} + + '@lingui/react@6.4.0': + resolution: {integrity: sha512-9ui7O/K/X+AXN7TdSEbKq//sNLAJ42dk1GftzAcHL58jKv3CnEyKOPJb2S0L/Ez6li8I0O4KKgRn1BK0Qk/Jqg==} + engines: {node: '>=22.19.0'} + peerDependencies: + babel-plugin-macros: 2 || 3 + react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + '@lingui/vite-plugin@6.4.0': + resolution: {integrity: sha512-15ogZWydII5TbWwTJJGfJF9OpATxiIbJGearfBv+tj13uv3TlKwLGdmpn/GV8COY8v0irKr7dfdyfxYvxLxSZQ==} + engines: {node: '>=22.19.0'} + peerDependencies: + '@babel/core': ^7.29.0 || ^8.0.0-rc.1 + '@lingui/babel-plugin-lingui-macro': ^5 || ^6 + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 + rolldown: ^1.0.0-rc.5 + vite: ^6.3.0 || ^7 || ^8 + peerDependenciesMeta: + '@babel/core': + optional: true + '@lingui/babel-plugin-lingui-macro': + optional: true + '@rolldown/plugin-babel': + optional: true + rolldown: + optional: true + + '@messageformat/date-skeleton@1.1.0': + resolution: {integrity: sha512-rmGAfB1tIPER+gh3p/RgA+PVeRE/gxuQ2w4snFWPF5xtb5mbWR7Cbw7wCOftcUypbD6HVoxrVdyyghPm3WzP5A==} + + '@messageformat/parser@5.1.1': + resolution: {integrity: sha512-3p0YRGCcTUCYvBKLIxtDDyrJ0YijGIwrTRu1DT8gIviIDZru8H23+FkY6MJBzM1n9n20CiM4VeDYuBsrrwnLjg==} + '@monaco-editor/loader@1.7.0': resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} @@ -801,6 +1062,9 @@ packages: resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} engines: {node: '>=18'} + '@sinclair/typebox@0.27.10': + resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -1036,6 +1300,9 @@ packages: '@types/react-dom': optional: true + '@ts-morph/common@0.29.0': + resolution: {integrity: sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg==} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -1111,6 +1378,15 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1146,6 +1422,12 @@ packages: '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + '@typescript-eslint/eslint-plugin@8.58.0': resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1283,6 +1565,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1353,6 +1639,10 @@ packages: resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + browserslist@4.28.2: resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1387,6 +1677,10 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + caniuse-lite@1.0.30001784: resolution: {integrity: sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==} @@ -1401,6 +1695,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -1417,13 +1715,32 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + classcat@5.0.5: resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} + engines: {node: '>=18.20'} + + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1434,6 +1751,14 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -1638,6 +1963,9 @@ packages: peerDependencies: react: '>=16' + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + enhanced-resolve@5.20.1: resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} @@ -1664,6 +1992,11 @@ packages: es-toolkit@1.45.1: resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.4: resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} engines: {node: '>=18'} @@ -1775,6 +2108,10 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -1815,6 +2152,10 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -1993,6 +2334,10 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-generator-function@1.1.2: resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} @@ -2004,6 +2349,14 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} @@ -2023,6 +2376,10 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2038,6 +2395,14 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -2046,6 +2411,9 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-sha256@0.10.1: + resolution: {integrity: sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==} + js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -2096,6 +2464,10 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -2195,6 +2567,10 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -2330,6 +2706,14 @@ packages: micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -2350,6 +2734,9 @@ packages: monaco-editor@0.55.1: resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==} + moo@0.5.3: + resolution: {integrity: sha512-m2fmM2dDm7GZQsY7KK2cme8agi+AAljILjQnof7p1ZMDe6dQ4bdnSMx0cPppudoeNv5hEFQirN6u+O4fDE0IWA==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2374,6 +2761,10 @@ packages: resolution: {integrity: sha512-linxNAT6M0ebEYZOx2tO6vBEFsVgnPpv+AVjk0wJHfaUIbq31Jm3T6vvZaarnOeWDh8ShnwXuaAyM7WT3RzErA==} engines: {node: ^18.17.0 || >=20.5.0} + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -2387,10 +2778,18 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@9.4.0: + resolution: {integrity: sha512-84cglkRILFxdtA8hAvLNdMrtBpPNBTrQ9/ulg0FA7xLMnD6mifv+enAIeRmvtv+WgdCE+LPGOfQmtJRrVaIVhQ==} + engines: {node: '>=20'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2409,6 +2808,9 @@ packages: parse5@8.0.0: resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2423,6 +2825,10 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -2434,6 +2840,10 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pofile-ts@4.0.3: + resolution: {integrity: sha512-sz1pnjgEfPyZ+QvaeX3NtCmbYnEvG01LZRLoN/uXoLtPZtxCIH5IctL7yXXc0fFyk/fqV6K8g3hlNfr6IJwupA==} + engines: {node: '>=20'} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -2471,6 +2881,10 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -2478,6 +2892,11 @@ packages: property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + pseudolocale@2.2.0: + resolution: {integrity: sha512-O+D2eU7fO9wVLqrohvt9V/9fwMadnJQ4jxwiK+LeNEqhMx8JYx4xQHkArDCJFAdPPOp/pQq6z5L37eBvAoc8jw==} + engines: {node: '>=16.0.0'} + hasBin: true + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -2512,6 +2931,9 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-markdown@10.1.0: resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} peerDependencies: @@ -2559,6 +2981,10 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + recharts@3.8.1: resolution: {integrity: sha512-mwzmO1s9sFL0TduUpwndxCUNoXsBw3u3E/0+A+cLcrSfQitSG62L32N69GhqUrrT5qKcAE3pCGVINC6pqkBBQg==} engines: {node: '>=18'} @@ -2603,6 +3029,10 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + rollup@4.60.1: resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -2646,6 +3076,10 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -2682,9 +3116,29 @@ packages: std-env@4.0.0: resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + stdin-discarder@0.3.2: + resolution: {integrity: sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==} + engines: {node: '>=18'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} + engines: {node: '>=20'} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -2742,6 +3196,10 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} @@ -2753,6 +3211,10 @@ packages: resolution: {integrity: sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==} hasBin: true + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + tough-cookie@6.0.1: resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} engines: {node: '>=16'} @@ -2780,6 +3242,9 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-morph@28.0.0: + resolution: {integrity: sha512-Wp3tnZ2bzwxyTZMtgWVzXDfm7lB1Drz+y9DmmYH/L702PQhPyVrp3pkou3yIz4qjS14GY9kcpmLiOOMvl8oG1g==} + tsup@8.5.1: resolution: {integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==} engines: {node: '>=18'} @@ -3019,6 +3484,10 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + zod-validation-error@4.0.2: resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} engines: {node: '>=18.0.0'} @@ -3192,6 +3661,9 @@ snapshots: dependencies: css-tree: 3.2.1 + '@colors/colors@1.5.0': + optional: true + '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': dependencies: '@simple-libs/child-process-utils': 1.0.2 @@ -3225,81 +3697,159 @@ snapshots: '@csstools/css-tokenizer@4.0.0': {} + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/aix-ppc64@0.27.4': optional: true + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm64@0.27.4': optional: true + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-arm@0.27.4': optional: true + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/android-x64@0.27.4': optional: true + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.27.4': optional: true + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.27.4': optional: true + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.27.4': optional: true + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.27.4': optional: true + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.27.4': optional: true + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-arm@0.27.4': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-ia32@0.27.4': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-loong64@0.27.4': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.27.4': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.27.4': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.27.4': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-s390x@0.27.4': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + '@esbuild/linux-x64@0.27.4': optional: true + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-arm64@0.27.4': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.27.4': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.27.4': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.27.4': optional: true + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/openharmony-arm64@0.27.4': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.27.4': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.27.4': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-ia32@0.27.4': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + '@esbuild/win32-x64@0.27.4': optional: true @@ -3362,6 +3912,19 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.10 + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 24.12.0 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -3381,6 +3944,99 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@lingui/babel-plugin-extract-messages@6.4.0': + dependencies: + '@lingui/conf': 6.4.0 + + '@lingui/babel-plugin-lingui-macro@6.4.0': + dependencies: + '@babel/core': 7.29.0 + '@babel/types': 7.29.0 + '@lingui/conf': 6.4.0 + '@lingui/message-utils': 6.4.0 + transitivePeerDependencies: + - supports-color + + '@lingui/cli@6.4.0': + dependencies: + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@lingui/babel-plugin-extract-messages': 6.4.0 + '@lingui/babel-plugin-lingui-macro': 6.4.0 + '@lingui/conf': 6.4.0 + '@lingui/core': 6.4.0 + '@lingui/format-po': 6.4.0 + '@lingui/message-utils': 6.4.0 + chokidar: 5.0.0 + cli-table3: 0.6.5 + commander: 14.0.3 + esbuild: 0.25.12 + jiti: 2.6.1 + micromatch: 4.0.8 + ms: 2.1.3 + normalize-path: 3.0.0 + ora: 9.4.0 + pseudolocale: 2.2.0 + source-map: 0.7.6 + tinypool: 2.1.0 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + '@lingui/conf@6.4.0': + dependencies: + jest-validate: 29.7.0 + jiti: 2.6.1 + lilconfig: 3.1.3 + normalize-path: 3.0.0 + + '@lingui/core@6.4.0': + dependencies: + '@lingui/babel-plugin-lingui-macro': 6.4.0 + '@lingui/message-utils': 6.4.0 + transitivePeerDependencies: + - supports-color + + '@lingui/format-po@6.4.0': + dependencies: + '@lingui/conf': 6.4.0 + '@lingui/message-utils': 6.4.0 + pofile-ts: 4.0.3 + + '@lingui/message-utils@6.4.0': + dependencies: + '@messageformat/date-skeleton': 1.1.0 + '@messageformat/parser': 5.1.1 + js-sha256: 0.10.1 + + '@lingui/react@6.4.0(react@19.2.4)': + dependencies: + '@lingui/babel-plugin-lingui-macro': 6.4.0 + '@lingui/core': 6.4.0 + react: 19.2.4 + transitivePeerDependencies: + - supports-color + + '@lingui/vite-plugin@6.4.0(@babel/core@7.29.0)(@lingui/babel-plugin-lingui-macro@6.4.0)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': + dependencies: + '@lingui/cli': 6.4.0 + '@lingui/conf': 6.4.0 + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) + optionalDependencies: + '@babel/core': 7.29.0 + '@lingui/babel-plugin-lingui-macro': 6.4.0 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + '@messageformat/date-skeleton@1.1.0': {} + + '@messageformat/parser@5.1.1': + dependencies: + moo: 0.5.3 + '@monaco-editor/loader@1.7.0': dependencies: state-local: 1.0.7 @@ -3489,6 +4145,8 @@ snapshots: '@simple-libs/stream-utils@1.2.0': {} + '@sinclair/typebox@0.27.10': {} + '@standard-schema/spec@1.1.0': {} '@standard-schema/utils@0.3.0': {} @@ -3677,6 +4335,12 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@ts-morph/common@0.29.0': + dependencies: + minimatch: 10.2.5 + path-browserify: 1.0.1 + tinyglobby: 0.2.15 + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -3762,6 +4426,16 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + '@types/json-schema@7.0.15': {} '@types/mdast@4.0.4': @@ -3793,6 +4467,12 @@ snapshots: '@types/use-sync-external-store@0.0.6': {} + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.35': + dependencies: + '@types/yargs-parser': 21.0.3 + '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -3993,6 +4673,8 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -4055,6 +4737,10 @@ snapshots: dependencies: balanced-match: 4.0.4 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + browserslist@4.28.2: dependencies: baseline-browser-mapping: 2.10.13 @@ -4094,6 +4780,8 @@ snapshots: callsites@3.1.0: {} + camelcase@6.3.0: {} + caniuse-lite@1.0.30001784: {} ccount@2.0.1: {} @@ -4105,6 +4793,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.2: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -4117,10 +4807,28 @@ snapshots: dependencies: readdirp: 4.1.2 + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + classcat@5.0.5: {} + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@3.4.0: {} + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + clsx@2.1.1: {} + code-block-writer@13.0.3: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -4129,6 +4837,10 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@10.0.1: {} + + commander@14.0.3: {} + commander@4.1.1: {} compare-func@2.0.0: @@ -4332,6 +5044,8 @@ snapshots: flairup: 1.0.0 react: 19.2.4 + emoji-regex@8.0.0: {} + enhanced-resolve@5.20.1: dependencies: graceful-fs: 4.2.11 @@ -4351,6 +5065,35 @@ snapshots: es-toolkit@1.45.1: {} + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + esbuild@0.27.4: optionalDependencies: '@esbuild/aix-ppc64': 0.27.4 @@ -4499,6 +5242,10 @@ snapshots: dependencies: flat-cache: 4.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -4534,6 +5281,8 @@ snapshots: gensync@1.0.0-beta.2: {} + get-east-asian-width@1.6.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -4726,6 +5475,8 @@ snapshots: is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 @@ -4740,6 +5491,10 @@ snapshots: is-hexadecimal@2.0.1: {} + is-interactive@2.0.0: {} + + is-number@7.0.0: {} + is-obj@2.0.0: {} is-plain-obj@4.1.0: {} @@ -4757,6 +5512,8 @@ snapshots: dependencies: which-typed-array: 1.1.20 + is-unicode-supported@2.1.0: {} + isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} @@ -4772,10 +5529,23 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + jest-get-type@29.6.3: {} + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + jiti@2.6.1: {} joycon@3.1.1: {} + js-sha256@0.10.1: {} + js-tokens@10.0.0: {} js-tokens@4.0.0: {} @@ -4833,6 +5603,8 @@ snapshots: kleur@4.1.5: {} + leven@3.1.0: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -4901,6 +5673,11 @@ snapshots: lodash@4.17.21: {} + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.2 + longest-streak@3.1.0: {} lru-cache@10.4.3: {} @@ -5161,6 +5938,13 @@ snapshots: transitivePeerDependencies: - supports-color + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + mimic-function@5.0.1: {} + min-indent@1.0.1: {} minimatch@10.2.5: @@ -5185,6 +5969,8 @@ snapshots: dompurify: 3.2.7 marked: 14.0.0 + moo@0.5.3: {} + ms@2.1.3: {} mz@2.7.0: @@ -5207,6 +5993,8 @@ snapshots: semver: 7.7.4 validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} + object-assign@4.1.1: {} object-property-assigner@1.3.5: {} @@ -5215,6 +6003,10 @@ snapshots: obug@2.1.1: {} + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -5224,6 +6016,17 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@9.4.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.4.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.3.2 + string-width: 8.2.1 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -5250,6 +6053,8 @@ snapshots: dependencies: entities: 6.0.1 + path-browserify@1.0.1: {} + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -5258,6 +6063,8 @@ snapshots: picocolors@1.1.1: {} + picomatch@2.3.2: {} + picomatch@4.0.4: {} pirates@4.0.7: {} @@ -5268,6 +6075,8 @@ snapshots: mlly: 1.8.2 pathe: 2.0.3 + pofile-ts@4.0.3: {} + possible-typed-array-names@1.1.0: {} postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0): @@ -5294,10 +6103,20 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + process@0.11.10: {} property-information@7.1.0: {} + pseudolocale@2.2.0: + dependencies: + commander: 10.0.1 + punycode@2.3.1: {} react-colorful@5.7.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): @@ -5323,6 +6142,8 @@ snapshots: react-is@17.0.2: {} + react-is@18.3.1: {} + react-markdown@10.1.0(@types/react@19.2.14)(react@19.2.4): dependencies: '@types/hast': 3.0.4 @@ -5370,7 +6191,9 @@ snapshots: readdirp@4.1.2: {} - recharts@3.8.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@17.0.2)(react@19.2.4)(redux@5.0.1): + readdirp@5.0.0: {} + + recharts@3.8.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4)(redux@5.0.1): dependencies: '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4) clsx: 2.1.1 @@ -5380,7 +6203,7 @@ snapshots: immer: 10.2.0 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-is: 17.0.2 + react-is: 18.3.1 react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1) reselect: 5.1.1 tiny-invariant: 1.3.3 @@ -5428,6 +6251,11 @@ snapshots: resolve-pkg-maps@1.0.0: {} + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + rollup@4.60.1: dependencies: '@types/estree': 1.0.8 @@ -5494,6 +6322,8 @@ snapshots: siginfo@2.0.0: {} + signal-exit@4.1.0: {} + source-map-js@1.2.1: {} source-map@0.6.1: {} @@ -5522,11 +6352,32 @@ snapshots: std-env@4.0.0: {} + stdin-discarder@0.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@8.2.1: + dependencies: + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -5582,6 +6433,8 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinypool@2.1.0: {} + tinyrainbow@3.1.0: {} tldts-core@7.0.27: {} @@ -5590,6 +6443,10 @@ snapshots: dependencies: tldts-core: 7.0.27 + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + tough-cookie@6.0.1: dependencies: tldts: 7.0.27 @@ -5610,6 +6467,11 @@ snapshots: ts-interface-checker@0.1.13: {} + ts-morph@28.0.0: + dependencies: + '@ts-morph/common': 0.29.0 + code-block-writer: 13.0.3 + tsup@8.5.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3): dependencies: bundle-require: 5.1.0(esbuild@0.27.4) @@ -5856,6 +6718,8 @@ snapshots: yocto-queue@0.1.0: {} + yoctocolors@2.1.2: {} + zod-validation-error@4.0.2(zod@4.3.6): dependencies: zod: 4.3.6 diff --git a/scripts/i18n/verify-id-bridge.mjs b/scripts/i18n/verify-id-bridge.mjs new file mode 100644 index 00000000..b9dcc2ca --- /dev/null +++ b/scripts/i18n/verify-id-bridge.mjs @@ -0,0 +1,15 @@ +import { generateMessageId } from "@lingui/message-utils/generateMessageId"; +import { readFileSync } from "node:fs"; + +// Compiled catalog is keyed by the runtime id Lingui uses. +const compiled = readFileSync("src/locales/en/messages.ts", "utf8"); +// Pick a known message and confirm generateMessageId reproduces its key. +const id = generateMessageId("Close"); +// The catalog is embedded as a JSON.parse() string, so keys appear as \"id\" (escaped). +// Check both plain and JSON-escaped forms. +const found = compiled.includes(JSON.stringify(id)) || compiled.includes(`\\"${id}\\"`); +if (!found) { + console.error(`FAIL: generateMessageId("Close")=${id} not found in compiled catalog`); + process.exit(1); +} +console.log(`OK: runtime id for "Close" = ${id} (bridge usable for OTA)`); diff --git a/src/components/modals/SchemaModal.tsx b/src/components/modals/SchemaModal.tsx index 10f81906..f756e5c9 100644 --- a/src/components/modals/SchemaModal.tsx +++ b/src/components/modals/SchemaModal.tsx @@ -1,5 +1,5 @@ import { useState, useEffect } from 'react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { X, Loader2, Key, Table2 } from 'lucide-react'; import { invoke } from '@tauri-apps/api/core'; import { useDatabase } from '../../hooks/useDatabase'; @@ -20,7 +20,7 @@ interface SchemaModalProps { } export const SchemaModal = ({ isOpen, onClose, tableName, schema }: SchemaModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeConnectionId, activeSchema } = useDatabase(); const [columns, setColumns] = useState([]); const [loading, setLoading] = useState(false); @@ -61,7 +61,7 @@ export const SchemaModal = ({ isOpen, onClose, tableName, schema }: SchemaModalP
-

{t('schema.title', { table: tableName })}

+

{t`Schema: ${tableName}`}

{resolvedSchema &&

{resolvedSchema}

}
@@ -75,7 +75,7 @@ export const SchemaModal = ({ isOpen, onClose, tableName, schema }: SchemaModalP {loading ? (
- {t('schema.loading')} + {t`Loading schema...`}
) : error ? (
{error}
@@ -83,10 +83,10 @@ export const SchemaModal = ({ isOpen, onClose, tableName, schema }: SchemaModalP - - - - + + + + @@ -95,7 +95,7 @@ export const SchemaModal = ({ isOpen, onClose, tableName, schema }: SchemaModalP {isAppend ? ( - - - - - - - + + + + + + + @@ -243,9 +243,9 @@ export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateT updateColumn(col.id, 'isAutoInc', false); } }} - placeholder={t("modifyColumn.type")} - searchPlaceholder={t("common.search")} - noResultsLabel={t("common.noResults")} + placeholder={t`Type`} + searchPlaceholder={t`Search...`} + noResultsLabel={t`No results found`} />
{t('schema.colName')}{t('schema.colType')}{t('schema.colNullable')}{t('schema.colKey')}{t`Name`}{t`Type`}{t`Nullable`}{t`Key`}
{col.name} {col.data_type} - {col.is_nullable ? t('schema.yes') : t('schema.no')} + {col.is_nullable ? t`YES` : t`NO`} {col.is_pk && } @@ -110,7 +110,7 @@ export const SchemaModal = ({ isOpen, onClose, tableName, schema }: SchemaModalP {/* Footer */}
diff --git a/src/i18n/config.ts b/src/i18n/config.ts index 9521d582..8cee666d 100644 --- a/src/i18n/config.ts +++ b/src/i18n/config.ts @@ -1,4 +1,4 @@ -import i18n from 'i18next'; +import i18n, { type ReadCallback } from 'i18next'; import { initReactI18next } from 'react-i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; import ChainedBackend from 'i18next-chained-backend'; @@ -63,7 +63,7 @@ function readOtaIntervalMs(): number { function bundledLoader( language: string, _namespace: string, - callback: (error: unknown, resources: unknown) => void, + callback: ReadCallback, ): void { const resources = bundledResources[language]; if (resources) callback(null, resources); diff --git a/src/i18n/lingui.ts b/src/i18n/lingui.ts new file mode 100644 index 00000000..a8b155dd --- /dev/null +++ b/src/i18n/lingui.ts @@ -0,0 +1,9 @@ +import { i18n } from "@lingui/core"; + +export { i18n }; + +export async function dynamicActivate(locale: string): Promise { + const { messages } = await import(`../locales/${locale}/messages.ts`); + i18n.load(locale, messages); + i18n.activate(locale); +} diff --git a/src/locales/de/messages.js b/src/locales/de/messages.js new file mode 100644 index 00000000..52804b76 --- /dev/null +++ b/src/locales/de/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/de/messages.po b/src/locales/de/messages.po new file mode 100644 index 00000000..4a765e00 --- /dev/null +++ b/src/locales/de/messages.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-06-18 21:59+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: de\n" + +#: src/components/modals/SchemaModal.tsx +msgid "Close" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Name" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Type" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "YES" +msgstr "" diff --git a/src/locales/de/messages.ts b/src/locales/de/messages.ts new file mode 100644 index 00000000..39f11cf5 --- /dev/null +++ b/src/locales/de/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po new file mode 100644 index 00000000..1ab81e5b --- /dev/null +++ b/src/locales/en/messages.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-06-18 21:59+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: en\n" + +#: src/components/modals/SchemaModal.tsx +msgid "Close" +msgstr "Close" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "Key" + +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "Loading schema..." + +#: src/components/modals/SchemaModal.tsx +msgid "Name" +msgstr "Name" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "NO" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "Nullable" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "Schema: {tableName}" + +#: src/components/modals/SchemaModal.tsx +msgid "Type" +msgstr "Type" + +#: src/components/modals/SchemaModal.tsx +msgid "YES" +msgstr "YES" diff --git a/src/locales/en/messages.ts b/src/locales/en/messages.ts new file mode 100644 index 00000000..39f11cf5 --- /dev/null +++ b/src/locales/en/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/es/messages.js b/src/locales/es/messages.js new file mode 100644 index 00000000..52804b76 --- /dev/null +++ b/src/locales/es/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/es/messages.po b/src/locales/es/messages.po new file mode 100644 index 00000000..5c846591 --- /dev/null +++ b/src/locales/es/messages.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-06-18 21:59+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: es\n" + +#: src/components/modals/SchemaModal.tsx +msgid "Close" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Name" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Type" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "YES" +msgstr "" diff --git a/src/locales/es/messages.ts b/src/locales/es/messages.ts new file mode 100644 index 00000000..39f11cf5 --- /dev/null +++ b/src/locales/es/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/fr/messages.js b/src/locales/fr/messages.js new file mode 100644 index 00000000..52804b76 --- /dev/null +++ b/src/locales/fr/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/fr/messages.po b/src/locales/fr/messages.po new file mode 100644 index 00000000..eba73c35 --- /dev/null +++ b/src/locales/fr/messages.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-06-18 21:59+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: fr\n" + +#: src/components/modals/SchemaModal.tsx +msgid "Close" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Name" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Type" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "YES" +msgstr "" diff --git a/src/locales/fr/messages.ts b/src/locales/fr/messages.ts new file mode 100644 index 00000000..39f11cf5 --- /dev/null +++ b/src/locales/fr/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/it/messages.js b/src/locales/it/messages.js new file mode 100644 index 00000000..52804b76 --- /dev/null +++ b/src/locales/it/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/it/messages.po b/src/locales/it/messages.po new file mode 100644 index 00000000..62fd84d8 --- /dev/null +++ b/src/locales/it/messages.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-06-18 21:59+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: it\n" + +#: src/components/modals/SchemaModal.tsx +msgid "Close" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Name" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Type" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "YES" +msgstr "" diff --git a/src/locales/it/messages.ts b/src/locales/it/messages.ts new file mode 100644 index 00000000..39f11cf5 --- /dev/null +++ b/src/locales/it/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/ja/messages.js b/src/locales/ja/messages.js new file mode 100644 index 00000000..52804b76 --- /dev/null +++ b/src/locales/ja/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/ja/messages.po b/src/locales/ja/messages.po new file mode 100644 index 00000000..17d6a3f9 --- /dev/null +++ b/src/locales/ja/messages.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-06-18 21:59+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: ja\n" + +#: src/components/modals/SchemaModal.tsx +msgid "Close" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Name" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Type" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "YES" +msgstr "" diff --git a/src/locales/ja/messages.ts b/src/locales/ja/messages.ts new file mode 100644 index 00000000..39f11cf5 --- /dev/null +++ b/src/locales/ja/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/ru/messages.js b/src/locales/ru/messages.js new file mode 100644 index 00000000..52804b76 --- /dev/null +++ b/src/locales/ru/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/ru/messages.po b/src/locales/ru/messages.po new file mode 100644 index 00000000..43088d39 --- /dev/null +++ b/src/locales/ru/messages.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-06-18 21:59+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: ru\n" + +#: src/components/modals/SchemaModal.tsx +msgid "Close" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Name" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Type" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "YES" +msgstr "" diff --git a/src/locales/ru/messages.ts b/src/locales/ru/messages.ts new file mode 100644 index 00000000..39f11cf5 --- /dev/null +++ b/src/locales/ru/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/zh/messages.js b/src/locales/zh/messages.js new file mode 100644 index 00000000..52804b76 --- /dev/null +++ b/src/locales/zh/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/zh/messages.po b/src/locales/zh/messages.po new file mode 100644 index 00000000..5c57efe5 --- /dev/null +++ b/src/locales/zh/messages.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-06-18 21:59+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: zh\n" + +#: src/components/modals/SchemaModal.tsx +msgid "Close" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Name" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "Type" +msgstr "" + +#: src/components/modals/SchemaModal.tsx +msgid "YES" +msgstr "" diff --git a/src/locales/zh/messages.ts b/src/locales/zh/messages.ts new file mode 100644 index 00000000..39f11cf5 --- /dev/null +++ b/src/locales/zh/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx index df1047d8..1b2fabd9 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -6,6 +6,8 @@ import ReactDOM from 'react-dom/client'; import { App } from './App'; import './index.css'; import './i18n/config'; +import { I18nProvider } from '@lingui/react'; +import { i18n, dynamicActivate } from './i18n/lingui'; import { DatabaseProvider } from './contexts/DatabaseProvider'; import { SettingsProvider } from './contexts/SettingsProvider'; import { SavedQueriesProvider } from './contexts/SavedQueriesProvider'; @@ -14,22 +16,27 @@ import { EditorProvider } from './contexts/EditorProvider'; import { ThemeProvider } from './contexts/ThemeProvider'; import { UpdateProvider } from './contexts/UpdateProvider'; -ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - - - - - - - - - - - - - - - - - , -); +void (async () => { + await dynamicActivate("en"); + ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + + + + + + + + + + + + + + + + + , + ); +})(); diff --git a/vite.config.ts b/vite.config.ts index 9438fc1b..05193a10 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,9 +1,13 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' +import { lingui } from '@lingui/vite-plugin' // https://vite.dev/config/ export default defineConfig({ - plugins: [react()], + plugins: [ + react({ babel: { plugins: ['@lingui/babel-plugin-lingui-macro'] } }), + lingui(), + ], resolve: { alias: { // Polyfills for browser environment (needed by wkx library) From aa5354268a22da6119a921fcb2b5e651a5a59922 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 09:44:25 +0200 Subject: [PATCH 06/22] chore(i18n): drop dead CJS catalog artifacts, gitignore compile .js output Task 1 review fixup: 7 stale src/locales/*/messages.js (default-CJS compile output from before --typescript --namespace es) were committed by accident and unused (dynamicActivate imports .ts only). Remove them and gitignore *.js under src/locales so they can't recur. --- .gitignore | 3 +++ src/locales/de/messages.js | 1 - src/locales/es/messages.js | 1 - src/locales/fr/messages.js | 1 - src/locales/it/messages.js | 1 - src/locales/ja/messages.js | 1 - src/locales/ru/messages.js | 1 - src/locales/zh/messages.js | 1 - 8 files changed, 3 insertions(+), 7 deletions(-) delete mode 100644 src/locales/de/messages.js delete mode 100644 src/locales/es/messages.js delete mode 100644 src/locales/fr/messages.js delete mode 100644 src/locales/it/messages.js delete mode 100644 src/locales/ja/messages.js delete mode 100644 src/locales/ru/messages.js delete mode 100644 src/locales/zh/messages.js diff --git a/.gitignore b/.gitignore index 420447e3..f81faef6 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,6 @@ coverage plugins/**/target .gitnexus .pi/ + +# Lingui: never commit CJS compile output (we ship the --typescript ES catalogs) +src/locales/**/*.js diff --git a/src/locales/de/messages.js b/src/locales/de/messages.js deleted file mode 100644 index 52804b76..00000000 --- a/src/locales/de/messages.js +++ /dev/null @@ -1 +0,0 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/es/messages.js b/src/locales/es/messages.js deleted file mode 100644 index 52804b76..00000000 --- a/src/locales/es/messages.js +++ /dev/null @@ -1 +0,0 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/fr/messages.js b/src/locales/fr/messages.js deleted file mode 100644 index 52804b76..00000000 --- a/src/locales/fr/messages.js +++ /dev/null @@ -1 +0,0 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/it/messages.js b/src/locales/it/messages.js deleted file mode 100644 index 52804b76..00000000 --- a/src/locales/it/messages.js +++ /dev/null @@ -1 +0,0 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/ja/messages.js b/src/locales/ja/messages.js deleted file mode 100644 index 52804b76..00000000 --- a/src/locales/ja/messages.js +++ /dev/null @@ -1 +0,0 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/ru/messages.js b/src/locales/ru/messages.js deleted file mode 100644 index 52804b76..00000000 --- a/src/locales/ru/messages.js +++ /dev/null @@ -1 +0,0 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file diff --git a/src/locales/zh/messages.js b/src/locales/zh/messages.js deleted file mode 100644 index 52804b76..00000000 --- a/src/locales/zh/messages.js +++ /dev/null @@ -1 +0,0 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")}; \ No newline at end of file From 0c3bcb4a24fad17baa05656214b98fabca6465b8 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 09:50:24 +0200 Subject: [PATCH 07/22] feat(i18n): lingui codemod tool + fixtures --- scripts/i18n/codemod.mjs | 292 ++++++++++++++++++++++++++++ scripts/i18n/codemod.test.mjs | 61 ++++++ scripts/i18n/fixtures/expected.tsx | 16 ++ scripts/i18n/fixtures/input.tsx | 15 ++ scripts/i18n/gen-harmful-groups.mjs | 69 +++++++ scripts/i18n/harmful-groups.json | 114 +++++++++++ scripts/i18n/manifest.json | 23 +++ scripts/i18n/review-needed.txt | 1 + 8 files changed, 591 insertions(+) create mode 100644 scripts/i18n/codemod.mjs create mode 100644 scripts/i18n/codemod.test.mjs create mode 100644 scripts/i18n/fixtures/expected.tsx create mode 100644 scripts/i18n/fixtures/input.tsx create mode 100644 scripts/i18n/gen-harmful-groups.mjs create mode 100644 scripts/i18n/harmful-groups.json create mode 100644 scripts/i18n/manifest.json create mode 100644 scripts/i18n/review-needed.txt diff --git a/scripts/i18n/codemod.mjs b/scripts/i18n/codemod.mjs new file mode 100644 index 00000000..994f4b7c --- /dev/null +++ b/scripts/i18n/codemod.mjs @@ -0,0 +1,292 @@ +import { readFileSync, writeFileSync, globSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, join } from "node:path"; +import { Project, SyntaxKind } from "ts-morph"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const CONTEXT_DELIM = "\x04"; + +function flatten(obj, prefix = "", out = {}) { + for (const k of Object.keys(obj)) { + const v = obj[k]; + const nk = prefix ? `${prefix}.${k}` : k; + if (v && typeof v === "object" && !Array.isArray(v)) flatten(v, nk, out); + else out[nk] = v; + } + return out; +} + +export function loadEn() { + const en = JSON.parse( + readFileSync(join(__dirname, "../../src/i18n/locales/en.json"), "utf8"), + ); + return flatten(en); +} + +export function loadHarmful() { + return JSON.parse(readFileSync(join(__dirname, "harmful-groups.json"), "utf8")); +} + +// Convert i18next interpolation ({{var}}) to Lingui ICU ({var}). +// In a plural context, {{count}} becomes the literal `#`. +function toIcu(text, { pluralCount = false } = {}) { + return text.replace(/\{\{\s*(\w+)\s*\}\}/g, (_, name) => { + if (pluralCount && name === "count") return "#"; + return `{${name}}`; + }); +} + +function interpolationVars(text) { + const vars = []; + const re = /\{\{\s*(\w+)\s*\}\}/g; + let m; + while ((m = re.exec(text))) vars.push(m[1]); + return vars; +} + +function hasInterpolation(text) { + return /\{\{\s*\w+\s*\}\}/.test(text); +} + +// A double-quoted JSON-style string literal for use inside t({ message: ... }). +function jsonString(text) { + return JSON.stringify(text); +} + +// Build a tagged-template body from i18next text, turning {{var}} into ${var}. +// Returns null if the text cannot be safely embedded in a template literal. +function toTemplate(text) { + if (text.includes("`")) return null; + // Escape backslashes first, then any literal ${ that is NOT one of our placeholders. + // We rebuild by tokenizing on {{var}}. + const parts = text.split(/(\{\{\s*\w+\s*\}\})/); + let out = ""; + for (const part of parts) { + const m = part.match(/^\{\{\s*(\w+)\s*\}\}$/); + if (m) { + out += "${" + m[1] + "}"; + continue; + } + // Literal segment: escape backslashes and stray ${ sequences. + if (part.includes("${")) return null; + out += part.replace(/\\/g, "\\\\"); + } + return out; +} + +function getOptionsObject(callExpr) { + const args = callExpr.getArguments(); + if (args.length < 2) return null; + const arg = args[1]; + if (arg.getKind() !== SyntaxKind.ObjectLiteralExpression) return null; + return arg; +} + +function getProperty(objLiteral, name) { + const prop = objLiteral.getProperty(name); + if (!prop) return null; + if (prop.getKind() === SyntaxKind.PropertyAssignment) { + return prop.getInitializer().getText(); + } + if (prop.getKind() === SyntaxKind.ShorthandPropertyAssignment) { + return name; + } + return null; +} + +export function transformSource(code, opts) { + const { en, harmful } = opts; + const project = new Project({ useInMemoryFileSystem: true }); + const sf = project.createSourceFile("input.tsx", code, { overwrite: true }); + + const manifest = {}; + const reviewNeeded = []; + let needPluralImport = false; + let usedT = false; + + const record = (message, context, key) => { + const mkey = context ? message + CONTEXT_DELIM + context : message; + if (!manifest[mkey]) manifest[mkey] = []; + manifest[mkey].push(key); + }; + + const note = (node, reason) => { + const { line } = sf.getLineAndColumnAtPos(node.getStart()); + reviewNeeded.push(`input.tsx:${line} ${reason} ${node.getText().slice(0, 80)}`); + }; + + const calls = sf + .getDescendantsOfKind(SyntaxKind.CallExpression) + .filter((c) => { + const expr = c.getExpression(); + return expr.getKind() === SyntaxKind.Identifier && expr.getText() === "t"; + }); + + for (const call of calls) { + const args = call.getArguments(); + if (args.length === 0) continue; + const first = args[0]; + + if (first.getKind() !== SyntaxKind.StringLiteral) { + note(call, "non-literal t() key"); + usedT = true; + continue; + } + + const key = first.getLiteralValue(); + const opts = getOptionsObject(call); + + const oneKey = `${key}_one`; + const otherKey = `${key}_other`; + const isPluralKey = en[oneKey] !== undefined && en[otherKey] !== undefined; + const hasCount = opts && opts.getProperty("count") !== undefined; + + // key not in en (and not a plural base) -> review. + if (en[key] === undefined && !isPluralKey) { + note(call, "key not in en"); + usedT = true; + continue; + } + + if (isPluralKey && hasCount) { + const countExpr = getProperty(opts, "count"); + const oneIcu = toIcu(en[oneKey], { pluralCount: true }); + const otherIcu = toIcu(en[otherKey], { pluralCount: true }); + call.replaceWithText( + `plural(${countExpr}, { one: ${jsonString(oneIcu)}, other: ${jsonString(otherIcu)} })`, + ); + record(en[otherKey], null, otherKey); + record(en[oneKey], null, oneKey); + needPluralImport = true; + continue; + } + + const text = en[key]; + + if (harmful[key]) { + const message = hasInterpolation(text) ? toIcu(text) : text; + call.replaceWithText( + `t({ message: ${jsonString(message)}, context: ${jsonString(harmful[key])} })`, + ); + record(message, harmful[key], key); + usedT = true; + continue; + } + + if (hasInterpolation(text)) { + const tpl = toTemplate(text); + if (tpl === null) { + note(call, "unsafe template interpolation"); + usedT = true; + continue; + } + // The named values must be reachable as identifiers in scope; the options + // object passes them, but the macro reads the in-scope variable directly. + call.replaceWithText("t`" + tpl + "`"); + record(toIcu(text), null, key); + usedT = true; + continue; + } + + // Plain string. + const tpl = toTemplate(text); + if (tpl === null) { + note(call, "unsafe template literal"); + usedT = true; + continue; + } + call.replaceWithText("t`" + tpl + "`"); + record(text, null, key); + usedT = true; + } + + // Rewrite hook + import only when the useTranslation import is present. + const i18nImport = sf.getImportDeclaration( + (d) => d.getModuleSpecifierValue() === "react-i18next", + ); + if (i18nImport) { + const named = i18nImport.getNamedImports().map((n) => n.getName()); + if (named.includes("useTranslation")) { + if (named.length === 1) { + i18nImport.setModuleSpecifier("@lingui/react/macro"); + i18nImport.getNamedImports()[0].setName("useLingui"); + } else { + i18nImport.removeNamedImport( + i18nImport.getNamedImports().find((n) => n.getName() === "useTranslation"), + ); + sf.addImportDeclaration({ + moduleSpecifier: "@lingui/react/macro", + namedImports: ["useLingui"], + }); + } + // const { t } = useTranslation(); -> useLingui() + for (const callExpr of sf.getDescendantsOfKind(SyntaxKind.CallExpression)) { + const e = callExpr.getExpression(); + if (e.getKind() === SyntaxKind.Identifier && e.getText() === "useTranslation") { + callExpr.replaceWithText("useLingui()"); + } + } + } + } + + if (needPluralImport) { + const macroImport = sf.getImportDeclaration( + (d) => d.getModuleSpecifierValue() === "@lingui/core/macro", + ); + if (macroImport) { + if (!macroImport.getNamedImports().some((n) => n.getName() === "plural")) { + macroImport.addNamedImport("plural"); + } + } else { + sf.insertImportDeclaration(0, { + moduleSpecifier: "@lingui/core/macro", + namedImports: ["plural"], + }); + } + } + + void usedT; + return { output: sf.getFullText(), manifest, reviewNeeded }; +} + +function cli() { + const patterns = process.argv.slice(2); + if (patterns.length === 0) { + console.error("usage: node codemod.mjs "); + process.exit(1); + } + const en = loadEn(); + const harmful = loadHarmful(); + const files = [...new Set(patterns.flatMap((p) => globSync(p)))]; + + const manifest = {}; + const reviewNeeded = []; + for (const file of files) { + const code = readFileSync(file, "utf8"); + const res = transformSource(code, { en, harmful }); + writeFileSync(file, res.output); + for (const [mkey, keys] of Object.entries(res.manifest)) { + if (!manifest[mkey]) manifest[mkey] = []; + manifest[mkey].push(...keys); + } + for (const r of res.reviewNeeded) { + reviewNeeded.push(r.replace(/^input\.tsx/, file)); + } + } + + writeFileSync( + join(__dirname, "manifest.json"), + JSON.stringify(manifest, null, 2) + "\n", + ); + writeFileSync( + join(__dirname, "review-needed.txt"), + reviewNeeded.join("\n") + (reviewNeeded.length ? "\n" : ""), + ); + console.log( + `transformed ${files.length} files; ${Object.keys(manifest).length} messages; ${reviewNeeded.length} review sites`, + ); +} + +if (import.meta.url === `file://${process.argv[1]}`) { + cli(); +} diff --git a/scripts/i18n/codemod.test.mjs b/scripts/i18n/codemod.test.mjs new file mode 100644 index 00000000..05f543e4 --- /dev/null +++ b/scripts/i18n/codemod.test.mjs @@ -0,0 +1,61 @@ +import { readFileSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, join } from "node:path"; +import { transformSource, loadEn, loadHarmful } from "./codemod.mjs"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const norm = (s) => s.replace(/[ \t]+$/gm, "").replace(/\n+$/, "\n"); + +const input = readFileSync(join(__dirname, "fixtures/input.tsx"), "utf8"); +const expected = readFileSync(join(__dirname, "fixtures/expected.tsx"), "utf8"); + +const { output, manifest, reviewNeeded } = transformSource(input, { + en: loadEn(), + harmful: loadHarmful(), +}); + +let ok = true; + +if (norm(output) !== norm(expected)) { + ok = false; + console.error("--- output mismatch ---"); + const a = norm(output).split("\n"); + const b = norm(expected).split("\n"); + for (let i = 0; i < Math.max(a.length, b.length); i++) { + if (a[i] !== b[i]) { + console.error(`L${i + 1}\n got: ${JSON.stringify(a[i])}\n expected: ${JSON.stringify(b[i])}`); + } + } +} + +if (reviewNeeded.length !== 1 || !reviewNeeded[0].includes("non-literal")) { + ok = false; + console.error("--- review-needed mismatch ---"); + console.error(reviewNeeded); +} + +const expectKeys = new Set([ + "schema.close", + "dataGrid.deleteRows_one", + "dataGrid.deleteRows_other", + "editor.notebook.cellResult_one", + "editor.notebook.cellResult_other", + "sidebar.deleteIndexConfirm", + "generateSQL.tabDelete", +]); +const gotKeys = new Set(Object.values(manifest).flat()); +for (const k of expectKeys) { + if (!gotKeys.has(k)) { + ok = false; + console.error(`--- manifest missing key: ${k} ---`); + } +} + +if (ok) { + console.log("PASS"); + process.exit(0); +} else { + console.error("FAIL"); + process.exit(1); +} diff --git a/scripts/i18n/fixtures/expected.tsx b/scripts/i18n/fixtures/expected.tsx new file mode 100644 index 00000000..2ff7f834 --- /dev/null +++ b/scripts/i18n/fixtures/expected.tsx @@ -0,0 +1,16 @@ +import { plural } from "@lingui/core/macro"; +import { useLingui } from "@lingui/react/macro"; + +export function Demo({ count, name, time, dynamicKey }: Props) { + const { t } = useLingui(); + return ( +
+ + {plural(count, { one: "Delete # row", other: "Delete # rows" })} + {plural(count, { one: "# row · {time}ms", other: "# rows · {time}ms" })} +

{t`Delete index "${name}"?`}

+

{t({ message: "Delete", context: "generateSQL" })}

+

{t(dynamicKey)}

+
+ ); +} diff --git a/scripts/i18n/fixtures/input.tsx b/scripts/i18n/fixtures/input.tsx new file mode 100644 index 00000000..8c120200 --- /dev/null +++ b/scripts/i18n/fixtures/input.tsx @@ -0,0 +1,15 @@ +import { useTranslation } from "react-i18next"; + +export function Demo({ count, name, time, dynamicKey }: Props) { + const { t } = useTranslation(); + return ( +
+ + {t("dataGrid.deleteRows", { count })} + {t("editor.notebook.cellResult", { count, time })} +

{t("sidebar.deleteIndexConfirm", { name })}

+

{t("generateSQL.tabDelete")}

+

{t(dynamicKey)}

+
+ ); +} diff --git a/scripts/i18n/gen-harmful-groups.mjs b/scripts/i18n/gen-harmful-groups.mjs new file mode 100644 index 00000000..de862c31 --- /dev/null +++ b/scripts/i18n/gen-harmful-groups.mjs @@ -0,0 +1,69 @@ +import { readFileSync, writeFileSync, readdirSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, join } from "node:path"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const localesDir = join(__dirname, "../../src/i18n/locales"); +const outFile = join(__dirname, "harmful-groups.json"); + +function flatten(obj, prefix = "", out = {}) { + for (const k of Object.keys(obj)) { + const v = obj[k]; + const nk = prefix ? `${prefix}.${k}` : k; + if (v && typeof v === "object" && !Array.isArray(v)) flatten(v, nk, out); + else out[nk] = v; + } + return out; +} + +function loadLocales() { + const locales = {}; + for (const file of readdirSync(localesDir)) { + if (!file.endsWith(".json")) continue; + const code = file.replace(/\.json$/, ""); + locales[code] = flatten(JSON.parse(readFileSync(join(localesDir, file), "utf8"))); + } + return locales; +} + +function main() { + const locales = loadLocales(); + const en = locales.en; + const nonEn = Object.keys(locales).filter((c) => c !== "en"); + + // Group keys by their en value. + const byValue = new Map(); + for (const [key, value] of Object.entries(en)) { + if (typeof value !== "string") continue; + if (!byValue.has(value)) byValue.set(value, []); + byValue.get(value).push(key); + } + + const harmful = {}; + for (const [, keys] of byValue) { + if (keys.length < 2) continue; + // A group is harmful if any non-en locale has >1 distinct translation across these keys. + let divergent = false; + for (const locale of nonEn) { + const seen = new Set(); + for (const key of keys) { + const t = locales[locale][key]; + if (typeof t === "string") seen.add(t); + } + if (seen.size > 1) { + divergent = true; + break; + } + } + if (!divergent) continue; + for (const key of keys) { + harmful[key] = key.split(".")[0]; + } + } + + writeFileSync(outFile, JSON.stringify(harmful, null, 2) + "\n"); + console.log(`harmful keys: ${Object.keys(harmful).length}`); + console.log(`harmful groups: ${new Set(Object.values(harmful)).size} namespaces touched`); +} + +main(); diff --git a/scripts/i18n/harmful-groups.json b/scripts/i18n/harmful-groups.json new file mode 100644 index 00000000..ecbc0801 --- /dev/null +++ b/scripts/i18n/harmful-groups.json @@ -0,0 +1,114 @@ +{ + "toolbar.valuePlaceholder": "toolbar", + "editor.notebook.paramValue": "editor", + "common.delete": "common", + "sidebar.delete": "sidebar", + "sidebar.notebooks.delete": "sidebar", + "connections.delete": "connections", + "sshConnections.delete": "sshConnections", + "generateSQL.tabDelete": "generateSQL", + "blobInput.delete": "blobInput", + "groups.delete": "groups", + "common.error": "common", + "settings.error": "settings", + "aiActivity.status.error": "aiActivity", + "common.success": "common", + "mcp.successTitle": "mcp", + "aiActivity.status.success": "aiActivity", + "common.clear": "common", + "connectionAppearance.removeEmoji": "connectionAppearance", + "aiActivity.clearAll": "aiActivity", + "sidebar.viewDefinition": "sidebar", + "sidebar.viewTriggerDefinition": "sidebar", + "sidebar.modifyColumn": "sidebar", + "modifyColumn.titleEdit": "modifyColumn", + "sidebar.generateSQL": "sidebar", + "ai.generateSql": "ai", + "sidebar.addColumn": "sidebar", + "createTable.addColumn": "createTable", + "modifyColumn.titleAdd": "modifyColumn", + "modifyColumn.add": "modifyColumn", + "sidebar.retry": "sidebar", + "editor.errorBoundary.retry": "editor", + "clipboardImport.retry": "clipboardImport", + "sidebar.selectAll": "sidebar", + "editor.querySelection.selectAll": "editor", + "dump.selectAll": "dump", + "sidebar.deselectAll": "sidebar", + "editor.querySelection.deselectAll": "editor", + "dump.deselectAll": "dump", + "sidebar.openConnections": "sidebar", + "sidebar.notebooks.open": "sidebar", + "connections.open": "connections", + "sidebar.historyRecoveredDismiss": "sidebar", + "discordCallout.dismiss": "discordCallout", + "mcp.installed": "mcp", + "settings.plugins.installedMetric": "settings", + "settings.plugins.installed": "settings", + "settings.plugins.filterInstalled": "settings", + "mcp.errorTitle": "mcp", + "settings.plugins.installError.title": "settings", + "mcp.safety.approvalTimeout": "mcp", + "aiActivity.status.timeout": "aiActivity", + "connections.export": "connections", + "connections.exportTitle": "connections", + "connectionAppearance.section": "connectionAppearance", + "settings.appearance": "settings", + "newConnection.appearance": "newConnection", + "connectionAppearance.tabs.default": "connectionAppearance", + "createTable.colDefault": "createTable", + "connectionAppearance.previewLabel": "connectionAppearance", + "settings.preview": "settings", + "views.preview": "views", + "connectionAppearance.removeImage": "connectionAppearance", + "settings.plugins.remove": "settings", + "settings.general": "settings", + "settings.appearance_general": "settings", + "newConnection.general": "newConnection", + "editor.visualExplain.general": "editor", + "settings.rows": "settings", + "clipboardImport.rowsLabel": "clipboardImport", + "settings.ai.tab": "settings", + "createTable.colAi": "createTable", + "settings.plugins.update": "settings", + "sshConnections.update": "sshConnections", + "generateSQL.tabUpdate": "generateSQL", + "settings.plugins.installError.details": "settings", + "settings.plugins.startError.details": "settings", + "settings.shortcuts.pasteImportClipboard": "settings", + "clipboardImport.title": "clipboardImport", + "update.downloading": "update", + "blobInput.downloading": "blobInput", + "newConnection.nameRequired": "newConnection", + "k8sConnections.errors.nameRequired": "k8sConnections", + "dataGrid.copied": "dataGrid", + "aiActivity.copied": "aiActivity", + "editor.tabSwitcher.escHint": "editor", + "editor.quickNavigator.escHint": "editor", + "editor.visualExplain.time": "editor", + "aiActivity.col.timestamp": "aiActivity", + "editor.visualExplain.relation": "editor", + "editor.visualExplain.tableView": "editor", + "editor.notebook.runAll": "editor", + "editor.querySelection.runAll": "editor", + "createTable.create": "createTable", + "generateSQL.tabCreateTable": "generateSQL", + "createIndex.title": "createIndex", + "createIndex.create": "createIndex", + "createFk.title": "createFk", + "createFk.create": "createFk", + "views.createView": "views", + "views.create": "views", + "triggers.events": "triggers", + "aiActivity.tabs.events": "aiActivity", + "aiActivity.events": "aiActivity", + "aiActivity.sort.eventCount": "aiActivity", + "dump.title": "dump", + "dump.dumpDatabase": "dump", + "jsonInput.expand": "jsonInput", + "aiApproval.expandPlan": "aiApproval", + "taskManager.pluginProcesses.colActions": "taskManager", + "aiActivity.col.actions": "aiActivity", + "aiActivity.blockedCount_one": "aiActivity", + "aiActivity.blockedCount_other": "aiActivity" +} diff --git a/scripts/i18n/manifest.json b/scripts/i18n/manifest.json new file mode 100644 index 00000000..fa328d8f --- /dev/null +++ b/scripts/i18n/manifest.json @@ -0,0 +1,23 @@ +{ + "Close": [ + "schema.close" + ], + "Delete {{count}} rows": [ + "dataGrid.deleteRows_other" + ], + "Delete {{count}} row": [ + "dataGrid.deleteRows_one" + ], + "{{count}} rows · {{time}}ms": [ + "editor.notebook.cellResult_other" + ], + "{{count}} row · {{time}}ms": [ + "editor.notebook.cellResult_one" + ], + "Delete index \"{name}\"?": [ + "sidebar.deleteIndexConfirm" + ], + "Delete\u0004generateSQL": [ + "generateSQL.tabDelete" + ] +} diff --git a/scripts/i18n/review-needed.txt b/scripts/i18n/review-needed.txt new file mode 100644 index 00000000..e80ced92 --- /dev/null +++ b/scripts/i18n/review-needed.txt @@ -0,0 +1 @@ +scripts/i18n/fixtures/input.tsx:12 non-literal t() key t(dynamicKey) From 4d3b953bd4ec287c901b8f675bbc0a76104f43ec Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 09:55:16 +0200 Subject: [PATCH 08/22] refactor(i18n): structured codemod manifest for Task-4 backfill MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plain (key->[originalKeys]) manifest could not drive the backfill: a plural() macro extracts to ONE compound ICU msgid, but the manifest recorded the two raw i18next strings, so no catalog entry would join — and it lacked the i18next stem needed to gather a target locale's own _one/_few/_many/_other forms. Each entry is now { kind, context, message, stem, forms, originalKeys }, keyed by the Lingui message identity (msgid + gettext context delimiter). Plural pairs collapse into one entry carrying the stem + en forms. Transform output is unchanged; only the manifest contract changed. --- scripts/i18n/codemod.mjs | 42 +++++++++++++----- scripts/i18n/codemod.test.mjs | 15 ++++++- scripts/i18n/manifest.json | 79 +++++++++++++++++++++++++--------- scripts/i18n/review-needed.txt | 2 +- 4 files changed, 104 insertions(+), 34 deletions(-) diff --git a/scripts/i18n/codemod.mjs b/scripts/i18n/codemod.mjs index 994f4b7c..8aef4a82 100644 --- a/scripts/i18n/codemod.mjs +++ b/scripts/i18n/codemod.mjs @@ -104,10 +104,20 @@ export function transformSource(code, opts) { let needPluralImport = false; let usedT = false; - const record = (message, context, key) => { + // Manifest entries are keyed by the Lingui message identity (msgid, plus the + // gettext context delimiter when present) and carry everything the Task-4 + // backfill needs to rebuild each target locale: `kind`, `context`, the source + // `message`, the plural `stem` (i18next base key, so the backfill can gather + // the target locale's own _one/_few/_many/_other forms), the en `forms`, and + // every original i18next key that collapsed into this message. + const record = ({ message, context = null, key, kind, stem = null, forms = null }) => { const mkey = context ? message + CONTEXT_DELIM + context : message; - if (!manifest[mkey]) manifest[mkey] = []; - manifest[mkey].push(key); + if (!manifest[mkey]) { + manifest[mkey] = { kind, context, message, stem, forms, originalKeys: [] }; + } + if (!manifest[mkey].originalKeys.includes(key)) { + manifest[mkey].originalKeys.push(key); + } }; const note = (node, reason) => { @@ -155,8 +165,13 @@ export function transformSource(code, opts) { call.replaceWithText( `plural(${countExpr}, { one: ${jsonString(oneIcu)}, other: ${jsonString(otherIcu)} })`, ); - record(en[otherKey], null, otherKey); - record(en[oneKey], null, oneKey); + // Lingui extracts the macro to a single ICU msgid; the exact string is the + // join key into the extracted catalog. The backfill verifies every catalog + // entry resolves, so any serialization drift surfaces loudly there. + const pluralMessage = `{count, plural, one {${oneIcu}} other {${otherIcu}}}`; + const forms = { one: oneIcu, other: otherIcu }; + record({ message: pluralMessage, kind: "plural", stem: key, forms, key: oneKey }); + record({ message: pluralMessage, kind: "plural", stem: key, forms, key: otherKey }); needPluralImport = true; continue; } @@ -168,7 +183,7 @@ export function transformSource(code, opts) { call.replaceWithText( `t({ message: ${jsonString(message)}, context: ${jsonString(harmful[key])} })`, ); - record(message, harmful[key], key); + record({ message, context: harmful[key], kind: "harmful", key }); usedT = true; continue; } @@ -183,7 +198,7 @@ export function transformSource(code, opts) { // The named values must be reachable as identifiers in scope; the options // object passes them, but the macro reads the in-scope variable directly. call.replaceWithText("t`" + tpl + "`"); - record(toIcu(text), null, key); + record({ message: toIcu(text), kind: "interp", key }); usedT = true; continue; } @@ -196,7 +211,7 @@ export function transformSource(code, opts) { continue; } call.replaceWithText("t`" + tpl + "`"); - record(text, null, key); + record({ message: text, kind: "plain", key }); usedT = true; } @@ -265,9 +280,14 @@ function cli() { const code = readFileSync(file, "utf8"); const res = transformSource(code, { en, harmful }); writeFileSync(file, res.output); - for (const [mkey, keys] of Object.entries(res.manifest)) { - if (!manifest[mkey]) manifest[mkey] = []; - manifest[mkey].push(...keys); + for (const [mkey, entry] of Object.entries(res.manifest)) { + if (!manifest[mkey]) { + manifest[mkey] = { ...entry, originalKeys: [...entry.originalKeys] }; + continue; + } + for (const k of entry.originalKeys) { + if (!manifest[mkey].originalKeys.includes(k)) manifest[mkey].originalKeys.push(k); + } } for (const r of res.reviewNeeded) { reviewNeeded.push(r.replace(/^input\.tsx/, file)); diff --git a/scripts/i18n/codemod.test.mjs b/scripts/i18n/codemod.test.mjs index 05f543e4..5cfcfe4b 100644 --- a/scripts/i18n/codemod.test.mjs +++ b/scripts/i18n/codemod.test.mjs @@ -44,7 +44,7 @@ const expectKeys = new Set([ "sidebar.deleteIndexConfirm", "generateSQL.tabDelete", ]); -const gotKeys = new Set(Object.values(manifest).flat()); +const gotKeys = new Set(Object.values(manifest).flatMap((e) => e.originalKeys)); for (const k of expectKeys) { if (!gotKeys.has(k)) { ok = false; @@ -52,6 +52,19 @@ for (const k of expectKeys) { } } +// Plural entries must carry the stem + en forms so the backfill can rebuild +// each target locale's own plural set. +const pluralEntry = Object.values(manifest).find((e) => e.kind === "plural"); +if (!pluralEntry || pluralEntry.stem == null || pluralEntry.forms == null) { + ok = false; + console.error("--- plural manifest entry missing stem/forms ---", pluralEntry); +} +const harmfulEntry = Object.values(manifest).find((e) => e.kind === "harmful"); +if (!harmfulEntry || harmfulEntry.context == null) { + ok = false; + console.error("--- harmful manifest entry missing context ---", harmfulEntry); +} + if (ok) { console.log("PASS"); process.exit(0); diff --git a/scripts/i18n/manifest.json b/scripts/i18n/manifest.json index fa328d8f..afe7163f 100644 --- a/scripts/i18n/manifest.json +++ b/scripts/i18n/manifest.json @@ -1,23 +1,60 @@ { - "Close": [ - "schema.close" - ], - "Delete {{count}} rows": [ - "dataGrid.deleteRows_other" - ], - "Delete {{count}} row": [ - "dataGrid.deleteRows_one" - ], - "{{count}} rows · {{time}}ms": [ - "editor.notebook.cellResult_other" - ], - "{{count}} row · {{time}}ms": [ - "editor.notebook.cellResult_one" - ], - "Delete index \"{name}\"?": [ - "sidebar.deleteIndexConfirm" - ], - "Delete\u0004generateSQL": [ - "generateSQL.tabDelete" - ] + "Close": { + "kind": "plain", + "context": null, + "message": "Close", + "stem": null, + "forms": null, + "originalKeys": [ + "schema.close" + ] + }, + "{count, plural, one {Delete # row} other {Delete # rows}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {Delete # row} other {Delete # rows}}", + "stem": "dataGrid.deleteRows", + "forms": { + "one": "Delete # row", + "other": "Delete # rows" + }, + "originalKeys": [ + "dataGrid.deleteRows_one", + "dataGrid.deleteRows_other" + ] + }, + "{count, plural, one {# row · {time}ms} other {# rows · {time}ms}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# row · {time}ms} other {# rows · {time}ms}}", + "stem": "editor.notebook.cellResult", + "forms": { + "one": "# row · {time}ms", + "other": "# rows · {time}ms" + }, + "originalKeys": [ + "editor.notebook.cellResult_one", + "editor.notebook.cellResult_other" + ] + }, + "Delete index \"{name}\"?": { + "kind": "interp", + "context": null, + "message": "Delete index \"{name}\"?", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.deleteIndexConfirm" + ] + }, + "Delete\u0004generateSQL": { + "kind": "harmful", + "context": "generateSQL", + "message": "Delete", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.tabDelete" + ] + } } diff --git a/scripts/i18n/review-needed.txt b/scripts/i18n/review-needed.txt index e80ced92..eee6b209 100644 --- a/scripts/i18n/review-needed.txt +++ b/scripts/i18n/review-needed.txt @@ -1 +1 @@ -scripts/i18n/fixtures/input.tsx:12 non-literal t() key t(dynamicKey) +input.tsx:12 non-literal t() key t(dynamicKey) From 36904ec304a97ad0d1f1174f9d98ff98008e2420 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 09:58:50 +0200 Subject: [PATCH 09/22] fix(i18n): codemod crash on multi-import + backtick fallback Dry-run across all 138 real src files surfaced two issues: - Multi-named-import react-i18next (e.g. { useTranslation, Trans }) crashed: ImportDeclaration has no removeNamedImport. Use the specifier's .remove(), leaving sibling imports (a leftover ) for Task 3 manual conversion. - A plain string containing a backtick (dataGrid.copyColumnNameQuoted = "Copy as `column`") was punted to review; now emits the object descriptor form t({ message: ... }) instead of a tagged template. Fixtures extended to lock both. Dry-run now: 0 crashes, 31 review sites (30 dynamic-key registries for Task 3 + 1 genuine broken app ref sidebar.actions in ExplorerSidebar.tsx). --- scripts/i18n/codemod.mjs | 19 +++++++++++-------- scripts/i18n/fixtures/expected.tsx | 3 +++ scripts/i18n/fixtures/input.tsx | 4 +++- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/scripts/i18n/codemod.mjs b/scripts/i18n/codemod.mjs index 8aef4a82..ea92dfd2 100644 --- a/scripts/i18n/codemod.mjs +++ b/scripts/i18n/codemod.mjs @@ -203,14 +203,14 @@ export function transformSource(code, opts) { continue; } - // Plain string. + // Plain string. A backtick / stray ${ rules out a tagged template, so fall + // back to the object descriptor form (a normal double-quoted message). const tpl = toTemplate(text); if (tpl === null) { - note(call, "unsafe template literal"); - usedT = true; - continue; + call.replaceWithText(`t({ message: ${jsonString(text)} })`); + } else { + call.replaceWithText("t`" + tpl + "`"); } - call.replaceWithText("t`" + tpl + "`"); record({ message: text, kind: "plain", key }); usedT = true; } @@ -226,9 +226,12 @@ export function transformSource(code, opts) { i18nImport.setModuleSpecifier("@lingui/react/macro"); i18nImport.getNamedImports()[0].setName("useLingui"); } else { - i18nImport.removeNamedImport( - i18nImport.getNamedImports().find((n) => n.getName() === "useTranslation"), - ); + // Other named imports stay on react-i18next (e.g. a leftover , + // converted manually in Task 3); drop only useTranslation. + i18nImport + .getNamedImports() + .find((n) => n.getName() === "useTranslation") + .remove(); sf.addImportDeclaration({ moduleSpecifier: "@lingui/react/macro", namedImports: ["useLingui"], diff --git a/scripts/i18n/fixtures/expected.tsx b/scripts/i18n/fixtures/expected.tsx index 2ff7f834..fb197569 100644 --- a/scripts/i18n/fixtures/expected.tsx +++ b/scripts/i18n/fixtures/expected.tsx @@ -1,4 +1,5 @@ import { plural } from "@lingui/core/macro"; +import { Trans } from "react-i18next"; import { useLingui } from "@lingui/react/macro"; export function Demo({ count, name, time, dynamicKey }: Props) { @@ -10,7 +11,9 @@ export function Demo({ count, name, time, dynamicKey }: Props) { {plural(count, { one: "# row · {time}ms", other: "# rows · {time}ms" })}

{t`Delete index "${name}"?`}

{t({ message: "Delete", context: "generateSQL" })}

+

{t({ message: "Copy as `column`" })}

{t(dynamicKey)}

+ ); } diff --git a/scripts/i18n/fixtures/input.tsx b/scripts/i18n/fixtures/input.tsx index 8c120200..623f280e 100644 --- a/scripts/i18n/fixtures/input.tsx +++ b/scripts/i18n/fixtures/input.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation, Trans } from "react-i18next"; export function Demo({ count, name, time, dynamicKey }: Props) { const { t } = useTranslation(); @@ -9,7 +9,9 @@ export function Demo({ count, name, time, dynamicKey }: Props) { {t("editor.notebook.cellResult", { count, time })}

{t("sidebar.deleteIndexConfirm", { name })}

{t("generateSQL.tabDelete")}

+

{t("dataGrid.copyColumnNameQuoted")}

{t(dynamicKey)}

+ ); } From af3f3b1c5330b3a4e2a9c68a3bd964d3f7148465 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 10:41:42 +0200 Subject: [PATCH 10/22] refactor(i18n): convert all call sites to lingui macros + registries --- scripts/i18n/gen-registry-manifest.mjs | 291 + scripts/i18n/manifest.json | 12124 +++++++++++++++- scripts/i18n/review-needed.txt | 41 +- src/components/ConnectionHealthMonitor.tsx | 8 +- src/components/connections/ActionButtons.tsx | 14 +- src/components/connections/ConnectionCard.tsx | 6 +- .../connections/ConnectionListItem.tsx | 6 +- src/components/connections/StatusBadge.tsx | 8 +- src/components/explain/VisualExplainView.tsx | 6 +- src/components/layout/ExplorerSidebar.tsx | 294 +- src/components/layout/Sidebar.tsx | 22 +- src/components/layout/SplitPaneLayout.tsx | 6 +- .../layout/sidebar/ConnectionGroupFolder.tsx | 6 +- .../layout/sidebar/ConnectionGroupItem.tsx | 8 +- .../sidebar/DiscordCommunityCallout.tsx | 12 +- .../layout/sidebar/NotebooksSection.tsx | 44 +- .../layout/sidebar/OpenConnectionItem.tsx | 18 +- .../layout/sidebar/QueryHistorySection.tsx | 25 +- .../layout/sidebar/SidebarColumnItem.tsx | 23 +- .../layout/sidebar/SidebarDatabaseItem.tsx | 42 +- .../layout/sidebar/SidebarRoutineItem.tsx | 6 +- .../layout/sidebar/SidebarSchemaItem.tsx | 36 +- .../layout/sidebar/SidebarTableItem.tsx | 14 +- .../layout/sidebar/SidebarTriggerItem.tsx | 6 +- .../layout/sidebar/SidebarViewItem.tsx | 8 +- src/components/modals/AiApprovalModal.tsx | 53 +- src/components/modals/AlertModal.tsx | 6 +- .../modals/ClipboardImport/DataPreview.tsx | 13 +- .../modals/ClipboardImport/ModeToggle.tsx | 12 +- .../modals/ClipboardImport/ParseSummary.tsx | 10 +- .../modals/ClipboardImport/SchemaEditor.tsx | 44 +- .../modals/ClipboardImport/TableNameInput.tsx | 14 +- .../modals/ClipboardImportModal.tsx | 75 +- src/components/modals/CommunityModal.tsx | 20 +- src/components/modals/ConfigJsonModal.tsx | 22 +- src/components/modals/ConfirmModal.tsx | 8 +- .../modals/CreateForeignKeyModal.tsx | 32 +- src/components/modals/CreateIndexModal.tsx | 26 +- src/components/modals/CreateTableModal.tsx | 50 +- src/components/modals/DumpDatabaseModal.tsx | 29 +- src/components/modals/ErrorModal.tsx | 8 +- .../modals/ExplainSelectionModal.tsx | 19 +- src/components/modals/ExportProgressModal.tsx | 16 +- src/components/modals/GenerateSQLModal.tsx | 29 +- src/components/modals/ImportDatabaseModal.tsx | 29 +- src/components/modals/K8sConnectionsModal.tsx | 59 +- src/components/modals/McpModal.tsx | 32 +- src/components/modals/ModifyColumnModal.tsx | 44 +- src/components/modals/NewConnectionModal.tsx | 244 +- .../NewConnectionModal/AppearanceSection.tsx | 47 +- src/components/modals/NewRowModal.tsx | 32 +- .../modals/OpenSourceLibrariesModal.tsx | 30 +- .../modals/PluginInstallErrorModal.tsx | 16 +- src/components/modals/PluginRemoveModal.tsx | 10 +- src/components/modals/PluginSettingsModal.tsx | 54 +- .../modals/PluginStartErrorModal.tsx | 20 +- src/components/modals/QueryModal.tsx | 8 +- src/components/modals/QueryParamsModal.tsx | 12 +- src/components/modals/QuerySelectionModal.tsx | 17 +- src/components/modals/QuickNavigatorModal.tsx | 35 +- src/components/modals/SshConnectionsModal.tsx | 70 +- src/components/modals/TabSwitcherModal.tsx | 15 +- src/components/modals/TriggerEditorModal.tsx | 52 +- .../modals/UpdateNotificationModal.tsx | 22 +- src/components/modals/ViewEditorModal.tsx | 46 +- src/components/modals/VisualExplainModal.tsx | 16 +- src/components/modals/WhatsNewModal.tsx | 20 +- .../modals/mcp/McpSafetySection.tsx | 40 +- .../visual-explain/ExplainAiAnalysis.tsx | 12 +- .../visual-explain/ExplainNodeDetails.tsx | 40 +- .../visual-explain/ExplainOverviewBar.tsx | 45 +- .../visual-explain/ExplainSummaryBar.tsx | 18 +- .../visual-explain/ExplainTableView.tsx | 20 +- src/components/notebook/AddCellButton.tsx | 8 +- src/components/notebook/CellChart.tsx | 10 +- src/components/notebook/CellHistoryPanel.tsx | 8 +- src/components/notebook/CellNameAiButton.tsx | 6 +- src/components/notebook/MarkdownCell.tsx | 8 +- src/components/notebook/NotebookAiButtons.tsx | 8 +- .../notebook/NotebookCellHeader.tsx | 34 +- .../notebook/NotebookHistoryPanel.tsx | 9 +- src/components/notebook/NotebookOutline.tsx | 10 +- src/components/notebook/NotebookToolbar.tsx | 46 +- src/components/notebook/NotebookView.tsx | 24 +- src/components/notebook/ParamsPanel.tsx | 14 +- src/components/notebook/ResultToolbar.tsx | 17 +- src/components/notebook/RunAllSummary.tsx | 12 +- src/components/notebook/SqlCellResult.tsx | 6 +- src/components/settings/AiActivityPanel.tsx | 20 +- src/components/settings/AiTab.tsx | 134 +- src/components/settings/AppearanceTab.tsx | 56 +- src/components/settings/FontPicker.tsx | 10 +- src/components/settings/GeneralTab.tsx | 60 +- src/components/settings/InfoTab.tsx | 57 +- src/components/settings/LocalizationTab.tsx | 20 +- src/components/settings/LogsTab.tsx | 50 +- .../settings/PluginSettingsPage.tsx | 61 +- src/components/settings/PluginsTab.tsx | 85 +- src/components/settings/ShortcutsTab.tsx | 36 +- src/components/settings/ThemePicker.tsx | 6 +- .../ai-activity/AiActivityEventsTab.tsx | 91 +- .../ai-activity/AiActivitySessionsTab.tsx | 62 +- .../settings/ai-activity/EventDetailModal.tsx | 26 +- .../settings/ai-activity/QueryKindBadge.tsx | 8 +- .../settings/ai-activity/StatusBadge.tsx | 8 +- src/components/ui/AiDropdownButton.tsx | 8 +- src/components/ui/BlobInput.tsx | 24 +- src/components/ui/DataGrid.tsx | 65 +- src/components/ui/DataGridRow.tsx | 11 +- src/components/ui/EditorErrorBoundary.tsx | 20 +- src/components/ui/ErrorDisplay.tsx | 8 +- src/components/ui/ExplainPlanNode.tsx | 26 +- src/components/ui/FieldEditor.tsx | 22 +- src/components/ui/FilterRow.tsx | 18 +- src/components/ui/GeometryInput.tsx | 20 +- src/components/ui/JsonCell.tsx | 12 +- src/components/ui/JsonExpansionEditor.tsx | 16 +- src/components/ui/JsonInput.tsx | 34 +- src/components/ui/JsonTreeView.tsx | 8 +- src/components/ui/MultiResultPanel.tsx | 36 +- src/components/ui/PaginationControls.tsx | 13 +- src/components/ui/ResultEntryContent.tsx | 16 +- src/components/ui/RowEditorSidebar.tsx | 14 +- src/components/ui/SchemaDiagram.tsx | 22 +- src/components/ui/StackedResultItem.tsx | 20 +- src/components/ui/TableToolbar.tsx | 30 +- src/components/ui/TextCell.tsx | 8 +- src/components/ui/TextExpansionEditor.tsx | 16 +- src/components/ui/TextInput.tsx | 12 +- src/contexts/SettingsProvider.tsx | 25 +- src/hooks/usePluginApi.ts | 6 +- src/i18n/lingui.ts | 4 + src/i18n/locales/en.json | 1 + src/i18n/registries/aiActivityQueryKind.ts | 9 + src/i18n/registries/aiActivityStatus.ts | 11 + src/i18n/registries/aiPromptKinds.ts | 26 + .../registries/connectionAppearanceTabs.ts | 9 + src/i18n/registries/dumpErrorKeys.ts | 7 + src/i18n/registries/k8sErrorKeys.ts | 12 + src/i18n/registries/notebookHistoryChange.ts | 19 + .../openSourceLibrariesEcosystem.ts | 7 + .../registries/openSourceLibrariesSections.ts | 9 + src/i18n/registries/pluginBuiltinSettings.ts | 17 + src/i18n/registries/quickNavigatorType.ts | 9 + src/i18n/registries/shortcutCategories.ts | 8 + src/i18n/registries/shortcutLabels.ts | 20 + src/i18n/registries/sidebarDateGroups.ts | 10 + .../registries/taskManagerProcessStatus.ts | 8 + src/pages/Connections.tsx | 81 +- src/pages/Editor.tsx | 133 +- src/pages/JsonViewerPage.tsx | 12 +- src/pages/McpPage.tsx | 40 +- src/pages/SchemaDiagramPage.tsx | 18 +- src/pages/Settings.tsx | 32 +- src/pages/TaskManagerPage.tsx | 116 +- src/pages/VisualExplainPage.tsx | 18 +- src/utils/explainPlan.ts | 24 +- 157 files changed, 14695 insertions(+), 2150 deletions(-) create mode 100644 scripts/i18n/gen-registry-manifest.mjs create mode 100644 src/i18n/registries/aiActivityQueryKind.ts create mode 100644 src/i18n/registries/aiActivityStatus.ts create mode 100644 src/i18n/registries/aiPromptKinds.ts create mode 100644 src/i18n/registries/connectionAppearanceTabs.ts create mode 100644 src/i18n/registries/dumpErrorKeys.ts create mode 100644 src/i18n/registries/k8sErrorKeys.ts create mode 100644 src/i18n/registries/notebookHistoryChange.ts create mode 100644 src/i18n/registries/openSourceLibrariesEcosystem.ts create mode 100644 src/i18n/registries/openSourceLibrariesSections.ts create mode 100644 src/i18n/registries/pluginBuiltinSettings.ts create mode 100644 src/i18n/registries/quickNavigatorType.ts create mode 100644 src/i18n/registries/shortcutCategories.ts create mode 100644 src/i18n/registries/shortcutLabels.ts create mode 100644 src/i18n/registries/sidebarDateGroups.ts create mode 100644 src/i18n/registries/taskManagerProcessStatus.ts diff --git a/scripts/i18n/gen-registry-manifest.mjs b/scripts/i18n/gen-registry-manifest.mjs new file mode 100644 index 00000000..2963ea79 --- /dev/null +++ b/scripts/i18n/gen-registry-manifest.mjs @@ -0,0 +1,291 @@ +// Companion to codemod.mjs: records the messages introduced *manually* during +// the Lingui conversion (dynamic-key registries, labelKey descriptors, the +// converted , and the restored sidebar.actions key) into manifest.json. +// +// The codemod only records the static sites it transforms. Task-4 backfill maps +// each message -> its original i18next key(s) via manifest.originalKeys, so every +// manually introduced message must land here in the SAME entry shape the codemod +// uses: { kind, context, message, stem, forms, originalKeys }, keyed by msgid. +// +// `message` is the Lingui msgid (ICU `{var}` interpolation; literal `{{TOKEN}}` +// placeholders stay verbatim). Each entry pairs that msgid with the original +// i18next key(s) it replaced, so the backfill can pull each locale's text. + +import { readFileSync, writeFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const MANIFEST_PATH = join(__dirname, "manifest.json"); + +// [msgid, originalKey] pairs. msgid must match the registry/descriptor literal. +export const ENTRIES = [ + // taskManagerProcessStatus + ["running", "taskManager.pluginProcesses.status.running"], + ["stopped", "taskManager.pluginProcesses.status.stopped"], + ["unknown", "taskManager.pluginProcesses.status.unknown"], + + // aiActivityQueryKind + ["Select", "aiActivity.queryKind.select"], + ["Write", "aiActivity.queryKind.write"], + ["DDL", "aiActivity.queryKind.ddl"], + ["Unknown", "aiActivity.queryKind.unknown"], + + // aiActivityStatus + ["Success", "aiActivity.status.success"], + ["Blocked (read-only)", "aiActivity.status.blocked_readonly"], + ["Pending approval", "aiActivity.status.blocked_pending_approval"], + ["Denied", "aiActivity.status.denied"], + ["Error", "aiActivity.status.error"], + ["Timeout", "aiActivity.status.timeout"], + + // notebookHistoryChange ({{n}} -> {n}) + ["Initial version", "editor.notebook.history.change.initial"], + ["Edited cell {n}", "editor.notebook.history.change.editCell"], + ["Added SQL cell {n}", "editor.notebook.history.change.addSql"], + ["Added Markdown cell {n}", "editor.notebook.history.change.addMarkdown"], + ["Deleted cell {n}", "editor.notebook.history.change.deleteCell"], + ["Reordered cells", "editor.notebook.history.change.reorder"], + ["Renamed cell {n}", "editor.notebook.history.change.renameCell"], + ["Changed database (cell {n})", "editor.notebook.history.change.schemaCell"], + ["Changed chart (cell {n})", "editor.notebook.history.change.chartCell"], + ["Toggled parallel (cell {n})", "editor.notebook.history.change.parallelCell"], + ["Collapsed/expanded cells", "editor.notebook.history.change.collapse"], + ["Changed parameters", "editor.notebook.history.change.params"], + ["Toggled stop on error", "editor.notebook.history.change.stopOnError"], + ["Edited notebook", "editor.notebook.history.change.other"], + + // quickNavigatorType + ["table", "editor.quickNavigator.type_table"], + ["view", "editor.quickNavigator.type_view"], + ["routine", "editor.quickNavigator.type_routine"], + ["trigger", "editor.quickNavigator.type_trigger"], + + // openSourceLibrariesSections + ["Frontend Dependencies", "settings.openSourceLibrariesSections.npm-runtime"], + ["Frontend Dev Dependencies", "settings.openSourceLibrariesSections.npm-tooling"], + ["Rust Dependencies", "settings.openSourceLibrariesSections.cargo-runtime"], + ["Rust Build and Test", "settings.openSourceLibrariesSections.cargo-tooling"], + + // openSourceLibrariesEcosystem + ["npm ecosystem", "settings.openSourceLibrariesEcosystem.npm"], + ["Cargo ecosystem", "settings.openSourceLibrariesEcosystem.cargo"], + + // connectionAppearanceTabs + ["Default", "connectionAppearance.tabs.default"], + ["Icon", "connectionAppearance.tabs.pack"], + ["Emoji", "connectionAppearance.tabs.emoji"], + ["Image", "connectionAppearance.tabs.image"], + + // shortcutCategories + ["Editor", "settings.shortcuts.categories.editor"], + ["Navigation", "settings.shortcuts.categories.navigation"], + ["Data Grid", "settings.shortcuts.categories.data_grid"], + + // sidebarDateGroups + ["Today", "sidebar.dateGroupToday"], + ["Yesterday", "sidebar.dateGroupYesterday"], + ["This Week", "sidebar.dateGroupThisWeek"], + ["This Month", "sidebar.dateGroupThisMonth"], + ["Older", "sidebar.dateGroupOlder"], + + // aiPromptKinds (label / desc / placeholder); {{TOKEN}} stays literal + ["SQL Generation", "settings.ai.systemPrompt"], + ["Query Explanation", "settings.ai.explainPrompt"], + ["Notebook Cell Name Prompt", "settings.ai.cellnamePrompt"], + ["Query Tab Name Prompt", "settings.ai.tabrenamePrompt"], + ["Explain Plan Analysis Prompt", "settings.ai.explainplanPrompt"], + [ + "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure.", + "settings.ai.systemPromptDesc", + ], + [ + "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language.", + "settings.ai.explainPromptDesc", + ], + [ + "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message.", + "settings.ai.cellnamePromptDesc", + ], + [ + "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message.", + "settings.ai.tabrenamePromptDesc", + ], + [ + "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language.", + "settings.ai.explainplanPromptDesc", + ], + ["Enter system prompt...", "settings.ai.enterSystemPrompt"], + ["Enter explain prompt...", "settings.ai.enterExplainPrompt"], + ["Enter notebook cell name prompt...", "settings.ai.enterCellnamePrompt"], + ["Enter query tab name prompt...", "settings.ai.enterTabrenamePrompt"], + ["Enter explain plan analysis prompt...", "settings.ai.enterExplainplanPrompt"], + + // pluginBuiltinSettings (mysql.*) + ["Max Allowed Packet", "settings.plugins.pluginSettings.builtin.mysql.maxAllowedPacket.label"], + [ + "Maximum packet size used by the MySQL connector.", + "settings.plugins.pluginSettings.builtin.mysql.maxAllowedPacket.description", + ], + ["Socket Timeout", "settings.plugins.pluginSettings.builtin.mysql.socketTimeout.label"], + [ + "Socket timeout in milliseconds.", + "settings.plugins.pluginSettings.builtin.mysql.socketTimeout.description", + ], + ["Connect Timeout", "settings.plugins.pluginSettings.builtin.mysql.connectTimeout.label"], + [ + "Connection timeout in milliseconds.", + "settings.plugins.pluginSettings.builtin.mysql.connectTimeout.description", + ], + ["Timezone", "settings.plugins.pluginSettings.builtin.mysql.timezone.label"], + [ + "Session timezone sent to MySQL after connect.", + "settings.plugins.pluginSettings.builtin.mysql.timezone.description", + ], + + // dumpErrorKeys + ["Please select at least Structure or Data", "dump.errorNoOption"], + ["Please select at least one table", "dump.errorNoTables"], + + // k8sErrorKeys + ["Connection name is required", "k8sConnections.errors.nameRequired"], + ["Kubernetes context is required", "k8sConnections.errors.contextRequired"], + ["Namespace is required", "k8sConnections.errors.namespaceRequired"], + ['Resource type must be "service" or "pod"', "k8sConnections.errors.resourceTypeInvalid"], + ["Resource name is required", "k8sConnections.errors.resourceNameRequired"], + ["Port must be between 1 and 65535", "k8sConnections.errors.portInvalid"], + + // shortcutLabels + ["Run query", "settings.shortcuts.runQuery"], + ["Run query (in editor)", "settings.shortcuts.runQueryEditor"], + ["New tab", "settings.shortcuts.newTab"], + ["Close tab", "settings.shortcuts.closeTab"], + ["Next page", "settings.shortcuts.nextPage"], + ["Previous page", "settings.shortcuts.prevPage"], + ["Switch tab", "settings.shortcuts.tabSwitcher"], + ["Copy selection", "settings.shortcuts.copySelection"], + ["Toggle sidebar", "settings.shortcuts.toggleSidebar"], + ["Open connections", "settings.shortcuts.openConnections"], + ["New connection", "settings.shortcuts.newConnection"], + ["Switch to connection 1–9", "settings.shortcuts.switchConnection"], + ["Import from Clipboard", "settings.shortcuts.pasteImportClipboard"], + ["Run All Cells", "settings.shortcuts.notebookRunAll"], + ["Quick Navigator", "settings.shortcuts.quickNavigator"], + + // Settings.tsx TAB_ITEMS labelKey descriptors + ["General", "settings.general"], + ["Plugins", "settings.plugins.title"], + ["Appearance", "settings.appearance"], + ["Localization", "settings.localization"], + ["AI", "settings.ai.tab"], + ["AI Activity", "settings.aiActivity"], + ["Logs", "settings.logs"], + ["Keyboard Shortcuts", "settings.shortcuts.title"], + ["Info", "settings.info"], + + // AiActivityPanel labelKey descriptors + ["Events", "aiActivity.tabs.events"], + ["Sessions", "aiActivity.tabs.sessions"], + + // GenerateSQLModal labelKey descriptors + ["Create Table", "generateSQL.tabCreateTable"], + ["Select *", "generateSQL.tabSelectAll"], + ["Select [fields]", "generateSQL.tabSelectFields"], + ["Update", "generateSQL.tabUpdate"], + ["Delete", "generateSQL.tabDelete"], + + // ExplainOverviewBar ternary + getExplainDriverLegend descriptors + ["Actual rows exceed estimate", "editor.visualExplain.overEstimate"], + ["Estimate exceeds actual rows", "editor.visualExplain.underEstimate"], + [ + "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.", + "editor.visualExplain.postgresAnalyzeLegend1", + ], + [ + "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well.", + "editor.visualExplain.postgresAnalyzeLegend2", + ], + [ + "PostgreSQL without ANALYZE shows planner estimates only.", + "editor.visualExplain.postgresEstimateLegend1", + ], + [ + "Enable ANALYZE to inspect actual rows, timing, loops, and buffers.", + "editor.visualExplain.postgresEstimateLegend2", + ], + [ + "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants.", + "editor.visualExplain.mysqlAnalyzeLegend1", + ], + [ + "Older servers may fall back to estimated plans with fewer metrics.", + "editor.visualExplain.mysqlAnalyzeLegend2", + ], + [ + "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version.", + "editor.visualExplain.mysqlEstimateLegend1", + ], + [ + "If timing is missing, the server likely returned an estimate-only plan.", + "editor.visualExplain.mysqlEstimateLegend2", + ], + [ + "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.", + "editor.visualExplain.sqliteLegend1", + ], + [ + "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL.", + "editor.visualExplain.sqliteLegend2", + ], + + // Ternary sites (NotebookCellHeader, ClipboardImport) + ["Expand Cell", "editor.notebook.expandCell"], + ["Collapse Cell", "editor.notebook.collapseCell"], + ["Minimize", "clipboardImport.minimize"], + ["Maximize", "clipboardImport.maximize"], + + // Restored broken ref + ["Actions", "sidebar.actions"], + + // Converted (AiTab modelNotFound) + [ + "Model <0>{0} not found in <1>{1}. It may not work correctly.", + "settings.ai.modelNotFound", + ], +]; + +export function applyToManifest() { + const manifest = JSON.parse(readFileSync(MANIFEST_PATH, "utf8")); + + let added = 0; + for (const [message, key] of ENTRIES) { + // No registry message carries a gettext context, so the manifest key is the + // raw msgid (matching the codemod's `message + CONTEXT_DELIM + context` form + // when context is null). + const mkey = message; + if (!manifest[mkey]) { + manifest[mkey] = { + kind: "registry", + context: null, + message, + stem: null, + forms: null, + originalKeys: [], + }; + added += 1; + } + if (!manifest[mkey].originalKeys.includes(key)) { + manifest[mkey].originalKeys.push(key); + } + } + + writeFileSync(MANIFEST_PATH, JSON.stringify(manifest, null, 2) + "\n", "utf8"); + return added; +} + +if (import.meta.url === `file://${process.argv[1]}`) { + const added = applyToManifest(); + console.log( + `registry manifest: ${ENTRIES.length} entries processed, ${added} new messages added`, + ); +} diff --git a/scripts/i18n/manifest.json b/scripts/i18n/manifest.json index afe7163f..43812409 100644 --- a/scripts/i18n/manifest.json +++ b/scripts/i18n/manifest.json @@ -1,60 +1,12132 @@ { - "Close": { + "Failed to create group": { "kind": "plain", "context": null, - "message": "Close", + "message": "Failed to create group", "stem": null, "forms": null, "originalKeys": [ - "schema.close" + "groups.createError" ] }, - "{count, plural, one {Delete # row} other {Delete # rows}}": { - "kind": "plural", + "Export Connections\u0004connections": { + "kind": "harmful", + "context": "connections", + "message": "Export Connections", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.exportTitle", + "connections.export" + ] + }, + "The exported file will contain your database and SSH passwords in plaintext. Please store it securely.": { + "kind": "plain", "context": null, - "message": "{count, plural, one {Delete # row} other {Delete # rows}}", - "stem": "dataGrid.deleteRows", - "forms": { - "one": "Delete # row", - "other": "Delete # rows" - }, + "message": "The exported file will contain your database and SSH passwords in plaintext. Please store it securely.", + "stem": null, + "forms": null, "originalKeys": [ - "dataGrid.deleteRows_one", - "dataGrid.deleteRows_other" + "connections.exportWarning" ] }, - "{count, plural, one {# row · {time}ms} other {# rows · {time}ms}}": { + "Save": { + "kind": "plain", + "context": null, + "message": "Save", + "stem": null, + "forms": null, + "originalKeys": [ + "common.save", + "jsonViewer.save", + "textViewer.save", + "newConnection.save", + "sshConnections.save" + ] + }, + "Failed to rename group": { + "kind": "plain", + "context": null, + "message": "Failed to rename group", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.renameError" + ] + }, + "Delete Group": { + "kind": "plain", + "context": null, + "message": "Delete Group", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.deleteTitle" + ] + }, + "Are you sure you want to delete group \"{name}\"? Connections in this group will be moved to ungrouped.": { + "kind": "interp", + "context": null, + "message": "Are you sure you want to delete group \"{name}\"? Connections in this group will be moved to ungrouped.", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.deleteConfirm" + ] + }, + "Failed to delete group": { + "kind": "plain", + "context": null, + "message": "Failed to delete group", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.deleteError" + ] + }, + "Failed to move connection": { + "kind": "plain", + "context": null, + "message": "Failed to move connection", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.moveError" + ] + }, + "Failed to connect to {name}. Please check your settings or ensuring the database is running.": { + "kind": "interp", + "context": null, + "message": "Failed to connect to {name}. Please check your settings or ensuring the database is running.", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.failConnect" + ] + }, + "Failed to disconnect from database": { + "kind": "plain", + "context": null, + "message": "Failed to disconnect from database", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.failDisconnect" + ] + }, + "Confirm Delete": { + "kind": "plain", + "context": null, + "message": "Confirm Delete", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.deleteTitle" + ] + }, + "Are you sure you want to delete this connection?": { + "kind": "plain", + "context": null, + "message": "Are you sure you want to delete this connection?", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.confirmDelete" + ] + }, + "Failed to duplicate connection": { + "kind": "plain", + "context": null, + "message": "Failed to duplicate connection", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.failDuplicate" + ] + }, + "Connections": { + "kind": "plain", + "context": null, + "message": "Connections", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.title", + "aiActivity.connections", + "sidebar.connections" + ] + }, + "No active connections": { + "kind": "plain", + "context": null, + "message": "No active connections", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.noConnections" + ] + }, + "{count, plural, one {# connection} other {# connections}}": { "kind": "plural", "context": null, - "message": "{count, plural, one {# row · {time}ms} other {# rows · {time}ms}}", - "stem": "editor.notebook.cellResult", + "message": "{count, plural, one {# connection} other {# connections}}", + "stem": "connections.connectionCount", "forms": { - "one": "# row · {time}ms", - "other": "# rows · {time}ms" + "one": "# connection", + "other": "# connections" }, "originalKeys": [ - "editor.notebook.cellResult_one", - "editor.notebook.cellResult_other" + "connections.connectionCount_one", + "connections.connectionCount_other" ] }, - "Delete index \"{name}\"?": { + "Add Connection": { + "kind": "plain", + "context": null, + "message": "Add Connection", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.addConnection" + ] + }, + "Create your first connection to get started.": { + "kind": "plain", + "context": null, + "message": "Create your first connection to get started.", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.noConnectionsHint" + ] + }, + "Create your first connection": { + "kind": "plain", + "context": null, + "message": "Create your first connection", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.createFirst" + ] + }, + "Import Connections": { + "kind": "plain", + "context": null, + "message": "Import Connections", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.import" + ] + }, + "Search connections...": { + "kind": "plain", + "context": null, + "message": "Search connections...", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.searchPlaceholder" + ] + }, + "Group name": { + "kind": "plain", + "context": null, + "message": "Group name", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.groupName" + ] + }, + "New Group": { + "kind": "plain", + "context": null, + "message": "New Group", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.newGroup" + ] + }, + "Grid view": { + "kind": "plain", + "context": null, + "message": "Grid view", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.gridView" + ] + }, + "List view": { + "kind": "plain", + "context": null, + "message": "List view", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.listView" + ] + }, + "Ungrouped": { + "kind": "plain", + "context": null, + "message": "Ungrouped", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.ungrouped" + ] + }, + "No connections match \"{query}\"": { "kind": "interp", "context": null, - "message": "Delete index \"{name}\"?", + "message": "No connections match \"{query}\"", "stem": null, "forms": null, "originalKeys": [ - "sidebar.deleteIndexConfirm" + "connections.noSearchResults" ] }, - "Delete\u0004generateSQL": { + "Rename": { + "kind": "plain", + "context": null, + "message": "Rename", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.rename", + "sidebar.notebooks.rename", + "editor.multiResult.rename" + ] + }, + "Delete\u0004groups": { "kind": "harmful", - "context": "generateSQL", + "context": "groups", "message": "Delete", "stem": null, "forms": null, "originalKeys": [ - "generateSQL.tabDelete" + "groups.delete" + ] + }, + "Remove from Group": { + "kind": "plain", + "context": null, + "message": "Remove from Group", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.removeFromGroup" + ] + }, + "Query failed.": { + "kind": "plain", + "context": null, + "message": "Query failed.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.queryFailed" + ] + }, + "Failed to create new row: ": { + "kind": "plain", + "context": null, + "message": "Failed to create new row: ", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.failedCreateRow" + ] + }, + "Error\u0004common": { + "kind": "harmful", + "context": "common", + "message": "Error", + "stem": null, + "forms": null, + "originalKeys": [ + "common.error" + ] + }, + "Failed to process insertions: ": { + "kind": "plain", + "context": null, + "message": "Failed to process insertions: ", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.failedProcessInsertions" + ] + }, + "Update failed: ": { + "kind": "plain", + "context": null, + "message": "Update failed: ", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.updateFailed" + ] + }, + "Explain Plan": { + "kind": "plain", + "context": null, + "message": "Explain Plan", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.contextMenuExplain", + "editor.visualExplain.buttonShort" + ] + }, + "New Console": { + "kind": "plain", + "context": null, + "message": "New Console", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.newConsole", + "editor.newConsole" + ] + }, + "No open tabs for this connection.": { + "kind": "plain", + "context": null, + "message": "No open tabs for this connection.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.noTabs" + ] + }, + "No active session. Please select a connection.": { + "kind": "plain", + "context": null, + "message": "No active session. Please select a connection.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.noActiveSession" + ] + }, + "New Visual Query": { + "kind": "plain", + "context": null, + "message": "New Visual Query", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.newVisualQuery" + ] + }, + "New Notebook": { + "kind": "plain", + "context": null, + "message": "New Notebook", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.newNotebook" + ] + }, + "Stop": { + "kind": "plain", + "context": null, + "message": "Stop", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.stop" + ] + }, + "Run": { + "kind": "plain", + "context": null, + "message": "Run", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.run" + ] + }, + "No valid queries found": { + "kind": "plain", + "context": null, + "message": "No valid queries found", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.noValidQueries" + ] + }, + "Save this query": { + "kind": "plain", + "context": null, + "message": "Save this query", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.saveThisQuery" + ] + }, + "Query Parameters": { + "kind": "plain", + "context": null, + "message": "Query Parameters", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.queryParameters" + ] + }, + "Parameters": { + "kind": "plain", + "context": null, + "message": "Parameters", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.parameters", + "editor.notebook.parameters" + ] + }, + "Export": { + "kind": "plain", + "context": null, + "message": "Export", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.export", + "dump.export" + ] + }, + "Active database": { + "kind": "plain", + "context": null, + "message": "Active database", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.activeDatabase" + ] + }, + "Connected": { + "kind": "plain", + "context": null, + "message": "Connected", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.connected" + ] + }, + "Disconnected": { + "kind": "plain", + "context": null, + "message": "Disconnected", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.disconnected" + ] + }, + "Visual Explain": { + "kind": "plain", + "context": null, + "message": "Visual Explain", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.title", + "visualExplainPage.title" + ] + }, + "Executing query...": { + "kind": "plain", + "context": null, + "message": "Executing query...", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.executingQuery" + ] + }, + "{count} rows retrieved": { + "kind": "interp", + "context": null, + "message": "{count} rows retrieved", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.rowsRetrieved" + ] + }, + "Auto paginated": { + "kind": "plain", + "context": null, + "message": "Auto paginated", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.autoPaginated" + ] + }, + "Click to jump to page": { + "kind": "plain", + "context": null, + "message": "Click to jump to page", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.jumpToPage" + ] + }, + "Page {current} of {total}": { + "kind": "interp", + "context": null, + "message": "Page {current} of {total}", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.pageOf" + ] + }, + "Page {current}": { + "kind": "interp", + "context": null, + "message": "Page {current}", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.page" + ] + }, + "Load row count": { + "kind": "plain", + "context": null, + "message": "Load row count", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.loadRowCount" + ] + }, + "New Row": { + "kind": "plain", + "context": null, + "message": "New Row", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.newRow", + "newRow.title" + ] + }, + "Delete Row": { + "kind": "plain", + "context": null, + "message": "Delete Row", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.deleteRow" + ] + }, + "Default Copy Format": { + "kind": "plain", + "context": null, + "message": "Default Copy Format", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.copyFormat" + ] + }, + "CSV Delimiter": { + "kind": "plain", + "context": null, + "message": "CSV Delimiter", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.csvDelimiter" + ] + }, + "Comma (,)": { + "kind": "plain", + "context": null, + "message": "Comma (,)", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.delimiterComma" + ] + }, + "Semicolon (;)": { + "kind": "plain", + "context": null, + "message": "Semicolon (;)", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.delimiterSemicolon" + ] + }, + "Tab": { + "kind": "plain", + "context": null, + "message": "Tab", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.delimiterTab" + ] + }, + "Pipe (|)": { + "kind": "plain", + "context": null, + "message": "Pipe (|)", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.delimiterPipe" + ] + }, + "Apply to all": { + "kind": "plain", + "context": null, + "message": "Apply to all", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.applyToAll" + ] + }, + "Submit Changes": { + "kind": "plain", + "context": null, + "message": "Submit Changes", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.submitChanges" + ] + }, + "Rollback Changes": { + "kind": "plain", + "context": null, + "message": "Rollback Changes", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.rollbackChanges" + ] + }, + "Press Run (Ctrl/Command+F5) to load table data": { + "kind": "plain", + "context": null, + "message": "Press Run (Ctrl/Command+F5) to load table data", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.tableRunPrompt" + ] + }, + "Execute a query to see results": { + "kind": "plain", + "context": null, + "message": "Execute a query to see results", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.executePrompt" + ] + }, + "Save Query": { + "kind": "plain", + "context": null, + "message": "Save Query", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.saveQuery" + ] + }, + "Convert to Console": { + "kind": "plain", + "context": null, + "message": "Convert to Console", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.convertToConsole" + ] + }, + "Close Tab": { + "kind": "plain", + "context": null, + "message": "Close Tab", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.closeTab" + ] + }, + "Close Other Tabs": { + "kind": "plain", + "context": null, + "message": "Close Other Tabs", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.closeOthers" + ] + }, + "Close Tabs to Right": { + "kind": "plain", + "context": null, + "message": "Close Tabs to Right", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.closeRight" + ] + }, + "Close Tabs to Left": { + "kind": "plain", + "context": null, + "message": "Close Tabs to Left", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.closeLeft" + ] + }, + "Close All Tabs": { + "kind": "plain", + "context": null, + "message": "Close All Tabs", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.closeAll" + ] + }, + "Loading...": { + "kind": "plain", + "context": null, + "message": "Loading...", + "stem": null, + "forms": null, + "originalKeys": [ + "common.loading", + "newConnection.loadingDatabases", + "newRow.loading" + ] + }, + "Cancel": { + "kind": "plain", + "context": null, + "message": "Cancel", + "stem": null, + "forms": null, + "originalKeys": [ + "common.cancel", + "taskManager.killModal.cancel", + "createFk.cancel", + "createIndex.cancel", + "createTable.cancel", + "modifyColumn.cancel", + "newRow.cancel", + "sshConnections.cancel" + ] + }, + "Close": { + "kind": "plain", + "context": null, + "message": "Close", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonViewer.close", + "common.close", + "clipboardImport.openTable", + "editor.visualExplain.close" + ] + }, + "Setup": { + "kind": "plain", + "context": null, + "message": "Setup", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.tabs.setup" + ] + }, + "Activity": { + "kind": "plain", + "context": null, + "message": "Activity", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.tabs.activity" + ] + }, + "Safety": { + "kind": "plain", + "context": null, + "message": "Safety", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.tabs.safety" + ] + }, + "MCP Server Integration": { + "kind": "plain", + "context": null, + "message": "MCP Server Integration", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.title" + ] + }, + "Connect Tabularis to Claude Desktop, Cursor, and more": { + "kind": "plain", + "context": null, + "message": "Connect Tabularis to Claude Desktop, Cursor, and more", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.subtitle" + ] + }, + "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely.": { + "kind": "plain", + "context": null, + "message": "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely.", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.description" + ] + }, + "Configuration installed successfully for {client}! Restart the app to apply.": { + "kind": "interp", + "context": null, + "message": "Configuration installed successfully for {client}! Restart the app to apply.", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.successMsg" + ] + }, + "Success\u0004mcp": { + "kind": "harmful", + "context": "mcp", + "message": "Success", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.successTitle" + ] + }, + "Installation Failed\u0004mcp": { + "kind": "harmful", + "context": "mcp", + "message": "Installation Failed", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.errorTitle" + ] + }, + "Checking configuration...": { + "kind": "plain", + "context": null, + "message": "Checking configuration...", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.checking" + ] + }, + "AI CLIENTS": { + "kind": "plain", + "context": null, + "message": "AI CLIENTS", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.clients" + ] + }, + "Config file not found (create manually)": { + "kind": "plain", + "context": null, + "message": "Config file not found (create manually)", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.notFound" + ] + }, + "Installed\u0004mcp": { + "kind": "harmful", + "context": "mcp", + "message": "Installed", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.installed" + ] + }, + "Install Config": { + "kind": "plain", + "context": null, + "message": "Install Config", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.install" + ] + }, + "MANUAL COMMAND": { + "kind": "plain", + "context": null, + "message": "MANUAL COMMAND", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.manualCommand" + ] + }, + "MANUAL CONFIGURATION": { + "kind": "plain", + "context": null, + "message": "MANUAL CONFIGURATION", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.manualConfig" + ] + }, + "Run this command in your terminal, then restart Claude Code.": { + "kind": "plain", + "context": null, + "message": "Run this command in your terminal, then restart Claude Code.", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.manualCommandText" + ] + }, + "Add this to your client config file manually if automatic install fails.": { + "kind": "plain", + "context": null, + "message": "Add this to your client config file manually if automatic install fails.", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.manualText" + ] + }, + "No Connection ID": { + "kind": "plain", + "context": null, + "message": "No Connection ID", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.noConnection" + ] + }, + "Cannot display diagram without a connection ID.": { + "kind": "plain", + "context": null, + "message": "Cannot display diagram without a connection ID.", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.noConnectionDesc" + ] + }, + "Refresh": { + "kind": "plain", + "context": null, + "message": "Refresh", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.refresh", + "taskManager.tabularisProcess.refresh", + "taskManager.header.refresh", + "settings.refreshLogs", + "settings.plugins.refresh", + "common.refresh", + "sidebar.notebooks.refresh" + ] + }, + "Exit Fullscreen": { + "kind": "plain", + "context": null, + "message": "Exit Fullscreen", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.exitFullscreen" + ] + }, + "Fullscreen": { + "kind": "plain", + "context": null, + "message": "Fullscreen", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.enterFullscreen" + ] + }, + "Edit config.json": { + "kind": "plain", + "context": null, + "message": "Edit config.json", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.editConfigJson" + ] + }, + "Force Kill Plugin Process": { + "kind": "plain", + "context": null, + "message": "Force Kill Plugin Process", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.killModal.title" + ] + }, + "This action cannot be undone immediately": { + "kind": "plain", + "context": null, + "message": "This action cannot be undone immediately", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.killModal.subtitle" + ] + }, + "Killing": { + "kind": "plain", + "context": null, + "message": "Killing", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.killModal.descriptionBefore" + ] + }, + "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted.": { + "kind": "plain", + "context": null, + "message": "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted.", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.killModal.descriptionAfter" + ] + }, + "Active queries and connections through this plugin will be interrupted.": { + "kind": "plain", + "context": null, + "message": "Active queries and connections through this plugin will be interrupted.", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.killModal.warning" + ] + }, + "Force Kill": { + "kind": "plain", + "context": null, + "message": "Force Kill", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.killModal.confirm" + ] + }, + "Tabularis Process": { + "kind": "plain", + "context": null, + "message": "Tabularis Process", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.title" + ] + }, + "CPU": { + "kind": "plain", + "context": null, + "message": "CPU", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.cpu", + "taskManager.tabularisProcess.colCpu", + "taskManager.systemResources.cpu", + "taskManager.pluginProcesses.colCpu" + ] + }, + "RAM": { + "kind": "plain", + "context": null, + "message": "RAM", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.ram", + "taskManager.tabularisProcess.colRam", + "taskManager.systemResources.ram", + "taskManager.pluginProcesses.colRam" + ] + }, + "Disk Read/s": { + "kind": "plain", + "context": null, + "message": "Disk Read/s", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.diskRead", + "taskManager.systemResources.diskRead" + ] + }, + "Disk Write/s": { + "kind": "plain", + "context": null, + "message": "Disk Write/s", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.diskWrite", + "taskManager.systemResources.diskWrite" + ] + }, + "{count, plural, one {# child process} other {# child processes}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# child process} other {# child processes}}", + "stem": "taskManager.tabularisProcess.childCount", + "forms": { + "one": "# child process", + "other": "# child processes" + }, + "originalKeys": [ + "taskManager.tabularisProcess.childCount_one", + "taskManager.tabularisProcess.childCount_other", + "taskManager.pluginProcesses.childCount_one", + "taskManager.pluginProcesses.childCount_other" + ] + }, + "No child processes": { + "kind": "plain", + "context": null, + "message": "No child processes", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.noChildren" + ] + }, + "Sum of RSS across the process tree — may overcount shared memory": { + "kind": "plain", + "context": null, + "message": "Sum of RSS across the process tree — may overcount shared memory", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.treeTotalTooltip" + ] + }, + "Tree total: {size}": { + "kind": "interp", + "context": null, + "message": "Tree total: {size}", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.treeTotal" + ] + }, + "Loading processes…": { + "kind": "plain", + "context": null, + "message": "Loading processes…", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.loadingProcesses", + "taskManager.pluginProcesses.loading" + ] + }, + "PID": { + "kind": "plain", + "context": null, + "message": "PID", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.colPid", + "taskManager.pluginProcesses.colPid" + ] + }, + "Name": { + "kind": "plain", + "context": null, + "message": "Name", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.tabularisProcess.colName", + "createTable.colName", + "k8sConnections.name", + "modifyColumn.name" + ] + }, + "child process": { + "kind": "plain", + "context": null, + "message": "child process", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.childProcess" + ] + }, + "running": { + "kind": "plain", + "context": null, + "message": "running", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.status.running" + ] + }, + "Collapse child processes": { + "kind": "plain", + "context": null, + "message": "Collapse child processes", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.collapseChildren" + ] + }, + "Restart": { + "kind": "plain", + "context": null, + "message": "Restart", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.restart" + ] + }, + "Kill": { + "kind": "plain", + "context": null, + "message": "Kill", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.kill" + ] + }, + "Task Manager": { + "kind": "plain", + "context": null, + "message": "Task Manager", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.header.title" + ] + }, + "Plugin processes & system resources": { + "kind": "plain", + "context": null, + "message": "Plugin processes & system resources", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.header.subtitle" + ] + }, + "System Resources": { + "kind": "plain", + "context": null, + "message": "System Resources", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.systemResources.title" + ] + }, + "{count, plural, one {# system process running} other {# system processes running}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# system process running} other {# system processes running}}", + "stem": "taskManager.systemResources.processCount", + "forms": { + "one": "# system process running", + "other": "# system processes running" + }, + "originalKeys": [ + "taskManager.systemResources.processCount_one", + "taskManager.systemResources.processCount_other" + ] + }, + "Plugin Processes": { + "kind": "plain", + "context": null, + "message": "Plugin Processes", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.title" + ] + }, + "No plugin processes are running": { + "kind": "plain", + "context": null, + "message": "No plugin processes are running", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.empty" + ] + }, + "Install and enable plugins to see them here": { + "kind": "plain", + "context": null, + "message": "Install and enable plugins to see them here", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.emptyHint" + ] + }, + "Plugin": { + "kind": "plain", + "context": null, + "message": "Plugin", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.colPlugin" + ] + }, + "Disk R/W": { + "kind": "plain", + "context": null, + "message": "Disk R/W", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.colDiskRw" + ] + }, + "Status": { + "kind": "plain", + "context": null, + "message": "Status", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.colStatus", + "aiActivity.col.status" + ] + }, + "Actions\u0004taskManager": { + "kind": "harmful", + "context": "taskManager", + "message": "Actions", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.colActions" + ] + }, + "No file loaded": { + "kind": "plain", + "context": null, + "message": "No file loaded", + "stem": null, + "forms": null, + "originalKeys": [ + "visualExplainPage.noFile" + ] + }, + "Open file": { + "kind": "plain", + "context": null, + "message": "Open file", + "stem": null, + "forms": null, + "originalKeys": [ + "visualExplainPage.openFile" + ] + }, + "Reload": { + "kind": "plain", + "context": null, + "message": "Reload", + "stem": null, + "forms": null, + "originalKeys": [ + "visualExplainPage.reload" + ] + }, + "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it.": { + "kind": "plain", + "context": null, + "message": "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it.", + "stem": null, + "forms": null, + "originalKeys": [ + "visualExplainPage.emptyHint" + ] + }, + "Loading explain plan…": { + "kind": "plain", + "context": null, + "message": "Loading explain plan…", + "stem": null, + "forms": null, + "originalKeys": [ + "visualExplainPage.loading" + ] + }, + "A database connection was lost": { + "kind": "plain", + "context": null, + "message": "A database connection was lost", + "stem": null, + "forms": null, + "originalKeys": [ + "healthCheck.connectionLost" + ] + }, + "Connection Lost": { + "kind": "plain", + "context": null, + "message": "Connection Lost", + "stem": null, + "forms": null, + "originalKeys": [ + "healthCheck.title" + ] + }, + "Generate SQL\u0004ai": { + "kind": "harmful", + "context": "ai", + "message": "Generate SQL", + "stem": null, + "forms": null, + "originalKeys": [ + "ai.generateSql" + ] + }, + "Explain": { + "kind": "plain", + "context": null, + "message": "Explain", + "stem": null, + "forms": null, + "originalKeys": [ + "ai.explain" + ] + }, + "Image preview": { + "kind": "plain", + "context": null, + "message": "Image preview", + "stem": null, + "forms": null, + "originalKeys": [ + "blobInput.imagePreview" + ] + }, + "Uploading...": { + "kind": "plain", + "context": null, + "message": "Uploading...", + "stem": null, + "forms": null, + "originalKeys": [ + "blobInput.uploading" + ] + }, + "Upload File": { + "kind": "plain", + "context": null, + "message": "Upload File", + "stem": null, + "forms": null, + "originalKeys": [ + "blobInput.uploadFile" + ] + }, + "Downloading...\u0004blobInput": { + "kind": "harmful", + "context": "blobInput", + "message": "Downloading...", + "stem": null, + "forms": null, + "originalKeys": [ + "blobInput.downloading" + ] + }, + "Download unavailable - only preview loaded": { + "kind": "plain", + "context": null, + "message": "Download unavailable - only preview loaded", + "stem": null, + "forms": null, + "originalKeys": [ + "blobInput.downloadDisabledTruncated" + ] + }, + "Download": { + "kind": "plain", + "context": null, + "message": "Download", + "stem": null, + "forms": null, + "originalKeys": [ + "blobInput.download" + ] + }, + "Delete\u0004blobInput": { + "kind": "harmful", + "context": "blobInput", + "message": "Delete", + "stem": null, + "forms": null, + "originalKeys": [ + "blobInput.delete" + ] + }, + "Preview only - full data not loaded": { + "kind": "plain", + "context": null, + "message": "Preview only - full data not loaded", + "stem": null, + "forms": null, + "originalKeys": [ + "blobInput.truncatedWarning" + ] + }, + "No BLOB data": { + "kind": "plain", + "context": null, + "message": "No BLOB data", + "stem": null, + "forms": null, + "originalKeys": [ + "blobInput.noData" + ] + }, + "NEW": { + "kind": "plain", + "context": null, + "message": "NEW", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.newRow" + ] + }, + "Sort by {col} ASC": { + "kind": "interp", + "context": null, + "message": "Sort by {col} ASC", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.sortByAsc" + ] + }, + "Sort by {col} DESC": { + "kind": "interp", + "context": null, + "message": "Sort by {col} DESC", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.sortByDesc" + ] + }, + "Clear sort": { + "kind": "plain", + "context": null, + "message": "Clear sort", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.clearSort" + ] + }, + "No data to display": { + "kind": "plain", + "context": null, + "message": "No data to display", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.noData" + ] + }, + "Set GENERATED": { + "kind": "plain", + "context": null, + "message": "Set GENERATED", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.setGenerate" + ] + }, + "Set NULL": { + "kind": "plain", + "context": null, + "message": "Set NULL", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.setNull" + ] + }, + "Set DEFAULT": { + "kind": "plain", + "context": null, + "message": "Set DEFAULT", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.setDefault" + ] + }, + "Set EMPTY": { + "kind": "plain", + "context": null, + "message": "Set EMPTY", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.setEmpty" + ] + }, + "Insert Current Timestamp": { + "kind": "plain", + "context": null, + "message": "Insert Current Timestamp", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.setServerNow" + ] + }, + "Open in JSON Editor": { + "kind": "plain", + "context": null, + "message": "Open in JSON Editor", + "stem": null, + "forms": null, + "originalKeys": [ + "contextMenu.openJsonEditor" + ] + }, + "Preview related record": { + "kind": "plain", + "context": null, + "message": "Preview related record", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.previewReferenced" + ] + }, + "Open referenced row in {table}": { + "kind": "interp", + "context": null, + "message": "Open referenced row in {table}", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.openReferenced" + ] + }, + "Copy Cell": { + "kind": "plain", + "context": null, + "message": "Copy Cell", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.copyCell" + ] + }, + "Copy selected row(s)": { + "kind": "plain", + "context": null, + "message": "Copy selected row(s)", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.copySelectedRows" + ] + }, + "Open Sidebar Editor": { + "kind": "plain", + "context": null, + "message": "Open Sidebar Editor", + "stem": null, + "forms": null, + "originalKeys": [ + "contextMenu.openSidebar" + ] + }, + "Duplicate Row": { + "kind": "plain", + "context": null, + "message": "Duplicate Row", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.duplicateRow" + ] + }, + "{count, plural, one {Delete # row} other {Delete # rows}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {Delete # row} other {Delete # rows}}", + "stem": "dataGrid.deleteRows", + "forms": { + "one": "Delete # row", + "other": "Delete # rows" + }, + "originalKeys": [ + "dataGrid.deleteRows_one", + "dataGrid.deleteRows_other" + ] + }, + "Revert Selected": { + "kind": "plain", + "context": null, + "message": "Revert Selected", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.revertSelected" + ] + }, + "Copy column name": { + "kind": "plain", + "context": null, + "message": "Copy column name", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.copyColumnName" + ] + }, + "Copy as `column`": { + "kind": "plain", + "context": null, + "message": "Copy as `column`", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.copyColumnNameQuoted" + ] + }, + "Copy as table.column": { + "kind": "plain", + "context": null, + "message": "Copy as table.column", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.copyColumnNameTable" + ] + }, + "null": { + "kind": "plain", + "context": null, + "message": "null", + "stem": null, + "forms": null, + "originalKeys": [ + "dataGrid.null" + ] + }, + "Open in editor": { + "kind": "plain", + "context": null, + "message": "Open in editor", + "stem": null, + "forms": null, + "originalKeys": [ + "blobInput.openSidebar" + ] + }, + "The editor crashed unexpectedly": { + "kind": "plain", + "context": null, + "message": "The editor crashed unexpectedly", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.errorBoundary.title" + ] + }, + "Something in the editor failed to render. The error is shown below — try again, or go back to your connections.": { + "kind": "plain", + "context": null, + "message": "Something in the editor failed to render. The error is shown below — try again, or go back to your connections.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.errorBoundary.description" + ] + }, + "Show technical details": { + "kind": "plain", + "context": null, + "message": "Show technical details", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.errorBoundary.showDetails" + ] + }, + "Try again\u0004editor": { + "kind": "harmful", + "context": "editor", + "message": "Try again", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.errorBoundary.retry" + ] + }, + "Close current tab": { + "kind": "plain", + "context": null, + "message": "Close current tab", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.errorBoundary.closeCurrentTab" + ] + }, + "Back to connections": { + "kind": "plain", + "context": null, + "message": "Back to connections", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.errorBoundary.backToConnections" + ] + }, + "Hide details": { + "kind": "plain", + "context": null, + "message": "Hide details", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.hideErrorDetails" + ] + }, + "Show details": { + "kind": "plain", + "context": null, + "message": "Show details", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.showErrorDetails" + ] + }, + "Actual rows exceed estimate": { + "kind": "plain", + "context": null, + "message": "Actual rows exceed estimate", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.overEstimate" + ] + }, + "Estimate exceeds actual rows": { + "kind": "plain", + "context": null, + "message": "Estimate exceeds actual rows", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.underEstimate" + ] + }, + "Table\u0004editor": { + "kind": "harmful", + "context": "editor", + "message": "Table", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.relation", + "editor.visualExplain.tableView" + ] + }, + "Est. Rows": { + "kind": "plain", + "context": null, + "message": "Est. Rows", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.estRows" + ] + }, + "Cost": { + "kind": "plain", + "context": null, + "message": "Cost", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.cost" + ] + }, + "Estimate Gap": { + "kind": "plain", + "context": null, + "message": "Estimate Gap", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.largestEstimateGap" + ] + }, + "Actual Rows": { + "kind": "plain", + "context": null, + "message": "Actual Rows", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.actualRows" + ] + }, + "Time\u0004editor": { + "kind": "harmful", + "context": "editor", + "message": "Time", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.time" + ] + }, + "Loops": { + "kind": "plain", + "context": null, + "message": "Loops", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.loops" + ] + }, + "Filter": { + "kind": "plain", + "context": null, + "message": "Filter", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.filter" + ] + }, + "Index Cond.": { + "kind": "plain", + "context": null, + "message": "Index Cond.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.indexCondition" + ] + }, + "Enter value...": { + "kind": "plain", + "context": null, + "message": "Enter value...", + "stem": null, + "forms": null, + "originalKeys": [ + "rowEditor.enterValue" + ] + }, + "Deselect from Apply All": { + "kind": "plain", + "context": null, + "message": "Deselect from Apply All", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.deselectFromApplyAll" + ] + }, + "Select for Apply All": { + "kind": "plain", + "context": null, + "message": "Select for Apply All", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.selectForApplyAll" + ] + }, + "value\u0004toolbar": { + "kind": "harmful", + "context": "toolbar", + "message": "value", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.valuePlaceholder" + ] + }, + "from": { + "kind": "plain", + "context": null, + "message": "from", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.fromPlaceholder" + ] + }, + "to": { + "kind": "plain", + "context": null, + "message": "to", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.toPlaceholder" + ] + }, + "Applied": { + "kind": "plain", + "context": null, + "message": "Applied", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.applied" + ] + }, + "Apply": { + "kind": "plain", + "context": null, + "message": "Apply", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.apply" + ] + }, + "Duplicate filter": { + "kind": "plain", + "context": null, + "message": "Duplicate filter", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.duplicateFilter" + ] + }, + "Remove filter": { + "kind": "plain", + "context": null, + "message": "Remove filter", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.removeFilter" + ] + }, + "ST_GeomFromText('POINT(30 40)', 4326)": { + "kind": "plain", + "context": null, + "message": "ST_GeomFromText('POINT(30 40)', 4326)", + "stem": null, + "forms": null, + "originalKeys": [ + "geometryInput.sqlPlaceholder" + ] + }, + "POINT(30 40)": { + "kind": "plain", + "context": null, + "message": "POINT(30 40)", + "stem": null, + "forms": null, + "originalKeys": [ + "geometryInput.wktPlaceholder" + ] + }, + "SQL Mode": { + "kind": "plain", + "context": null, + "message": "SQL Mode", + "stem": null, + "forms": null, + "originalKeys": [ + "geometryInput.sqlMode" + ] + }, + "SQL Functions": { + "kind": "plain", + "context": null, + "message": "SQL Functions", + "stem": null, + "forms": null, + "originalKeys": [ + "geometryInput.toggleTooltip" + ] + }, + "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))": { + "kind": "plain", + "context": null, + "message": "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))", + "stem": null, + "forms": null, + "originalKeys": [ + "geometryInput.sqlHelper" + ] + }, + "WKT Mode": { + "kind": "plain", + "context": null, + "message": "WKT Mode", + "stem": null, + "forms": null, + "originalKeys": [ + "geometryInput.wktMode" + ] + }, + "Toggle inline JSON tree": { + "kind": "plain", + "context": null, + "message": "Toggle inline JSON tree", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonCell.expand" + ] + }, + "Open JSON viewer": { + "kind": "plain", + "context": null, + "message": "Open JSON viewer", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonCell.openViewer" + ] + }, + "Diff": { + "kind": "plain", + "context": null, + "message": "Diff", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.diff", + "textInput.diff" + ] + }, + "Side by side": { + "kind": "plain", + "context": null, + "message": "Side by side", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.sideBySide", + "textInput.sideBySide" + ] + }, + "Code": { + "kind": "plain", + "context": null, + "message": "Code", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.mode.code" + ] + }, + "Tree": { + "kind": "plain", + "context": null, + "message": "Tree", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.mode.tree" + ] + }, + "Raw": { + "kind": "plain", + "context": null, + "message": "Raw", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.mode.raw" + ] + }, + "Enter JSON...": { + "kind": "plain", + "context": null, + "message": "Enter JSON...", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.placeholder" + ] + }, + "Format": { + "kind": "plain", + "context": null, + "message": "Format", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.format" + ] + }, + "Expand\u0004jsonInput": { + "kind": "harmful", + "context": "jsonInput", + "message": "Expand", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.expand" + ] + }, + "Invalid JSON": { + "kind": "plain", + "context": null, + "message": "Invalid JSON", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.invalid" + ] + }, + "Valid JSON": { + "kind": "plain", + "context": null, + "message": "Valid JSON", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.valid" + ] + }, + "Search": { + "kind": "plain", + "context": null, + "message": "Search", + "stem": null, + "forms": null, + "originalKeys": [ + "jsonInput.search" + ] + }, + "Generating name...": { + "kind": "plain", + "context": null, + "message": "Generating name...", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.multiResult.generatingName", + "editor.notebook.generatingName" + ] + }, + "Generate name with AI": { + "kind": "plain", + "context": null, + "message": "Generate name with AI", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.multiResult.aiGenerateName", + "editor.notebook.aiGenerateName" + ] + }, + "Re-run query": { + "kind": "plain", + "context": null, + "message": "Re-run query", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.multiResult.rerun" + ] + }, + "Query": { + "kind": "plain", + "context": null, + "message": "Query", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.multiResult.queryPrefix", + "aiActivity.col.query", + "aiApproval.query" + ] + }, + "Stacked view": { + "kind": "plain", + "context": null, + "message": "Stacked view", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.multiResult.viewStacked" + ] + }, + "Tab view": { + "kind": "plain", + "context": null, + "message": "Tab view", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.multiResult.viewTabs" + ] + }, + "Results": { + "kind": "plain", + "context": null, + "message": "Results", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.multiResult.results" + ] + }, + "Expand all": { + "kind": "plain", + "context": null, + "message": "Expand all", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.multiResult.expandAll" + ] + }, + "Collapse all": { + "kind": "plain", + "context": null, + "message": "Collapse all", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.multiResult.collapseAll" + ] + }, + "Resize sidebar": { + "kind": "plain", + "context": null, + "message": "Resize sidebar", + "stem": null, + "forms": null, + "originalKeys": [ + "rowEditor.resize" + ] + }, + "Edit Row": { + "kind": "plain", + "context": null, + "message": "Edit Row", + "stem": null, + "forms": null, + "originalKeys": [ + "rowEditor.title" + ] + }, + "Row #{row}": { + "kind": "interp", + "context": null, + "message": "Row #{row}", + "stem": null, + "forms": null, + "originalKeys": [ + "rowEditor.subtitle" + ] + }, + "Switch to Vertical Layout": { + "kind": "plain", + "context": null, + "message": "Switch to Vertical Layout", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.switchToVertical" + ] + }, + "Switch to Horizontal Layout": { + "kind": "plain", + "context": null, + "message": "Switch to Horizontal Layout", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.switchToHorizontal" + ] + }, + "Horizontal": { + "kind": "plain", + "context": null, + "message": "Horizontal", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.horizontal" + ] + }, + "Vertical": { + "kind": "plain", + "context": null, + "message": "Vertical", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.vertical" + ] + }, + "Show All Tables": { + "kind": "plain", + "context": null, + "message": "Show All Tables", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.showAllTables" + ] + }, + "Show All": { + "kind": "plain", + "context": null, + "message": "Show All", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.showAll" + ] + }, + "Focused on": { + "kind": "plain", + "context": null, + "message": "Focused on", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.focusedOn" + ] + }, + "Focus on Table": { + "kind": "plain", + "context": null, + "message": "Focus on Table", + "stem": null, + "forms": null, + "originalKeys": [ + "erDiagram.focusOnTable" + ] + }, + "Close tab": { + "kind": "plain", + "context": null, + "message": "Close tab", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.multiResult.close", + "settings.shortcuts.closeTab" + ] + }, + "Toggle structured filter panel": { + "kind": "plain", + "context": null, + "message": "Toggle structured filter panel", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.toggleFilterPanel" + ] + }, + "Filters": { + "kind": "plain", + "context": null, + "message": "Filters", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.filters" + ] + }, + "no active filters": { + "kind": "plain", + "context": null, + "message": "no active filters", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.noActiveFilters" + ] + }, + "Filter conditions": { + "kind": "plain", + "context": null, + "message": "Filter conditions", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.filterConditions" + ] + }, + "{active} of {total} active": { + "kind": "interp", + "context": null, + "message": "{active} of {total} active", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.activeOf" + ] + }, + "Close filter panel (ESC)": { + "kind": "plain", + "context": null, + "message": "Close filter panel (ESC)", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.closePanelEsc" + ] + }, + "No filters —": { + "kind": "plain", + "context": null, + "message": "No filters —", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.noFilters" + ] + }, + "add the first filter": { + "kind": "plain", + "context": null, + "message": "add the first filter", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.addFirstFilter" + ] + }, + "Unset": { + "kind": "plain", + "context": null, + "message": "Unset", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.unset" + ] + }, + "Switch to SQL WHERE input": { + "kind": "plain", + "context": null, + "message": "Switch to SQL WHERE input", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.switchToSql" + ] + }, + "SQL": { + "kind": "plain", + "context": null, + "message": "SQL", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.sql", + "editor.notebook.sqlCell" + ] + }, + "Add filter": { + "kind": "plain", + "context": null, + "message": "Add filter", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.addFilter" + ] + }, + "Apply All": { + "kind": "plain", + "context": null, + "message": "Apply All", + "stem": null, + "forms": null, + "originalKeys": [ + "toolbar.applyAll" + ] + }, + "Toggle inline text editor": { + "kind": "plain", + "context": null, + "message": "Toggle inline text editor", + "stem": null, + "forms": null, + "originalKeys": [ + "textCell.expand" + ] + }, + "AI Activity": { + "kind": "plain", + "context": null, + "message": "AI Activity", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.title", + "settings.aiActivity" + ] + }, + "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere.": { + "kind": "plain", + "context": null, + "message": "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere.", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.description" + ] + }, + "AI models refreshed from providers": { + "kind": "plain", + "context": null, + "message": "AI models refreshed from providers", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.refreshSuccess" + ] + }, + "Success\u0004common": { + "kind": "harmful", + "context": "common", + "message": "Success", + "stem": null, + "forms": null, + "originalKeys": [ + "common.success" + ] + }, + "Failed to refresh models": { + "kind": "plain", + "context": null, + "message": "Failed to refresh models", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.refreshError" + ] + }, + "Show AI Assist and Explain buttons in the editor": { + "kind": "plain", + "context": null, + "message": "Show AI Assist and Explain buttons in the editor", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.enableDesc" + ] + }, + "Default Provider": { + "kind": "plain", + "context": null, + "message": "Default Provider", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.defaultProvider" + ] + }, + "Configured": { + "kind": "plain", + "context": null, + "message": "Configured", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.configured" + ] + }, + "This key is loaded from an environment variable": { + "kind": "plain", + "context": null, + "message": "This key is loaded from an environment variable", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.fromEnvTooltip" + ] + }, + "Environment": { + "kind": "plain", + "context": null, + "message": "Environment", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.fromEnv" + ] + }, + "Not configured": { + "kind": "plain", + "context": null, + "message": "Not configured", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.notConfigured" + ] + }, + "{provider} API Key": { + "kind": "interp", + "context": null, + "message": "{provider} API Key", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.apiKey" + ] + }, + "Change": { + "kind": "plain", + "context": null, + "message": "Change", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.changeKey" + ] + }, + "Custom key deleted successfully": { + "kind": "plain", + "context": null, + "message": "Custom key deleted successfully", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.keyResetSuccess" + ] + }, + "Delete custom key and revert to environment variable (if present)": { + "kind": "plain", + "context": null, + "message": "Delete custom key and revert to environment variable (if present)", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.resetKey" + ] + }, + "Reset": { + "kind": "plain", + "context": null, + "message": "Reset", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.reset" + ] + }, + "An environment variable is present, but you can override it by setting a key above.": { + "kind": "plain", + "context": null, + "message": "An environment variable is present, but you can override it by setting a key above.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.envVariableDetected" + ] + }, + "Enter {provider} Key": { + "kind": "interp", + "context": null, + "message": "Enter {provider} Key", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.enterKey" + ] + }, + "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable.": { + "kind": "plain", + "context": null, + "message": "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.keyStoredSecurely" + ] + }, + "Endpoint URL": { + "kind": "plain", + "context": null, + "message": "Endpoint URL", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.endpointUrl" + ] + }, + "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1": { + "kind": "plain", + "context": null, + "message": "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.endpointUrlDesc" + ] + }, + "Ollama connected ({count} models found)": { + "kind": "interp", + "context": null, + "message": "Ollama connected ({count} models found)", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.ollamaConnected" + ] + }, + "Ollama not detected on port {port}. Is it running?": { + "kind": "interp", + "context": null, + "message": "Ollama not detected on port {port}. Is it running?", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.ollamaNotDetected" + ] + }, + "Ollama Port": { + "kind": "plain", + "context": null, + "message": "Ollama Port", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.ollamaPort" + ] + }, + "Default Model": { + "kind": "plain", + "context": null, + "message": "Default Model", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.defaultModel" + ] + }, + "Select a model": { + "kind": "plain", + "context": null, + "message": "Select a model", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.modelPlaceholder" + ] + }, + "Search models...": { + "kind": "plain", + "context": null, + "message": "Search models...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.searchPlaceholder" + ] + }, + "No models found": { + "kind": "plain", + "context": null, + "message": "No models found", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.noResults" + ] + }, + "Refresh Models": { + "kind": "plain", + "context": null, + "message": "Refresh Models", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.refresh" + ] + }, + "Enter the exact model name for your OpenAI-compatible provider.": { + "kind": "plain", + "context": null, + "message": "Enter the exact model name for your OpenAI-compatible provider.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.customOpenaiModelHelp" + ] + }, + "Select the model to be used for generation and explanation.": { + "kind": "plain", + "context": null, + "message": "Select the model to be used for generation and explanation.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.modelDesc" + ] + }, + "Prompt Customization": { + "kind": "plain", + "context": null, + "message": "Prompt Customization", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.promptCustomization" + ] + }, + "Reset to Default": { + "kind": "plain", + "context": null, + "message": "Reset to Default", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.resetDefault" + ] + }, + "Save Prompt": { + "kind": "plain", + "context": null, + "message": "Save Prompt", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.savePrompt" + ] + }, + "General\u0004settings": { + "kind": "harmful", + "context": "settings", + "message": "General", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_general" + ] + }, + "SQL Editor": { + "kind": "plain", + "context": null, + "message": "SQL Editor", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_sqlEditor" + ] + }, + "Theme Selection": { + "kind": "plain", + "context": null, + "message": "Theme Selection", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.themeSelection" + ] + }, + "Font Family": { + "kind": "plain", + "context": null, + "message": "Font Family", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.fontFamily" + ] + }, + "Font Size": { + "kind": "plain", + "context": null, + "message": "Font Size", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.fontSize", + "settings.fontSizeLabel" + ] + }, + "Adjust the base font size used throughout the application (10-20px).": { + "kind": "plain", + "context": null, + "message": "Adjust the base font size used throughout the application (10-20px).", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.fontSizeDesc" + ] + }, + "Preview\u0004settings": { + "kind": "harmful", + "context": "settings", + "message": "Preview", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.preview" + ] + }, + "The quick brown fox jumps over the lazy dog": { + "kind": "plain", + "context": null, + "message": "The quick brown fox jumps over the lazy dog", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.fontPreviewText" + ] + }, + "Editor Theme": { + "kind": "plain", + "context": null, + "message": "Editor Theme", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorTheme" + ] + }, + "Choose an independent theme for the SQL editor, or keep it in sync with the app theme.": { + "kind": "plain", + "context": null, + "message": "Choose an independent theme for the SQL editor, or keep it in sync with the app theme.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorThemeDesc" + ] + }, + "Editor Font Family": { + "kind": "plain", + "context": null, + "message": "Editor Font Family", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorFontFamily" + ] + }, + "Editor Font Size": { + "kind": "plain", + "context": null, + "message": "Editor Font Size", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorFontSize" + ] + }, + "Line Height": { + "kind": "plain", + "context": null, + "message": "Line Height", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorLineHeight" + ] + }, + "Tab Size": { + "kind": "plain", + "context": null, + "message": "Tab Size", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorTabSize" + ] + }, + "Word Wrap": { + "kind": "plain", + "context": null, + "message": "Word Wrap", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorWordWrap" + ] + }, + "Wrap long lines in the editor instead of scrolling horizontally.": { + "kind": "plain", + "context": null, + "message": "Wrap long lines in the editor instead of scrolling horizontally.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorWordWrapDesc" + ] + }, + "Show Line Numbers": { + "kind": "plain", + "context": null, + "message": "Show Line Numbers", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorShowLineNumbers" + ] + }, + "Display line numbers in the editor gutter.": { + "kind": "plain", + "context": null, + "message": "Display line numbers in the editor gutter.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorShowLineNumbersDesc" + ] + }, + "Accept Suggestion with Enter": { + "kind": "plain", + "context": null, + "message": "Accept Suggestion with Enter", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorAcceptSuggestionOnEnter" + ] + }, + "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.": { + "kind": "plain", + "context": null, + "message": "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_editorAcceptSuggestionOnEnterDesc" + ] + }, + "Custom Font": { + "kind": "plain", + "context": null, + "message": "Custom Font", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.fonts.custom" + ] + }, + "e.g., Comic Sans MS": { + "kind": "plain", + "context": null, + "message": "e.g., Comic Sans MS", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.fonts.customPlaceholder" + ] + }, + "Enter font name above": { + "kind": "plain", + "context": null, + "message": "Enter font name above", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.fonts.enterFontName" + ] + }, + "Startup": { + "kind": "plain", + "context": null, + "message": "Startup", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.startup" + ] + }, + "Show Welcome Screen": { + "kind": "plain", + "context": null, + "message": "Show Welcome Screen", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.showWelcome" + ] + }, + "Display the welcome screen when the application starts.": { + "kind": "plain", + "context": null, + "message": "Display the welcome screen when the application starts.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.showWelcomeDesc" + ] + }, + "Data Editor": { + "kind": "plain", + "context": null, + "message": "Data Editor", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.dataEditor" + ] + }, + "Result Page Size (Limit)": { + "kind": "plain", + "context": null, + "message": "Result Page Size (Limit)", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.pageSize" + ] + }, + "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended).": { + "kind": "plain", + "context": null, + "message": "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended).", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.pageSizeDesc" + ] + }, + "rows\u0004settings": { + "kind": "harmful", + "context": "settings", + "message": "rows", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.rows" + ] + }, + "Choose the default format when copying rows with Ctrl+C / Cmd+C.": { + "kind": "plain", + "context": null, + "message": "Choose the default format when copying rows with Ctrl+C / Cmd+C.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.copyFormatDesc" + ] + }, + "Choose the default delimiter character used when copying or exporting rows as CSV.": { + "kind": "plain", + "context": null, + "message": "Choose the default delimiter character used when copying or exporting rows as CSV.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.csvDelimiterDesc" + ] + }, + "Connection Health Check": { + "kind": "plain", + "context": null, + "message": "Connection Health Check", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.connectionHealthCheck" + ] + }, + "Ping Interval": { + "kind": "plain", + "context": null, + "message": "Ping Interval", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.pingInterval" + ] + }, + "How often to check if active connections are still alive. Set to 0 to disable.": { + "kind": "plain", + "context": null, + "message": "How often to check if active connections are still alive. Set to 0 to disable.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.pingIntervalDesc" + ] + }, + "seconds": { + "kind": "plain", + "context": null, + "message": "seconds", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.seconds" + ] + }, + "Query History": { + "kind": "plain", + "context": null, + "message": "Query History", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.queryHistory" + ] + }, + "Max History Entries": { + "kind": "plain", + "context": null, + "message": "Max History Entries", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.queryHistoryMaxEntries" + ] + }, + "Maximum number of query history entries stored per connection.": { + "kind": "plain", + "context": null, + "message": "Maximum number of query history entries stored per connection.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.queryHistoryMaxEntriesDesc" + ] + }, + "entries": { + "kind": "plain", + "context": null, + "message": "entries", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.entries" + ] + }, + "ER Diagram": { + "kind": "plain", + "context": null, + "message": "ER Diagram", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.erDiagram" + ] + }, + "Default Layout": { + "kind": "plain", + "context": null, + "message": "Default Layout", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.erDiagramDefaultLayout" + ] + }, + "Choose the default layout direction for ER diagrams": { + "kind": "plain", + "context": null, + "message": "Choose the default layout direction for ER diagrams", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.erDiagramDefaultLayoutDesc" + ] + }, + "Star on GitHub": { + "kind": "plain", + "context": null, + "message": "Star on GitHub", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.starOnGithub", + "community.starTitle" + ] + }, + "Version": { + "kind": "plain", + "context": null, + "message": "Version", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.version", + "update.version" + ] + }, + "What's New": { + "kind": "plain", + "context": null, + "message": "What's New", + "stem": null, + "forms": null, + "originalKeys": [ + "whatsNew.title" + ] + }, + "Open Source Libraries": { + "kind": "plain", + "context": null, + "message": "Open Source Libraries", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibraries" + ] + }, + "Updates": { + "kind": "plain", + "context": null, + "message": "Updates", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.updates", + "settings.plugins.updatesMetric", + "settings.plugins.filterUpdates" + ] + }, + "Current Version": { + "kind": "plain", + "context": null, + "message": "Current Version", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.currentVersion" + ] + }, + "Updates managed by {source}": { + "kind": "interp", + "context": null, + "message": "Updates managed by {source}", + "stem": null, + "forms": null, + "originalKeys": [ + "update.managedByPackageManager" + ] + }, + "Use your package manager to update Tabularis.": { + "kind": "plain", + "context": null, + "message": "Use your package manager to update Tabularis.", + "stem": null, + "forms": null, + "originalKeys": [ + "update.managedByPackageManagerDesc" + ] + }, + "Check for updates on startup": { + "kind": "plain", + "context": null, + "message": "Check for updates on startup", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.autoCheckUpdates" + ] + }, + "Automatically check for new versions when the app launches": { + "kind": "plain", + "context": null, + "message": "Automatically check for new versions when the app launches", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.autoCheckUpdatesDesc" + ] + }, + "Checking...": { + "kind": "plain", + "context": null, + "message": "Checking...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.checking" + ] + }, + "Check for Updates Now": { + "kind": "plain", + "context": null, + "message": "Check for Updates Now", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.checkNow" + ] + }, + "You're up to date": { + "kind": "plain", + "context": null, + "message": "You're up to date", + "stem": null, + "forms": null, + "originalKeys": [ + "update.upToDate" + ] + }, + "Version {version} is available": { + "kind": "interp", + "context": null, + "message": "Version {version} is available", + "stem": null, + "forms": null, + "originalKeys": [ + "update.updateAvailable" + ] + }, + "Project Status": { + "kind": "plain", + "context": null, + "message": "Project Status", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.projectStatus" + ] + }, + "This project is a Work In Progress (WIP). Core features are stable, but we have big plans.": { + "kind": "plain", + "context": null, + "message": "This project is a Work In Progress (WIP). Core features are stable, but we have big plans.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.roadmapDesc" + ] + }, + "Monitor plugin processes, CPU, RAM and disk usage in real time": { + "kind": "plain", + "context": null, + "message": "Monitor plugin processes, CPU, RAM and disk usage in real time", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.header.description" + ] + }, + "Open Task Manager": { + "kind": "plain", + "context": null, + "message": "Open Task Manager", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.header.open" + ] + }, + "Support the Development": { + "kind": "plain", + "context": null, + "message": "Support the Development", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.support" + ] + }, + "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo.": { + "kind": "plain", + "context": null, + "message": "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.supportDesc" + ] + }, + "Auto (System)": { + "kind": "plain", + "context": null, + "message": "Auto (System)", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.auto" + ] + }, + "Localization": { + "kind": "plain", + "context": null, + "message": "Localization", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.localization" + ] + }, + "Language": { + "kind": "plain", + "context": null, + "message": "Language", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.language" + ] + }, + "Choose your preferred language. 'Auto' will use your system language.": { + "kind": "plain", + "context": null, + "message": "Choose your preferred language. 'Auto' will use your system language.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.languageDesc" + ] + }, + "Timezone": { + "kind": "plain", + "context": null, + "message": "Timezone", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.timezone", + "settings.plugins.pluginSettings.builtin.mysql.timezone.label" + ] + }, + "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.": { + "kind": "plain", + "context": null, + "message": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.timezoneDesc" + ] + }, + "Search timezones...": { + "kind": "plain", + "context": null, + "message": "Search timezones...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.timezoneSearch" + ] + }, + "Are you sure you want to clear all logs?": { + "kind": "plain", + "context": null, + "message": "Are you sure you want to clear all logs?", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.clearLogsConfirm" + ] + }, + "Delete\u0004common": { + "kind": "harmful", + "context": "common", + "message": "Delete", + "stem": null, + "forms": null, + "originalKeys": [ + "common.delete" + ] + }, + "Logs exported to clipboard": { + "kind": "plain", + "context": null, + "message": "Logs exported to clipboard", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.exportLogsSuccess" + ] + }, + "Log Settings": { + "kind": "plain", + "context": null, + "message": "Log Settings", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.logSettings" + ] + }, + "Enable Logging": { + "kind": "plain", + "context": null, + "message": "Enable Logging", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.enableLogging" + ] + }, + "Collect application logs in memory for debugging": { + "kind": "plain", + "context": null, + "message": "Collect application logs in memory for debugging", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.enableLoggingDesc" + ] + }, + "Max Log Entries": { + "kind": "plain", + "context": null, + "message": "Max Log Entries", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.maxLogEntries" + ] + }, + "How many logs to keep in memory (1-10000)": { + "kind": "plain", + "context": null, + "message": "How many logs to keep in memory (1-10000)", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.maxLogEntriesDesc" + ] + }, + "Current Logs": { + "kind": "plain", + "context": null, + "message": "Current Logs", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.currentLogCount" + ] + }, + "Clear Logs": { + "kind": "plain", + "context": null, + "message": "Clear Logs", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.clearLogs" + ] + }, + "Export Logs": { + "kind": "plain", + "context": null, + "message": "Export Logs", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.exportLogs" + ] + }, + "Logs": { + "kind": "plain", + "context": null, + "message": "Logs", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.logs" + ] + }, + "Filter by level": { + "kind": "plain", + "context": null, + "message": "Filter by level", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.filterByLevel" + ] + }, + "All levels": { + "kind": "plain", + "context": null, + "message": "All levels", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.allLevels" + ] + }, + "Debug": { + "kind": "plain", + "context": null, + "message": "Debug", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.debug" + ] + }, + "Info": { + "kind": "plain", + "context": null, + "message": "Info", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.info" + ] + }, + "Warn": { + "kind": "plain", + "context": null, + "message": "Warn", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.warn" + ] + }, + "Error\u0004settings": { + "kind": "harmful", + "context": "settings", + "message": "Error", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.error" + ] + }, + "No logs available": { + "kind": "plain", + "context": null, + "message": "No logs available", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.noLogs" + ] + }, + "Timestamp": { + "kind": "plain", + "context": null, + "message": "Timestamp", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.logTimestamp" + ] + }, + "Level": { + "kind": "plain", + "context": null, + "message": "Level", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.logLevel" + ] + }, + "Message": { + "kind": "plain", + "context": null, + "message": "Message", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.logMessage" + ] + }, + "{label} is required": { + "kind": "interp", + "context": null, + "message": "{label} is required", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.fieldRequired" + ] + }, + "Reset to default": { + "kind": "plain", + "context": null, + "message": "Reset to default", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.resetToDefault", + "settings.shortcuts.resetToDefault" + ] + }, + "Interpreter": { + "kind": "plain", + "context": null, + "message": "Interpreter", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.interpreter" + ] + }, + "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default.": { + "kind": "plain", + "context": null, + "message": "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.interpreterDesc" + ] + }, + "e.g. python3": { + "kind": "plain", + "context": null, + "message": "e.g. python3", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.interpreterPlaceholder" + ] + }, + "Browse...": { + "kind": "plain", + "context": null, + "message": "Browse...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.browse" + ] + }, + "Plugin Settings": { + "kind": "plain", + "context": null, + "message": "Plugin Settings", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.title" + ] + }, + "Saved": { + "kind": "plain", + "context": null, + "message": "Saved", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.saved" + ] + }, + "by": { + "kind": "plain", + "context": null, + "message": "by", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.by" + ] + }, + "Plugin Center": { + "kind": "plain", + "context": null, + "message": "Plugin Center", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.overviewTitle" + ] + }, + "Install extensions, manage plugin drivers, and keep runtime settings under control.": { + "kind": "plain", + "context": null, + "message": "Install extensions, manage plugin drivers, and keep runtime settings under control.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.overviewDesc" + ] + }, + "Installed\u0004settings": { + "kind": "harmful", + "context": "settings", + "message": "Installed", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.installedMetric", + "settings.plugins.filterInstalled", + "settings.plugins.installed" + ] + }, + "Enabled": { + "kind": "plain", + "context": null, + "message": "Enabled", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.enabledMetric" + ] + }, + "Registry": { + "kind": "plain", + "context": null, + "message": "Registry", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.registryMetric" + ] + }, + "Available Plugins": { + "kind": "plain", + "context": null, + "message": "Available Plugins", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.available" + ] + }, + "Browse and install plugins from the registry.": { + "kind": "plain", + "context": null, + "message": "Browse and install plugins from the registry.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.availableDesc" + ] + }, + "Search plugins…": { + "kind": "plain", + "context": null, + "message": "Search plugins…", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.searchPlaceholder" + ] + }, + "All": { + "kind": "plain", + "context": null, + "message": "All", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.filterAll" + ] + }, + "Remove\u0004settings": { + "kind": "harmful", + "context": "settings", + "message": "Remove", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.remove" + ] + }, + "No plugins match your search.": { + "kind": "plain", + "context": null, + "message": "No plugins match your search.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.searchNoResults" + ] + }, + "No plugins available in the registry.": { + "kind": "plain", + "context": null, + "message": "No plugins available in the registry.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.noPlugins" + ] + }, + "Loading plugin registry...": { + "kind": "plain", + "context": null, + "message": "Loading plugin registry...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.loadingRegistry" + ] + }, + "Failed to load registry": { + "kind": "plain", + "context": null, + "message": "Failed to load registry", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.registryError" + ] + }, + "Not available for your platform": { + "kind": "plain", + "context": null, + "message": "Not available for your platform", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.platformNotSupported" + ] + }, + "Up to date": { + "kind": "plain", + "context": null, + "message": "Up to date", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.upToDate" + ] + }, + "Downgrade to": { + "kind": "plain", + "context": null, + "message": "Downgrade to", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.downgrade" + ] + }, + "Update\u0004settings": { + "kind": "harmful", + "context": "settings", + "message": "Update", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.update" + ] + }, + "Install": { + "kind": "plain", + "context": null, + "message": "Install", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.install" + ] + }, + "Requires Tabularis ≥ {version}": { + "kind": "interp", + "context": null, + "message": "Requires Tabularis ≥ {version}", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.requiresVersion" + ] + }, + "Older versions": { + "kind": "plain", + "context": null, + "message": "Older versions", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.olderVersions" + ] + }, + "Press key combination...": { + "kind": "plain", + "context": null, + "message": "Press key combination...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.pressKeys" + ] + }, + "Keyboard Shortcuts": { + "kind": "plain", + "context": null, + "message": "Keyboard Shortcuts", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.title" + ] + }, + "Built-in, not customizable": { + "kind": "plain", + "context": null, + "message": "Built-in, not customizable", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.notOverridable" + ] + }, + "Edit": { + "kind": "plain", + "context": null, + "message": "Edit", + "stem": null, + "forms": null, + "originalKeys": [ + "common.edit", + "sshConnections.edit", + "sidebar.edit", + "connections.edit" + ] + }, + "Same as App": { + "kind": "plain", + "context": null, + "message": "Same as App", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance_sameAsApp" + ] + }, + "Delete the entire AI activity history? This cannot be undone.": { + "kind": "plain", + "context": null, + "message": "Delete the entire AI activity history? This cannot be undone.", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.clearConfirm" + ] + }, + "Exported to {path}": { + "kind": "interp", + "context": null, + "message": "Exported to {path}", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.exportSuccess" + ] + }, + "{count, plural, one {# event} other {# events}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# event} other {# events}}", + "stem": "aiActivity.eventsCount", + "forms": { + "one": "# event", + "other": "# events" + }, + "originalKeys": [ + "aiActivity.eventsCount_one", + "aiActivity.eventsCount_other" + ] + }, + "{count, plural, one {# blocked} other {# blocked}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# blocked} other {# blocked}}", + "stem": "aiActivity.blockedCount", + "forms": { + "one": "# blocked", + "other": "# blocked" + }, + "originalKeys": [ + "aiActivity.blockedCount_one", + "aiActivity.blockedCount_other" + ] + }, + "{count, plural, one {# error} other {# errors}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# error} other {# errors}}", + "stem": "aiActivity.errorsCount", + "forms": { + "one": "# error", + "other": "# errors" + }, + "originalKeys": [ + "aiActivity.errorsCount_one", + "aiActivity.errorsCount_other" + ] + }, + "Copied to clipboard\u0004aiActivity": { + "kind": "harmful", + "context": "aiActivity", + "message": "Copied to clipboard", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.copied" + ] + }, + "All tools": { + "kind": "plain", + "context": null, + "message": "All tools", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.allTools" + ] + }, + "All statuses": { + "kind": "plain", + "context": null, + "message": "All statuses", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.allStatuses" + ] + }, + "Success\u0004aiActivity": { + "kind": "harmful", + "context": "aiActivity", + "message": "Success", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.status.success" + ] + }, + "Error\u0004aiActivity": { + "kind": "harmful", + "context": "aiActivity", + "message": "Error", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.status.error" + ] + }, + "Denied": { + "kind": "plain", + "context": null, + "message": "Denied", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.status.denied" + ] + }, + "Timeout\u0004aiActivity": { + "kind": "harmful", + "context": "aiActivity", + "message": "Timeout", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.status.timeout" + ] + }, + "Blocked (read-only)": { + "kind": "plain", + "context": null, + "message": "Blocked (read-only)", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.status.blocked_readonly" + ] + }, + "Search query…": { + "kind": "plain", + "context": null, + "message": "Search query…", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.searchQuery" + ] + }, + "Export CSV": { + "kind": "plain", + "context": null, + "message": "Export CSV", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.exportCsv" + ] + }, + "Export JSON": { + "kind": "plain", + "context": null, + "message": "Export JSON", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.exportJson" + ] + }, + "Clear\u0004aiActivity": { + "kind": "harmful", + "context": "aiActivity", + "message": "Clear", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.clearAll" + ] + }, + "No MCP activity yet.": { + "kind": "plain", + "context": null, + "message": "No MCP activity yet.", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.empty" + ] + }, + "Time\u0004aiActivity": { + "kind": "harmful", + "context": "aiActivity", + "message": "Time", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.col.timestamp" + ] + }, + "Tool": { + "kind": "plain", + "context": null, + "message": "Tool", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.col.tool" + ] + }, + "Connection": { + "kind": "plain", + "context": null, + "message": "Connection", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.col.connection" + ] + }, + "Kind": { + "kind": "plain", + "context": null, + "message": "Kind", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.col.kind" + ] + }, + "Duration": { + "kind": "plain", + "context": null, + "message": "Duration", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.col.duration" + ] + }, + "Actions\u0004aiActivity": { + "kind": "harmful", + "context": "aiActivity", + "message": "Actions", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.col.actions" + ] + }, + "View details": { + "kind": "plain", + "context": null, + "message": "View details", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.viewDetails" + ] + }, + "Copy query": { + "kind": "plain", + "context": null, + "message": "Copy query", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.copyQuery" + ] + }, + "Open in Visual Explain": { + "kind": "plain", + "context": null, + "message": "Open in Visual Explain", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.openVisualExplain" + ] + }, + "Sort descending": { + "kind": "plain", + "context": null, + "message": "Sort descending", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.sort.toggleDescending" + ] + }, + "Sort ascending": { + "kind": "plain", + "context": null, + "message": "Sort ascending", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.sort.toggleAscending" + ] + }, + "Sort by {field}": { + "kind": "interp", + "context": null, + "message": "Sort by {field}", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.sort.sortBy" + ] + }, + "Started": { + "kind": "plain", + "context": null, + "message": "Started", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.sort.started" + ] + }, + "Events\u0004aiActivity": { + "kind": "harmful", + "context": "aiActivity", + "message": "Events", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.sort.eventCount", + "aiActivity.events" + ] + }, + "Run queries": { + "kind": "plain", + "context": null, + "message": "Run queries", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.sort.runQueries" + ] + }, + "Search session, client, connection…": { + "kind": "plain", + "context": null, + "message": "Search session, client, connection…", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.searchSessions" + ] + }, + "Sort by…": { + "kind": "plain", + "context": null, + "message": "Sort by…", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.sort.sortByPlaceholder" + ] + }, + "Asc": { + "kind": "plain", + "context": null, + "message": "Asc", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.sort.ascending" + ] + }, + "Desc": { + "kind": "plain", + "context": null, + "message": "Desc", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.sort.descending" + ] + }, + "{count, plural, one {# session} other {# sessions}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# session} other {# sessions}}", + "stem": "aiActivity.sessionsCount", + "forms": { + "one": "# session", + "other": "# sessions" + }, + "originalKeys": [ + "aiActivity.sessionsCount_one", + "aiActivity.sessionsCount_other" + ] + }, + "of {total}": { + "kind": "interp", + "context": null, + "message": "of {total}", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.filteredFrom" + ] + }, + "No sessions match the current filters.": { + "kind": "plain", + "context": null, + "message": "No sessions match the current filters.", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.noMatches" + ] + }, + "Queries": { + "kind": "plain", + "context": null, + "message": "Queries", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.runQueries" + ] + }, + "Export as Notebook": { + "kind": "plain", + "context": null, + "message": "Export as Notebook", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.exportNotebook" + ] + }, + "Event details": { + "kind": "plain", + "context": null, + "message": "Event details", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.detailTitle" + ] + }, + "Client": { + "kind": "plain", + "context": null, + "message": "Client", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.client" + ] + }, + "Rows returned": { + "kind": "plain", + "context": null, + "message": "Rows returned", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.rowsReturned" + ] + }, + "Approval ID": { + "kind": "plain", + "context": null, + "message": "Approval ID", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.approvalId" + ] + }, + "Add SQL Cell": { + "kind": "plain", + "context": null, + "message": "Add SQL Cell", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.addSqlCell" + ] + }, + "Add Markdown Cell": { + "kind": "plain", + "context": null, + "message": "Add Markdown Cell", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.addMarkdownCell" + ] + }, + "Chart": { + "kind": "plain", + "context": null, + "message": "Chart", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.chartType" + ] + }, + "Label": { + "kind": "plain", + "context": null, + "message": "Label", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.chartLabel" + ] + }, + "Values": { + "kind": "plain", + "context": null, + "message": "Values", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.chartValues" + ] + }, + "Execution History": { + "kind": "plain", + "context": null, + "message": "Execution History", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.executionHistory" + ] + }, + "No execution history yet": { + "kind": "plain", + "context": null, + "message": "No execution history yet", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.noHistory" + ] + }, + "Write Markdown here...": { + "kind": "plain", + "context": null, + "message": "Write Markdown here...", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.markdownPlaceholder" + ] + }, + "Markdown": { + "kind": "plain", + "context": null, + "message": "Markdown", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.markdownCell" + ] + }, + "Untitled": { + "kind": "plain", + "context": null, + "message": "Untitled", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.cellNamePlaceholder" + ] + }, + "Edit cell name": { + "kind": "plain", + "context": null, + "message": "Edit cell name", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.editCellName" + ] + }, + "Run Cell": { + "kind": "plain", + "context": null, + "message": "Run Cell", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.runCell" + ] + }, + "Parallel Execution (Run All)": { + "kind": "plain", + "context": null, + "message": "Parallel Execution (Run All)", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.parallelExecution" + ] + }, + "Toggle Preview": { + "kind": "plain", + "context": null, + "message": "Toggle Preview", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.togglePreview" + ] + }, + "Move Up": { + "kind": "plain", + "context": null, + "message": "Move Up", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.moveCellUp" + ] + }, + "Move Down": { + "kind": "plain", + "context": null, + "message": "Move Down", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.moveCellDown" + ] + }, + "Delete Cell": { + "kind": "plain", + "context": null, + "message": "Delete Cell", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.deleteCell" + ] + }, + "Edit history": { + "kind": "plain", + "context": null, + "message": "Edit history", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.title" + ] + }, + "Generate names for unnamed cells with AI": { + "kind": "plain", + "context": null, + "message": "Generate names for unnamed cells with AI", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.aiGenerateOutlineNames" + ] + }, + "Outline": { + "kind": "plain", + "context": null, + "message": "Outline", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.outline" + ] + }, + "Export Notebook": { + "kind": "plain", + "context": null, + "message": "Export Notebook", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.export" + ] + }, + "Export as HTML": { + "kind": "plain", + "context": null, + "message": "Export as HTML", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.exportHtml" + ] + }, + "Add": { + "kind": "plain", + "context": null, + "message": "Add", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.addCell", + "k8sConnections.add" + ] + }, + "Undo": { + "kind": "plain", + "context": null, + "message": "Undo", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.undo" + ] + }, + "Redo": { + "kind": "plain", + "context": null, + "message": "Redo", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.redo" + ] + }, + "Execute all SQL cells top to bottom": { + "kind": "plain", + "context": null, + "message": "Execute all SQL cells top to bottom", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.runAllTooltip" + ] + }, + "Run All\u0004editor": { + "kind": "harmful", + "context": "editor", + "message": "Run All", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.runAll", + "editor.querySelection.runAll" + ] + }, + "Stop execution when a cell fails": { + "kind": "plain", + "context": null, + "message": "Stop execution when a cell fails", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.stopOnErrorTooltip" + ] + }, + "Stop on Error": { + "kind": "plain", + "context": null, + "message": "Stop on Error", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.stopOnError" + ] + }, + "Collapse All": { + "kind": "plain", + "context": null, + "message": "Collapse All", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.collapseAll" + ] + }, + "Expand All": { + "kind": "plain", + "context": null, + "message": "Expand All", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.expandAll" + ] + }, + "Import Notebook": { + "kind": "plain", + "context": null, + "message": "Import Notebook", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.import" + ] + }, + "Notebook exported successfully": { + "kind": "plain", + "context": null, + "message": "Notebook exported successfully", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.exportSuccess" + ] + }, + "Export failed": { + "kind": "plain", + "context": null, + "message": "Export failed", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.exportError" + ] + }, + "Notebook imported successfully": { + "kind": "plain", + "context": null, + "message": "Notebook imported successfully", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.importSuccess" + ] + }, + "Invalid notebook file format": { + "kind": "plain", + "context": null, + "message": "Invalid notebook file format", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.invalidFile" + ] + }, + "This notebook is empty. Add a cell to get started.": { + "kind": "plain", + "context": null, + "message": "This notebook is empty. Add a cell to get started.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.emptyNotebook" + ] + }, + "Invalid parameter name": { + "kind": "plain", + "context": null, + "message": "Invalid parameter name", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.invalidParamName" + ] + }, + "name": { + "kind": "plain", + "context": null, + "message": "name", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.paramName" + ] + }, + "value\u0004editor": { + "kind": "harmful", + "context": "editor", + "message": "value", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.paramValue" + ] + }, + "{count, plural, one {# row · {time}ms} other {# rows · {time}ms}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# row · {time}ms} other {# rows · {time}ms}}", + "stem": "editor.notebook.cellResult", + "forms": { + "one": "# row · {time}ms", + "other": "# rows · {time}ms" + }, + "originalKeys": [ + "editor.notebook.cellResult_one", + "editor.notebook.cellResult_other" + ] + }, + "Toggle Chart": { + "kind": "plain", + "context": null, + "message": "Toggle Chart", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.toggleChart" + ] + }, + "Export as CSV": { + "kind": "plain", + "context": null, + "message": "Export as CSV", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.exportCsv" + ] + }, + "Export as JSON": { + "kind": "plain", + "context": null, + "message": "Export as JSON", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.exportJson" + ] + }, + "Run All Complete": { + "kind": "plain", + "context": null, + "message": "Run All Complete", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.runAllComplete" + ] + }, + "succeeded": { + "kind": "plain", + "context": null, + "message": "succeeded", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.succeeded" + ] + }, + "failed": { + "kind": "plain", + "context": null, + "message": "failed", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.failed" + ] + }, + "skipped": { + "kind": "plain", + "context": null, + "message": "skipped", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.skipped" + ] + }, + "AI requested a database write": { + "kind": "plain", + "context": null, + "message": "AI requested a database write", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.title" + ] + }, + "{client} on {connection} — review and decide before it executes.": { + "kind": "interp", + "context": null, + "message": "{client} on {connection} — review and decide before it executes.", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.subtitleWithClient" + ] + }, + "On {connection} — review and decide before it executes.": { + "kind": "interp", + "context": null, + "message": "On {connection} — review and decide before it executes.", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.subtitle" + ] + }, + "Lock query": { + "kind": "plain", + "context": null, + "message": "Lock query", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.lockQuery" + ] + }, + "Edit before approving": { + "kind": "plain", + "context": null, + "message": "Edit before approving", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.editQuery" + ] + }, + "Pre-flight execution plan": { + "kind": "plain", + "context": null, + "message": "Pre-flight execution plan", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.preflightPlan" + ] + }, + "Expand\u0004aiApproval": { + "kind": "harmful", + "context": "aiApproval", + "message": "Expand", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.expandPlan" + ] + }, + "EXPLAIN failed: {error}": { + "kind": "interp", + "context": null, + "message": "EXPLAIN failed: {error}", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.explainFailed" + ] + }, + "EXPLAIN unavailable for this query.": { + "kind": "plain", + "context": null, + "message": "EXPLAIN unavailable for this query.", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.explainUnavailable" + ] + }, + "Reason (optional)": { + "kind": "plain", + "context": null, + "message": "Reason (optional)", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.reasonLabel" + ] + }, + "e.g. Looks risky on prod, please confirm…": { + "kind": "plain", + "context": null, + "message": "e.g. Looks risky on prod, please confirm…", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.reasonPlaceholder" + ] + }, + "Deny": { + "kind": "plain", + "context": null, + "message": "Deny", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.deny" + ] + }, + "Approve": { + "kind": "plain", + "context": null, + "message": "Approve", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.approve" + ] + }, + "Collapse": { + "kind": "plain", + "context": null, + "message": "Collapse", + "stem": null, + "forms": null, + "originalKeys": [ + "aiApproval.collapsePlan" + ] + }, + "OK": { + "kind": "plain", + "context": null, + "message": "OK", + "stem": null, + "forms": null, + "originalKeys": [ + "common.ok" + ] + }, + "No data found in clipboard": { + "kind": "plain", + "context": null, + "message": "No data found in clipboard", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.noData" + ] + }, + "Rows will be added to an existing table": { + "kind": "plain", + "context": null, + "message": "Rows will be added to an existing table", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.modeAppendHint" + ] + }, + "A new table will be created": { + "kind": "plain", + "context": null, + "message": "A new table will be created", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.modeCreateHint" + ] + }, + "Import from Clipboard\u0004clipboardImport": { + "kind": "harmful", + "context": "clipboardImport", + "message": "Import from Clipboard", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.title" + ] + }, + "Paste structured data and preview the schema before importing": { + "kind": "plain", + "context": null, + "message": "Paste structured data and preview the schema before importing", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.subtitle" + ] + }, + "columns": { + "kind": "plain", + "context": null, + "message": "columns", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.columnsLabel", + "sidebar.columns" + ] + }, + "rows\u0004clipboardImport": { + "kind": "harmful", + "context": "clipboardImport", + "message": "rows", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.rowsLabel" + ] + }, + "{count, plural, one {# parsing warning} other {# parsing warnings}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# parsing warning} other {# parsing warnings}}", + "stem": "clipboardImport.warningsCount", + "forms": { + "one": "# parsing warning", + "other": "# parsing warnings" + }, + "originalKeys": [ + "clipboardImport.warningsCount_one", + "clipboardImport.warningsCount_other" + ] + }, + "Try again\u0004clipboardImport": { + "kind": "harmful", + "context": "clipboardImport", + "message": "Try again", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.retry" + ] + }, + "Configure destination": { + "kind": "plain", + "context": null, + "message": "Configure destination", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.stepConfigure" + ] + }, + "Mode": { + "kind": "plain", + "context": null, + "message": "Mode", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.mode" + ] + }, + "Table name": { + "kind": "plain", + "context": null, + "message": "Table name", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.tableName" + ] + }, + "Select a table...": { + "kind": "plain", + "context": null, + "message": "Select a table...", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.selectTablePlaceholder" + ] + }, + "Search...": { + "kind": "plain", + "context": null, + "message": "Search...", + "stem": null, + "forms": null, + "originalKeys": [ + "common.search" + ] + }, + "No results found": { + "kind": "plain", + "context": null, + "message": "No results found", + "stem": null, + "forms": null, + "originalKeys": [ + "common.noResults" + ] + }, + "Already exists": { + "kind": "plain", + "context": null, + "message": "Already exists", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.tableExists" + ] + }, + "If exists": { + "kind": "plain", + "context": null, + "message": "If exists", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.onConflict" + ] + }, + "Fail with error": { + "kind": "plain", + "context": null, + "message": "Fail with error", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.conflictFail" + ] + }, + "Append rows": { + "kind": "plain", + "context": null, + "message": "Append rows", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.conflictAppend" + ] + }, + "Replace table": { + "kind": "plain", + "context": null, + "message": "Replace table", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.conflictReplace" + ] + }, + "Review & adjust": { + "kind": "plain", + "context": null, + "message": "Review & adjust", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.stepReview" + ] + }, + "{count, plural, one {# row} other {# rows}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# row} other {# rows}}", + "stem": "clipboardImport.rowsTotal", + "forms": { + "one": "# row", + "other": "# rows" + }, + "originalKeys": [ + "clipboardImport.rowsTotal_one", + "clipboardImport.rowsTotal_other" + ] + }, + "Importing...": { + "kind": "plain", + "context": null, + "message": "Importing...", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.importing" + ] + }, + "{count, plural, one {Import # row} other {Import # rows}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {Import # row} other {Import # rows}}", + "stem": "clipboardImport.import", + "forms": { + "one": "Import # row", + "other": "Import # rows" + }, + "originalKeys": [ + "clipboardImport.import_one", + "clipboardImport.import_other" + ] + }, + "{count, plural, one {# row imported into \"{table}\"} other {# rows imported into \"{table}\"}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# row imported into \"{table}\"} other {# rows imported into \"{table}\"}}", + "stem": "clipboardImport.success", + "forms": { + "one": "# row imported into \"{table}\"", + "other": "# rows imported into \"{table}\"" + }, + "originalKeys": [ + "clipboardImport.success_one", + "clipboardImport.success_other" + ] + }, + "New table created": { + "kind": "plain", + "context": null, + "message": "New table created", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.tableCreated" + ] + }, + "Join the Community": { + "kind": "plain", + "context": null, + "message": "Join the Community", + "stem": null, + "forms": null, + "originalKeys": [ + "community.title" + ] + }, + "Help tabularis grow": { + "kind": "plain", + "context": null, + "message": "Help tabularis grow", + "stem": null, + "forms": null, + "originalKeys": [ + "community.subtitle" + ] + }, + "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.": { + "kind": "plain", + "context": null, + "message": "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.", + "stem": null, + "forms": null, + "originalKeys": [ + "community.description" + ] + }, + "A star helps others discover the project": { + "kind": "plain", + "context": null, + "message": "A star helps others discover the project", + "stem": null, + "forms": null, + "originalKeys": [ + "community.starDesc" + ] + }, + "Join Discord": { + "kind": "plain", + "context": null, + "message": "Join Discord", + "stem": null, + "forms": null, + "originalKeys": [ + "community.discordTitle" + ] + }, + "Chat with the community, get help, suggest features": { + "kind": "plain", + "context": null, + "message": "Chat with the community, get help, suggest features", + "stem": null, + "forms": null, + "originalKeys": [ + "community.discordDesc" + ] + }, + "Maybe later": { + "kind": "plain", + "context": null, + "message": "Maybe later", + "stem": null, + "forms": null, + "originalKeys": [ + "community.dismiss" + ] + }, + "config.json": { + "kind": "plain", + "context": null, + "message": "config.json", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.configJsonModal.title" + ] + }, + "Directly edit the raw configuration file. A restart is required to apply changes.": { + "kind": "plain", + "context": null, + "message": "Directly edit the raw configuration file. A restart is required to apply changes.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.editConfigJsonDesc" + ] + }, + "A restart is required to apply changes.": { + "kind": "plain", + "context": null, + "message": "A restart is required to apply changes.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.configJsonModal.restartRequired" + ] + }, + "Save & Restart": { + "kind": "plain", + "context": null, + "message": "Save & Restart", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.configJsonModal.saveAndRestart" + ] + }, + "The configuration file has been saved. Restart now to apply the changes?": { + "kind": "plain", + "context": null, + "message": "The configuration file has been saved. Restart now to apply the changes?", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.configJsonModal.restartMessage" + ] + }, + "Restart Now": { + "kind": "plain", + "context": null, + "message": "Restart Now", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.configJsonModal.restartNow" + ] + }, + "SQL Preview": { + "kind": "plain", + "context": null, + "message": "SQL Preview", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.sqlPreview", + "createIndex.sqlPreview", + "createTable.sqlPreview", + "modifyColumn.sqlPreview" + ] + }, + "Name is required": { + "kind": "plain", + "context": null, + "message": "Name is required", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.nameRequired" + ] + }, + "Create Foreign Key\u0004createFk": { + "kind": "harmful", + "context": "createFk", + "message": "Create Foreign Key", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.title", + "createFk.create" + ] + }, + "SQLite does not support dropping FKs via ALTER TABLE.": { + "kind": "plain", + "context": null, + "message": "SQLite does not support dropping FKs via ALTER TABLE.", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.sqliteFkError" + ] + }, + "FK Name (Optional)": { + "kind": "plain", + "context": null, + "message": "FK Name (Optional)", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.name" + ] + }, + "Local Column": { + "kind": "plain", + "context": null, + "message": "Local Column", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.column" + ] + }, + "Referenced Table": { + "kind": "plain", + "context": null, + "message": "Referenced Table", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.refTable" + ] + }, + "Referenced Column": { + "kind": "plain", + "context": null, + "message": "Referenced Column", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.refColumn" + ] + }, + "On Update": { + "kind": "plain", + "context": null, + "message": "On Update", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.onUpdate" + ] + }, + "On Delete": { + "kind": "plain", + "context": null, + "message": "On Delete", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.onDelete" + ] + }, + "Index name is required": { + "kind": "plain", + "context": null, + "message": "Index name is required", + "stem": null, + "forms": null, + "originalKeys": [ + "createIndex.nameRequired" + ] + }, + "At least one column must be selected": { + "kind": "plain", + "context": null, + "message": "At least one column must be selected", + "stem": null, + "forms": null, + "originalKeys": [ + "createIndex.colRequired" + ] + }, + "Create Index\u0004createIndex": { + "kind": "harmful", + "context": "createIndex", + "message": "Create Index", + "stem": null, + "forms": null, + "originalKeys": [ + "createIndex.title", + "createIndex.create" + ] + }, + "Index Name": { + "kind": "plain", + "context": null, + "message": "Index Name", + "stem": null, + "forms": null, + "originalKeys": [ + "createIndex.name" + ] + }, + "Columns": { + "kind": "plain", + "context": null, + "message": "Columns", + "stem": null, + "forms": null, + "originalKeys": [ + "createIndex.columns", + "createTable.columns" + ] + }, + "Unique Index": { + "kind": "plain", + "context": null, + "message": "Unique Index", + "stem": null, + "forms": null, + "originalKeys": [ + "createIndex.unique" + ] + }, + "Table name is required": { + "kind": "plain", + "context": null, + "message": "Table name is required", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.nameRequired" + ] + }, + "At least one column is required": { + "kind": "plain", + "context": null, + "message": "At least one column is required", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.colRequired" + ] + }, + "Failed to create table: ": { + "kind": "plain", + "context": null, + "message": "Failed to create table: ", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.failCreate" + ] + }, + "Create New Table": { + "kind": "plain", + "context": null, + "message": "Create New Table", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.title" + ] + }, + "Table Name": { + "kind": "plain", + "context": null, + "message": "Table Name", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.tableName", + "triggers.tableName" + ] + }, + "e.g. users, orders, products": { + "kind": "plain", + "context": null, + "message": "e.g. users, orders, products", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.tableNamePlaceholder" + ] + }, + "Add Column\u0004createTable": { + "kind": "harmful", + "context": "createTable", + "message": "Add Column", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.addColumn" + ] + }, + "Type": { + "kind": "plain", + "context": null, + "message": "Type", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.colType", + "modifyColumn.type" + ] + }, + "Len": { + "kind": "plain", + "context": null, + "message": "Len", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.colLen" + ] + }, + "PK": { + "kind": "plain", + "context": null, + "message": "PK", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.colPk" + ] + }, + "NN": { + "kind": "plain", + "context": null, + "message": "NN", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.colNn" + ] + }, + "AI\u0004createTable": { + "kind": "harmful", + "context": "createTable", + "message": "AI", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.colAi" + ] + }, + "Default\u0004createTable": { + "kind": "harmful", + "context": "createTable", + "message": "Default", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.colDefault" + ] + }, + "Requires extension: {ext}": { + "kind": "interp", + "context": null, + "message": "Requires extension: {ext}", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.requiresExtension", + "modifyColumn.requiresExtension" + ] + }, + "Create Table\u0004createTable": { + "kind": "harmful", + "context": "createTable", + "message": "Create Table", + "stem": null, + "forms": null, + "originalKeys": [ + "createTable.create" + ] + }, + "Database exported successfully": { + "kind": "plain", + "context": null, + "message": "Database exported successfully", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.success" + ] + }, + "Export failed: ": { + "kind": "plain", + "context": null, + "message": "Export failed: ", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.failure" + ] + }, + "Dump Database\u0004dump": { + "kind": "harmful", + "context": "dump", + "message": "Dump Database", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.title", + "dump.dumpDatabase" + ] + }, + "Structure (DDL)": { + "kind": "plain", + "context": null, + "message": "Structure (DDL)", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.includeStructure" + ] + }, + "Data (INSERT)": { + "kind": "plain", + "context": null, + "message": "Data (INSERT)", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.includeData" + ] + }, + "Select Tables": { + "kind": "plain", + "context": null, + "message": "Select Tables", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.selectTables" + ] + }, + "Deselect All\u0004dump": { + "kind": "harmful", + "context": "dump", + "message": "Deselect All", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.deselectAll" + ] + }, + "Select All\u0004dump": { + "kind": "harmful", + "context": "dump", + "message": "Select All", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.selectAll" + ] + }, + "Elapsed time": { + "kind": "plain", + "context": null, + "message": "Elapsed time", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.elapsedTime" + ] + }, + "Select Query to Explain": { + "kind": "plain", + "context": null, + "message": "Select Query to Explain", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.explainSelection.title" + ] + }, + "{count, plural, one {# explainable query found} other {# explainable queries found}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# explainable query found} other {# explainable queries found}}", + "stem": "editor.explainSelection.queriesFound", + "forms": { + "one": "# explainable query found", + "other": "# explainable queries found" + }, + "originalKeys": [ + "editor.explainSelection.queriesFound_one", + "editor.explainSelection.queriesFound_other" + ] + }, + "Explain this query": { + "kind": "plain", + "context": null, + "message": "Explain this query", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.explainSelection.explainSingle" + ] + }, + "explain focused": { + "kind": "plain", + "context": null, + "message": "explain focused", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.explainSelection.explainFocused" + ] + }, + "explain Nth": { + "kind": "plain", + "context": null, + "message": "explain Nth", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.explainSelection.explainNth" + ] + }, + "cancel": { + "kind": "plain", + "context": null, + "message": "cancel", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.explainSelection.cancel" + ] + }, + "Exporting...": { + "kind": "plain", + "context": null, + "message": "Exporting...", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.exporting" + ] + }, + "Rows Processed": { + "kind": "plain", + "context": null, + "message": "Rows Processed", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.rowsProcessed" + ] + }, + "Generated SQL: {table}": { + "kind": "interp", + "context": null, + "message": "Generated SQL: {table}", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.title" + ] + }, + "Generating SQL...": { + "kind": "plain", + "context": null, + "message": "Generating SQL...", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.loading" + ] + }, + "Run in console": { + "kind": "plain", + "context": null, + "message": "Run in console", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.runInConsole" + ] + }, + "Copied!": { + "kind": "plain", + "context": null, + "message": "Copied!", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.copied", + "settings.plugins.installError.copied", + "settings.plugins.startError.copied" + ] + }, + "Copy SQL": { + "kind": "plain", + "context": null, + "message": "Copy SQL", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.copy" + ] + }, + "Import failed: ": { + "kind": "plain", + "context": null, + "message": "Import failed: ", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.importFailure" + ] + }, + "Import cancelled": { + "kind": "plain", + "context": null, + "message": "Import cancelled", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.importCancelled" + ] + }, + "Import Database": { + "kind": "plain", + "context": null, + "message": "Import Database", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.importTitle" + ] + }, + "{count} / {total} statements": { + "kind": "interp", + "context": null, + "message": "{count} / {total} statements", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.statementsExecuted" + ] + }, + "SQL file executed successfully": { + "kind": "plain", + "context": null, + "message": "SQL file executed successfully", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.importSuccess" + ] + }, + "Import failed": { + "kind": "plain", + "context": null, + "message": "Import failed", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.importFailed" + ] + }, + "Importing from": { + "kind": "plain", + "context": null, + "message": "Importing from", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.importingFrom" + ] + }, + "Kubernetes Connections": { + "kind": "plain", + "context": null, + "message": "Kubernetes Connections", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.title" + ] + }, + "No Kubernetes connections saved. Click \"Add\" to create one.": { + "kind": "plain", + "context": null, + "message": "No Kubernetes connections saved. Click \"Add\" to create one.", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.empty" + ] + }, + "My K8s cluster": { + "kind": "plain", + "context": null, + "message": "My K8s cluster", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.namePlaceholder" + ] + }, + "Context": { + "kind": "plain", + "context": null, + "message": "Context", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.context", + "newConnection.k8sContext" + ] + }, + "Choose a context...": { + "kind": "plain", + "context": null, + "message": "Choose a context...", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.chooseContext", + "newConnection.chooseContext" + ] + }, + "Namespace": { + "kind": "plain", + "context": null, + "message": "Namespace", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.namespace", + "newConnection.k8sNamespace" + ] + }, + "Choose a namespace...": { + "kind": "plain", + "context": null, + "message": "Choose a namespace...", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.chooseNamespace", + "newConnection.chooseNamespace" + ] + }, + "Resource Type": { + "kind": "plain", + "context": null, + "message": "Resource Type", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.resourceType", + "newConnection.k8sResourceType" + ] + }, + "Service": { + "kind": "plain", + "context": null, + "message": "Service", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.resourceTypeService", + "newConnection.k8sResourceTypeService" + ] + }, + "Pod": { + "kind": "plain", + "context": null, + "message": "Pod", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.resourceTypePod", + "newConnection.k8sResourceTypePod" + ] + }, + "Resource Name": { + "kind": "plain", + "context": null, + "message": "Resource Name", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.resourceName", + "newConnection.k8sResourceName" + ] + }, + "Choose a resource...": { + "kind": "plain", + "context": null, + "message": "Choose a resource...", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.chooseResource", + "newConnection.chooseResource" + ] + }, + "Container Port": { + "kind": "plain", + "context": null, + "message": "Container Port", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.port", + "newConnection.k8sPort" + ] + }, + "Testing...": { + "kind": "plain", + "context": null, + "message": "Testing...", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.testing" + ] + }, + "Test": { + "kind": "plain", + "context": null, + "message": "Test", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.test" + ] + }, + "Column name is required": { + "kind": "plain", + "context": null, + "message": "Column name is required", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.nameRequired" + ] + }, + "Failed: ": { + "kind": "plain", + "context": null, + "message": "Failed: ", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.fail" + ] + }, + "Modify Column\u0004modifyColumn": { + "kind": "harmful", + "context": "modifyColumn", + "message": "Modify Column", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.titleEdit" + ] + }, + "Add Column\u0004modifyColumn": { + "kind": "harmful", + "context": "modifyColumn", + "message": "Add Column", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.titleAdd", + "modifyColumn.add" + ] + }, + "SQLite only supports renaming columns. Other modifications require recreating the table manually.": { + "kind": "plain", + "context": null, + "message": "SQLite only supports renaming columns. Other modifications require recreating the table manually.", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.sqliteWarn" + ] + }, + "Length": { + "kind": "plain", + "context": null, + "message": "Length", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.length" + ] + }, + "Default Value": { + "kind": "plain", + "context": null, + "message": "Default Value", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.default" + ] + }, + "Not Null": { + "kind": "plain", + "context": null, + "message": "Not Null", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.notNull" + ] + }, + "This driver only supports primary keys at table creation time": { + "kind": "plain", + "context": null, + "message": "This driver only supports primary keys at table creation time", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.pkNotSupported" + ] + }, + "Primary Key": { + "kind": "plain", + "context": null, + "message": "Primary Key", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.primaryKey", + "newRow.primaryKey" + ] + }, + "Auto Increment": { + "kind": "plain", + "context": null, + "message": "Auto Increment", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.autoInc" + ] + }, + "Save Changes": { + "kind": "plain", + "context": null, + "message": "Save Changes", + "stem": null, + "forms": null, + "originalKeys": [ + "modifyColumn.save", + "triggers.save", + "views.save" + ] + }, + "e.g. mysql://user:pass@localhost:3306/db": { + "kind": "plain", + "context": null, + "message": "e.g. mysql://user:pass@localhost:3306/db", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.connectionStringPlaceholder" + ] + }, + "Failed to load databases. Check your credentials.": { + "kind": "plain", + "context": null, + "message": "Failed to load databases. Check your credentials.", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.failLoadDatabases" + ] + }, + "Connection name is required\u0004newConnection": { + "kind": "harmful", + "context": "newConnection", + "message": "Connection name is required", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.nameRequired" + ] + }, + "Select at least one database": { + "kind": "plain", + "context": null, + "message": "Select at least one database", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.noDatabasesSelected" + ] + }, + "Database name is required": { + "kind": "plain", + "context": null, + "message": "Database name is required", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.dbNameRequired" + ] + }, + "Failed to save connection": { + "kind": "plain", + "context": null, + "message": "Failed to save connection", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.failSave" + ] + }, + "No general settings available for this driver.": { + "kind": "plain", + "context": null, + "message": "No general settings available for this driver.", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.noGeneralSettings" + ] + }, + "Folder Path": { + "kind": "plain", + "context": null, + "message": "Folder Path", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.folderPath" + ] + }, + "File Path": { + "kind": "plain", + "context": null, + "message": "File Path", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.filePath" + ] + }, + "/absolute/path/to/folder": { + "kind": "plain", + "context": null, + "message": "/absolute/path/to/folder", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.folderPathPlaceholder" + ] + }, + "/absolute/path/to/db.sqlite": { + "kind": "plain", + "context": null, + "message": "/absolute/path/to/db.sqlite", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.filePathPlaceholder" + ] + }, + "Browse folder": { + "kind": "plain", + "context": null, + "message": "Browse folder", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.browseFolder" + ] + }, + "Browse file": { + "kind": "plain", + "context": null, + "message": "Browse file", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.browseFile" + ] + }, + "Connection String": { + "kind": "plain", + "context": null, + "message": "Connection String", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.connectionString" + ] + }, + "Clear\u0004common": { + "kind": "harmful", + "context": "common", + "message": "Clear", + "stem": null, + "forms": null, + "originalKeys": [ + "common.clear" + ] + }, + "Host": { + "kind": "plain", + "context": null, + "message": "Host", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.host" + ] + }, + "Port": { + "kind": "plain", + "context": null, + "message": "Port", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.port" + ] + }, + "Username": { + "kind": "plain", + "context": null, + "message": "Username", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.username" + ] + }, + "Enter username": { + "kind": "plain", + "context": null, + "message": "Enter username", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.usernamePlaceholder" + ] + }, + "Password": { + "kind": "plain", + "context": null, + "message": "Password", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.password", + "sshConnections.authTypePassword" + ] + }, + "Enter password": { + "kind": "plain", + "context": null, + "message": "Enter password", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.passwordPlaceholder" + ] + }, + "Database Name": { + "kind": "plain", + "context": null, + "message": "Database Name", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.dbName" + ] + }, + "Load Databases": { + "kind": "plain", + "context": null, + "message": "Load Databases", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.loadDatabases" + ] + }, + "Select a database": { + "kind": "plain", + "context": null, + "message": "Select a database", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.selectDatabase" + ] + }, + "No databases found": { + "kind": "plain", + "context": null, + "message": "No databases found", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.noDatabasesFound" + ] + }, + "Database name": { + "kind": "plain", + "context": null, + "message": "Database name", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.dbNamePlaceholder" + ] + }, + "Save passwords in Keychain": { + "kind": "plain", + "context": null, + "message": "Save passwords in Keychain", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.saveKeychain" + ] + }, + "Detect JSON in text columns": { + "kind": "plain", + "context": null, + "message": "Detect JSON in text columns", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.detectJsonInTextColumns" + ] + }, + "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.": { + "kind": "plain", + "context": null, + "message": "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.detectJsonInTextColumnsDesc" + ] + }, + "Unnamed connection": { + "kind": "plain", + "context": null, + "message": "Unnamed connection", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.unnamedConnection" + ] + }, + "Select the databases to include in this connection.": { + "kind": "plain", + "context": null, + "message": "Select the databases to include in this connection.", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.selectDatabasesHint" + ] + }, + "Deselect All\u0004sidebar": { + "kind": "harmful", + "context": "sidebar", + "message": "Deselect All", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.deselectAll" + ] + }, + "Select All\u0004sidebar": { + "kind": "harmful", + "context": "sidebar", + "message": "Select All", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.selectAll" + ] + }, + "{count} database(s) selected": { + "kind": "interp", + "context": null, + "message": "{count} database(s) selected", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.selectedDatabases" + ] + }, + "Click Load Databases to fetch available databases.": { + "kind": "plain", + "context": null, + "message": "Click Load Databases to fetch available databases.", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.loadDatabasesHint" + ] + }, + "Configure SSL/TLS for secure database connections (optional).": { + "kind": "plain", + "context": null, + "message": "Configure SSL/TLS for secure database connections (optional).", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslDescription" + ] + }, + "SSL Mode": { + "kind": "plain", + "context": null, + "message": "SSL Mode", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslMode" + ] + }, + "Disable": { + "kind": "plain", + "context": null, + "message": "Disable", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslModes.disable" + ] + }, + "Allow": { + "kind": "plain", + "context": null, + "message": "Allow", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslModes.allow" + ] + }, + "Prefer": { + "kind": "plain", + "context": null, + "message": "Prefer", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslModes.prefer" + ] + }, + "Require": { + "kind": "plain", + "context": null, + "message": "Require", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslModes.require" + ] + }, + "Verify CA": { + "kind": "plain", + "context": null, + "message": "Verify CA", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslModes.verify-ca", + "newConnection.sslModes.verify_ca" + ] + }, + "Verify Full": { + "kind": "plain", + "context": null, + "message": "Verify Full", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslModes.verify-full" + ] + }, + "Disabled": { + "kind": "plain", + "context": null, + "message": "Disabled", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslModes.disabled" + ] + }, + "Preferred": { + "kind": "plain", + "context": null, + "message": "Preferred", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslModes.preferred" + ] + }, + "Required": { + "kind": "plain", + "context": null, + "message": "Required", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslModes.required", + "newRow.required" + ] + }, + "Verify Identity": { + "kind": "plain", + "context": null, + "message": "Verify Identity", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslModes.verify_identity" + ] + }, + "Certificate paths are optional. Leave empty to use system defaults.": { + "kind": "plain", + "context": null, + "message": "Certificate paths are optional. Leave empty to use system defaults.", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslCertificatesOptional" + ] + }, + "CA Certificate": { + "kind": "plain", + "context": null, + "message": "CA Certificate", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslCa" + ] + }, + "Client Certificate": { + "kind": "plain", + "context": null, + "message": "Client Certificate", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslCert" + ] + }, + "Client Key": { + "kind": "plain", + "context": null, + "message": "Client Key", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sslKey" + ] + }, + "SSH is not available for this driver.": { + "kind": "plain", + "context": null, + "message": "SSH is not available for this driver.", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshNotAvailable" + ] + }, + "Use SSH Tunnel": { + "kind": "plain", + "context": null, + "message": "Use SSH Tunnel", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.useSsh" + ] + }, + "Use Existing SSH Connection": { + "kind": "plain", + "context": null, + "message": "Use Existing SSH Connection", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.useSshConnection" + ] + }, + "Configure SSH Inline": { + "kind": "plain", + "context": null, + "message": "Configure SSH Inline", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.createInlineSsh" + ] + }, + "Select SSH Connection": { + "kind": "plain", + "context": null, + "message": "Select SSH Connection", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.selectSshConnection" + ] + }, + "No SSH connections available": { + "kind": "plain", + "context": null, + "message": "No SSH connections available", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.noSshConnections" + ] + }, + "Manage SSH Connections": { + "kind": "plain", + "context": null, + "message": "Manage SSH Connections", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.manageSshConnections" + ] + }, + "SSH Host": { + "kind": "plain", + "context": null, + "message": "SSH Host", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshHost" + ] + }, + "SSH Port": { + "kind": "plain", + "context": null, + "message": "SSH Port", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshPort" + ] + }, + "SSH User": { + "kind": "plain", + "context": null, + "message": "SSH User", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshUser" + ] + }, + "SSH Password": { + "kind": "plain", + "context": null, + "message": "SSH Password", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshPassword" + ] + }, + "Enter SSH password": { + "kind": "plain", + "context": null, + "message": "Enter SSH password", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshPasswordPlaceholder" + ] + }, + "SSH Password missing. Please re-enter.": { + "kind": "plain", + "context": null, + "message": "SSH Password missing. Please re-enter.", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshPasswordMissing" + ] + }, + "SSH Key File (Optional)": { + "kind": "plain", + "context": null, + "message": "SSH Key File (Optional)", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshKeyFile" + ] + }, + "/path/to/id_rsa": { + "kind": "plain", + "context": null, + "message": "/path/to/id_rsa", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshKeyFilePlaceholder" + ] + }, + "SSH Key Passphrase (Optional)": { + "kind": "plain", + "context": null, + "message": "SSH Key Passphrase (Optional)", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshKeyPassphrase" + ] + }, + "Enter key passphrase if encrypted": { + "kind": "plain", + "context": null, + "message": "Enter key passphrase if encrypted", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.sshKeyPassphrasePlaceholder" + ] + }, + "Kubernetes is not available for this driver.": { + "kind": "plain", + "context": null, + "message": "Kubernetes is not available for this driver.", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.k8sNotAvailable" + ] + }, + "Use Kubernetes Port-Forward": { + "kind": "plain", + "context": null, + "message": "Use Kubernetes Port-Forward", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.useK8s" + ] + }, + "Saved Connection": { + "kind": "plain", + "context": null, + "message": "Saved Connection", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.useK8sConnection" + ] + }, + "Inline": { + "kind": "plain", + "context": null, + "message": "Inline", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.createInlineK8s" + ] + }, + "Select K8s Connection": { + "kind": "plain", + "context": null, + "message": "Select K8s Connection", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.selectK8sConnection" + ] + }, + "No saved connections — create one below": { + "kind": "plain", + "context": null, + "message": "No saved connections — create one below", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.noK8sConnections" + ] + }, + "Choose a connection...": { + "kind": "plain", + "context": null, + "message": "Choose a connection...", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.chooseK8s" + ] + }, + "Manage": { + "kind": "plain", + "context": null, + "message": "Manage", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.manageK8s" + ] + }, + "No contexts found (is kubectl installed?)": { + "kind": "plain", + "context": null, + "message": "No contexts found (is kubectl installed?)", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.noK8sContexts" + ] + }, + "Select a context first": { + "kind": "plain", + "context": null, + "message": "Select a context first", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.selectContextFirst" + ] + }, + "Select type...": { + "kind": "plain", + "context": null, + "message": "Select type...", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.k8sSelectType" + ] + }, + "Select context/namespace/type first": { + "kind": "plain", + "context": null, + "message": "Select context/namespace/type first", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.selectTypeFirst" + ] + }, + "Provide your connection name": { + "kind": "plain", + "context": null, + "message": "Provide your connection name", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.namePlaceholder" + ] + }, + "Database Type": { + "kind": "plain", + "context": null, + "message": "Database Type", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.dbType" + ] + }, + "General\u0004newConnection": { + "kind": "harmful", + "context": "newConnection", + "message": "General", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.general" + ] + }, + "Databases": { + "kind": "plain", + "context": null, + "message": "Databases", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.selectDatabases", + "sidebar.databases" + ] + }, + "Appearance\u0004newConnection": { + "kind": "harmful", + "context": "newConnection", + "message": "Appearance", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.appearance" + ] + }, + "Test Connection": { + "kind": "plain", + "context": null, + "message": "Test Connection", + "stem": null, + "forms": null, + "originalKeys": [ + "newConnection.testConnection" + ] + }, + "Failed to load schema: ": { + "kind": "plain", + "context": null, + "message": "Failed to load schema: ", + "stem": null, + "forms": null, + "originalKeys": [ + "newRow.failLoad" + ] + }, + "Failed to insert row: ": { + "kind": "plain", + "context": null, + "message": "Failed to insert row: ", + "stem": null, + "forms": null, + "originalKeys": [ + "newRow.failInsert" + ] + }, + "Auto": { + "kind": "plain", + "context": null, + "message": "Auto", + "stem": null, + "forms": null, + "originalKeys": [ + "newRow.auto" + ] + }, + "Select Value...": { + "kind": "plain", + "context": null, + "message": "Select Value...", + "stem": null, + "forms": null, + "originalKeys": [ + "newRow.selectValue" + ] + }, + "No options found": { + "kind": "plain", + "context": null, + "message": "No options found", + "stem": null, + "forms": null, + "originalKeys": [ + "newRow.noOptions" + ] + }, + "(Auto-generated)": { + "kind": "plain", + "context": null, + "message": "(Auto-generated)", + "stem": null, + "forms": null, + "originalKeys": [ + "newRow.autoGenerated" + ] + }, + "Insert": { + "kind": "plain", + "context": null, + "message": "Insert", + "stem": null, + "forms": null, + "originalKeys": [ + "newRow.insert" + ] + }, + "{count} libraries": { + "kind": "interp", + "context": null, + "message": "{count} libraries", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibrariesTotal" + ] + }, + "Browse the direct open source dependencies used across the app, backend, and tooling.": { + "kind": "plain", + "context": null, + "message": "Browse the direct open source dependencies used across the app, backend, and tooling.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibrariesDesc" + ] + }, + "Direct dependencies declared in package.json and src-tauri/Cargo.toml.": { + "kind": "plain", + "context": null, + "message": "Direct dependencies declared in package.json and src-tauri/Cargo.toml.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibrariesSource" + ] + }, + "Open package page": { + "kind": "plain", + "context": null, + "message": "Open package page", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibrariesOpenProject" + ] + }, + "Installation Failed\u0004settings": { + "kind": "harmful", + "context": "settings", + "message": "Installation Failed", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.installError.title" + ] + }, + "An error occurred while installing the plugin. See the details below.": { + "kind": "plain", + "context": null, + "message": "An error occurred while installing the plugin. See the details below.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.installError.subtitle" + ] + }, + "Error Details\u0004settings": { + "kind": "harmful", + "context": "settings", + "message": "Error Details", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.installError.details", + "settings.plugins.startError.details" + ] + }, + "Copy": { + "kind": "plain", + "context": null, + "message": "Copy", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.installError.copy", + "settings.plugins.startError.copy" + ] + }, + "Remove Plugin": { + "kind": "plain", + "context": null, + "message": "Remove Plugin", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.removeTitle" + ] + }, + "Are you sure you want to remove \"{name}\"? This will delete the plugin files.": { + "kind": "interp", + "context": null, + "message": "Are you sure you want to remove \"{name}\"? This will delete the plugin files.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.confirmRemove" + ] + }, + "Plugin Failed to Start": { + "kind": "plain", + "context": null, + "message": "Plugin Failed to Start", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.startError.title" + ] + }, + "The plugin process could not be launched. Check the error details below.": { + "kind": "plain", + "context": null, + "message": "The plugin process could not be launched. Check the error details below.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.startError.subtitle" + ] + }, + "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path.": { + "kind": "plain", + "context": null, + "message": "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.startError.interpreterHint" + ] + }, + "Configure Interpreter": { + "kind": "plain", + "context": null, + "message": "Configure Interpreter", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.startError.configure" + ] + }, + "Database": { + "kind": "plain", + "context": null, + "message": "Database", + "stem": null, + "forms": null, + "originalKeys": [ + "queryModal.database" + ] + }, + "No database": { + "kind": "plain", + "context": null, + "message": "No database", + "stem": null, + "forms": null, + "originalKeys": [ + "queryModal.noDatabase" + ] + }, + "Value (e.g. 'text' or 123)": { + "kind": "plain", + "context": null, + "message": "Value (e.g. 'text' or 123)", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.paramValuePlaceholder" + ] + }, + "Select Query to Execute": { + "kind": "plain", + "context": null, + "message": "Select Query to Execute", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.querySelection.title" + ] + }, + "{count, plural, one {# query found} other {# queries found}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# query found} other {# queries found}}", + "stem": "editor.querySelection.queriesFound", + "forms": { + "one": "# query found", + "other": "# queries found" + }, + "originalKeys": [ + "editor.querySelection.queriesFound_one", + "editor.querySelection.queriesFound_other" + ] + }, + "Run this query": { + "kind": "plain", + "context": null, + "message": "Run this query", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.querySelection.runSingle" + ] + }, + "Run Selected ({count})": { + "kind": "interp", + "context": null, + "message": "Run Selected ({count})", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.querySelection.runSelected" + ] + }, + "Deselect All\u0004editor": { + "kind": "harmful", + "context": "editor", + "message": "Deselect All", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.querySelection.deselectAll" + ] + }, + "Select All\u0004editor": { + "kind": "harmful", + "context": "editor", + "message": "Select All", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.querySelection.selectAll" + ] + }, + "Failed to get routine definition: ": { + "kind": "plain", + "context": null, + "message": "Failed to get routine definition: ", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.failGetRoutineDefinition" + ] + }, + "Failed to get trigger definition: ": { + "kind": "plain", + "context": null, + "message": "Failed to get trigger definition: ", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.failGetTriggerDefinition" + ] + }, + "Search tables, views, routines, triggers...": { + "kind": "plain", + "context": null, + "message": "Search tables, views, routines, triggers...", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.placeholder" + ] + }, + "No matching elements found": { + "kind": "plain", + "context": null, + "message": "No matching elements found", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.noResults" + ] + }, + "Inspect structure": { + "kind": "plain", + "context": null, + "message": "Inspect structure", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.actions.inspect" + ] + }, + "New console": { + "kind": "plain", + "context": null, + "message": "New console", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.actions.newConsole" + ] + }, + "Generate SQL templates": { + "kind": "plain", + "context": null, + "message": "Generate SQL templates", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.actions.generateSql" + ] + }, + "Count rows": { + "kind": "plain", + "context": null, + "message": "Count rows", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.actions.countRows" + ] + }, + "Run SELECT query": { + "kind": "plain", + "context": null, + "message": "Run SELECT query", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.actions.query" + ] + }, + "Copy name": { + "kind": "plain", + "context": null, + "message": "Copy name", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.actions.copyName" + ] + }, + "1 element": { + "kind": "plain", + "context": null, + "message": "1 element", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.count_one" + ] + }, + "{count} elements": { + "kind": "interp", + "context": null, + "message": "{count} elements", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.count_other" + ] + }, + "↑↓ to navigate, Enter to open": { + "kind": "plain", + "context": null, + "message": "↑↓ to navigate, Enter to open", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.navigationHint" + ] + }, + "Esc to close\u0004editor": { + "kind": "harmful", + "context": "editor", + "message": "Esc to close", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.escHint", + "editor.tabSwitcher.escHint" + ] + }, + "Please fill in all required fields": { + "kind": "plain", + "context": null, + "message": "Please fill in all required fields", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.fillRequired" + ] + }, + "Failed to save SSH connection": { + "kind": "plain", + "context": null, + "message": "Failed to save SSH connection", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.failSave" + ] + }, + "Are you sure you want to delete this SSH connection?": { + "kind": "plain", + "context": null, + "message": "Are you sure you want to delete this SSH connection?", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.confirmDelete" + ] + }, + "Failed to delete SSH connection": { + "kind": "plain", + "context": null, + "message": "Failed to delete SSH connection", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.failDelete" + ] + }, + "Connection test failed": { + "kind": "plain", + "context": null, + "message": "Connection test failed", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.testFailed" + ] + }, + "SSH Connections": { + "kind": "plain", + "context": null, + "message": "SSH Connections", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.title" + ] + }, + "Create New SSH Connection": { + "kind": "plain", + "context": null, + "message": "Create New SSH Connection", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.createNew" + ] + }, + "No SSH connections configured yet": { + "kind": "plain", + "context": null, + "message": "No SSH connections configured yet", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.noConnections" + ] + }, + "Key file": { + "kind": "plain", + "context": null, + "message": "Key file", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.keyFile" + ] + }, + "Quick connection test": { + "kind": "plain", + "context": null, + "message": "Quick connection test", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.quickTest" + ] + }, + "Delete\u0004sshConnections": { + "kind": "harmful", + "context": "sshConnections", + "message": "Delete", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.delete" + ] + }, + "Connection Name": { + "kind": "plain", + "context": null, + "message": "Connection Name", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.name" + ] + }, + "My SSH Server": { + "kind": "plain", + "context": null, + "message": "My SSH Server", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.namePlaceholder" + ] + }, + "Authentication Type": { + "kind": "plain", + "context": null, + "message": "Authentication Type", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.authType" + ] + }, + "SSH Key": { + "kind": "plain", + "context": null, + "message": "SSH Key", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.authTypeSshKey" + ] + }, + "Password saved in system keychain": { + "kind": "plain", + "context": null, + "message": "Password saved in system keychain", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.savedInKeychain" + ] + }, + "Update\u0004sshConnections": { + "kind": "harmful", + "context": "sshConnections", + "message": "Update", + "stem": null, + "forms": null, + "originalKeys": [ + "sshConnections.update" + ] + }, + "Open Tabs": { + "kind": "plain", + "context": null, + "message": "Open Tabs", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.tabSwitcher.title" + ] + }, + "Ctrl+Tab": { + "kind": "plain", + "context": null, + "message": "Ctrl+Tab", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.tabSwitcher.hint" + ] + }, + "{count, plural, one {# tab} other {# tabs}}": { + "kind": "plural", + "context": null, + "message": "{count, plural, one {# tab} other {# tabs}}", + "stem": "editor.tabSwitcher.tabs", + "forms": { + "one": "# tab", + "other": "# tabs" + }, + "originalKeys": [ + "editor.tabSwitcher.tabs_one", + "editor.tabSwitcher.tabs_other" + ] + }, + "Failed to load trigger definition: ": { + "kind": "plain", + "context": null, + "message": "Failed to load trigger definition: ", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.failLoadDefinition" + ] + }, + "Trigger SQL is required": { + "kind": "plain", + "context": null, + "message": "Trigger SQL is required", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.sqlRequired" + ] + }, + "Editing a trigger requires dropping and recreating it. Continue modifying \"{trigger}\"?": { + "kind": "interp", + "context": null, + "message": "Editing a trigger requires dropping and recreating it. Continue modifying \"{trigger}\"?", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.confirmRecreate" + ] + }, + "Recreate Trigger": { + "kind": "plain", + "context": null, + "message": "Recreate Trigger", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.recreateTrigger" + ] + }, + "Failed to drop existing trigger: ": { + "kind": "plain", + "context": null, + "message": "Failed to drop existing trigger: ", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.dropError" + ] + }, + "Trigger created successfully": { + "kind": "plain", + "context": null, + "message": "Trigger created successfully", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.createSuccess" + ] + }, + "Trigger updated successfully": { + "kind": "plain", + "context": null, + "message": "Trigger updated successfully", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.updateSuccess" + ] + }, + "Failed to save trigger: ": { + "kind": "plain", + "context": null, + "message": "Failed to save trigger: ", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.saveError" + ] + }, + "Create Trigger": { + "kind": "plain", + "context": null, + "message": "Create Trigger", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.createTrigger", + "triggers.create" + ] + }, + "Edit Trigger": { + "kind": "plain", + "context": null, + "message": "Edit Trigger", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.editTrigger", + "sidebar.editTrigger" + ] + }, + "Create a new database trigger": { + "kind": "plain", + "context": null, + "message": "Create a new database trigger", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.createSubtitle" + ] + }, + "Editing trigger: {name}": { + "kind": "interp", + "context": null, + "message": "Editing trigger: {name}", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.editSubtitle" + ] + }, + "Loading trigger definition...": { + "kind": "plain", + "context": null, + "message": "Loading trigger definition...", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.loading" + ] + }, + "Guided": { + "kind": "plain", + "context": null, + "message": "Guided", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.guidedMode" + ] + }, + "Raw SQL": { + "kind": "plain", + "context": null, + "message": "Raw SQL", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.rawSqlMode", + "triggers.rawSql" + ] + }, + "Trigger Name": { + "kind": "plain", + "context": null, + "message": "Trigger Name", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.triggerName" + ] + }, + "e.g. before_insert_user": { + "kind": "plain", + "context": null, + "message": "e.g. before_insert_user", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.triggerNamePlaceholder" + ] + }, + "e.g. users": { + "kind": "plain", + "context": null, + "message": "e.g. users", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.tableNamePlaceholder" + ] + }, + "Timing": { + "kind": "plain", + "context": null, + "message": "Timing", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.timing" + ] + }, + "Events\u0004triggers": { + "kind": "harmful", + "context": "triggers", + "message": "Events", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.events" + ] + }, + "Trigger Body (SQL)": { + "kind": "plain", + "context": null, + "message": "Trigger Body (SQL)", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.body" + ] + }, + "Generated SQL Preview": { + "kind": "plain", + "context": null, + "message": "Generated SQL Preview", + "stem": null, + "forms": null, + "originalKeys": [ + "triggers.sqlPreview" + ] + }, + "New Version Available": { + "kind": "plain", + "context": null, + "message": "New Version Available", + "stem": null, + "forms": null, + "originalKeys": [ + "update.newVersionAvailable" + ] + }, + "Downloading...\u0004update": { + "kind": "harmful", + "context": "update", + "message": "Downloading...", + "stem": null, + "forms": null, + "originalKeys": [ + "update.downloading" + ] + }, + "Installing...": { + "kind": "plain", + "context": null, + "message": "Installing...", + "stem": null, + "forms": null, + "originalKeys": [ + "update.installing" + ] + }, + "The app will restart automatically after installation": { + "kind": "plain", + "context": null, + "message": "The app will restart automatically after installation", + "stem": null, + "forms": null, + "originalKeys": [ + "update.installingMessage" + ] + }, + "Update Error": { + "kind": "plain", + "context": null, + "message": "Update Error", + "stem": null, + "forms": null, + "originalKeys": [ + "update.error" + ] + }, + "Release Notes": { + "kind": "plain", + "context": null, + "message": "Release Notes", + "stem": null, + "forms": null, + "originalKeys": [ + "update.releaseNotes" + ] + }, + "View on GitHub": { + "kind": "plain", + "context": null, + "message": "View on GitHub", + "stem": null, + "forms": null, + "originalKeys": [ + "update.viewOnGitHub" + ] + }, + "Remind Me Later": { + "kind": "plain", + "context": null, + "message": "Remind Me Later", + "stem": null, + "forms": null, + "originalKeys": [ + "update.remindLater" + ] + }, + "Download & Install": { + "kind": "plain", + "context": null, + "message": "Download & Install", + "stem": null, + "forms": null, + "originalKeys": [ + "update.downloadAndInstall" + ] + }, + "Failed to load view definition: ": { + "kind": "plain", + "context": null, + "message": "Failed to load view definition: ", + "stem": null, + "forms": null, + "originalKeys": [ + "views.failLoadDefinition" + ] + }, + "Preview failed: ": { + "kind": "plain", + "context": null, + "message": "Preview failed: ", + "stem": null, + "forms": null, + "originalKeys": [ + "views.previewError" + ] + }, + "View name is required": { + "kind": "plain", + "context": null, + "message": "View name is required", + "stem": null, + "forms": null, + "originalKeys": [ + "views.nameRequired" + ] + }, + "View definition is required": { + "kind": "plain", + "context": null, + "message": "View definition is required", + "stem": null, + "forms": null, + "originalKeys": [ + "views.definitionRequired" + ] + }, + "View created successfully": { + "kind": "plain", + "context": null, + "message": "View created successfully", + "stem": null, + "forms": null, + "originalKeys": [ + "views.createSuccess" + ] + }, + "Are you sure you want to modify view \"{view}\"?": { + "kind": "interp", + "context": null, + "message": "Are you sure you want to modify view \"{view}\"?", + "stem": null, + "forms": null, + "originalKeys": [ + "views.confirmAlter" + ] + }, + "Alter View": { + "kind": "plain", + "context": null, + "message": "Alter View", + "stem": null, + "forms": null, + "originalKeys": [ + "views.alterView" + ] + }, + "View updated successfully": { + "kind": "plain", + "context": null, + "message": "View updated successfully", + "stem": null, + "forms": null, + "originalKeys": [ + "views.alterSuccess" + ] + }, + "Failed to save view: ": { + "kind": "plain", + "context": null, + "message": "Failed to save view: ", + "stem": null, + "forms": null, + "originalKeys": [ + "views.saveError" + ] + }, + "Create View\u0004views": { + "kind": "harmful", + "context": "views", + "message": "Create View", + "stem": null, + "forms": null, + "originalKeys": [ + "views.createView", + "views.create" + ] + }, + "Edit View": { + "kind": "plain", + "context": null, + "message": "Edit View", + "stem": null, + "forms": null, + "originalKeys": [ + "views.editView", + "sidebar.editView" + ] + }, + "Create a new database view": { + "kind": "plain", + "context": null, + "message": "Create a new database view", + "stem": null, + "forms": null, + "originalKeys": [ + "views.createSubtitle" + ] + }, + "Editing view: {name}": { + "kind": "interp", + "context": null, + "message": "Editing view: {name}", + "stem": null, + "forms": null, + "originalKeys": [ + "views.editSubtitle" + ] + }, + "View Name": { + "kind": "plain", + "context": null, + "message": "View Name", + "stem": null, + "forms": null, + "originalKeys": [ + "views.viewName" + ] + }, + "e.g. active_users, order_summary": { + "kind": "plain", + "context": null, + "message": "e.g. active_users, order_summary", + "stem": null, + "forms": null, + "originalKeys": [ + "views.viewNamePlaceholder" + ] + }, + "View Definition (SQL)": { + "kind": "plain", + "context": null, + "message": "View Definition (SQL)", + "stem": null, + "forms": null, + "originalKeys": [ + "views.viewDefinition" + ] + }, + "Preview\u0004views": { + "kind": "harmful", + "context": "views", + "message": "Preview", + "stem": null, + "forms": null, + "originalKeys": [ + "views.preview" + ] + }, + "Run Preview": { + "kind": "plain", + "context": null, + "message": "Run Preview", + "stem": null, + "forms": null, + "originalKeys": [ + "views.runPreview" + ] + }, + "+{count} more rows": { + "kind": "interp", + "context": null, + "message": "+{count} more rows", + "stem": null, + "forms": null, + "originalKeys": [ + "views.moreRows" + ] + }, + "Click 'Run Preview' to see results": { + "kind": "plain", + "context": null, + "message": "Click 'Run Preview' to see results", + "stem": null, + "forms": null, + "originalKeys": [ + "views.previewEmpty" + ] + }, + "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained.": { + "kind": "plain", + "context": null, + "message": "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.notExplainable" + ] + }, + "Analyze": { + "kind": "plain", + "context": null, + "message": "Analyze", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.analyze" + ] + }, + "ANALYZE executes the query. Use with caution on data-modifying statements.": { + "kind": "plain", + "context": null, + "message": "ANALYZE executes the query. Use with caution on data-modifying statements.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.analyzeWarning" + ] + }, + "Re-run": { + "kind": "plain", + "context": null, + "message": "Re-run", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.rerun" + ] + }, + "Version {version}": { + "kind": "interp", + "context": null, + "message": "Version {version}", + "stem": null, + "forms": null, + "originalKeys": [ + "whatsNew.subtitle" + ] + }, + "Read more": { + "kind": "plain", + "context": null, + "message": "Read more", + "stem": null, + "forms": null, + "originalKeys": [ + "whatsNew.readMore" + ] + }, + "New Features": { + "kind": "plain", + "context": null, + "message": "New Features", + "stem": null, + "forms": null, + "originalKeys": [ + "whatsNew.features" + ] + }, + "Bug Fixes": { + "kind": "plain", + "context": null, + "message": "Bug Fixes", + "stem": null, + "forms": null, + "originalKeys": [ + "whatsNew.bugFixes" + ] + }, + "Breaking Changes": { + "kind": "plain", + "context": null, + "message": "Breaking Changes", + "stem": null, + "forms": null, + "originalKeys": [ + "whatsNew.breakingChanges" + ] + }, + "Got it": { + "kind": "plain", + "context": null, + "message": "Got it", + "stem": null, + "forms": null, + "originalKeys": [ + "whatsNew.dismiss" + ] + }, + "AI Provider not configured. Please go to Settings > AI.": { + "kind": "plain", + "context": null, + "message": "AI Provider not configured. Please go to Settings > AI.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.aiConfigRequired" + ] + }, + "Analyzing query plan with AI...": { + "kind": "plain", + "context": null, + "message": "Analyzing query plan with AI...", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.aiAnalyzing" + ] + }, + "AI Query Plan Analysis": { + "kind": "plain", + "context": null, + "message": "AI Query Plan Analysis", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.aiAnalysisTitle" + ] + }, + "Select a node to view details": { + "kind": "plain", + "context": null, + "message": "Select a node to view details", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.selectNode" + ] + }, + "Operation": { + "kind": "plain", + "context": null, + "message": "Operation", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.nodeType" + ] + }, + "Join Type": { + "kind": "plain", + "context": null, + "message": "Join Type", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.joinType" + ] + }, + "Hash Cond.": { + "kind": "plain", + "context": null, + "message": "Hash Cond.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.hashCondition" + ] + }, + "Buffers Hit": { + "kind": "plain", + "context": null, + "message": "Buffers Hit", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.buffersHit" + ] + }, + "Buffers Read": { + "kind": "plain", + "context": null, + "message": "Buffers Read", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.buffersRead" + ] + }, + "General\u0004editor": { + "kind": "harmful", + "context": "editor", + "message": "General", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.general" + ] + }, + "Analyze Data": { + "kind": "plain", + "context": null, + "message": "Analyze Data", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.analyzeData" + ] + }, + "Extra": { + "kind": "plain", + "context": null, + "message": "Extra", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.extraDetails" + ] + }, + "Highest Cost": { + "kind": "plain", + "context": null, + "message": "Highest Cost", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.highestCost" + ] + }, + "Slowest Step": { + "kind": "plain", + "context": null, + "message": "Slowest Step", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.slowestStep" + ] + }, + "Sequential Scans": { + "kind": "plain", + "context": null, + "message": "Sequential Scans", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.sequentialScans" + ] + }, + "Scan-heavy operations detected": { + "kind": "plain", + "context": null, + "message": "Scan-heavy operations detected", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.scanOperations" + ] + }, + "Temp or Sort Ops": { + "kind": "plain", + "context": null, + "message": "Temp or Sort Ops", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.tempOperations" + ] + }, + "Sort or temp work detected": { + "kind": "plain", + "context": null, + "message": "Sort or temp work detected", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.sortOrTempOperations" + ] + }, + "Overview": { + "kind": "plain", + "context": null, + "message": "Overview", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.overview" + ] + }, + "Top Issues": { + "kind": "plain", + "context": null, + "message": "Top Issues", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.topIssues" + ] + }, + "Driver Notes": { + "kind": "plain", + "context": null, + "message": "Driver Notes", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.driverNotes" + ] + }, + "Hide overview": { + "kind": "plain", + "context": null, + "message": "Hide overview", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.hideOverview" + ] + }, + "Show overview": { + "kind": "plain", + "context": null, + "message": "Show overview", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.showOverview" + ] + }, + "No major issues detected in the current plan summary.": { + "kind": "plain", + "context": null, + "message": "No major issues detected in the current plan summary.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.noIssues" + ] + }, + "Planning": { + "kind": "plain", + "context": null, + "message": "Planning", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.planningTime" + ] + }, + "Execution": { + "kind": "plain", + "context": null, + "message": "Execution", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.executionTime" + ] + }, + "Total Cost": { + "kind": "plain", + "context": null, + "message": "Total Cost", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.totalCost" + ] + }, + "Graph": { + "kind": "plain", + "context": null, + "message": "Graph", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.graphView" + ] + }, + "Raw Output": { + "kind": "plain", + "context": null, + "message": "Raw Output", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.rawOutput" + ] + }, + "AI Analysis": { + "kind": "plain", + "context": null, + "message": "AI Analysis", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.aiAnalysis" + ] + }, + "Read-only mode": { + "kind": "plain", + "context": null, + "message": "Read-only mode", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.readOnlyTitle" + ] + }, + "Make all MCP queries read-only": { + "kind": "plain", + "context": null, + "message": "Make all MCP queries read-only", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.readOnlyDefault" + ] + }, + "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below.": { + "kind": "plain", + "context": null, + "message": "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below.", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.readOnlyDefaultDesc" + ] + }, + "Allow writes from MCP": { + "kind": "plain", + "context": null, + "message": "Allow writes from MCP", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.allowList" + ] + }, + "Read-only connections": { + "kind": "plain", + "context": null, + "message": "Read-only connections", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.readOnlyList" + ] + }, + "All other connections stay read-only. Only the connections checked here may execute writes.": { + "kind": "plain", + "context": null, + "message": "All other connections stay read-only. Only the connections checked here may execute writes.", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.allowListDesc" + ] + }, + "These connections will reject writes from MCP. Other connections behave normally.": { + "kind": "plain", + "context": null, + "message": "These connections will reject writes from MCP. Other connections behave normally.", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.readOnlyListDesc" + ] + }, + "Approval gate": { + "kind": "plain", + "context": null, + "message": "Approval gate", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.approvalTitle" + ] + }, + "Approval required": { + "kind": "plain", + "context": null, + "message": "Approval required", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.approvalMode" + ] + }, + "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database.": { + "kind": "plain", + "context": null, + "message": "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database.", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.approvalModeDesc" + ] + }, + "Off": { + "kind": "plain", + "context": null, + "message": "Off", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.modeOff" + ] + }, + "Writes only": { + "kind": "plain", + "context": null, + "message": "Writes only", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.modeWritesOnly" + ] + }, + "All queries": { + "kind": "plain", + "context": null, + "message": "All queries", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.modeAll" + ] + }, + "Timeout\u0004mcp": { + "kind": "harmful", + "context": "mcp", + "message": "Timeout", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.approvalTimeout" + ] + }, + "How long the MCP subprocess will wait for the user's decision before failing the request.": { + "kind": "plain", + "context": null, + "message": "How long the MCP subprocess will wait for the user's decision before failing the request.", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.approvalTimeoutDesc" + ] + }, + "Pre-flight EXPLAIN": { + "kind": "plain", + "context": null, + "message": "Pre-flight EXPLAIN", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.preflightExplain" + ] + }, + "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan.": { + "kind": "plain", + "context": null, + "message": "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan.", + "stem": null, + "forms": null, + "originalKeys": [ + "mcp.safety.preflightExplainDesc" + ] + }, + "Appearance\u0004connectionAppearance": { + "kind": "harmful", + "context": "connectionAppearance", + "message": "Appearance", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.section" + ] + }, + "Preview\u0004connectionAppearance": { + "kind": "harmful", + "context": "connectionAppearance", + "message": "Preview", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.previewLabel" + ] + }, + "Accent color": { + "kind": "plain", + "context": null, + "message": "Accent color", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.accentColor" + ] + }, + "Reset to driver default": { + "kind": "plain", + "context": null, + "message": "Reset to driver default", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.resetColor" + ] + }, + "Custom": { + "kind": "plain", + "context": null, + "message": "Custom", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.customColor" + ] + }, + "Icon": { + "kind": "plain", + "context": null, + "message": "Icon", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.icon", + "connectionAppearance.tabs.pack" + ] + }, + "Using the driver's default icon.": { + "kind": "plain", + "context": null, + "message": "Using the driver's default icon.", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.defaultHint" + ] + }, + "Search icons…": { + "kind": "plain", + "context": null, + "message": "Search icons…", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.iconSearch" + ] + }, + "Showing {shown} of {total} — refine search to narrow down.": { + "kind": "interp", + "context": null, + "message": "Showing {shown} of {total} — refine search to narrow down.", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.iconResultsTruncated" + ] + }, + "No icons match.": { + "kind": "plain", + "context": null, + "message": "No icons match.", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.iconNoResults" + ] + }, + "Selected emoji": { + "kind": "plain", + "context": null, + "message": "Selected emoji", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.emojiSelected" + ] + }, + "Click another emoji below to change.": { + "kind": "plain", + "context": null, + "message": "Click another emoji below to change.", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.emojiHint" + ] + }, + "Clear\u0004connectionAppearance": { + "kind": "harmful", + "context": "connectionAppearance", + "message": "Clear", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.removeEmoji" + ] + }, + "Search emoji…": { + "kind": "plain", + "context": null, + "message": "Search emoji…", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.emojiSearch" + ] + }, + "No preview": { + "kind": "plain", + "context": null, + "message": "No preview", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.noPreview" + ] + }, + "PNG, JPG, WebP or SVG · max 512 KB": { + "kind": "plain", + "context": null, + "message": "PNG, JPG, WebP or SVG · max 512 KB", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.imageHint" + ] + }, + "Choose image…": { + "kind": "plain", + "context": null, + "message": "Choose image…", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.chooseImage" + ] + }, + "Remove\u0004connectionAppearance": { + "kind": "harmful", + "context": "connectionAppearance", + "message": "Remove", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.removeImage" + ] + }, + "Data Preview": { + "kind": "plain", + "context": null, + "message": "Data Preview", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.dataPreview" + ] + }, + "showing first {count}": { + "kind": "interp", + "context": null, + "message": "showing first {count}", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.showingFirst" + ] + }, + "Create new table": { + "kind": "plain", + "context": null, + "message": "Create new table", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.createNew" + ] + }, + "Append to existing": { + "kind": "plain", + "context": null, + "message": "Append to existing", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.appendTo" + ] + }, + "First row as header": { + "kind": "plain", + "context": null, + "message": "First row as header", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.firstRowHeader" + ] + }, + "{count} selected": { + "kind": "interp", + "context": null, + "message": "{count} selected", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.nSelected" + ] + }, + "Delete selected": { + "kind": "plain", + "context": null, + "message": "Delete selected", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.deleteSelected" + ] + }, + "Column Schema": { + "kind": "plain", + "context": null, + "message": "Column Schema", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.schemaPreview" + ] + }, + "Clipboard column": { + "kind": "plain", + "context": null, + "message": "Clipboard column", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.sourceColumn" + ] + }, + "Target column": { + "kind": "plain", + "context": null, + "message": "Target column", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.targetColumn" + ] + }, + "Sample values": { + "kind": "plain", + "context": null, + "message": "Sample values", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.sample" + ] + }, + "Mixed types detected, defaulted to TEXT": { + "kind": "plain", + "context": null, + "message": "Mixed types detected, defaulted to TEXT", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.lowConfidence" + ] + }, + "Choose target...": { + "kind": "plain", + "context": null, + "message": "Choose target...", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.targetColumnPlaceholder" + ] + }, + "Skip (do not import)": { + "kind": "plain", + "context": null, + "message": "Skip (do not import)", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.skipColumn" + ] + }, + "Create new column": { + "kind": "plain", + "context": null, + "message": "Create new column", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.createNewColumn" + ] + }, + "Delete column": { + "kind": "plain", + "context": null, + "message": "Delete column", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.deleteColumn" + ] + }, + "e.g. sales_data": { + "kind": "plain", + "context": null, + "message": "e.g. sales_data", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.tableNamePlaceholder" + ] + }, + "AI Suggest": { + "kind": "plain", + "context": null, + "message": "AI Suggest", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.aiSuggest" + ] + }, + "Are you sure you want to import \"{file}\"?\nThis may overwrite existing data.": { + "kind": "interp", + "context": null, + "message": "Are you sure you want to import \"{file}\"?\nThis may overwrite existing data.", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.confirmImport" + ] + }, + "Run SQL File...": { + "kind": "plain", + "context": null, + "message": "Run SQL File...", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.importDatabase" + ] + }, + "Explorer": { + "kind": "plain", + "context": null, + "message": "Explorer", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.explorer" + ] + }, + "Structure": { + "kind": "plain", + "context": null, + "message": "Structure", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.structure" + ] + }, + "Favorites": { + "kind": "plain", + "context": null, + "message": "Favorites", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.favorites" + ] + }, + "History": { + "kind": "plain", + "context": null, + "message": "History", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.queryHistory" + ] + }, + "Notebooks": { + "kind": "plain", + "context": null, + "message": "Notebooks", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.notebooks.tab" + ] + }, + "No saved queries": { + "kind": "plain", + "context": null, + "message": "No saved queries", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.noSavedQueries" + ] + }, + "Search favorites...": { + "kind": "plain", + "context": null, + "message": "Search favorites...", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.searchFavorites" + ] + }, + "No favorites match your search": { + "kind": "plain", + "context": null, + "message": "No favorites match your search", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.noFavoritesSearchResults" + ] + }, + "Loading schema...": { + "kind": "plain", + "context": null, + "message": "Loading schema...", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.loadingSchema" + ] + }, + "Failed to load schemas": { + "kind": "plain", + "context": null, + "message": "Failed to load schemas", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.schemaLoadError" + ] + }, + "Details": { + "kind": "plain", + "context": null, + "message": "Details", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.errorDetails" + ] + }, + "Copy error message": { + "kind": "plain", + "context": null, + "message": "Copy error message", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.copyError" + ] + }, + "Try again\u0004sidebar": { + "kind": "harmful", + "context": "sidebar", + "message": "Try again", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.retry" + ] + }, + "Schemas": { + "kind": "plain", + "context": null, + "message": "Schemas", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.schemas" + ] + }, + "Select schemas to load:": { + "kind": "plain", + "context": null, + "message": "Select schemas to load:", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.selectSchemasHint" + ] + }, + "Confirm": { + "kind": "plain", + "context": null, + "message": "Confirm", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.confirmSelection" + ] + }, + "Edit Schemas": { + "kind": "plain", + "context": null, + "message": "Edit Schemas", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.editSchemas" + ] + }, + "Delete index \"{name}\"?": { + "kind": "interp", + "context": null, + "message": "Delete index \"{name}\"?", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.deleteIndexConfirm" + ] + }, + "Delete Index": { + "kind": "plain", + "context": null, + "message": "Delete Index", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.deleteIndex" + ] + }, + "Failed to delete index: ": { + "kind": "plain", + "context": null, + "message": "Failed to delete index: ", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.failDeleteIndex" + ] + }, + "Delete foreign key \"{name}\"?": { + "kind": "interp", + "context": null, + "message": "Delete foreign key \"{name}\"?", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.deleteFkConfirm" + ] + }, + "Delete FK": { + "kind": "plain", + "context": null, + "message": "Delete FK", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.deleteFk" + ] + }, + "Manage Databases": { + "kind": "plain", + "context": null, + "message": "Manage Databases", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.manageDatabases" + ] + }, + "Filter databases...": { + "kind": "plain", + "context": null, + "message": "Filter databases...", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.filterDatabases" + ] + }, + "Objects": { + "kind": "plain", + "context": null, + "message": "Objects", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.objectSummary" + ] + }, + "Tables": { + "kind": "plain", + "context": null, + "message": "Tables", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.tables" + ] + }, + "Refresh Tables": { + "kind": "plain", + "context": null, + "message": "Refresh Tables", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.refreshTables" + ] + }, + "Filter tables...": { + "kind": "plain", + "context": null, + "message": "Filter tables...", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.filterTables" + ] + }, + "No tables match": { + "kind": "plain", + "context": null, + "message": "No tables match", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.noTablesMatch" + ] + }, + "No tables found": { + "kind": "plain", + "context": null, + "message": "No tables found", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.noTables" + ] + }, + "Views": { + "kind": "plain", + "context": null, + "message": "Views", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.views" + ] + }, + "Refresh Views": { + "kind": "plain", + "context": null, + "message": "Refresh Views", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.refreshViews" + ] + }, + "Create New View": { + "kind": "plain", + "context": null, + "message": "Create New View", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.createView" + ] + }, + "No views found": { + "kind": "plain", + "context": null, + "message": "No views found", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.noViews" + ] + }, + "Triggers": { + "kind": "plain", + "context": null, + "message": "Triggers", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.triggers" + ] + }, + "Refresh Triggers": { + "kind": "plain", + "context": null, + "message": "Refresh Triggers", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.refreshTriggers" + ] + }, + "Create New Trigger": { + "kind": "plain", + "context": null, + "message": "Create New Trigger", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.createTrigger" + ] + }, + "Filter triggers...": { + "kind": "plain", + "context": null, + "message": "Filter triggers...", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.filterTriggers" + ] + }, + "No triggers match your filter": { + "kind": "plain", + "context": null, + "message": "No triggers match your filter", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.noTriggersMatch" + ] + }, + "No triggers found": { + "kind": "plain", + "context": null, + "message": "No triggers found", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.noTriggers" + ] + }, + "Routines": { + "kind": "plain", + "context": null, + "message": "Routines", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.routines" + ] + }, + "Refresh Routines": { + "kind": "plain", + "context": null, + "message": "Refresh Routines", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.refreshRoutines" + ] + }, + "No routines found": { + "kind": "plain", + "context": null, + "message": "No routines found", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.noRoutines" + ] + }, + "Functions": { + "kind": "plain", + "context": null, + "message": "Functions", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.functions" + ] + }, + "Procedures": { + "kind": "plain", + "context": null, + "message": "Procedures", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.procedures" + ] + }, + "Show Data": { + "kind": "plain", + "context": null, + "message": "Show Data", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.showData" + ] + }, + "Count Rows": { + "kind": "plain", + "context": null, + "message": "Count Rows", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.countRows" + ] + }, + "View Schema": { + "kind": "plain", + "context": null, + "message": "View Schema", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.viewSchema" + ] + }, + "View ER Diagram": { + "kind": "plain", + "context": null, + "message": "View ER Diagram", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.viewERDiagram" + ] + }, + "Generate SQL\u0004sidebar": { + "kind": "harmful", + "context": "sidebar", + "message": "Generate SQL", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.generateSQL" + ] + }, + "Import from Clipboard...": { + "kind": "plain", + "context": null, + "message": "Import from Clipboard...", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.contextMenuLabel" + ] + }, + "Copy Name": { + "kind": "plain", + "context": null, + "message": "Copy Name", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.copyName" + ] + }, + "Add Column\u0004sidebar": { + "kind": "harmful", + "context": "sidebar", + "message": "Add Column", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.addColumn" + ] + }, + "Delete Table": { + "kind": "plain", + "context": null, + "message": "Delete Table", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.deleteTable" + ] + }, + "Are you sure you want to delete table \"{table}\"?": { + "kind": "interp", + "context": null, + "message": "Are you sure you want to delete table \"{table}\"?", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.deleteTableConfirm" + ] + }, + "Failed to delete table: ": { + "kind": "plain", + "context": null, + "message": "Failed to delete table: ", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.failDeleteTable" + ] + }, + "Add Index": { + "kind": "plain", + "context": null, + "message": "Add Index", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.addIndex" + ] + }, + "Add Foreign Key": { + "kind": "plain", + "context": null, + "message": "Add Foreign Key", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.addFk" + ] + }, + "Drop View": { + "kind": "plain", + "context": null, + "message": "Drop View", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.dropView" + ] + }, + "Are you sure you want to drop view \"{view}\"?": { + "kind": "interp", + "context": null, + "message": "Are you sure you want to drop view \"{view}\"?", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.dropViewConfirm" + ] + }, + "Failed to drop view: ": { + "kind": "plain", + "context": null, + "message": "Failed to drop view: ", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.failDropView" + ] + }, + "View Definition\u0004sidebar": { + "kind": "harmful", + "context": "sidebar", + "message": "View Definition", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.viewDefinition", + "sidebar.viewTriggerDefinition" + ] + }, + "Drop Trigger": { + "kind": "plain", + "context": null, + "message": "Drop Trigger", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.dropTrigger" + ] + }, + "Are you sure you want to drop trigger \"{trigger}\"?": { + "kind": "interp", + "context": null, + "message": "Are you sure you want to drop trigger \"{trigger}\"?", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.dropTriggerConfirm" + ] + }, + "Failed to drop trigger: ": { + "kind": "plain", + "context": null, + "message": "Failed to drop trigger: ", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.failDropTrigger" + ] + }, + "Copy Query": { + "kind": "plain", + "context": null, + "message": "Copy Query", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.copyQuery" + ] + }, + "Insert to Editor": { + "kind": "plain", + "context": null, + "message": "Insert to Editor", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.insertToEditor" + ] + }, + "Run Query": { + "kind": "plain", + "context": null, + "message": "Run Query", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.runQuery" + ] + }, + "Open in New Tab": { + "kind": "plain", + "context": null, + "message": "Open in New Tab", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.openInNewTab" + ] + }, + "Add to Favorites": { + "kind": "plain", + "context": null, + "message": "Add to Favorites", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.addToFavorites" + ] + }, + "Delete\u0004sidebar": { + "kind": "harmful", + "context": "sidebar", + "message": "Delete", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.delete", + "sidebar.notebooks.delete" + ] + }, + "Clear All History": { + "kind": "plain", + "context": null, + "message": "Clear All History", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.clearAllHistory" + ] + }, + "Execute": { + "kind": "plain", + "context": null, + "message": "Execute", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.execute" + ] + }, + "Delete Query": { + "kind": "plain", + "context": null, + "message": "Delete Query", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.confirmDeleteTitle" + ] + }, + "Are you sure you want to delete query \"{name}\"?": { + "kind": "interp", + "context": null, + "message": "Are you sure you want to delete query \"{name}\"?", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.confirmDeleteQuery" + ] + }, + "Are you sure you want to delete this query from history?": { + "kind": "plain", + "context": null, + "message": "Are you sure you want to delete this query from history?", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.confirmDeleteHistoryEntry" + ] + }, + "Clear Query History": { + "kind": "plain", + "context": null, + "message": "Clear Query History", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.confirmClearHistoryTitle" + ] + }, + "Are you sure you want to clear all query history for this connection?": { + "kind": "plain", + "context": null, + "message": "Are you sure you want to clear all query history for this connection?", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.confirmClearHistory" + ] + }, + "MCP Server": { + "kind": "plain", + "context": null, + "message": "MCP Server", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.mcpServer" + ] + }, + "Settings": { + "kind": "plain", + "context": null, + "message": "Settings", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.settings" + ] + }, + "Expand Explorer": { + "kind": "plain", + "context": null, + "message": "Expand Explorer", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.expandExplorer" + ] + }, + "Close panel": { + "kind": "plain", + "context": null, + "message": "Close panel", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.closePanel" + ] + }, + "connection": { + "kind": "plain", + "context": null, + "message": "connection", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.connection" + ] + }, + "connections": { + "kind": "plain", + "context": null, + "message": "connections", + "stem": null, + "forms": null, + "originalKeys": [ + "groups.connections" + ] + }, + "Separate Connections": { + "kind": "plain", + "context": null, + "message": "Separate Connections", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.separateConnections" + ] + }, + "Split Group": { + "kind": "plain", + "context": null, + "message": "Split Group", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.splitGroup" + ] + }, + "Dismiss\u0004discordCallout": { + "kind": "harmful", + "context": "discordCallout", + "message": "Dismiss", + "stem": null, + "forms": null, + "originalKeys": [ + "discordCallout.dismiss" + ] + }, + "Brand-new Discord community!": { + "kind": "plain", + "context": null, + "message": "Brand-new Discord community!", + "stem": null, + "forms": null, + "originalKeys": [ + "discordCallout.title" + ] + }, + "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap.": { + "kind": "plain", + "context": null, + "message": "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap.", + "stem": null, + "forms": null, + "originalKeys": [ + "discordCallout.body" + ] + }, + "Join now": { + "kind": "plain", + "context": null, + "message": "Join now", + "stem": null, + "forms": null, + "originalKeys": [ + "discordCallout.cta" + ] + }, + "Search notebooks": { + "kind": "plain", + "context": null, + "message": "Search notebooks", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.notebooks.search" + ] + }, + "No saved notebooks yet.": { + "kind": "plain", + "context": null, + "message": "No saved notebooks yet.", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.notebooks.empty" + ] + }, + "No notebooks match your search.": { + "kind": "plain", + "context": null, + "message": "No notebooks match your search.", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.notebooks.noSearchResults" + ] + }, + "Notebook name": { + "kind": "plain", + "context": null, + "message": "Notebook name", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.notebooks.renamePlaceholder" + ] + }, + "Delete notebook \"{title}\"? This cannot be undone.": { + "kind": "interp", + "context": null, + "message": "Delete notebook \"{title}\"? This cannot be undone.", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.notebooks.deleteConfirm" + ] + }, + "Split Vertical": { + "kind": "plain", + "context": null, + "message": "Split Vertical", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.splitVertical" + ] + }, + "Split Horizontal": { + "kind": "plain", + "context": null, + "message": "Split Horizontal", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.splitHorizontal" + ] + }, + "Open in Editor": { + "kind": "plain", + "context": null, + "message": "Open in Editor", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.openInEditor" + ] + }, + "Set as Active": { + "kind": "plain", + "context": null, + "message": "Set as Active", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.setAsActive" + ] + }, + "Disconnect": { + "kind": "plain", + "context": null, + "message": "Disconnect", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.disconnect" + ] + }, + "Query history was reset": { + "kind": "plain", + "context": null, + "message": "Query history was reset", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.historyRecoveredTitle" + ] + }, + "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:": { + "kind": "plain", + "context": null, + "message": "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.historyRecoveredBody" + ] + }, + "Dismiss\u0004sidebar": { + "kind": "harmful", + "context": "sidebar", + "message": "Dismiss", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.historyRecoveredDismiss" + ] + }, + "No query history": { + "kind": "plain", + "context": null, + "message": "No query history", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.noQueryHistory" + ] + }, + "Search history...": { + "kind": "plain", + "context": null, + "message": "Search history...", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.searchHistory" + ] + }, + "No queries match your search": { + "kind": "plain", + "context": null, + "message": "No queries match your search", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.noHistorySearchResults" + ] + }, + "Are you sure you want to delete column \"{column}\" from table \"{table}\"?\n\nWARNING: This will permanently delete all data in this column. This action cannot be undone.": { + "kind": "interp", + "context": null, + "message": "Are you sure you want to delete column \"{column}\" from table \"{table}\"?\n\nWARNING: This will permanently delete all data in this column. This action cannot be undone.", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.deleteColumnConfirm" + ] + }, + "Delete Column": { + "kind": "plain", + "context": null, + "message": "Delete Column", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.deleteColumn" + ] + }, + "Failed to delete column: ": { + "kind": "plain", + "context": null, + "message": "Failed to delete column: ", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.failDeleteColumn" + ] + }, + "Modify Column\u0004sidebar": { + "kind": "harmful", + "context": "sidebar", + "message": "Modify Column", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.modifyColumn" + ] + }, + "keys": { + "kind": "plain", + "context": null, + "message": "keys", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.keys" + ] + }, + "foreign keys": { + "kind": "plain", + "context": null, + "message": "foreign keys", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.foreignKeys" + ] + }, + "indexes": { + "kind": "plain", + "context": null, + "message": "indexes", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.indexes" + ] + }, + "on {table}": { + "kind": "interp", + "context": null, + "message": "on {table}", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.onTable" + ] + }, + "Running EXPLAIN...": { + "kind": "plain", + "context": null, + "message": "Running EXPLAIN...", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.loading" + ] + }, + "Connect": { + "kind": "plain", + "context": null, + "message": "Connect", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.connect" + ] + }, + "Plugin disabled": { + "kind": "plain", + "context": null, + "message": "Plugin disabled", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.pluginDisabled" + ] + }, + "Clone": { + "kind": "plain", + "context": null, + "message": "Clone", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.clone" + ] + }, + "Delete\u0004connections": { + "kind": "harmful", + "context": "connections", + "message": "Delete", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.delete" + ] + }, + "Active": { + "kind": "plain", + "context": null, + "message": "Active", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.active" + ] + }, + "Open\u0004connections": { + "kind": "harmful", + "context": "connections", + "message": "Open", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.open" + ] + }, + "stopped": { + "kind": "registry", + "context": null, + "message": "stopped", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.status.stopped" + ] + }, + "unknown": { + "kind": "registry", + "context": null, + "message": "unknown", + "stem": null, + "forms": null, + "originalKeys": [ + "taskManager.pluginProcesses.status.unknown" + ] + }, + "Select": { + "kind": "registry", + "context": null, + "message": "Select", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.queryKind.select" + ] + }, + "Write": { + "kind": "registry", + "context": null, + "message": "Write", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.queryKind.write" + ] + }, + "DDL": { + "kind": "registry", + "context": null, + "message": "DDL", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.queryKind.ddl" + ] + }, + "Unknown": { + "kind": "registry", + "context": null, + "message": "Unknown", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.queryKind.unknown" + ] + }, + "Success": { + "kind": "registry", + "context": null, + "message": "Success", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.status.success" + ] + }, + "Pending approval": { + "kind": "registry", + "context": null, + "message": "Pending approval", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.status.blocked_pending_approval" + ] + }, + "Error": { + "kind": "registry", + "context": null, + "message": "Error", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.status.error" + ] + }, + "Timeout": { + "kind": "registry", + "context": null, + "message": "Timeout", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.status.timeout" + ] + }, + "Initial version": { + "kind": "registry", + "context": null, + "message": "Initial version", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.initial" + ] + }, + "Edited cell {n}": { + "kind": "registry", + "context": null, + "message": "Edited cell {n}", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.editCell" + ] + }, + "Added SQL cell {n}": { + "kind": "registry", + "context": null, + "message": "Added SQL cell {n}", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.addSql" + ] + }, + "Added Markdown cell {n}": { + "kind": "registry", + "context": null, + "message": "Added Markdown cell {n}", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.addMarkdown" + ] + }, + "Deleted cell {n}": { + "kind": "registry", + "context": null, + "message": "Deleted cell {n}", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.deleteCell" + ] + }, + "Reordered cells": { + "kind": "registry", + "context": null, + "message": "Reordered cells", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.reorder" + ] + }, + "Renamed cell {n}": { + "kind": "registry", + "context": null, + "message": "Renamed cell {n}", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.renameCell" + ] + }, + "Changed database (cell {n})": { + "kind": "registry", + "context": null, + "message": "Changed database (cell {n})", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.schemaCell" + ] + }, + "Changed chart (cell {n})": { + "kind": "registry", + "context": null, + "message": "Changed chart (cell {n})", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.chartCell" + ] + }, + "Toggled parallel (cell {n})": { + "kind": "registry", + "context": null, + "message": "Toggled parallel (cell {n})", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.parallelCell" + ] + }, + "Collapsed/expanded cells": { + "kind": "registry", + "context": null, + "message": "Collapsed/expanded cells", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.collapse" + ] + }, + "Changed parameters": { + "kind": "registry", + "context": null, + "message": "Changed parameters", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.params" + ] + }, + "Toggled stop on error": { + "kind": "registry", + "context": null, + "message": "Toggled stop on error", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.stopOnError" + ] + }, + "Edited notebook": { + "kind": "registry", + "context": null, + "message": "Edited notebook", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.history.change.other" + ] + }, + "table": { + "kind": "registry", + "context": null, + "message": "table", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.type_table" + ] + }, + "view": { + "kind": "registry", + "context": null, + "message": "view", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.type_view" + ] + }, + "routine": { + "kind": "registry", + "context": null, + "message": "routine", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.type_routine" + ] + }, + "trigger": { + "kind": "registry", + "context": null, + "message": "trigger", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.type_trigger" + ] + }, + "Frontend Dependencies": { + "kind": "registry", + "context": null, + "message": "Frontend Dependencies", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibrariesSections.npm-runtime" + ] + }, + "Frontend Dev Dependencies": { + "kind": "registry", + "context": null, + "message": "Frontend Dev Dependencies", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibrariesSections.npm-tooling" + ] + }, + "Rust Dependencies": { + "kind": "registry", + "context": null, + "message": "Rust Dependencies", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibrariesSections.cargo-runtime" + ] + }, + "Rust Build and Test": { + "kind": "registry", + "context": null, + "message": "Rust Build and Test", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibrariesSections.cargo-tooling" + ] + }, + "npm ecosystem": { + "kind": "registry", + "context": null, + "message": "npm ecosystem", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibrariesEcosystem.npm" + ] + }, + "Cargo ecosystem": { + "kind": "registry", + "context": null, + "message": "Cargo ecosystem", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.openSourceLibrariesEcosystem.cargo" + ] + }, + "Default": { + "kind": "registry", + "context": null, + "message": "Default", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.tabs.default" + ] + }, + "Emoji": { + "kind": "registry", + "context": null, + "message": "Emoji", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.tabs.emoji" + ] + }, + "Image": { + "kind": "registry", + "context": null, + "message": "Image", + "stem": null, + "forms": null, + "originalKeys": [ + "connectionAppearance.tabs.image" + ] + }, + "Editor": { + "kind": "registry", + "context": null, + "message": "Editor", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.categories.editor" + ] + }, + "Navigation": { + "kind": "registry", + "context": null, + "message": "Navigation", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.categories.navigation" + ] + }, + "Data Grid": { + "kind": "registry", + "context": null, + "message": "Data Grid", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.categories.data_grid" + ] + }, + "Today": { + "kind": "registry", + "context": null, + "message": "Today", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.dateGroupToday" + ] + }, + "Yesterday": { + "kind": "registry", + "context": null, + "message": "Yesterday", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.dateGroupYesterday" + ] + }, + "This Week": { + "kind": "registry", + "context": null, + "message": "This Week", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.dateGroupThisWeek" + ] + }, + "This Month": { + "kind": "registry", + "context": null, + "message": "This Month", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.dateGroupThisMonth" + ] + }, + "Older": { + "kind": "registry", + "context": null, + "message": "Older", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.dateGroupOlder" + ] + }, + "SQL Generation": { + "kind": "registry", + "context": null, + "message": "SQL Generation", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.systemPrompt" + ] + }, + "Query Explanation": { + "kind": "registry", + "context": null, + "message": "Query Explanation", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.explainPrompt" + ] + }, + "Notebook Cell Name Prompt": { + "kind": "registry", + "context": null, + "message": "Notebook Cell Name Prompt", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.cellnamePrompt" + ] + }, + "Query Tab Name Prompt": { + "kind": "registry", + "context": null, + "message": "Query Tab Name Prompt", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.tabrenamePrompt" + ] + }, + "Explain Plan Analysis Prompt": { + "kind": "registry", + "context": null, + "message": "Explain Plan Analysis Prompt", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.explainplanPrompt" + ] + }, + "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure.": { + "kind": "registry", + "context": null, + "message": "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.systemPromptDesc" + ] + }, + "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language.": { + "kind": "registry", + "context": null, + "message": "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.explainPromptDesc" + ] + }, + "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message.": { + "kind": "registry", + "context": null, + "message": "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.cellnamePromptDesc" + ] + }, + "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message.": { + "kind": "registry", + "context": null, + "message": "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.tabrenamePromptDesc" + ] + }, + "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language.": { + "kind": "registry", + "context": null, + "message": "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.explainplanPromptDesc" + ] + }, + "Enter system prompt...": { + "kind": "registry", + "context": null, + "message": "Enter system prompt...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.enterSystemPrompt" + ] + }, + "Enter explain prompt...": { + "kind": "registry", + "context": null, + "message": "Enter explain prompt...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.enterExplainPrompt" + ] + }, + "Enter notebook cell name prompt...": { + "kind": "registry", + "context": null, + "message": "Enter notebook cell name prompt...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.enterCellnamePrompt" + ] + }, + "Enter query tab name prompt...": { + "kind": "registry", + "context": null, + "message": "Enter query tab name prompt...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.enterTabrenamePrompt" + ] + }, + "Enter explain plan analysis prompt...": { + "kind": "registry", + "context": null, + "message": "Enter explain plan analysis prompt...", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.enterExplainplanPrompt" + ] + }, + "Max Allowed Packet": { + "kind": "registry", + "context": null, + "message": "Max Allowed Packet", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.builtin.mysql.maxAllowedPacket.label" + ] + }, + "Maximum packet size used by the MySQL connector.": { + "kind": "registry", + "context": null, + "message": "Maximum packet size used by the MySQL connector.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.builtin.mysql.maxAllowedPacket.description" + ] + }, + "Socket Timeout": { + "kind": "registry", + "context": null, + "message": "Socket Timeout", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.builtin.mysql.socketTimeout.label" + ] + }, + "Socket timeout in milliseconds.": { + "kind": "registry", + "context": null, + "message": "Socket timeout in milliseconds.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.builtin.mysql.socketTimeout.description" + ] + }, + "Connect Timeout": { + "kind": "registry", + "context": null, + "message": "Connect Timeout", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.builtin.mysql.connectTimeout.label" + ] + }, + "Connection timeout in milliseconds.": { + "kind": "registry", + "context": null, + "message": "Connection timeout in milliseconds.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.builtin.mysql.connectTimeout.description" + ] + }, + "Session timezone sent to MySQL after connect.": { + "kind": "registry", + "context": null, + "message": "Session timezone sent to MySQL after connect.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.pluginSettings.builtin.mysql.timezone.description" + ] + }, + "Connection name is required": { + "kind": "registry", + "context": null, + "message": "Connection name is required", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.errors.nameRequired" + ] + }, + "Kubernetes context is required": { + "kind": "registry", + "context": null, + "message": "Kubernetes context is required", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.errors.contextRequired" + ] + }, + "Namespace is required": { + "kind": "registry", + "context": null, + "message": "Namespace is required", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.errors.namespaceRequired" + ] + }, + "Resource type must be \"service\" or \"pod\"": { + "kind": "registry", + "context": null, + "message": "Resource type must be \"service\" or \"pod\"", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.errors.resourceTypeInvalid" + ] + }, + "Resource name is required": { + "kind": "registry", + "context": null, + "message": "Resource name is required", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.errors.resourceNameRequired" + ] + }, + "Port must be between 1 and 65535": { + "kind": "registry", + "context": null, + "message": "Port must be between 1 and 65535", + "stem": null, + "forms": null, + "originalKeys": [ + "k8sConnections.errors.portInvalid" + ] + }, + "Run query": { + "kind": "registry", + "context": null, + "message": "Run query", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.runQuery" + ] + }, + "Run query (in editor)": { + "kind": "registry", + "context": null, + "message": "Run query (in editor)", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.runQueryEditor" + ] + }, + "New tab": { + "kind": "registry", + "context": null, + "message": "New tab", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.newTab" + ] + }, + "Next page": { + "kind": "registry", + "context": null, + "message": "Next page", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.nextPage" + ] + }, + "Previous page": { + "kind": "registry", + "context": null, + "message": "Previous page", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.prevPage" + ] + }, + "Switch tab": { + "kind": "registry", + "context": null, + "message": "Switch tab", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.tabSwitcher" + ] + }, + "Copy selection": { + "kind": "registry", + "context": null, + "message": "Copy selection", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.copySelection" + ] + }, + "Toggle sidebar": { + "kind": "registry", + "context": null, + "message": "Toggle sidebar", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.toggleSidebar" + ] + }, + "Open connections": { + "kind": "registry", + "context": null, + "message": "Open connections", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.openConnections" + ] + }, + "New connection": { + "kind": "registry", + "context": null, + "message": "New connection", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.newConnection" + ] + }, + "Switch to connection 1–9": { + "kind": "registry", + "context": null, + "message": "Switch to connection 1–9", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.switchConnection" + ] + }, + "Import from Clipboard": { + "kind": "registry", + "context": null, + "message": "Import from Clipboard", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.pasteImportClipboard" + ] + }, + "Run All Cells": { + "kind": "registry", + "context": null, + "message": "Run All Cells", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.notebookRunAll" + ] + }, + "Quick Navigator": { + "kind": "registry", + "context": null, + "message": "Quick Navigator", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.shortcuts.quickNavigator" + ] + }, + "General": { + "kind": "registry", + "context": null, + "message": "General", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.general" + ] + }, + "Plugins": { + "kind": "registry", + "context": null, + "message": "Plugins", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.title" + ] + }, + "Appearance": { + "kind": "registry", + "context": null, + "message": "Appearance", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.appearance" + ] + }, + "AI": { + "kind": "registry", + "context": null, + "message": "AI", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.tab" + ] + }, + "Events": { + "kind": "registry", + "context": null, + "message": "Events", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.tabs.events" + ] + }, + "Sessions": { + "kind": "registry", + "context": null, + "message": "Sessions", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.tabs.sessions" + ] + }, + "Create Table": { + "kind": "registry", + "context": null, + "message": "Create Table", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.tabCreateTable" + ] + }, + "Select *": { + "kind": "registry", + "context": null, + "message": "Select *", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.tabSelectAll" + ] + }, + "Select [fields]": { + "kind": "registry", + "context": null, + "message": "Select [fields]", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.tabSelectFields" + ] + }, + "Update": { + "kind": "registry", + "context": null, + "message": "Update", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.tabUpdate" + ] + }, + "Delete": { + "kind": "registry", + "context": null, + "message": "Delete", + "stem": null, + "forms": null, + "originalKeys": [ + "generateSQL.tabDelete" + ] + }, + "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.": { + "kind": "registry", + "context": null, + "message": "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.postgresAnalyzeLegend1" + ] + }, + "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well.": { + "kind": "registry", + "context": null, + "message": "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.postgresAnalyzeLegend2" + ] + }, + "PostgreSQL without ANALYZE shows planner estimates only.": { + "kind": "registry", + "context": null, + "message": "PostgreSQL without ANALYZE shows planner estimates only.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.postgresEstimateLegend1" + ] + }, + "Enable ANALYZE to inspect actual rows, timing, loops, and buffers.": { + "kind": "registry", + "context": null, + "message": "Enable ANALYZE to inspect actual rows, timing, loops, and buffers.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.postgresEstimateLegend2" + ] + }, + "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants.": { + "kind": "registry", + "context": null, + "message": "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.mysqlAnalyzeLegend1" + ] + }, + "Older servers may fall back to estimated plans with fewer metrics.": { + "kind": "registry", + "context": null, + "message": "Older servers may fall back to estimated plans with fewer metrics.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.mysqlAnalyzeLegend2" + ] + }, + "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version.": { + "kind": "registry", + "context": null, + "message": "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.mysqlEstimateLegend1" + ] + }, + "If timing is missing, the server likely returned an estimate-only plan.": { + "kind": "registry", + "context": null, + "message": "If timing is missing, the server likely returned an estimate-only plan.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.mysqlEstimateLegend2" + ] + }, + "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.": { + "kind": "registry", + "context": null, + "message": "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.sqliteLegend1" + ] + }, + "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL.": { + "kind": "registry", + "context": null, + "message": "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL.", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.sqliteLegend2" + ] + }, + "Expand Cell": { + "kind": "registry", + "context": null, + "message": "Expand Cell", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.expandCell" + ] + }, + "Collapse Cell": { + "kind": "registry", + "context": null, + "message": "Collapse Cell", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.collapseCell" + ] + }, + "Minimize": { + "kind": "registry", + "context": null, + "message": "Minimize", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.minimize" + ] + }, + "Maximize": { + "kind": "registry", + "context": null, + "message": "Maximize", + "stem": null, + "forms": null, + "originalKeys": [ + "clipboardImport.maximize" + ] + }, + "Actions": { + "kind": "registry", + "context": null, + "message": "Actions", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.actions" + ] + }, + "Model <0>{0} not found in <1>{1}. It may not work correctly.": { + "kind": "registry", + "context": null, + "message": "Model <0>{0} not found in <1>{1}. It may not work correctly.", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.ai.modelNotFound" + ] + }, + "Please select at least Structure or Data": { + "kind": "registry", + "context": null, + "message": "Please select at least Structure or Data", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.errorNoOption" + ] + }, + "Please select at least one table": { + "kind": "registry", + "context": null, + "message": "Please select at least one table", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.errorNoTables" ] } } diff --git a/scripts/i18n/review-needed.txt b/scripts/i18n/review-needed.txt index eee6b209..3983953d 100644 --- a/scripts/i18n/review-needed.txt +++ b/scripts/i18n/review-needed.txt @@ -1 +1,40 @@ -input.tsx:12 non-literal t() key t(dynamicKey) +src/pages/Settings.tsx:180 non-literal t() key t(labelKey) +src/pages/TaskManagerPage.tsx:379 non-literal t() key t(`taskManager.pluginProcesses.status.${proc.status}`, proc.status) +src/components/settings/AiActivityPanel.tsx:47 non-literal t() key t(labelKey) +src/components/settings/AiTab.tsx:602 non-literal t() key t(`settings.ai.${type}Prompt`) +src/components/settings/AiTab.tsx:605 non-literal t() key t(`settings.ai.${type}PromptDesc`) +src/components/settings/AiTab.tsx:623 non-literal t() key t( + `settings.ai.enter${type === "system" ? "System" : ty +src/components/settings/PluginSettingsPage.tsx:77 non-literal t() key t( + `settings.plugins.pluginSettings.builtin.${pluginId}.${def.key}.label +src/components/settings/PluginSettingsPage.tsx:87 non-literal t() key t( + `settings.plugins.pluginSettings.builtin.${pluginId}.${def.key}.d +src/components/settings/ShortcutsTab.tsx:144 non-literal t() key t(s.i18nKey as Parameters[0]) +src/components/settings/ShortcutsTab.tsx:212 non-literal t() key t( + `settings.shortcuts.categories.${cat}` as Parameters[0]) +src/components/settings/ai-activity/QueryKindBadge.tsx:13 non-literal t() key t(`aiActivity.queryKind.${kind}`, { defaultValue: kind }) +src/components/settings/ai-activity/StatusBadge.tsx:12 non-literal t() key t(`aiActivity.status.${status}`, { defaultValue: status }) +src/components/notebook/NotebookCellHeader.tsx:162 non-literal t() key t(isCollapsed ? "editor.notebook.expandCell" : "editor.notebook.collapseCell") +src/components/notebook/NotebookHistoryPanel.tsx:42 non-literal t() key t(`editor.notebook.history.change.${d.kind}`, { n: d.n ?? 0 }) +src/components/modals/DumpDatabaseModal.tsx:79 non-literal t() key t(validation.errorKey) +src/components/modals/GenerateSQLModal.tsx:207 non-literal t() key t(labelKey) +src/components/modals/K8sConnectionsModal.tsx:211 non-literal t() key t(validation.errorKey) +src/components/modals/OpenSourceLibrariesModal.tsx:67 non-literal t() key t(`settings.openSourceLibrariesSections.${section.id}`) +src/components/modals/OpenSourceLibrariesModal.tsx:70 non-literal t() key t( + `settings.openSourceLibrariesEcosystem.${section.ecos +src/components/modals/PluginSettingsModal.tsx:42 non-literal t() key t( + `settings.plugins.pluginSettings.builtin.${pluginId}.${def.key}.label +src/components/modals/PluginSettingsModal.tsx:52 non-literal t() key t( + `settings.plugins.pluginSettings.builtin.${pluginId}.${def.key}.d +src/components/modals/QuickNavigatorModal.tsx:490 non-literal t() key t(`editor.quickNavigator.type_${item.type}`) +src/components/modals/visual-explain/ExplainOverviewBar.tsx:67 non-literal t() key t( + summary.largestRowMismatchNode.ratio >= 1 + ? "editor.visualE +src/components/modals/visual-explain/ExplainOverviewBar.tsx:190 non-literal t() key t(entry) +src/components/modals/NewConnectionModal/AppearanceSection.tsx:280 non-literal t() key t(`connectionAppearance.tabs.${k}`) +src/components/modals/ClipboardImport/DataPreview.tsx:35 non-literal t() key t(isMaximized ? 'clipboardImport.minimize' : 'clipboardImport.maximize') +src/components/modals/ClipboardImport/SchemaEditor.tsx:134 non-literal t() key t(isMaximized ? 'clipboardImport.minimize' : 'clipboardImport.maximize') +src/components/layout/ExplorerSidebar.tsx:523 key not in en t("sidebar.actions") +src/components/layout/ExplorerSidebar.tsx:705 non-literal t() key t(`sidebar.${groupKey}`) +src/components/layout/sidebar/QueryHistorySection.tsx:151 non-literal t() key t(`sidebar.${groupKey}`) diff --git a/src/components/ConnectionHealthMonitor.tsx b/src/components/ConnectionHealthMonitor.tsx index a897bdaf..c7d66ec9 100644 --- a/src/components/ConnectionHealthMonitor.tsx +++ b/src/components/ConnectionHealthMonitor.tsx @@ -1,6 +1,6 @@ import { useEffect, useCallback } from "react"; import { listen } from "@tauri-apps/api/event"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { useNavigate } from "react-router-dom"; import { useAlert } from "../hooks/useAlert"; @@ -10,7 +10,7 @@ import { useAlert } from "../hooks/useAlert"; */ export function ConnectionHealthMonitor() { const { showAlert } = useAlert(); - const { t } = useTranslation(); + const { t } = useLingui(); const navigate = useNavigate(); const goToConnections = useCallback(() => { @@ -23,10 +23,10 @@ export function ConnectionHealthMonitor() { (event) => { const { error } = event.payload; showAlert( - `${t("healthCheck.connectionLost")}: ${error}`, + `${t`A database connection was lost`}: ${error}`, { kind: "error", - title: t("healthCheck.title"), + title: t`Connection Lost`, onClose: goToConnections, }, ); diff --git a/src/components/connections/ActionButtons.tsx b/src/components/connections/ActionButtons.tsx index 9933cb05..071706dd 100644 --- a/src/components/connections/ActionButtons.tsx +++ b/src/components/connections/ActionButtons.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { Power, Edit, Copy, Trash2 } from 'lucide-react'; import type { SavedConnection } from '../../contexts/DatabaseContext'; @@ -16,14 +16,14 @@ export interface ActionButtonsProps { export const ActionButtons = ({ isOpen, isDriverEnabled, onConnect, onDisconnect, onEdit, onDuplicate, onDelete, }: ActionButtonsProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); return ( <> {isOpen ? ( @@ -32,7 +32,7 @@ export const ActionButtons = ({ onClick={e => { e.stopPropagation(); if (isDriverEnabled) onConnect(); }} disabled={!isDriverEnabled} className="p-1.5 rounded-lg text-muted hover:text-green-400 hover:bg-green-400/10 disabled:opacity-40 disabled:cursor-not-allowed transition-colors" - title={isDriverEnabled ? t('connections.connect') : t('connections.pluginDisabled')} + title={isDriverEnabled ? t`Connect` : t`Plugin disabled`} > @@ -41,7 +41,7 @@ export const ActionButtons = ({ onClick={e => { e.stopPropagation(); if (isDriverEnabled) onEdit(); }} disabled={!isDriverEnabled} className="p-1.5 rounded-lg text-muted hover:text-blue-400 hover:bg-blue-400/10 disabled:opacity-40 disabled:cursor-not-allowed transition-colors" - title={t('connections.edit')} + title={t`Edit`} > @@ -49,14 +49,14 @@ export const ActionButtons = ({ onClick={e => { e.stopPropagation(); if (isDriverEnabled) onDuplicate(); }} disabled={!isDriverEnabled} className="p-1.5 rounded-lg text-muted hover:text-purple-400 hover:bg-purple-400/10 disabled:opacity-40 disabled:cursor-not-allowed transition-colors" - title={t('connections.clone')} + title={t`Clone`} > diff --git a/src/components/connections/ConnectionCard.tsx b/src/components/connections/ConnectionCard.tsx index aca259a6..5ab2d17c 100644 --- a/src/components/connections/ConnectionCard.tsx +++ b/src/components/connections/ConnectionCard.tsx @@ -1,6 +1,6 @@ import type { MouseEvent } from 'react'; import { Shield, PlugZap } from 'lucide-react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import clsx from 'clsx'; import type { SavedConnection } from '../../contexts/DatabaseContext'; import type { PluginManifest } from '../../types/plugins'; @@ -38,7 +38,7 @@ export const ConnectionCard = ({ onContextMenu, onMouseDown, }: ConnectionCardProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeConnectionId, isConnectionOpen } = useDatabase(); const isOpen = isConnectionOpen(conn.id); @@ -95,7 +95,7 @@ export const ConnectionCard = ({ )} {!isDriverEnabled && ( - {t('connections.pluginDisabled')} + {t`Plugin disabled`} )} diff --git a/src/components/connections/ConnectionListItem.tsx b/src/components/connections/ConnectionListItem.tsx index 664b6881..f873025e 100644 --- a/src/components/connections/ConnectionListItem.tsx +++ b/src/components/connections/ConnectionListItem.tsx @@ -1,6 +1,6 @@ import type { MouseEvent } from 'react'; import { Shield, PlugZap } from 'lucide-react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import clsx from 'clsx'; import type { SavedConnection } from '../../contexts/DatabaseContext'; import type { PluginManifest } from '../../types/plugins'; @@ -38,7 +38,7 @@ export const ConnectionListItem = ({ onContextMenu, onMouseDown, }: ConnectionListItemProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeConnectionId, isConnectionOpen } = useDatabase(); const isOpen = isConnectionOpen(conn.id); @@ -92,7 +92,7 @@ export const ConnectionListItem = ({ )} {!isDriverEnabled && ( - {t('connections.pluginDisabled')} + {t`Plugin disabled`} )} diff --git a/src/components/connections/StatusBadge.tsx b/src/components/connections/StatusBadge.tsx index 5f54f06d..ab989b8b 100644 --- a/src/components/connections/StatusBadge.tsx +++ b/src/components/connections/StatusBadge.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { Loader2 } from 'lucide-react'; export interface StatusBadgeProps { @@ -8,18 +8,18 @@ export interface StatusBadgeProps { } export const StatusBadge = ({ isActive, isOpen, isConnecting }: StatusBadgeProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); if (isConnecting) return ; if (isActive) return ( - {t('connections.active')} + {t`Active`} ); if (isOpen) return ( - {t('connections.open')} + {t({ message: "Open", context: "connections" })} ); return null; diff --git a/src/components/explain/VisualExplainView.tsx b/src/components/explain/VisualExplainView.tsx index da1e909d..7c206f5f 100644 --- a/src/components/explain/VisualExplainView.tsx +++ b/src/components/explain/VisualExplainView.tsx @@ -1,5 +1,5 @@ import { useCallback, useMemo } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Loader2 } from "lucide-react"; import MonacoEditor from "@monaco-editor/react"; import type * as monaco from "monaco-editor"; @@ -42,7 +42,7 @@ export const VisualExplainView = ({ onSelectNode, aiEnabled, }: VisualExplainViewProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const editorTheme = useEditorTheme(); const selectedNode = useMemo( @@ -82,7 +82,7 @@ export const VisualExplainView = ({
- {t("editor.visualExplain.loading")} + {t`Running EXPLAIN...`}
) : error ? ( diff --git a/src/components/layout/ExplorerSidebar.tsx b/src/components/layout/ExplorerSidebar.tsx index 63b29787..f0298393 100644 --- a/src/components/layout/ExplorerSidebar.tsx +++ b/src/components/layout/ExplorerSidebar.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useRef } from "react"; import { useNavigate } from "react-router-dom"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { quoteTableRef } from "../../utils/identifiers"; import { invoke } from "@tauri-apps/api/core"; import { @@ -79,6 +79,7 @@ import type { RoutineInfo, TriggerInfo } from "../../contexts/DatabaseContext"; import { groupRoutinesByType } from "../../utils/routines"; import { formatObjectCount } from "../../utils/schema"; import { groupByDate, formatHistoryTime } from "../../utils/dateGroups"; +import { sidebarDateGroups } from "../../i18n/registries/sidebarDateGroups"; import { SqlHighlight } from "../ui/SqlHighlight"; import { isMultiDatabaseCapable } from "../../utils/database"; import { supportsManageTables } from "../../utils/driverCapabilities"; @@ -100,7 +101,7 @@ interface ExplorerSidebarProps { } export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebarTab, onSidebarTabChange }: ExplorerSidebarProps) => { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const { settings } = useSettings(); const { activeConnectionId, @@ -394,7 +395,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar } catch (e) { console.error(e); showAlert( - t("sidebar.failGetRoutineDefinition") + String(e), + t`Failed to get routine definition: ` + String(e), { kind: "error" } ); } @@ -412,7 +413,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar } catch (e) { console.error(e); showAlert( - t("sidebar.failGetTriggerDefinition") + String(e), + t`Failed to get trigger definition: ` + String(e), { kind: "error" } ); } @@ -435,8 +436,9 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }); if (file && typeof file === "string") { const confirmed = await ask( - t("dump.confirmImport", { file: file.split(/[\\/]/).pop() }), - { title: t("dump.importDatabase"), kind: "warning" }, + t`Are you sure you want to import "${file}"? +This may overwrite existing data.`, + { title: t`Run SQL File...`, kind: "warning" }, ); if (!confirmed) return; setImportModal({ filePath: file, database: database ?? activeDatabaseName ?? "" }); @@ -506,7 +508,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar
- {t("sidebar.explorer")} + {t`Explorer`} {activeConnectionName && ( {activeConnectionName} )} @@ -519,7 +521,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar @@ -538,7 +540,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar className="w-full flex items-center gap-3 px-3 py-2 text-sm text-secondary hover:bg-surface-secondary hover:text-primary transition-colors text-left whitespace-nowrap" > - {t("dump.importDatabase")} + {t`Run SQL File...`} @@ -622,10 +624,10 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar {/* Tab bar */}
{([ - { id: "structure" as const, icon: Layers, label: t("sidebar.structure") }, - { id: "favorites" as const, icon: Star, label: t("sidebar.favorites"), count: queries.length }, - { id: "history" as const, icon: Clock, label: t("sidebar.queryHistory"), count: historyEntries.length }, - { id: "notebooks" as const, icon: BookOpen, label: t("sidebar.notebooks.tab"), count: notebookCount }, + { id: "structure" as const, icon: Layers, label: t`Structure` }, + { id: "favorites" as const, icon: Star, label: t`Favorites`, count: queries.length }, + { id: "history" as const, icon: Clock, label: t`History`, count: historyEntries.length }, + { id: "notebooks" as const, icon: BookOpen, label: t`Notebooks`, count: notebookCount }, ]).map((tab) => { const isActive = sidebarTab === tab.id; return ( @@ -669,7 +671,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar return queries.length === 0 ? (
- {t("sidebar.noSavedQueries")} + {t`No saved queries`}
) : (
@@ -683,7 +685,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar type="text" value={favoritesFilter} onChange={(e) => setFavoritesFilter(e.target.value)} - placeholder={t("sidebar.searchFavorites")} + placeholder={t`Search favorites...`} className="w-full pl-6 pr-2 py-1 text-xs bg-surface-secondary border border-default rounded text-primary placeholder:text-muted focus:outline-none focus:border-blue-500/50" />
@@ -695,13 +697,13 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar )} {groupedFavorites.length === 0 ? (
- {t("sidebar.noFavoritesSearchResults")} + {t`No favorites match your search`}
) : ( groupedFavorites.map(([groupKey, items]) => (
- {t(`sidebar.${groupKey}`)} + {i18n._(sidebarDateGroups[groupKey])}
{items.map((q) => (
- {t("sidebar.loadingSchema")} + {t`Loading schema...`}
) : ( <> @@ -789,14 +791,14 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar {schemaLoadError ? (
- {t("sidebar.schemaLoadError")} + {t`Failed to load schemas`} {schemaLoadError.split("\n\n")[0]} {schemaErrorExpanded && (
@@ -809,7 +811,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar setSchemaErrorCopied(true); setTimeout(() => setSchemaErrorCopied(false), 1500); }} - title={t("sidebar.copyError")} + title={t`Copy error message`} className="absolute top-1.5 right-1.5 p-1 rounded hover:bg-surface-tertiary text-muted hover:text-secondary transition-colors" > {schemaErrorCopied ? : } @@ -821,7 +823,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar className="mt-1 flex items-center gap-1.5 px-3 py-1 rounded text-xs font-medium bg-surface-secondary text-secondary hover:bg-surface-tertiary transition-colors" > - {t("sidebar.retry")} + {t({ message: "Try again", context: "sidebar" })}
) : /* Schema-capable driver: Schema tree layout */ @@ -832,10 +834,10 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar /* Schema picker (first connect, no saved preference) */
- {t("sidebar.schemas")} + {t`Schemas`}
- {t("sidebar.selectSchemasHint")} + {t`Select schemas to load:`}
@@ -890,8 +892,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar className="text-xs text-blue-500 hover:underline" > {pendingSchemaSelection.size === schemas.length - ? t("sidebar.deselectAll") - : t("sidebar.selectAll")} + ? t({ message: "Deselect All", context: "sidebar" }) + : t({ message: "Select All", context: "sidebar" })}
@@ -917,7 +919,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar {/* Schema selection header */}
- {t("sidebar.schemas")} ({selectedSchemas.length}/{schemas.length}) + {t`Schemas`} ({selectedSchemas.length}/{schemas.length})
@@ -943,7 +945,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar
- {t("sidebar.editSchemas")} + {t`Edit Schemas`}
@@ -1015,7 +1017,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }`} > - {t("sidebar.confirmSelection")} + {t`Confirm`}
@@ -1054,8 +1056,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar onDropIndex={async (t_name, name) => { if ( await ask( - t("sidebar.deleteIndexConfirm", { name }), - { title: t("sidebar.deleteIndex"), kind: "warning" }, + t`Delete index "${name}"?`, + { title: t`Delete Index`, kind: "warning" }, ) ) { try { @@ -1067,7 +1069,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }); setSchemaVersion((v) => v + 1); } catch (e) { - showAlert(t("sidebar.failDeleteIndex") + toErrorMessage(e), { title: t("common.error"), kind: "error" }); + showAlert(t`Failed to delete index: ` + toErrorMessage(e), { title: t({ message: "Error", context: "common" }), kind: "error" }); } } }} @@ -1077,8 +1079,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar onDropForeignKey={async (t_name, name) => { if ( await ask( - t("sidebar.deleteFkConfirm", { name }), - { title: t("sidebar.deleteFk"), kind: "warning" }, + t`Delete foreign key "${name}"?`, + { title: t`Delete FK`, kind: "warning" }, ) ) { try { @@ -1090,7 +1092,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }); setSchemaVersion((v) => v + 1); } catch (e) { - showAlert(toErrorMessage(e), { title: t("common.error"), kind: "error" }); + showAlert(toErrorMessage(e), { title: t({ message: "Error", context: "common" }), kind: "error" }); } } }} @@ -1113,7 +1115,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar {/* Database header: label + manage button */}
- {t("sidebar.databases")} ({selectedDatabases.length}) + {t`Databases`} ({selectedDatabases.length})
@@ -1150,7 +1152,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar
- {t("sidebar.manageDatabases")} + {t`Manage Databases`}
{isLoadingAllDbs ? (
- {t("sidebar.loadingSchema")} + {t`Loading schema...`}
) : allAvailableDatabases.map((dbName) => { const isSelected = pendingDbSelection.has(dbName); @@ -1215,7 +1217,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }`} > - {t("sidebar.confirmSelection")} + {t`Confirm`}
@@ -1232,7 +1234,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar type="text" value={dbFilter} onChange={(e) => setDbFilter(e.target.value)} - placeholder={t("sidebar.filterDatabases")} + placeholder={t`Filter databases...`} className="w-full bg-surface-secondary text-xs text-secondary placeholder:text-muted rounded pl-6 pr-6 py-1 border border-default focus:outline-none focus:border-blue-500/50" /> {dbFilter && ( @@ -1280,8 +1282,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar onDropIndex={async (t_name, name) => { if ( await ask( - t("sidebar.deleteIndexConfirm", { name }), - { title: t("sidebar.deleteIndex"), kind: "warning" }, + t`Delete index "${name}"?`, + { title: t`Delete Index`, kind: "warning" }, ) ) { try { @@ -1293,7 +1295,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }); setSchemaVersion((v) => v + 1); } catch (e) { - showAlert(t("sidebar.failDeleteIndex") + toErrorMessage(e), { title: t("common.error"), kind: "error" }); + showAlert(t`Failed to delete index: ` + toErrorMessage(e), { title: t({ message: "Error", context: "common" }), kind: "error" }); } } }} @@ -1303,8 +1305,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar onDropForeignKey={async (t_name, name) => { if ( await ask( - t("sidebar.deleteFkConfirm", { name }), - { title: t("sidebar.deleteFk"), kind: "warning" }, + t`Delete foreign key "${name}"?`, + { title: t`Delete FK`, kind: "warning" }, ) ) { try { @@ -1316,7 +1318,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }); setSchemaVersion((v) => v + 1); } catch (e) { - showAlert(toErrorMessage(e), { title: t("common.error"), kind: "error" }); + showAlert(toErrorMessage(e), { title: t({ message: "Error", context: "common" }), kind: "error" }); } } }} @@ -1362,7 +1364,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar })()}
- {t("sidebar.objectSummary")} + {t`Objects`} {formatObjectCount(tables.length, views.length, routines.length, triggers.length)} @@ -1371,7 +1373,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar {/* Tables */} setTablesOpen(!tablesOpen)} actions={ @@ -1382,7 +1384,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar if (refreshTables) refreshTables(); }} className="p-1 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors" - title={t("sidebar.refreshTables") || "Refresh Tables"} + title={t`Refresh Tables` || "Refresh Tables"} > @@ -1409,7 +1411,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar type="text" value={tableFilter} onChange={(e) => setTableFilter(e.target.value)} - placeholder={t("sidebar.filterTables")} + placeholder={t`Filter tables...`} className="w-full bg-surface-secondary text-xs text-secondary placeholder:text-muted rounded pl-6 pr-6 py-1 border border-default focus:outline-none focus:border-blue-500/50" /> {tableFilter && ( @@ -1429,7 +1431,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar : tables; return filtered.length === 0 ? (
- {tableFilter ? t("sidebar.noTablesMatch") : t("sidebar.noTables")} + {tableFilter ? t`No tables match` : t`No tables found`}
) : (
@@ -1456,8 +1458,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar onDropIndex={async (t_name, name) => { if ( await ask( - t("sidebar.deleteIndexConfirm", { name }), - { title: t("sidebar.deleteIndex"), kind: "warning" }, + t`Delete index "${name}"?`, + { title: t`Delete Index`, kind: "warning" }, ) ) { try { @@ -1468,7 +1470,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }); setSchemaVersion((v) => v + 1); } catch (e) { - showAlert(t("sidebar.failDeleteIndex") + toErrorMessage(e), { title: t("common.error"), kind: "error" }); + showAlert(t`Failed to delete index: ` + toErrorMessage(e), { title: t({ message: "Error", context: "common" }), kind: "error" }); } } }} @@ -1478,8 +1480,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar onDropForeignKey={async (t_name, name) => { if ( await ask( - t("sidebar.deleteFkConfirm", { name }), - { title: t("sidebar.deleteFk"), kind: "warning" }, + t`Delete foreign key "${name}"?`, + { title: t`Delete FK`, kind: "warning" }, ) ) { try { @@ -1490,7 +1492,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }); setSchemaVersion((v) => v + 1); } catch (e) { - showAlert(toErrorMessage(e), { title: t("common.error"), kind: "error" }); + showAlert(toErrorMessage(e), { title: t({ message: "Error", context: "common" }), kind: "error" }); } } }} @@ -1505,7 +1507,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar {/* Views */} {activeCapabilities?.views !== false && ( setViewsOpen(!viewsOpen)} actions={ @@ -1516,7 +1518,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar if (refreshViews) refreshViews(); }} className="p-1 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors" - title={t("sidebar.refreshViews") || "Refresh Views"} + title={t`Refresh Views` || "Refresh Views"} > @@ -1526,7 +1528,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar setViewEditorModal({ isOpen: true, isNewView: true }); }} className="p-1 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors" - title={t("sidebar.createView") || "Create New View"} + title={t`Create New View` || "Create New View"} > @@ -1535,7 +1537,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar > {views.length === 0 ? (
- {t("sidebar.noViews")} + {t`No views found`}
) : (
@@ -1559,7 +1561,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar {/* Triggers (flat layout) */} {activeCapabilities?.triggers === true && ( setTriggersOpenFlat(!triggersOpenFlat)} actions={ @@ -1570,7 +1572,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar if (refreshTriggers) refreshTriggers(); }} className="p-1 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors" - title={t("sidebar.refreshTriggers") || "Refresh Triggers"} + title={t`Refresh Triggers` || "Refresh Triggers"} > @@ -1580,7 +1582,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar setTriggerEditorModal({ isOpen: true, isNewTrigger: true }); }} className="p-1 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors" - title={t("sidebar.createTrigger") || "Create New Trigger"} + title={t`Create New Trigger` || "Create New Trigger"} > @@ -1595,7 +1597,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar type="text" value={triggerFilterFlat} onChange={(e) => setTriggerFilterFlat(e.target.value)} - placeholder={t("sidebar.filterTriggers")} + placeholder={t`Filter triggers...`} className="w-full bg-surface-secondary text-xs text-secondary placeholder:text-muted rounded pl-6 pr-6 py-1 border border-default focus:outline-none focus:border-blue-500/50" onClick={(e) => e.stopPropagation()} /> @@ -1616,7 +1618,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar : triggers; return filtered.length === 0 ? (
- {triggerFilterFlat ? t("sidebar.noTriggersMatch") : t("sidebar.noTriggers")} + {triggerFilterFlat ? t`No triggers match your filter` : t`No triggers found`}
) : (
@@ -1638,7 +1640,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar {/* Routines */} {activeCapabilities?.routines === true && ( setRoutinesOpen(!routinesOpen)} actions={ @@ -1649,7 +1651,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar if (refreshRoutines) refreshRoutines(); }} className="p-1 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors" - title={t("sidebar.refreshRoutines") || "Refresh Routines"} + title={t`Refresh Routines` || "Refresh Routines"} > @@ -1658,7 +1660,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar > {routines.length === 0 ? (
- {t("sidebar.noRoutines")} + {t`No routines found`}
) : (
@@ -1670,7 +1672,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar className="flex items-center gap-1 px-2 py-1 w-full text-left text-xs font-semibold text-muted uppercase tracking-wider hover:text-secondary transition-colors" > {functionsOpen ? : } - {t("sidebar.functions")} + {t`Functions`} {groupedRoutines.functions.length} {functionsOpen && groupedRoutines.functions.map((routine) => ( @@ -1693,7 +1695,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar className="flex items-center gap-1 px-2 py-1 w-full text-left text-xs font-semibold text-muted uppercase tracking-wider hover:text-secondary transition-colors" > {proceduresOpen ? : } - {t("sidebar.procedures")} + {t`Procedures`} {groupedRoutines.procedures.length} {proceduresOpen && groupedRoutines.procedures.map((routine) => ( @@ -1732,7 +1734,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar const ctxSchema = contextMenu.data && "schema" in contextMenu.data ? contextMenu.data.schema : undefined; return [ { - label: t("sidebar.showData"), + label: t`Show Data`, icon: PlaySquare, action: () => { const quotedTable = quoteTableRef(contextMenu.id, activeDriver, ctxSchema); @@ -1740,7 +1742,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, }, { - label: t("sidebar.newConsole"), + label: t`New Console`, icon: FileCode, action: () => { const spec = newConsoleForTable(contextMenu.id, activeDriver, ctxSchema); @@ -1748,7 +1750,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, }, { - label: t("sidebar.countRows"), + label: t`Count Rows`, icon: Hash, action: () => { const quotedTable = quoteTableRef(contextMenu.id, activeDriver, ctxSchema); @@ -1756,12 +1758,12 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, }, { - label: t("sidebar.viewSchema"), + label: t`View Schema`, icon: FileText, action: () => setSchemaModal({ tableName: contextMenu.id, schema: ctxSchema }), }, activeCapabilities?.no_connection_required !== true ? { - label: t("sidebar.viewERDiagram"), + label: t`View ER Diagram`, icon: Network, action: async () => { try { @@ -1778,36 +1780,36 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, } : null, supportsManageTables(activeCapabilities) ? { - label: t("sidebar.generateSQL"), + label: t({ message: "Generate SQL", context: "sidebar" }), icon: FileCode, action: () => setGenerateSQLModal(contextMenu.id), } : null, supportsManageTables(activeCapabilities) ? { - label: t("clipboardImport.contextMenuLabel"), + label: t`Import from Clipboard...`, icon: Clipboard, action: () => setIsClipboardImportOpen(true), } : null, { - label: t("sidebar.copyName"), + label: t`Copy Name`, icon: Copy, action: () => navigator.clipboard.writeText(contextMenu.id), }, supportsManageTables(activeCapabilities) ? { - label: t("sidebar.addColumn"), + label: t({ message: "Add Column", context: "sidebar" }), icon: Plus, action: () => setModifyColumnModal({ isOpen: true, tableName: contextMenu.id, column: null }), } : null, supportsManageTables(activeCapabilities) ? { - label: t("sidebar.deleteTable"), + label: t`Delete Table`, icon: Trash2, danger: true, action: async () => { const quotedTable = quoteTableRef(contextMenu.id, activeDriver, ctxSchema); if ( await ask( - t("sidebar.deleteTableConfirm", { table: contextMenu.id }), - { title: t("sidebar.deleteTable"), kind: "warning" }, + t`Are you sure you want to delete table "${contextMenu.id}"?`, + { title: t`Delete Table`, kind: "warning" }, ) ) { try { @@ -1819,7 +1821,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar if (refreshTables) refreshTables(); } catch (e) { console.error(e); - showAlert(t("sidebar.failDeleteTable") + String(e), { kind: "error" }); + showAlert(t`Failed to delete table: ` + String(e), { kind: "error" }); } } }, @@ -1829,12 +1831,12 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar : contextMenu.type === "index" ? [ { - label: t("sidebar.copyName"), + label: t`Copy Name`, icon: Copy, action: () => navigator.clipboard.writeText(contextMenu.id), }, supportsManageTables(activeCapabilities) ? { - label: t("sidebar.deleteIndex"), + label: t`Delete Index`, icon: Trash2, danger: true, action: async () => { @@ -1843,8 +1845,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar const ctxSchema = "schema" in contextMenu.data ? contextMenu.data.schema : undefined; if ( await ask( - t("sidebar.deleteIndexConfirm", { name: contextMenu.id }), - { title: t("sidebar.deleteIndex"), kind: "warning" }, + t`Delete index "${name}"?`, + { title: t`Delete Index`, kind: "warning" }, ) ) { try { @@ -1857,8 +1859,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar setSchemaVersion((v) => v + 1); } catch (e) { showAlert( - t("sidebar.failDeleteIndex") + String(e), - { title: t("common.error"), kind: "error" }, + t`Failed to delete index: ` + String(e), + { title: t({ message: "Error", context: "common" }), kind: "error" }, ); } } @@ -1869,12 +1871,12 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar : contextMenu.type === "foreign_key" ? [ { - label: t("sidebar.copyName"), + label: t`Copy Name`, icon: Copy, action: () => navigator.clipboard.writeText(contextMenu.id), }, supportsManageTables(activeCapabilities) ? { - label: t("sidebar.deleteFk"), + label: t`Delete FK`, icon: Trash2, danger: true, action: async () => { @@ -1883,8 +1885,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar const ctxSchema = "schema" in contextMenu.data ? contextMenu.data.schema : undefined; if ( await ask( - t("sidebar.deleteFkConfirm", { name: contextMenu.id }), - { title: t("sidebar.deleteFk"), kind: "warning" }, + t`Delete foreign key "${name}"?`, + { title: t`Delete FK`, kind: "warning" }, ) ) { try { @@ -1907,7 +1909,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar ? supportsManageTables(activeCapabilities) ? [ { - label: t("sidebar.addIndex"), + label: t`Add Index`, icon: Plus, action: () => { if (contextMenu.data && "tableName" in contextMenu.data) { @@ -1921,7 +1923,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar ? supportsManageTables(activeCapabilities) ? [ { - label: t("sidebar.addFk"), + label: t`Add Foreign Key`, icon: Plus, action: () => { if (contextMenu.data && "tableName" in contextMenu.data) { @@ -1936,7 +1938,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar const viewCtxSchema = contextMenu.data && "schema" in contextMenu.data ? contextMenu.data.schema : undefined; return [ { - label: t("sidebar.showData"), + label: t`Show Data`, icon: PlaySquare, action: () => { const quotedView = quoteTableRef(contextMenu.id, activeDriver, viewCtxSchema); @@ -1944,7 +1946,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, }, { - label: t("sidebar.countRows"), + label: t`Count Rows`, icon: Hash, action: () => { const quotedView = quoteTableRef(contextMenu.id, activeDriver, viewCtxSchema); @@ -1952,26 +1954,26 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, }, { - label: t("sidebar.editView"), + label: t`Edit View`, icon: Edit, action: () => { setViewEditorModal({ isOpen: true, viewName: contextMenu.id, isNewView: false }); }, }, { - label: t("sidebar.copyName"), + label: t`Copy Name`, icon: Copy, action: () => navigator.clipboard.writeText(contextMenu.id), }, { - label: t("sidebar.dropView"), + label: t`Drop View`, icon: Trash2, danger: true, action: async () => { if ( await ask( - t("sidebar.dropViewConfirm", { view: contextMenu.id }), - { title: t("sidebar.dropView"), kind: "warning" }, + t`Are you sure you want to drop view "${contextMenu.id}"?`, + { title: t`Drop View`, kind: "warning" }, ) ) { try { @@ -1983,7 +1985,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar if (refreshViews) refreshViews(); } catch (e) { console.error(e); - showAlert(t("sidebar.failDropView") + String(e), { kind: "error" }); + showAlert(t`Failed to drop view: ` + String(e), { kind: "error" }); } } }, @@ -1993,7 +1995,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar : contextMenu.type === "routine" ? [ { - label: t("sidebar.viewDefinition"), + label: t({ message: "View Definition", context: "sidebar" }), icon: FileText, action: async () => { try { @@ -2011,14 +2013,14 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar } catch (e) { console.error(e); showAlert( - t("sidebar.failGetRoutineDefinition") + String(e), + t`Failed to get routine definition: ` + String(e), { kind: "error" } ); } }, }, { - label: t("sidebar.copyName"), + label: t`Copy Name`, icon: Copy, action: () => navigator.clipboard.writeText(contextMenu.id), }, @@ -2031,7 +2033,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar const triggerSchema = triggerData?.schema ?? activeSchema ?? undefined; return [ { - label: t("sidebar.viewTriggerDefinition"), + label: t({ message: "View Definition", context: "sidebar" }), icon: FileText, action: async () => { try { @@ -2045,14 +2047,14 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar } catch (e) { console.error(e); showAlert( - t("sidebar.failGetTriggerDefinition") + String(e), + t`Failed to get trigger definition: ` + String(e), { kind: "error" } ); } }, }, { - label: t("sidebar.editTrigger"), + label: t`Edit Trigger`, icon: Edit, action: () => { setTriggerEditorModal({ @@ -2065,19 +2067,19 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, }, { - label: t("sidebar.copyName"), + label: t`Copy Name`, icon: Copy, action: () => navigator.clipboard.writeText(contextMenu.id), }, { - label: t("sidebar.dropTrigger"), + label: t`Drop Trigger`, icon: Trash2, danger: true, action: async () => { if ( await ask( - t("sidebar.dropTriggerConfirm", { trigger: contextMenu.id }), - { title: t("sidebar.dropTrigger"), kind: "warning" }, + t`Are you sure you want to drop trigger "${contextMenu.id}"?`, + { title: t`Drop Trigger`, kind: "warning" }, ) ) { try { @@ -2090,7 +2092,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar if (refreshTriggers) refreshTriggers(); } catch (e) { console.error(e); - showAlert(t("sidebar.failDropTrigger") + String(e), { kind: "error" }); + showAlert(t`Failed to drop trigger: ` + String(e), { kind: "error" }); } } }, @@ -2100,7 +2102,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar : contextMenu.type === "database" ? [ { - label: t("sidebar.newConsole"), + label: t`New Console`, icon: FileCode, action: () => { const spec = newConsoleForDatabase(contextMenu.id); @@ -2108,17 +2110,17 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, }, { - label: t("dump.importDatabase"), + label: t`Run SQL File...`, icon: Upload, action: () => handleImportDatabase(contextMenu.id), }, { - label: t("dump.dumpDatabase"), + label: t({ message: "Dump Database", context: "dump" }), icon: Download, action: () => setDumpModal({ database: contextMenu.id }), }, { - label: t("sidebar.viewERDiagram"), + label: t`View ER Diagram`, icon: Network, action: async () => { try { @@ -2133,7 +2135,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, }, { - label: t("sidebar.refreshTables"), + label: t`Refresh Tables`, icon: RefreshCw, action: () => refreshDatabaseData(contextMenu.id), }, @@ -2143,27 +2145,27 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar const historyEntry = contextMenu.data as unknown as QueryHistoryEntry; return [ { - label: t("sidebar.copyQuery"), + label: t`Copy Query`, icon: Copy, action: () => navigator.clipboard.writeText(historyEntry.sql), }, { - label: t("sidebar.insertToEditor"), + label: t`Insert to Editor`, icon: FileInput, action: () => runQuery(historyEntry.sql, undefined, undefined, true, historyEntry.database ?? undefined), }, { - label: t("sidebar.runQuery"), + label: t`Run Query`, icon: Play, action: () => runQuery(historyEntry.sql, undefined, undefined, false, historyEntry.database ?? undefined), }, { - label: t("sidebar.openInNewTab"), + label: t`Open in New Tab`, icon: Plus, action: () => runQuery(historyEntry.sql, undefined, undefined, true, historyEntry.database ?? undefined), }, { - label: t("sidebar.addToFavorites"), + label: t`Add to Favorites`, icon: Star, action: () => { setQueryModal({ isOpen: true }); @@ -2175,13 +2177,13 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, { separator: true }, { - label: t("sidebar.delete"), + label: t({ message: "Delete", context: "sidebar" }), icon: Trash2, danger: true, action: () => setHistoryDeleteConfirm(historyEntry.id), }, { - label: t("sidebar.clearAllHistory"), + label: t`Clear All History`, icon: Trash2, danger: true, action: () => setHistoryClearConfirm(true), @@ -2191,7 +2193,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar : [ // Saved Query Actions (Default fallback) { - label: t("sidebar.execute"), + label: t`Execute`, icon: Play, action: () => { if (contextMenu.data && "sql" in contextMenu.data) { @@ -2201,7 +2203,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, }, { - label: t("sidebar.edit"), + label: t`Edit`, icon: Edit, action: () => { if (contextMenu.data && "sql" in contextMenu.data) { @@ -2210,7 +2212,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }, }, { - label: t("sidebar.delete"), + label: t({ message: "Delete", context: "sidebar" }), icon: Trash2, danger: true, action: () => { @@ -2379,8 +2381,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar setFavoriteDeleteConfirm(null)} - title={t("sidebar.confirmDeleteTitle")} - message={t("sidebar.confirmDeleteQuery", { name: queries.find((q) => q.id === favoriteDeleteConfirm)?.name ?? "" })} + title={t`Delete Query`} + message={t`Are you sure you want to delete query "${name}"?`} onConfirm={() => { if (favoriteDeleteConfirm) { deleteQuery(favoriteDeleteConfirm); @@ -2393,8 +2395,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar setHistoryDeleteConfirm(null)} - title={t("sidebar.confirmDeleteTitle")} - message={t("sidebar.confirmDeleteHistoryEntry")} + title={t`Delete Query`} + message={t`Are you sure you want to delete this query from history?`} onConfirm={() => { if (historyDeleteConfirm) { deleteHistoryEntry(historyDeleteConfirm); @@ -2407,8 +2409,8 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar setHistoryClearConfirm(false)} - title={t("sidebar.confirmClearHistoryTitle")} - message={t("sidebar.confirmClearHistory")} + title={t`Clear Query History`} + message={t`Are you sure you want to clear all query history for this connection?`} onConfirm={() => { clearHistory(); setHistoryClearConfirm(false); diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx index 6819b48e..07765045 100644 --- a/src/components/layout/Sidebar.tsx +++ b/src/components/layout/Sidebar.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useMemo, useCallback } from "react"; import { useNavigate, useLocation } from "react-router-dom"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Plug2, Settings, Cpu, PanelLeft, Layers, Star, Clock, BookOpen } from "lucide-react"; import { DiscordIcon } from "../icons/DiscordIcon"; import { openUrl } from "@tauri-apps/plugin-opener"; @@ -29,7 +29,7 @@ import { useDrivers } from "../../hooks/useDrivers"; import { useKeybindings } from "../../hooks/useKeybindings"; export const Sidebar = () => { - const { t } = useTranslation(); + const { t } = useLingui(); const { currentTheme } = useTheme(); const isDarkTheme = !currentTheme?.id?.includes("-light"); const { @@ -233,7 +233,7 @@ export const Sidebar = () => { @@ -298,13 +298,13 @@ export const Sidebar = () => { {
{([ - { id: "structure" as SidebarTab, icon: Layers, label: t("sidebar.structure") }, - { id: "favorites" as SidebarTab, icon: Star, label: t("sidebar.favorites") }, - { id: "history" as SidebarTab, icon: Clock, label: t("sidebar.queryHistory") }, - { id: "notebooks" as SidebarTab, icon: BookOpen, label: t("sidebar.notebooks.tab") }, + { id: "structure" as SidebarTab, icon: Layers, label: t`Structure` }, + { id: "favorites" as SidebarTab, icon: Star, label: t`Favorites` }, + { id: "history" as SidebarTab, icon: Clock, label: t`History` }, + { id: "notebooks" as SidebarTab, icon: BookOpen, label: t`Notebooks` }, ]).map((tab) => ( diff --git a/src/components/layout/sidebar/ConnectionGroupFolder.tsx b/src/components/layout/sidebar/ConnectionGroupFolder.tsx index 2f7e3460..5645bd48 100644 --- a/src/components/layout/sidebar/ConnectionGroupFolder.tsx +++ b/src/components/layout/sidebar/ConnectionGroupFolder.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; import { Folder, FolderOpen } from "lucide-react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import type { ConnectionGroup } from "../../../contexts/DatabaseContext"; import type { ConnectionStatus } from "../../../hooks/useConnectionManager"; import type { PluginManifest } from "../../../types/plugins"; @@ -38,7 +38,7 @@ export const ConnectionGroupFolder = ({ showShortcutHints = false, startIndex = 1, }: Props) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [isDragOver, setIsDragOver] = useState(false); const handleDragOver = (e: React.DragEvent) => { @@ -104,7 +104,7 @@ export const ConnectionGroupFolder = ({
{group.name}
- {connections.length} {connections.length === 1 ? t("groups.connection") : t("groups.connections")} + {connections.length} {connections.length === 1 ? t`connection` : t`connections`} {connectedCount > 0 && ` (${connectedCount} open)`}
diff --git a/src/components/layout/sidebar/ConnectionGroupItem.tsx b/src/components/layout/sidebar/ConnectionGroupItem.tsx index 5a44607f..f0a96229 100644 --- a/src/components/layout/sidebar/ConnectionGroupItem.tsx +++ b/src/components/layout/sidebar/ConnectionGroupItem.tsx @@ -1,7 +1,7 @@ import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { Database, Unlink } from 'lucide-react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { useConnectionLayoutContext } from '../../../hooks/useConnectionLayoutContext'; import { ContextMenu } from '../../ui/ContextMenu'; import type { ConnectionStatus } from '../../../hooks/useConnectionManager'; @@ -12,7 +12,7 @@ interface Props { } export const ConnectionGroupItem = ({ connections, mode }: Props) => { - const { t } = useTranslation(); + const { t } = useLingui(); const navigate = useNavigate(); const { deactivateSplit, showSplitView } = useConnectionLayoutContext(); const [contextMenu, setContextMenu] = useState<{ x: number; y: number } | null>(null); @@ -24,7 +24,7 @@ export const ConnectionGroupItem = ({ connections, mode }: Props) => { const menuItems = [ { - label: t('sidebar.separateConnections'), + label: t`Separate Connections`, icon: Unlink, action: deactivateSplit, }, @@ -52,7 +52,7 @@ export const ConnectionGroupItem = ({ connections, mode }: Props) => { {/* Tooltip */}
-
{t('sidebar.splitGroup')}
+
{t`Split Group`}
{connections.map(c => (
{c.name} diff --git a/src/components/layout/sidebar/DiscordCommunityCallout.tsx b/src/components/layout/sidebar/DiscordCommunityCallout.tsx index 85d46042..808b8851 100644 --- a/src/components/layout/sidebar/DiscordCommunityCallout.tsx +++ b/src/components/layout/sidebar/DiscordCommunityCallout.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; import { X, Sparkles } from "lucide-react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { openUrl } from "@tauri-apps/plugin-opener"; import { DISCORD_URL } from "../../../config/links"; import { DiscordIcon } from "../../icons/DiscordIcon"; @@ -31,7 +31,7 @@ const computeInitialVisible = (storage?: CalloutStorage): boolean => { }; export const DiscordCommunityCallout = ({ storage }: DiscordCommunityCalloutProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [visible, setVisible] = useState(() => computeInitialVisible(storage)); if (!visible) return null; @@ -79,7 +79,7 @@ export const DiscordCommunityCallout = ({ storage }: DiscordCommunityCalloutProp
- {t("discordCallout.body")} + {t`We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap.`}
@@ -108,7 +108,7 @@ export const DiscordCommunityCallout = ({ storage }: DiscordCommunityCalloutProp onClick={handleJoin} className="w-full text-sm font-semibold bg-white text-indigo-700 hover:bg-indigo-50 active:bg-indigo-100 transition-colors rounded-md py-2 shadow-sm" > - {t("discordCallout.cta")} + {t`Join now`}
diff --git a/src/components/layout/sidebar/NotebooksSection.tsx b/src/components/layout/sidebar/NotebooksSection.tsx index 2b8c97d9..92ebf382 100644 --- a/src/components/layout/sidebar/NotebooksSection.tsx +++ b/src/components/layout/sidebar/NotebooksSection.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Search, Loader2, @@ -47,7 +47,7 @@ export function NotebooksSection({ onRename, onDelete, }: NotebooksSectionProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings } = useSettings(); const { showAlert } = useAlert(); const [notebooks, setNotebooks] = useState([]); @@ -143,9 +143,9 @@ export function NotebooksSection({ }); if (!target) return; await writeTextFile(target, JSON.stringify(file, null, 2)); - showAlert(t("editor.notebook.exportSuccess"), { kind: "info" }); + showAlert(t`Notebook exported successfully`, { kind: "info" }); } catch (e) { - showAlert(String(e), { kind: "error", title: t("common.error") }); + showAlert(String(e), { kind: "error", title: t({ message: "Error", context: "common" }) }); } }; @@ -161,9 +161,9 @@ export function NotebooksSection({ }); if (!target) return; await writeTextFile(target, html); - showAlert(t("editor.notebook.exportSuccess"), { kind: "info" }); + showAlert(t`Notebook exported successfully`, { kind: "info" }); } catch (e) { - showAlert(String(e), { kind: "error", title: t("common.error") }); + showAlert(String(e), { kind: "error", title: t({ message: "Error", context: "common" }) }); } }; @@ -184,38 +184,38 @@ export function NotebooksSection({ { cells, params, stopOnError }, connectionId, ); - showAlert(t("editor.notebook.importSuccess"), { kind: "info" }); + showAlert(t`Notebook imported successfully`, { kind: "info" }); // createNotebookFromState emits NOTEBOOKS_CHANGED_EVENT → reload(). onOpen({ id: notebookId, title }); } catch { - showAlert(t("editor.notebook.invalidFile"), { kind: "error" }); + showAlert(t`Invalid notebook file format`, { kind: "error" }); } }; const contextMenuItems = (nb: NotebookMetadata): ContextMenuItem[] => [ { - label: t("sidebar.notebooks.rename"), + label: t`Rename`, icon: Pencil, action: () => startRename(nb), }, { - label: t("editor.notebook.export"), + label: t`Export Notebook`, icon: Download, action: () => handleExport(nb), }, { - label: t("editor.notebook.exportHtml"), + label: t`Export as HTML`, icon: FileCode, action: () => handleExportHtml(nb), }, { - label: t("editor.notebook.import"), + label: t`Import Notebook`, icon: Upload, action: () => handleImport(), }, { separator: true }, { - label: t("sidebar.notebooks.delete"), + label: t({ message: "Delete", context: "sidebar" }), icon: Trash2, danger: true, action: () => setPendingDelete(nb), @@ -234,7 +234,7 @@ export function NotebooksSection({ type="text" value={search} onChange={(e) => setSearch(e.target.value)} - placeholder={t("sidebar.notebooks.search")} + placeholder={t`Search notebooks`} className="w-full pl-6 pr-2 py-1 text-xs bg-surface-secondary border border-default rounded text-primary placeholder:text-muted focus:outline-none focus:border-blue-500/50" />
@@ -242,14 +242,14 @@ export function NotebooksSection({ onClick={handleImport} disabled={!connectionId} className="p-1.5 text-muted hover:text-secondary rounded transition-colors shrink-0 disabled:opacity-40" - title={t("editor.notebook.import")} + title={t`Import Notebook`} > @@ -261,11 +261,11 @@ export function NotebooksSection({
) : notebooks.length === 0 ? (
- {t("sidebar.notebooks.empty")} + {t`No saved notebooks yet.`}
) : filtered.length === 0 ? (
- {t("sidebar.notebooks.noSearchResults")} + {t`No notebooks match your search.`}
) : ( filtered.map((nb) => ( @@ -291,7 +291,7 @@ export function NotebooksSection({ if (e.key === "Enter") commitRename(); if (e.key === "Escape") setEditingId(null); }} - placeholder={t("sidebar.notebooks.renamePlaceholder")} + placeholder={t`Notebook name`} className="w-full px-1.5 py-0.5 text-[13px] bg-base border border-blue-500/50 rounded text-primary focus:outline-none" /> ) : ( @@ -328,10 +328,8 @@ export function NotebooksSection({ setPendingDelete(null)} - title={t("sidebar.notebooks.delete")} - message={t("sidebar.notebooks.deleteConfirm", { - title: pendingDelete?.title ?? "", - })} + title={t({ message: "Delete", context: "sidebar" })} + message={t`Delete notebook "${pendingDelete?.title ?? ""}"? This cannot be undone.`} onConfirm={confirmDelete} variant="danger" /> diff --git a/src/components/layout/sidebar/OpenConnectionItem.tsx b/src/components/layout/sidebar/OpenConnectionItem.tsx index d51f4bcf..648269b6 100644 --- a/src/components/layout/sidebar/OpenConnectionItem.tsx +++ b/src/components/layout/sidebar/OpenConnectionItem.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; import { Loader2, Shield, X, AlertCircle, Terminal, Check, Copy, Power, Columns2, Rows2 } from "lucide-react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import type { ConnectionStatus } from "../../../hooks/useConnectionManager"; import { getConnectionItemClass, getStatusDotClass } from "../../../utils/connectionManager"; import { canActivateSplit } from "../../../utils/connectionLayout"; @@ -52,7 +52,7 @@ export const OpenConnectionItem = ({ onReorderDragEnd, dropIndicator = null, }: Props) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { connections } = useDatabase(); const { isActive, isConnecting, name, database, sshEnabled, error } = connection; const savedConnection = connections.find(c => c.id === connection.id); @@ -78,12 +78,12 @@ export const OpenConnectionItem = ({ const splitItems = canSplit ? [ { - label: t('sidebar.splitVertical'), + label: t`Split Vertical`, icon: Columns2, action: () => onActivateSplit('vertical'), }, { - label: t('sidebar.splitHorizontal'), + label: t`Split Horizontal`, icon: Rows2, action: () => onActivateSplit('horizontal'), }, @@ -94,25 +94,25 @@ export const OpenConnectionItem = ({ const menuItems = [ ...splitItems, { - label: t("sidebar.openInEditor"), + label: t`Open in Editor`, icon: Terminal, action: onOpenInEditor, }, { - label: t("sidebar.setAsActive"), + label: t`Set as Active`, icon: Check, action: onSwitch, disabled: isActive, }, { separator: true as const }, { - label: t("sidebar.copyName"), + label: t`Copy Name`, icon: Copy, action: () => navigator.clipboard.writeText(name), }, { separator: true as const }, { - label: t("connections.disconnect"), + label: t`Disconnect`, icon: Power, action: onDisconnect, danger: true, @@ -205,7 +205,7 @@ export const OpenConnectionItem = ({ onDisconnect(); }} className="absolute -top-0.5 -right-0.5 w-4 h-4 bg-elevated border border-default rounded-full flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity hover:bg-red-900/50 hover:text-red-400 text-muted z-10" - title={t("connections.disconnect")} + title={t`Disconnect`} > diff --git a/src/components/layout/sidebar/QueryHistorySection.tsx b/src/components/layout/sidebar/QueryHistorySection.tsx index 33ad7151..928125c0 100644 --- a/src/components/layout/sidebar/QueryHistorySection.tsx +++ b/src/components/layout/sidebar/QueryHistorySection.tsx @@ -1,7 +1,8 @@ import { useState, useMemo } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Search, Trash2, Loader2, Database, AlertTriangle, X } from "lucide-react"; import { groupByDate, formatHistoryTime } from "../../../utils/dateGroups"; +import { sidebarDateGroups } from "../../../i18n/registries/sidebarDateGroups"; import { SqlHighlight } from "../../ui/SqlHighlight"; import { formatSqlPreview } from "../../../utils/sqlHighlight"; import { useSettings } from "../../../hooks/useSettings"; @@ -32,7 +33,7 @@ export function QueryHistorySection({ onContextMenu, onClearAll, }: QueryHistorySectionProps) { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const { settings } = useSettings(); const [search, setSearch] = useState(""); const [selectedId, setSelectedId] = useState(null); @@ -60,10 +61,10 @@ export function QueryHistorySection({
- {t("sidebar.historyRecoveredTitle")} + {t`Query history was reset`}
- {t("sidebar.historyRecoveredBody")} + {t`The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:`}
@@ -89,7 +90,7 @@ export function QueryHistorySection({ return (
- {t("sidebar.loadingSchema")} + {t`Loading schema...`}
); } @@ -99,7 +100,7 @@ export function QueryHistorySection({
{recoveryBanner}
- {t("sidebar.noQueryHistory")} + {t`No query history`}
); @@ -119,14 +120,14 @@ export function QueryHistorySection({ type="text" value={search} onChange={(e) => setSearch(e.target.value)} - placeholder={t("sidebar.searchHistory")} + placeholder={t`Search history...`} className="w-full pl-6 pr-2 py-1 text-xs bg-surface-secondary border border-default rounded text-primary placeholder:text-muted focus:outline-none focus:border-blue-500/50" />
@@ -142,13 +143,13 @@ export function QueryHistorySection({ {/* Grouped entries */} {groupedEntries.length === 0 ? (
- {t("sidebar.noHistorySearchResults")} + {t`No queries match your search`}
) : ( groupedEntries.map(([groupKey, items]) => (
- {t(`sidebar.${groupKey}`)} + {i18n._(sidebarDateGroups[groupKey])}
{items.map((entry) => (
{ - const { t } = useTranslation(); + const { t } = useLingui(); const { showAlert } = useAlert(); const [contextMenu, setContextMenu] = useState<{ x: number; @@ -47,11 +47,10 @@ export const SidebarColumnItem = ({ const handleDelete = async () => { const confirmed = await ask( - t("sidebar.deleteColumnConfirm", { - column: column.name, - table: tableName, - }), - { title: t("sidebar.deleteColumn"), kind: "warning" }, + t`Are you sure you want to delete column "${column.name}" from table "${tableName}"? + +WARNING: This will permanently delete all data in this column. This action cannot be undone.`, + { title: t`Delete Column`, kind: "warning" }, ); if (confirmed) { @@ -69,8 +68,8 @@ export const SidebarColumnItem = ({ onRefresh(); } catch (e) { console.error(e); - showAlert(t("sidebar.failDeleteColumn") + String(e), { - title: t("common.error"), + showAlert(t`Failed to delete column: ` + String(e), { + title: t({ message: "Error", context: "common" }), kind: "error", }); } @@ -108,17 +107,17 @@ export const SidebarColumnItem = ({ onClose={() => setContextMenu(null)} items={[ { - label: t("sidebar.modifyColumn"), + label: t({ message: "Modify Column", context: "sidebar" }), icon: Edit, action: () => onEdit(column), }, { - label: t("sidebar.copyName"), + label: t`Copy Name`, icon: Copy, action: () => navigator.clipboard.writeText(column.name), }, { - label: t("sidebar.deleteColumn"), + label: t`Delete Column`, icon: Trash2, danger: true, action: handleDelete, diff --git a/src/components/layout/sidebar/SidebarDatabaseItem.tsx b/src/components/layout/sidebar/SidebarDatabaseItem.tsx index a19b3cf2..d6f562f9 100644 --- a/src/components/layout/sidebar/SidebarDatabaseItem.tsx +++ b/src/components/layout/sidebar/SidebarDatabaseItem.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect } from "react"; import { supportsManageTables } from "../../../utils/driverCapabilities"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Loader2, ChevronDown, @@ -95,7 +95,7 @@ export const SidebarDatabaseItem = ({ onViewDiagram, capabilities, }: SidebarDatabaseItemProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [isExpanded, setIsExpanded] = useState(activeSchema === databaseName); const [prevActiveSchema, setPrevActiveSchema] = useState(activeSchema); @@ -194,7 +194,7 @@ export const SidebarDatabaseItem = ({ @@ -203,7 +203,7 @@ export const SidebarDatabaseItem = ({ @@ -212,7 +212,7 @@ export const SidebarDatabaseItem = ({ @@ -220,7 +220,7 @@ export const SidebarDatabaseItem = ({ @@ -233,13 +233,13 @@ export const SidebarDatabaseItem = ({ {isLoading && !isLoaded ? (
- {t("sidebar.loadingSchema")} + {t`Loading schema...`}
) : ( <> {/* Tables */} setTablesOpen(!tablesOpen)} actions={ @@ -267,7 +267,7 @@ export const SidebarDatabaseItem = ({ type="text" value={tableFilter} onChange={(e) => setTableFilter(e.target.value)} - placeholder={t("sidebar.filterTables")} + placeholder={t`Filter tables...`} className="w-full bg-surface-secondary text-xs text-secondary placeholder:text-muted rounded pl-6 pr-6 py-1 border border-default focus:outline-none focus:border-blue-500/50" onClick={(e) => e.stopPropagation()} /> @@ -284,7 +284,7 @@ export const SidebarDatabaseItem = ({ )} {filteredTables.length === 0 ? (
- {tableFilter ? t("sidebar.noTablesMatch") : t("sidebar.noTables")} + {tableFilter ? t`No tables match` : t`No tables found`}
) : (
@@ -316,7 +316,7 @@ export const SidebarDatabaseItem = ({ {/* Views */} {capabilities?.views !== false && ( setViewsOpen(!viewsOpen)} actions={ @@ -327,7 +327,7 @@ export const SidebarDatabaseItem = ({ onCreateView(); }} className="p-1 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors" - title={t("sidebar.createView") || "Create New View"} + title={t`Create New View` || "Create New View"} > @@ -336,7 +336,7 @@ export const SidebarDatabaseItem = ({ > {views.length === 0 ? (
- {t("sidebar.noViews")} + {t`No views found`}
) : (
@@ -361,7 +361,7 @@ export const SidebarDatabaseItem = ({ {/* Triggers */} {capabilities?.triggers === true && ( setTriggersOpen(!triggersOpen)} actions={ @@ -372,7 +372,7 @@ export const SidebarDatabaseItem = ({ onCreateTrigger(databaseName); }} className="p-1 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors" - title={t("sidebar.createTrigger") || "Create New Trigger"} + title={t`Create New Trigger` || "Create New Trigger"} > @@ -387,7 +387,7 @@ export const SidebarDatabaseItem = ({ type="text" value={triggerFilter} onChange={(e) => setTriggerFilter(e.target.value)} - placeholder={t("sidebar.filterTriggers")} + placeholder={t`Filter triggers...`} className="w-full bg-surface-secondary text-xs text-secondary placeholder:text-muted rounded pl-6 pr-6 py-1 border border-default focus:outline-none focus:border-blue-500/50" onClick={(e) => e.stopPropagation()} /> @@ -404,7 +404,7 @@ export const SidebarDatabaseItem = ({ )} {filteredTriggers.length === 0 ? (
- {triggerFilter ? t("sidebar.noTriggersMatch") : t("sidebar.noTriggers")} + {triggerFilter ? t`No triggers match your filter` : t`No triggers found`}
) : (
@@ -426,13 +426,13 @@ export const SidebarDatabaseItem = ({ {/* Routines */} {capabilities?.routines === true && ( setRoutinesOpen(!routinesOpen)} > {routines.length === 0 ? (
- {t("sidebar.noRoutines")} + {t`No routines found`}
) : (
@@ -443,7 +443,7 @@ export const SidebarDatabaseItem = ({ className="flex items-center gap-1 px-2 py-1 w-full text-left text-xs font-semibold text-muted uppercase tracking-wider hover:text-secondary transition-colors" > {functionsOpen ? : } - {t("sidebar.functions")} + {t`Functions`} {groupedRoutines.functions.length} {functionsOpen && groupedRoutines.functions.map((routine) => ( @@ -466,7 +466,7 @@ export const SidebarDatabaseItem = ({ className="flex items-center gap-1 px-2 py-1 w-full text-left text-xs font-semibold text-muted uppercase tracking-wider hover:text-secondary transition-colors" > {proceduresOpen ? : } - {t("sidebar.procedures")} + {t`Procedures`} {groupedRoutines.procedures.length} {proceduresOpen && groupedRoutines.procedures.map((routine) => ( diff --git a/src/components/layout/sidebar/SidebarRoutineItem.tsx b/src/components/layout/sidebar/SidebarRoutineItem.tsx index 8440e5fb..72773149 100644 --- a/src/components/layout/sidebar/SidebarRoutineItem.tsx +++ b/src/components/layout/sidebar/SidebarRoutineItem.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { invoke } from "@tauri-apps/api/core"; import { Code2, @@ -40,7 +40,7 @@ export const SidebarRoutineItem = ({ connectionId, schema, }: SidebarRoutineItemProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [isExpanded, setIsExpanded] = useState(false); const [parameters, setParameters] = useState([]); @@ -108,7 +108,7 @@ export const SidebarRoutineItem = ({ {isLoading ? (
- {t("sidebar.loadingSchema")} + {t`Loading schema...`}
) : (
diff --git a/src/components/layout/sidebar/SidebarSchemaItem.tsx b/src/components/layout/sidebar/SidebarSchemaItem.tsx index d461ff71..3dac7f73 100644 --- a/src/components/layout/sidebar/SidebarSchemaItem.tsx +++ b/src/components/layout/sidebar/SidebarSchemaItem.tsx @@ -1,5 +1,5 @@ import React, { useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Loader2, ChevronDown, @@ -84,7 +84,7 @@ export const SidebarSchemaItem = ({ onCreateTrigger, showTriggers = false, }: SidebarSchemaItemProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [isExpanded, setIsExpanded] = useState( activeSchema === schemaName, @@ -172,7 +172,7 @@ export const SidebarSchemaItem = ({ }} className="p-0.5 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors opacity-0 group-hover/schema:opacity-100 ml-1 mr-3" - title={t("sidebar.refreshTables") || "Refresh"} + title={t`Refresh Tables` || "Refresh"} > @@ -185,13 +185,13 @@ export const SidebarSchemaItem = ({ {isLoading && !isLoaded ? (
- {t("sidebar.loadingSchema")} + {t`Loading schema...`}
) : ( <> {/* Tables */} setTablesOpen(!tablesOpen)} actions={ @@ -217,7 +217,7 @@ export const SidebarSchemaItem = ({ type="text" value={tableFilter} onChange={(e) => setTableFilter(e.target.value)} - placeholder={t("sidebar.filterTables")} + placeholder={t`Filter tables...`} className="w-full bg-surface-secondary text-xs text-secondary placeholder:text-muted rounded pl-6 pr-6 py-1 border border-default focus:outline-none focus:border-blue-500/50" onClick={(e) => e.stopPropagation()} /> @@ -234,7 +234,7 @@ export const SidebarSchemaItem = ({ )} {filteredTables.length === 0 ? (
- {tableFilter ? t("sidebar.noTablesMatch") : t("sidebar.noTables")} + {tableFilter ? t`No tables match` : t`No tables found`}
) : (
@@ -264,7 +264,7 @@ export const SidebarSchemaItem = ({ {/* Views */} setViewsOpen(!viewsOpen)} actions={ @@ -275,7 +275,7 @@ export const SidebarSchemaItem = ({ onCreateView(); }} className="p-1 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors" - title={t("sidebar.createView") || "Create New View"} + title={t`Create New View` || "Create New View"} > @@ -284,7 +284,7 @@ export const SidebarSchemaItem = ({ > {views.length === 0 ? (
- {t("sidebar.noViews")} + {t`No views found`}
) : (
@@ -308,7 +308,7 @@ export const SidebarSchemaItem = ({ {/* Triggers */} {showTriggers && ( setTriggersOpen(!triggersOpen)} actions={ @@ -319,7 +319,7 @@ export const SidebarSchemaItem = ({ onCreateTrigger(schemaName); }} className="p-1 rounded hover:bg-surface-secondary text-muted hover:text-primary transition-colors" - title={t("sidebar.createTrigger") || "Create New Trigger"} + title={t`Create New Trigger` || "Create New Trigger"} > @@ -334,7 +334,7 @@ export const SidebarSchemaItem = ({ type="text" value={triggerFilter} onChange={(e) => setTriggerFilter(e.target.value)} - placeholder={t("sidebar.filterTriggers")} + placeholder={t`Filter triggers...`} className="w-full bg-surface-secondary text-xs text-secondary placeholder:text-muted rounded pl-6 pr-6 py-1 border border-default focus:outline-none focus:border-blue-500/50" onClick={(e) => e.stopPropagation()} /> @@ -351,7 +351,7 @@ export const SidebarSchemaItem = ({ )} {filteredTriggers.length === 0 ? (
- {triggerFilter ? t("sidebar.noTriggersMatch") : t("sidebar.noTriggers")} + {triggerFilter ? t`No triggers match your filter` : t`No triggers found`}
) : (
@@ -372,13 +372,13 @@ export const SidebarSchemaItem = ({ {/* Routines */} setRoutinesOpen(!routinesOpen)} > {routines.length === 0 ? (
- {t("sidebar.noRoutines")} + {t`No routines found`}
) : (
@@ -390,7 +390,7 @@ export const SidebarSchemaItem = ({ className="flex items-center gap-1 px-2 py-1 w-full text-left text-xs font-semibold text-muted uppercase tracking-wider hover:text-secondary transition-colors" > {functionsOpen ? : } - {t("sidebar.functions")} + {t`Functions`} {groupedRoutines.functions.length} {functionsOpen && groupedRoutines.functions.map((routine) => ( @@ -414,7 +414,7 @@ export const SidebarSchemaItem = ({ className="flex items-center gap-1 px-2 py-1 w-full text-left text-xs font-semibold text-muted uppercase tracking-wider hover:text-secondary transition-colors" > {proceduresOpen ? : } - {t("sidebar.procedures")} + {t`Procedures`} {groupedRoutines.procedures.length} {proceduresOpen && groupedRoutines.procedures.map((routine) => ( diff --git a/src/components/layout/sidebar/SidebarTableItem.tsx b/src/components/layout/sidebar/SidebarTableItem.tsx index 42be1035..e4e485b0 100644 --- a/src/components/layout/sidebar/SidebarTableItem.tsx +++ b/src/components/layout/sidebar/SidebarTableItem.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { invoke } from "@tauri-apps/api/core"; import { Table as TableIcon, @@ -61,7 +61,7 @@ const SidebarTableItemImpl = ({ schemaVersion, schema, }: SidebarTableItemProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); // Prevent unused variable warning void onAddColumn; void onAddIndex; @@ -203,7 +203,7 @@ const SidebarTableItemImpl = ({ {isLoading ? (
- {t("sidebar.loadingSchema")} + {t`Loading schema...`}
) : ( <> @@ -221,7 +221,7 @@ const SidebarTableItemImpl = ({ }} > - {t("sidebar.columns")} + {t`columns`} {columns.length} @@ -256,7 +256,7 @@ const SidebarTableItemImpl = ({ }} > - {t("sidebar.keys")} + {t`keys`} {keys.length} @@ -298,7 +298,7 @@ const SidebarTableItemImpl = ({ : undefined} > - {t("sidebar.foreignKeys")} + {t`foreign keys`} {foreignKeys.length} @@ -333,7 +333,7 @@ const SidebarTableItemImpl = ({ : undefined} > - {t("sidebar.indexes")} + {t`indexes`} {indexesList.length} diff --git a/src/components/layout/sidebar/SidebarTriggerItem.tsx b/src/components/layout/sidebar/SidebarTriggerItem.tsx index 9a76d0c9..a43db678 100644 --- a/src/components/layout/sidebar/SidebarTriggerItem.tsx +++ b/src/components/layout/sidebar/SidebarTriggerItem.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Zap } from "lucide-react"; import clsx from "clsx"; import type { TriggerInfo } from "../../../contexts/DatabaseContext"; @@ -25,7 +25,7 @@ export const SidebarTriggerItem = ({ onContextMenu, onDoubleClick, }: SidebarTriggerItemProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const handleContextMenu = (e: React.MouseEvent) => { e.preventDefault(); @@ -56,7 +56,7 @@ export const SidebarTriggerItem = ({ )} - {t("sidebar.onTable", { table: trigger.table_name })} + {t`on ${trigger.table_name}`}
); diff --git a/src/components/layout/sidebar/SidebarViewItem.tsx b/src/components/layout/sidebar/SidebarViewItem.tsx index cc2e21d9..afc3e9d1 100644 --- a/src/components/layout/sidebar/SidebarViewItem.tsx +++ b/src/components/layout/sidebar/SidebarViewItem.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { invoke } from "@tauri-apps/api/core"; import { Eye, @@ -40,7 +40,7 @@ export const SidebarViewItem = ({ driver, schema, }: SidebarViewItemProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [isExpanded, setIsExpanded] = useState(false); const [columns, setColumns] = useState([]); @@ -114,7 +114,7 @@ export const SidebarViewItem = ({ {isLoading ? (
- {t("sidebar.loadingSchema")} + {t`Loading schema...`}
) : (
@@ -122,7 +122,7 @@ export const SidebarViewItem = ({ className="flex items-center gap-2 px-2 py-1 text-xs text-muted select-none" > - {t("sidebar.columns")} + {t`columns`} {columns.length} diff --git a/src/components/modals/AiApprovalModal.tsx b/src/components/modals/AiApprovalModal.tsx index 44880443..e5e00f62 100644 --- a/src/components/modals/AiApprovalModal.tsx +++ b/src/components/modals/AiApprovalModal.tsx @@ -1,5 +1,5 @@ import { useEffect, useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Check, ShieldAlert, X, Pencil, Maximize2, Minimize2 } from "lucide-react"; import Editor from "@monaco-editor/react"; import { useEditorTheme } from "../../hooks/useEditorTheme"; @@ -24,7 +24,7 @@ export function AiApprovalModal({ onDeny, onClose, }: AiApprovalModalProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const editorTheme = useEditorTheme(); const [editing, setEditing] = useState(false); const [editedQuery, setEditedQuery] = useState(approval.query); @@ -109,17 +109,12 @@ export function AiApprovalModal({

- {t("aiApproval.title")} + {t`AI requested a database write`}

{approval.clientHint - ? t("aiApproval.subtitleWithClient", { - client: approval.clientHint, - connection: approval.connectionName, - }) - : t("aiApproval.subtitle", { - connection: approval.connectionName, - })} + ? t`${approval.clientHint} on ${approval.connectionName} — review and decide before it executes.` + : t`On ${approval.connectionName} — review and decide before it executes.`}

@@ -128,7 +123,7 @@ export function AiApprovalModal({ @@ -140,7 +135,7 @@ export function AiApprovalModal({
@@ -175,16 +170,16 @@ export function AiApprovalModal({
{explainPlan && ( )}
@@ -204,23 +199,21 @@ export function AiApprovalModal({ ) : (
{approval.explainError - ? t("aiApproval.explainFailed", { - error: approval.explainError, - }) - : t("aiApproval.explainUnavailable")} + ? t`EXPLAIN failed: ${approval.explainError}` + : t`EXPLAIN unavailable for this query.`}
)}
setReason(e.target.value)} - placeholder={t("aiApproval.reasonPlaceholder")} + placeholder={t`e.g. Looks risky on prod, please confirm…`} className="w-full px-3 py-2 bg-base border border-strong rounded-lg text-sm text-primary focus:outline-none focus:border-blue-500" />
@@ -234,7 +227,7 @@ export function AiApprovalModal({ className="flex items-center gap-2 px-4 py-2 bg-red-600 hover:bg-red-500 disabled:opacity-50 text-white rounded-lg text-sm font-medium transition-colors" > - {t("aiApproval.deny")} + {t`Deny`}
@@ -267,16 +260,16 @@ export function AiApprovalModal({ >

- {t("aiApproval.preflightPlan")} + {t`Pre-flight execution plan`}

diff --git a/src/components/modals/AlertModal.tsx b/src/components/modals/AlertModal.tsx index 5d1b7110..441a4c64 100644 --- a/src/components/modals/AlertModal.tsx +++ b/src/components/modals/AlertModal.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { AlertTriangle, Info, AlertCircle, X } from "lucide-react"; import { Modal } from "../ui/Modal"; import type { AlertKind } from "../../contexts/AlertContext"; @@ -18,7 +18,7 @@ const iconConfig: Record { - const { t } = useTranslation(); + const { t } = useLingui(); const { Icon, bgClass, textClass } = iconConfig[kind]; return ( @@ -48,7 +48,7 @@ export const AlertModal = ({ isOpen, onClose, title, message, kind }: AlertModal onClick={onClose} className="px-4 py-2 bg-blue-600 hover:bg-blue-500 text-white rounded-lg text-sm font-medium transition-colors" > - {t("common.ok", "OK")} + {t`OK`}
diff --git a/src/components/modals/ClipboardImport/DataPreview.tsx b/src/components/modals/ClipboardImport/DataPreview.tsx index 658f9bdc..9f467538 100644 --- a/src/components/modals/ClipboardImport/DataPreview.tsx +++ b/src/components/modals/ClipboardImport/DataPreview.tsx @@ -1,5 +1,6 @@ +import { plural } from "@lingui/core/macro"; import { Maximize2, Minimize2 } from 'lucide-react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { useColumnResize } from '../../../hooks/useColumnResize'; const MAX_PREVIEW_ROWS = 10; @@ -13,7 +14,7 @@ interface DataPreviewProps { } export function DataPreview({ headers, rows, rowCount, isMaximized, onToggleMaximize }: DataPreviewProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const previewRows = isMaximized ? rows : rows.slice(0, MAX_PREVIEW_ROWS); const { widths, startResize } = useColumnResize(headers.length, 160); @@ -21,18 +22,18 @@ export function DataPreview({ headers, rows, rowCount, isMaximized, onToggleMaxi

- {t('clipboardImport.dataPreview')} + {t`Data Preview`}

- {t('clipboardImport.rowsTotal', { count: rowCount })} - {!isMaximized && rowCount > MAX_PREVIEW_ROWS && ` (${t('clipboardImport.showingFirst', { count: MAX_PREVIEW_ROWS })})`} + {plural(rowCount, { one: "# row", other: "# rows" })} + {!isMaximized && rowCount > MAX_PREVIEW_ROWS && ` (${t`showing first ${MAX_PREVIEW_ROWS}`})`} {onToggleMaximize && ( diff --git a/src/components/modals/ClipboardImport/ModeToggle.tsx b/src/components/modals/ClipboardImport/ModeToggle.tsx index c440d2ee..442a2218 100644 --- a/src/components/modals/ClipboardImport/ModeToggle.tsx +++ b/src/components/modals/ClipboardImport/ModeToggle.tsx @@ -1,5 +1,5 @@ import { Plus, ArrowDownToLine } from 'lucide-react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; type ImportMode = 'create' | 'append'; @@ -9,19 +9,19 @@ interface ModeToggleProps { } export function ModeToggle({ value, onChange }: ModeToggleProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const items: { id: ImportMode; icon: typeof Plus; title: string; hint: string }[] = [ { id: 'create', icon: Plus, - title: t('clipboardImport.createNew'), - hint: t('clipboardImport.modeCreateHint'), + title: t`Create new table`, + hint: t`A new table will be created`, }, { id: 'append', icon: ArrowDownToLine, - title: t('clipboardImport.appendTo'), - hint: t('clipboardImport.modeAppendHint'), + title: t`Append to existing`, + hint: t`Rows will be added to an existing table`, }, ]; diff --git a/src/components/modals/ClipboardImport/ParseSummary.tsx b/src/components/modals/ClipboardImport/ParseSummary.tsx index 9aca529c..aa18a55f 100644 --- a/src/components/modals/ClipboardImport/ParseSummary.tsx +++ b/src/components/modals/ClipboardImport/ParseSummary.tsx @@ -1,5 +1,5 @@ import { Database, Rows, Table2 } from 'lucide-react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { FormatBadge } from './FormatBadge'; import type { ClipboardFormat } from '../../../utils/clipboardParser'; @@ -20,7 +20,7 @@ export function ParseSummary({ hasHeaderRow, onToggleHeader, }: ParseSummaryProps) { - const { t } = useTranslation(); + const { t } = useLingui(); return (
@@ -28,12 +28,12 @@ export function ParseSummary({
{columnCount} - {t('clipboardImport.columnsLabel')} + {t`columns`}
{rowCount} - {t('clipboardImport.rowsLabel')} + {t({ message: "rows", context: "clipboardImport" })}
{activeDriver && (
@@ -49,7 +49,7 @@ export function ParseSummary({ onChange={(e) => onToggleHeader(e.target.checked)} className="accent-blue-500" /> - {t('clipboardImport.firstRowHeader')} + {t`First row as header`}
diff --git a/src/components/modals/ClipboardImport/SchemaEditor.tsx b/src/components/modals/ClipboardImport/SchemaEditor.tsx index 9c1d3b76..72428ad9 100644 --- a/src/components/modals/ClipboardImport/SchemaEditor.tsx +++ b/src/components/modals/ClipboardImport/SchemaEditor.tsx @@ -1,6 +1,6 @@ import { useMemo, useState } from 'react'; import { AlertTriangle, Maximize2, Minimize2, Trash2 } from 'lucide-react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { Select } from '../../ui/Select'; import type { DataTypeInfo } from '../../../types/dataTypes'; import { useColumnResize } from '../../../hooks/useColumnResize'; @@ -48,7 +48,7 @@ export function SchemaEditor({ onToggleMaximize, targetColumnOptions, }: SchemaEditorProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const typeOptions = availableTypes.map((ty) => ty.name); const isAppend = Array.isArray(targetColumnOptions); // Select options for the Target-column picker in append mode: @@ -104,7 +104,7 @@ export function SchemaEditor({ {selected.size > 0 ? ( <> - {t('clipboardImport.nSelected', { count: selected.size })} + {t`${selected.size} selected`}
) : ( <>

- {t('clipboardImport.schemaPreview')} + {t`Column Schema`}

{onToggleMaximize && ( @@ -163,7 +163,7 @@ export function SchemaEditor({ />
- {isAppend ? t('clipboardImport.sourceColumn') : t('createTable.colName')} + {isAppend ? t`Clipboard column` : t`Name`}
startResize(1, e)} className="absolute right-0 top-0 h-full w-1 cursor-col-resize hover:bg-blue-500/60 active:bg-blue-500 select-none" @@ -171,7 +171,7 @@ export function SchemaEditor({
- {t('clipboardImport.targetColumn')} + {t`Target column`}
startResize(2, e)} className="absolute right-0 top-0 h-full w-1 cursor-col-resize hover:bg-blue-500/60 active:bg-blue-500 select-none" @@ -180,7 +180,7 @@ export function SchemaEditor({ ) : ( <>
- {t('createTable.colType')} + {t`Type`}
startResize(2, e)} className="absolute right-0 top-0 h-full w-1 cursor-col-resize hover:bg-blue-500/60 active:bg-blue-500 select-none" @@ -196,7 +196,7 @@ export function SchemaEditor({ )}
- {t('clipboardImport.sample')} + {t`Sample values`}
startResize(isAppend ? 3 : 4, e)} className="absolute right-0 top-0 h-full w-1 cursor-col-resize hover:bg-blue-500/60 active:bg-blue-500 select-none" @@ -235,7 +235,7 @@ export function SchemaEditor({ /> )} {col.confidence === 'low' && ( - + )} @@ -256,12 +256,12 @@ export function SchemaEditor({ onColumnChange(i, { targetColumn: v, isNewColumn: false }); } }} - placeholder={t('clipboardImport.targetColumnPlaceholder')} - searchPlaceholder={t('common.search')} - noResultsLabel={t('common.noResults')} + placeholder={t`Choose target...`} + searchPlaceholder={t`Search...`} + noResultsLabel={t`No results found`} labels={{ - [SKIP_VALUE]: t('clipboardImport.skipColumn'), - [NEW_VALUE]: `+ ${t('clipboardImport.createNewColumn')}`, + [SKIP_VALUE]: t`Skip (do not import)`, + [NEW_VALUE]: `+ ${t`Create new column`}`, }} hasError={!col.isNewColumn && col.targetColumn === null} /> @@ -272,8 +272,8 @@ export function SchemaEditor({ options={typeOptions} onChange={(v) => onColumnChange(i, { sqlType: v })} placeholder="Type" - searchPlaceholder={t('common.search')} - noResultsLabel={t('common.noResults')} + searchPlaceholder={t`Search...`} + noResultsLabel={t`No results found`} />
@@ -319,7 +319,7 @@ export function SchemaEditor({ diff --git a/src/components/modals/ClipboardImport/TableNameInput.tsx b/src/components/modals/ClipboardImport/TableNameInput.tsx index 07cdf7ee..65303b66 100644 --- a/src/components/modals/ClipboardImport/TableNameInput.tsx +++ b/src/components/modals/ClipboardImport/TableNameInput.tsx @@ -1,5 +1,5 @@ import { Loader2, Sparkles, AlertTriangle } from 'lucide-react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; interface TableNameInputProps { value: string; @@ -18,19 +18,19 @@ export function TableNameInput({ aiLoading, onAiSuggest, }: TableNameInputProps) { - const { t } = useTranslation(); + const { t } = useLingui(); return (
onChange(e.target.value)} - placeholder={t('clipboardImport.tableNamePlaceholder')} + placeholder={t`e.g. sales_data`} className={`w-full bg-base border rounded-lg px-3 py-2 text-primary focus:outline-none transition-all font-mono text-sm ${ tableExists ? 'border-yellow-500/60 focus:border-yellow-500' : 'border-strong focus:border-blue-500' }`} @@ -39,7 +39,7 @@ export function TableNameInput({ {tableExists && (
- {t('clipboardImport.tableExists')} + {t`Already exists`}
)}
@@ -48,14 +48,14 @@ export function TableNameInput({ onClick={onAiSuggest} disabled={aiLoading} className="flex items-center gap-1.5 px-3 py-2 text-xs bg-purple-900/30 hover:bg-purple-900/50 border border-purple-800/40 text-purple-300 rounded-lg transition-colors disabled:opacity-50 whitespace-nowrap" - title={t('clipboardImport.aiSuggest')} + title={t`AI Suggest`} > {aiLoading ? ( ) : ( )} - {t('clipboardImport.aiSuggest')} + {t`AI Suggest`} )}
diff --git a/src/components/modals/ClipboardImportModal.tsx b/src/components/modals/ClipboardImportModal.tsx index 69afc600..dd180ae2 100644 --- a/src/components/modals/ClipboardImportModal.tsx +++ b/src/components/modals/ClipboardImportModal.tsx @@ -1,5 +1,6 @@ +import { plural } from "@lingui/core/macro"; import { useState, useEffect, useCallback, useMemo, useId } from 'react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { X, Clipboard, @@ -48,7 +49,7 @@ interface ImportResult { } export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardImportModalProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const titleId = useId(); const descriptionId = useId(); const errorId = useId(); @@ -110,7 +111,7 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm try { const text = await readText(); if (!text || !text.trim()) { - setError(t('clipboardImport.noData')); + setError(t`No data found in clipboard`); setParsed(null); return; } @@ -120,7 +121,7 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm const mapped = await toSchemaColumns(result.inferredColumns); setColumns(mapped); } catch { - setError(t('clipboardImport.noData')); + setError(t`No data found in clipboard`); } finally { setIsLoadingClipboard(false); } @@ -331,8 +332,8 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm const appendModeBlocked = importMode === 'append' && !tableExists; const selectedModeHint = importMode === 'append' - ? t('clipboardImport.modeAppendHint') - : t('clipboardImport.modeCreateHint'); + ? t`Rows will be added to an existing table` + : t`A new table will be created`; const describedBy = [descriptionId, error ? errorId : null, parsed?.warnings.length ? warningsId : null] .filter(Boolean) .join(' '); @@ -366,10 +367,10 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm

- {t('clipboardImport.title')} + {t({ message: "Import from Clipboard", context: "clipboardImport" })}

- {t('clipboardImport.subtitle')} + {t`Paste structured data and preview the schema before importing`}

@@ -382,17 +383,17 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm
{columns.length} - {t('clipboardImport.columnsLabel')} + {t`columns`}
{parsed.rowCount} - {t('clipboardImport.rowsLabel')} + {t({ message: "rows", context: "clipboardImport" })}
{parsed.warnings.length > 0 && (
- {t('clipboardImport.warningsCount', { count: parsed.warnings.length })} + {plural(parsed.warnings.length, { one: "# parsing warning", other: "# parsing warnings" })}
)} @@ -403,7 +404,7 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm
) : success ? ( @@ -442,11 +443,11 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm />
- +
@@ -465,15 +466,15 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm ) : ( <>
@@ -516,7 +517,7 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm
- +
{maximizedPane !== 'preview' && (
@@ -573,7 +574,7 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm )} - {t('clipboardImport.warningsCount', { count: parsed.warnings.length })} + {plural(parsed.warnings.length, { one: "# parsing warning", other: "# parsing warnings" })} {warningsExpanded && ( @@ -611,11 +612,11 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm
{parsed.rowCount > 0 - ? t('clipboardImport.rowsTotal', { count: parsed.rowCount }) - : t('clipboardImport.noData')} + ? plural(parsed.rowCount, { one: "# row", other: "# rows" }) + : t`No data found in clipboard`} {appendModeBlocked && ( - {t('clipboardImport.selectTablePlaceholder')} + {t`Select a table...`} )}
@@ -624,7 +625,7 @@ export function ClipboardImportModal({ isOpen, onClose, onSuccess }: ClipboardIm onClick={onClose} className="px-4 py-2 text-secondary hover:text-primary hover:bg-surface-secondary/50 rounded-lg transition-colors text-sm" > - {t('common.cancel')} + {t`Cancel`}
@@ -673,16 +674,16 @@ interface SuccessStateProps { } function SuccessState({ result, tableName, onClose }: SuccessStateProps) { - const { t } = useTranslation(); + const { t } = useLingui(); return (

- {t('clipboardImport.success', { count: result.rows_inserted, table: tableName })} + {plural(result.rows_inserted, { one: `# row imported into "${tableName}"`, other: `# rows imported into "${tableName}"` })}

{result.table_created && ( -

{t('clipboardImport.tableCreated')}

+

{t`New table created`}

)}
); diff --git a/src/components/modals/CommunityModal.tsx b/src/components/modals/CommunityModal.tsx index 23545341..3055ea70 100644 --- a/src/components/modals/CommunityModal.tsx +++ b/src/components/modals/CommunityModal.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { X, Github, Star } from "lucide-react"; import { openUrl } from "@tauri-apps/plugin-opener"; import { GITHUB_URL, DISCORD_URL } from "../../config/links"; @@ -11,7 +11,7 @@ interface CommunityModalProps { } export const CommunityModal = ({ isOpen, onClose }: CommunityModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); return ( @@ -23,8 +23,8 @@ export const CommunityModal = ({ isOpen, onClose }: CommunityModalProps) => {
-

{t("community.title")}

-

{t("community.subtitle")}

+

{t`Join the Community`}

+

{t`Help tabularis grow`}

@@ -62,8 +62,8 @@ export const CommunityModal = ({ isOpen, onClose }: CommunityModalProps) => {
-
{t("community.discordTitle")}
-
{t("community.discordDesc")}
+
{t`Join Discord`}
+
{t`Chat with the community, get help, suggest features`}
@@ -74,7 +74,7 @@ export const CommunityModal = ({ isOpen, onClose }: CommunityModalProps) => { onClick={onClose} className="px-4 py-2 text-secondary hover:text-primary transition-colors text-sm" > - {t("community.dismiss")} + {t`Maybe later`} diff --git a/src/components/modals/ConfigJsonModal.tsx b/src/components/modals/ConfigJsonModal.tsx index b10e46d7..47b07ace 100644 --- a/src/components/modals/ConfigJsonModal.tsx +++ b/src/components/modals/ConfigJsonModal.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useRef } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { FileJson, X, Loader2, RotateCcw } from "lucide-react"; import MonacoEditor, { type OnMount } from "@monaco-editor/react"; import { invoke } from "@tauri-apps/api/core"; @@ -14,7 +14,7 @@ interface ConfigJsonModalProps { } export const ConfigJsonModal = ({ isOpen, onClose }: ConfigJsonModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const editorTheme = useEditorTheme(); const [jsonValue, setJsonValue] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -72,10 +72,10 @@ export const ConfigJsonModal = ({ isOpen, onClose }: ConfigJsonModalProps) => {

- {t("settings.configJsonModal.title")} + {t`config.json`}

- {t("settings.editConfigJsonDesc")} + {t`Directly edit the raw configuration file. A restart is required to apply changes.`}

@@ -92,7 +92,7 @@ export const ConfigJsonModal = ({ isOpen, onClose }: ConfigJsonModalProps) => { {isLoading ? (
- {t("common.loading")} + {t`Loading...`}
) : (
@@ -131,14 +131,14 @@ export const ConfigJsonModal = ({ isOpen, onClose }: ConfigJsonModalProps) => {

- {t("settings.configJsonModal.restartRequired")} + {t`A restart is required to apply changes.`}

@@ -156,9 +156,9 @@ export const ConfigJsonModal = ({ isOpen, onClose }: ConfigJsonModalProps) => { diff --git a/src/components/modals/ConfirmModal.tsx b/src/components/modals/ConfirmModal.tsx index be6ef2a8..0fd9198a 100644 --- a/src/components/modals/ConfirmModal.tsx +++ b/src/components/modals/ConfirmModal.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { AlertTriangle, X } from "lucide-react"; import { Modal } from "../ui/Modal"; @@ -23,7 +23,7 @@ export const ConfirmModal = ({ onConfirm, variant = "danger", }: ConfirmModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const variantStyles = { danger: { @@ -72,7 +72,7 @@ export const ConfirmModal = ({ onClick={onClose} className="px-4 py-2 text-secondary hover:text-primary transition-colors text-sm" > - {t("common.cancel")} + {t`Cancel`}
diff --git a/src/components/modals/CreateForeignKeyModal.tsx b/src/components/modals/CreateForeignKeyModal.tsx index 3860c4dc..35d5facc 100644 --- a/src/components/modals/CreateForeignKeyModal.tsx +++ b/src/components/modals/CreateForeignKeyModal.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback } from 'react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { X, Save, Loader2, AlertTriangle, Link } from 'lucide-react'; import { invoke } from '@tauri-apps/api/core'; import { SqlPreview } from '../ui/SqlPreview'; @@ -35,7 +35,7 @@ export const CreateForeignKeyModal = ({ tableName, driver }: CreateForeignKeyModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeSchema } = useDatabase(); const { allDrivers } = useDrivers(); const canCreateFk = supportsCreateForeignKeys(getCapabilitiesForDriver(driver, allDrivers)); @@ -100,7 +100,7 @@ export const CreateForeignKeyModal = ({ const generatePreview = useCallback(async () => { if (!fkName || !localColumn || !refTable || !refColumn) { - setSqlPreview('-- ' + t('createFk.sqlPreview')); + setSqlPreview('-- ' + t`SQL Preview`); return; } try { @@ -127,7 +127,7 @@ export const CreateForeignKeyModal = ({ }, [generatePreview]); const handleCreate = async () => { - if (!fkName.trim()) { setError(t('createFk.nameRequired')); return; } + if (!fkName.trim()) { setError(t`Name is required`); return; } setLoading(true); setError(''); @@ -178,7 +178,7 @@ export const CreateForeignKeyModal = ({
-

{t('createFk.title')}

+

{t({ message: "Create Foreign Key", context: "createFk" })}

{tableName}

@@ -192,12 +192,12 @@ export const CreateForeignKeyModal = ({ {!canCreateFk && (
- {t('sidebar.sqliteFkError')} + {t`SQLite does not support dropping FKs via ALTER TABLE.`}
)}
- + { setFkName(e.target.value); setError(''); }} @@ -208,13 +208,13 @@ export const CreateForeignKeyModal = ({ {/* Column mapping */}
- +
- + @@ -224,9 +224,9 @@ export const CreateForeignKeyModal = ({
- + {fetchingRefCols ? ( -
{t('common.loading')}
+
{t`Loading...`}
) : ( setOnUpdate(e.target.value)} className={selectClass} style={selectStyle}> {ON_ACTIONS.map(a => )}
- + @@ -253,7 +253,7 @@ export const CreateForeignKeyModal = ({ {/* SQL Preview */}
-
{t('createFk.sqlPreview')}
+
{t`SQL Preview`}
@@ -268,7 +268,7 @@ export const CreateForeignKeyModal = ({ {/* Footer */}
diff --git a/src/components/modals/CreateIndexModal.tsx b/src/components/modals/CreateIndexModal.tsx index 8a366f75..abfb8379 100644 --- a/src/components/modals/CreateIndexModal.tsx +++ b/src/components/modals/CreateIndexModal.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback } from 'react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { X, Save, Loader2, ListTree, AlertTriangle } from 'lucide-react'; import { invoke } from '@tauri-apps/api/core'; import { SqlPreview } from '../ui/SqlPreview'; @@ -26,7 +26,7 @@ export const CreateIndexModal = ({ connectionId, tableName, }: CreateIndexModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeSchema } = useDatabase(); const [indexName, setIndexName] = useState(''); const [isUnique, setIsUnique] = useState(false); @@ -63,7 +63,7 @@ export const CreateIndexModal = ({ const generatePreview = useCallback(async () => { if (!indexName || selectedColumns.length === 0) { - setSqlPreview('-- ' + t('createIndex.nameRequired')); + setSqlPreview('-- ' + t`Index name is required`); return; } try { @@ -87,8 +87,8 @@ export const CreateIndexModal = ({ }, [generatePreview]); const handleCreate = async () => { - if (!indexName.trim()) { setError(t('createIndex.nameRequired')); return; } - if (selectedColumns.length === 0) { setError(t('createIndex.colRequired')); return; } + if (!indexName.trim()) { setError(t`Index name is required`); return; } + if (selectedColumns.length === 0) { setError(t`At least one column must be selected`); return; } setLoading(true); setError(''); @@ -127,7 +127,7 @@ export const CreateIndexModal = ({
-

{t('createIndex.title')}

+

{t({ message: "Create Index", context: "createIndex" })}

{tableName}

@@ -139,7 +139,7 @@ export const CreateIndexModal = ({ {/* Body */}
- + { setIndexName(e.target.value); setError(''); }} @@ -150,10 +150,10 @@ export const CreateIndexModal = ({
- + {fetchingCols ? (
- {t('common.loading')} + {t`Loading...`}
) : (
@@ -183,13 +183,13 @@ export const CreateIndexModal = ({ className="accent-blue-500" />
{/* SQL Preview */}
-
{t('createIndex.sqlPreview')}
+
{t`SQL Preview`}
@@ -204,7 +204,7 @@ export const CreateIndexModal = ({ {/* Footer */}
diff --git a/src/components/modals/CreateTableModal.tsx b/src/components/modals/CreateTableModal.tsx index d9ea83bf..67bbd71b 100644 --- a/src/components/modals/CreateTableModal.tsx +++ b/src/components/modals/CreateTableModal.tsx @@ -1,5 +1,5 @@ import { useState, useMemo, useEffect, useCallback } from 'react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { X, Plus, Trash2, Save, Loader2, AlertTriangle } from 'lucide-react'; import { invoke } from '@tauri-apps/api/core'; import { useDatabase } from '../../hooks/useDatabase'; @@ -29,7 +29,7 @@ interface CreateTableModalProps { } export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateTableModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeConnectionId, activeDriver, activeSchema } = useDatabase(); const targetSchema = resolveCreateTableSchema(schema, activeSchema); const currentDriver = activeDriver || "sqlite"; @@ -51,11 +51,11 @@ export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateT const generatePreview = useCallback(async () => { if (!tableName.trim()) { - setSqlPreview('-- ' + t('createTable.nameRequired')); + setSqlPreview('-- ' + t`Table name is required`); return; } if (columns.length === 0) { - setSqlPreview('-- ' + t('createTable.colRequired')); + setSqlPreview('-- ' + t`At least one column is required`); return; } @@ -112,7 +112,7 @@ export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateT const handleCreate = async () => { if (!tableName.trim()) { - setError(t('createTable.nameRequired')); + setError(t`Table name is required`); return; } setLoading(true); @@ -149,7 +149,7 @@ export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateT setColumns([{ id: '1', name: 'id', type: 'INTEGER', length: '', isPk: true, isNullable: false, isAutoInc: true, defaultValue: '' }]); } catch (e: unknown) { console.error(e); - setError(t('createTable.failCreate') + (e instanceof Error ? e.message : String(e))); + setError(t`Failed to create table: ` + (e instanceof Error ? e.message : String(e))); } finally { setLoading(false); } @@ -167,7 +167,7 @@ export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateT
-

{t('createTable.title')}

+

{t`Create New Table`}

{currentDriver.toUpperCase()}

@@ -181,12 +181,12 @@ export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateT {/* Table Name */}
- + { setTableName(e.target.value); setError(''); }} className={`w-full bg-base border rounded-lg px-3 py-2 text-primary focus:border-blue-500 focus:outline-none transition-all font-mono ${!tableName.trim() && error ? 'border-red-500' : 'border-strong'}`} - placeholder={t('createTable.tableNamePlaceholder')} + placeholder={t`e.g. users, orders, products`} autoFocus />
@@ -194,9 +194,9 @@ export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateT {/* Columns Grid */}
-

{t('createTable.columns')}

+

{t`Columns`}

@@ -205,13 +205,13 @@ export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateT
{t('createTable.colName')}{t('createTable.colType')}{t('createTable.colLen')}{t('createTable.colPk')}{t('createTable.colNn')}{t('createTable.colAi')}{t('createTable.colDefault')}{t`Name`}{t`Type`}{t`Len`}{t`PK`}{t`NN`}{t({ message: "AI", context: "createTable" })}{t({ message: "Default", context: "createTable" })}
@@ -316,14 +316,14 @@ export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateT return exts.length > 0 ? (
- {t('createTable.requiresExtension', { ext: exts.join(', ') })} + {t`Requires extension: ${exts.join(', ')}`}
) : null; })()} {/* SQL Preview - always visible */}
-
{t('createTable.sqlPreview')}
+
{t`SQL Preview`}
@@ -341,7 +341,7 @@ export const CreateTableModal = ({ isOpen, onClose, onSuccess, schema }: CreateT onClick={onClose} className="px-4 py-2 text-secondary hover:text-primary transition-colors text-sm" > - {t('createTable.cancel')} + {t`Cancel`} diff --git a/src/components/modals/DumpDatabaseModal.tsx b/src/components/modals/DumpDatabaseModal.tsx index 41187753..c53c8925 100644 --- a/src/components/modals/DumpDatabaseModal.tsx +++ b/src/components/modals/DumpDatabaseModal.tsx @@ -1,5 +1,6 @@ import { useState, useEffect } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; +import { dumpErrorKeys } from "../../i18n/registries/dumpErrorKeys"; import { invoke } from "@tauri-apps/api/core"; import { save } from "@tauri-apps/plugin-dialog"; import { useAlert } from "../../hooks/useAlert"; @@ -28,7 +29,7 @@ export const DumpDatabaseModal = ({ databaseName, tables, }: DumpDatabaseModalProps) => { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const { activeSchema } = useDatabase(); const { showAlert } = useAlert(); const [includeStructure, setIncludeStructure] = useState(true); @@ -76,7 +77,7 @@ export const DumpDatabaseModal = ({ ); if (!validation.isValid && validation.errorKey) { - showAlert(t(validation.errorKey), { kind: "error" }); + showAlert(i18n._(dumpErrorKeys[validation.errorKey]), { kind: "error" }); return; } @@ -109,12 +110,12 @@ export const DumpDatabaseModal = ({ ...(activeSchema ? { schema: activeSchema } : {}), }); - showAlert(t("dump.success"), { kind: "info" }); + showAlert(t`Database exported successfully`, { kind: "info" }); onClose(); } catch (e) { // Check if it's a cancellation error (optional logic, but usually we just log) console.error(e); - showAlert(t("dump.failure") + String(e), { kind: "error" }); + showAlert(t`Export failed: ` + String(e), { kind: "error" }); } finally { setIsExporting(false); } @@ -134,7 +135,7 @@ export const DumpDatabaseModal = ({

- {t("dump.title")} - {databaseName} + {t({ message: "Dump Database", context: "dump" })} - {databaseName}

@@ -150,7 +151,7 @@ export const DumpDatabaseModal = ({ className="rounded border-default bg-base focus:ring-blue-500 w-4 h-4" disabled={isExporting} /> - {t("dump.includeStructure")} + {t`Structure (DDL)`} {/* Table Selection */}
- {t("dump.selectTables")} ({selectedTables.size}/{tables.length}) + {t`Select Tables`} ({selectedTables.size}/{tables.length})
@@ -196,7 +197,7 @@ export const DumpDatabaseModal = ({ {/* Elapsed Time */} {isExporting && elapsedTime > 0 && (
- {t("dump.elapsedTime")}: {formatElapsedTime(elapsedTime)} + {t`Elapsed time`}: {formatElapsedTime(elapsedTime)}
)}
@@ -207,7 +208,7 @@ export const DumpDatabaseModal = ({ disabled={isExporting} className="px-4 py-2 rounded hover:bg-surface-secondary transition-colors" > - {t("common.cancel")} + {t`Cancel`} {isExporting ? ( ) : ( )}
diff --git a/src/components/modals/ErrorModal.tsx b/src/components/modals/ErrorModal.tsx index 5d999d41..ac07a26d 100644 --- a/src/components/modals/ErrorModal.tsx +++ b/src/components/modals/ErrorModal.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { AlertTriangle, X } from "lucide-react"; import { Modal } from "../ui/Modal"; @@ -9,7 +9,7 @@ interface ErrorModalProps { } export const ErrorModal = ({ isOpen, onClose, message }: ErrorModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); return ( @@ -20,7 +20,7 @@ export const ErrorModal = ({ isOpen, onClose, message }: ErrorModalProps) => {

- {t("common.error")} + {t({ message: "Error", context: "common" })}

diff --git a/src/components/modals/ExplainSelectionModal.tsx b/src/components/modals/ExplainSelectionModal.tsx index b0a72a41..42b5da8a 100644 --- a/src/components/modals/ExplainSelectionModal.tsx +++ b/src/components/modals/ExplainSelectionModal.tsx @@ -1,5 +1,6 @@ +import { plural } from "@lingui/core/macro"; import { useState, useEffect, useCallback, useRef } from 'react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { X, Network } from 'lucide-react'; import { Modal } from '../ui/Modal'; import { statementLabel } from '../../utils/sql'; @@ -16,7 +17,7 @@ const ExplainSelectionContent = ({ onSelect, onClose, }: Omit) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [focusedIndex, setFocusedIndex] = useState(0); const itemRefs = useRef<(HTMLDivElement | null)[]>([]); @@ -57,12 +58,10 @@ const ExplainSelectionContent = ({

- {t('editor.explainSelection.title')} + {t`Select Query to Explain`}

- {t('editor.explainSelection.queriesFound', { - count: queries.length, - })} + {plural(queries.length, { one: "# explainable query found", other: "# explainable queries found" })}

@@ -130,19 +129,19 @@ const ExplainSelectionContent = ({ Enter {' '} - {t('editor.explainSelection.explainFocused')} + {t`explain focused`} 1-9 {' '} - {t('editor.explainSelection.explainNth')} + {t`explain Nth`} Esc {' '} - {t('editor.explainSelection.cancel')} + {t`cancel`}
diff --git a/src/components/modals/ExportProgressModal.tsx b/src/components/modals/ExportProgressModal.tsx index c30ae46e..7980ddd7 100644 --- a/src/components/modals/ExportProgressModal.tsx +++ b/src/components/modals/ExportProgressModal.tsx @@ -1,5 +1,5 @@ import { X, FileText, Loader2, CheckCircle, AlertCircle } from "lucide-react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Modal } from "../ui/Modal"; export type ExportStatus = "exporting" | "completed" | "error"; @@ -23,7 +23,7 @@ export const ExportProgressModal = ({ fileName, errorMessage, }: ExportProgressModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); return ( @@ -32,10 +32,10 @@ export const ExportProgressModal = ({

{status === "exporting" - ? t("editor.exporting") + ? t`Exporting...` : status === "completed" - ? t("common.success") - : t("common.error")} + ? t({ message: "Success", context: "common" }) + : t({ message: "Error", context: "common" })}

@@ -63,7 +63,7 @@ export const ExportProgressModal = ({

) : (

- {t("editor.rowsProcessed")}:{" "} + {t`Rows Processed`}:{" "} {rowsProcessed.toLocaleString()} @@ -79,14 +79,14 @@ export const ExportProgressModal = ({ className="px-4 py-2 bg-red-900/30 hover:bg-red-900/50 text-red-200 border border-red-900/50 rounded flex items-center gap-2 transition-colors text-sm font-medium" > - {t("common.cancel")} + {t`Cancel`} ) : ( )} diff --git a/src/components/modals/GenerateSQLModal.tsx b/src/components/modals/GenerateSQLModal.tsx index f1f94709..90a973be 100644 --- a/src/components/modals/GenerateSQLModal.tsx +++ b/src/components/modals/GenerateSQLModal.tsx @@ -1,5 +1,6 @@ import { useState, useEffect } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; +import { msg } from "@lingui/core/macro"; import clsx from "clsx"; import {X, Loader2, Copy, Check, FileCode, List, Table2, PenLine, Trash2, Play} from "lucide-react"; import { invoke } from "@tauri-apps/api/core"; @@ -27,7 +28,7 @@ export const GenerateSQLModal = ({ onClose, tableName, }: GenerateSQLModalProps) => { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const navigate = useNavigate(); const { activeConnectionId, activeDriver, activeSchema, activeCapabilities } = useDatabase(); @@ -75,7 +76,7 @@ export const GenerateSQLModal = ({ setSql(generatedSQL); } catch (err) { console.error(err); - showAlert(String(err), { title: t("common.error"), kind: "error" }); + showAlert(String(err), { title: t({ message: "Error", context: "common" }), kind: "error" }); } finally { setLoading(false); } @@ -150,7 +151,7 @@ export const GenerateSQLModal = ({

- {t("generateSQL.title", { table: tableName })} + {t`Generated SQL: ${tableName}`}

@@ -169,30 +170,30 @@ export const GenerateSQLModal = ({ { id: "create" as SqlTab, icon: FileCode, - labelKey: "generateSQL.tabCreateTable", + label: msg`Create Table`, }, { id: "select-all" as SqlTab, icon: List, - labelKey: "generateSQL.tabSelectAll", + label: msg`Select *`, }, { id: "select-fields" as SqlTab, icon: Table2, - labelKey: "generateSQL.tabSelectFields", + label: msg`Select [fields]`, }, { id: "update" as SqlTab, icon: PenLine, - labelKey: "generateSQL.tabUpdate", + label: msg`Update`, }, { id: "delete" as SqlTab, icon: Trash2, - labelKey: "generateSQL.tabDelete", + label: msg`Delete`, }, ] as const - ).map(({ id: tabId, icon: Icon, labelKey }) => ( + ).map(({ id: tabId, icon: Icon, label }) => ( ))} @@ -214,7 +215,7 @@ export const GenerateSQLModal = ({ {loading ? (
- {t("generateSQL.loading")} + {t`Generating SQL...`}
) : (
@@ -238,14 +239,14 @@ export const GenerateSQLModal = ({ className="px-4 py-2 bg-surface-secondary hover:bg-surface-tertiary text-secondary hover:text-primary border border-default rounded-lg text-sm font-medium transition-colors flex items-center gap-2" > - {t("generateSQL.runInConsole")} + {t`Run in console`}
)} diff --git a/src/components/modals/ImportDatabaseModal.tsx b/src/components/modals/ImportDatabaseModal.tsx index 2a68e6a3..2ce680d4 100644 --- a/src/components/modals/ImportDatabaseModal.tsx +++ b/src/components/modals/ImportDatabaseModal.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { invoke } from "@tauri-apps/api/core"; import { listen } from "@tauri-apps/api/event"; import { useAlert } from "../../hooks/useAlert"; @@ -32,7 +32,7 @@ export const ImportDatabaseModal = ({ filePath, onSuccess, }: ImportDatabaseModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeSchema } = useDatabase(); const { showAlert } = useAlert(); const [isImporting, setIsImporting] = useState(false); @@ -73,7 +73,7 @@ export const ImportDatabaseModal = ({ setIsImporting(false); if (!errorMsg.includes("cancelled")) { - showAlert(t("dump.importFailure") + ": " + errorMsg, { + showAlert(t`Import failed: ` + ": " + errorMsg, { kind: "error", }); } @@ -126,7 +126,7 @@ export const ImportDatabaseModal = ({ try { await invoke("cancel_import", { connectionId }); - showAlert(t("dump.importCancelled"), { kind: "info" }); + showAlert(t`Import cancelled`, { kind: "info" }); onClose(); } catch (e) { console.error("Failed to cancel import:", e); @@ -139,7 +139,7 @@ export const ImportDatabaseModal = ({

- {t("dump.importTitle")} - {databaseName} + {t`Import Database`} - {databaseName}

@@ -259,14 +256,14 @@ export const ImportDatabaseModal = ({ className="px-4 py-2 bg-red-600 hover:bg-red-700 text-white rounded flex items-center gap-2 transition-colors" > - {t("common.cancel")} + {t`Cancel`} ) : ( )} diff --git a/src/components/modals/K8sConnectionsModal.tsx b/src/components/modals/K8sConnectionsModal.tsx index aafce04f..28508279 100644 --- a/src/components/modals/K8sConnectionsModal.tsx +++ b/src/components/modals/K8sConnectionsModal.tsx @@ -1,5 +1,6 @@ import { useState, useEffect, useCallback } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; +import { k8sErrorKeys } from "../../i18n/registries/k8sErrorKeys"; import { X, Plus, @@ -44,7 +45,7 @@ export function K8sConnectionsModal({ onClose, defaultPort, }: K8sConnectionsModalProps) { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const [connections, setConnections] = useState([]); const [editingId, setEditingId] = useState(null); const [isCreating, setIsCreating] = useState(false); @@ -208,7 +209,7 @@ export function K8sConnectionsModal({ port: effectivePort, }); if (!validation.isValid) { - setValidationError(t(validation.errorKey)); + setValidationError(i18n._(k8sErrorKeys[validation.errorKey])); return; } const input: K8sConnectionInput = validation.value; @@ -259,7 +260,7 @@ export function K8sConnectionsModal({ {/* Header */}

- {t("k8sConnections.title")} + {t`Kubernetes Connections`}

@@ -444,54 +445,54 @@ function EditForm({ onSave, onCancel, }: EditFormProps) { - const { t } = useTranslation(); + const { t } = useLingui(); return (
- + setName(e.target.value)} className={InputClass} - placeholder={t("k8sConnections.namePlaceholder")} + placeholder={t`My K8s cluster`} />
- + setNamespace(val)} - placeholder={t("k8sConnections.chooseNamespace")} - searchPlaceholder={t("common.search")} - noResultsLabel={t("common.noResults")} + placeholder={t`Choose a namespace...`} + searchPlaceholder={t`Search...`} + noResultsLabel={t`No results found`} />
setResourceName(val)} - placeholder={t("k8sConnections.chooseResource")} - searchPlaceholder={t("common.search")} - noResultsLabel={t("common.noResults")} + placeholder={t`Choose a resource...`} + searchPlaceholder={t`Search...`} + noResultsLabel={t`No results found`} />
- + - {t("k8sConnections.testing")} + {t`Testing...`} )} {testStatus === "success" && ( @@ -574,20 +575,20 @@ function EditForm({ ) : ( )} - {t("k8sConnections.test")} + {t`Test`}
diff --git a/src/components/modals/McpModal.tsx b/src/components/modals/McpModal.tsx index 68e329c5..3caceb52 100644 --- a/src/components/modals/McpModal.tsx +++ b/src/components/modals/McpModal.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useState, useMemo } from "react"; import { invoke } from "@tauri-apps/api/core"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { X, Check, Copy, Cpu, Terminal } from "lucide-react"; import { useAlert } from "../../hooks/useAlert"; import Editor from "@monaco-editor/react"; @@ -56,7 +56,7 @@ const ClientIcon = ({ }; export const McpModal = ({ isOpen, onClose }: McpModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const editorTheme = useEditorTheme(); const { showAlert } = useAlert(); const [clients, setClients] = useState([]); @@ -113,13 +113,13 @@ export const McpModal = ({ isOpen, onClose }: McpModalProps) => { const handleInstall = async (clientId: string) => { try { const clientName = await invoke("install_mcp_config", { clientId }); - showAlert(t("mcp.successMsg", { client: clientName }), { + showAlert(t`Configuration installed successfully for ${clientName}! Restart the app to apply.`, { kind: "info", - title: t("mcp.successTitle"), + title: t({ message: "Success", context: "mcp" }), }); await loadStatus(); } catch (e) { - showAlert(String(e), { kind: "error", title: t("mcp.errorTitle") }); + showAlert(String(e), { kind: "error", title: t({ message: "Installation Failed", context: "mcp" }) }); } }; @@ -135,8 +135,8 @@ export const McpModal = ({ isOpen, onClose }: McpModalProps) => {
-

{t("mcp.title")}

-

{t("mcp.subtitle")}

+

{t`MCP Server Integration`}

+

{t`Connect Tabularis to Claude Desktop, Cursor, and more`}

)} @@ -214,7 +214,7 @@ export const McpModal = ({ isOpen, onClose }: McpModalProps) => { {selectedClient && !selectedClient.installed && (
@@ -281,7 +281,7 @@ export const McpModal = ({ isOpen, onClose }: McpModalProps) => {
)}

- {isCommandClient ? t("mcp.manualCommandText") : t("mcp.manualText")} + {isCommandClient ? t`Run this command in your terminal, then restart Claude Code.` : t`Add this to your client config file manually if automatic install fails.`}

)} @@ -300,7 +300,7 @@ export const McpModal = ({ isOpen, onClose }: McpModalProps) => { onClick={onClose} className="px-4 py-2 text-secondary hover:text-primary hover:bg-surface-tertiary transition-colors text-sm rounded-lg" > - {t("common.close")} + {t`Close`} diff --git a/src/components/modals/ModifyColumnModal.tsx b/src/components/modals/ModifyColumnModal.tsx index fab0ebe7..96f69dde 100644 --- a/src/components/modals/ModifyColumnModal.tsx +++ b/src/components/modals/ModifyColumnModal.tsx @@ -1,5 +1,5 @@ import { useState, useMemo, useEffect, useCallback } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { X, Save, Loader2, AlertTriangle, Columns, Plus } from "lucide-react"; import { invoke } from "@tauri-apps/api/core"; import { SqlPreview } from "../ui/SqlPreview"; @@ -40,7 +40,7 @@ export const ModifyColumnModal = ({ driver, column, }: ModifyColumnModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeSchema } = useDatabase(); const { dataTypes } = useDataTypes(driver); const { allDrivers } = useDrivers(); @@ -94,7 +94,7 @@ export const ModifyColumnModal = ({ // Generate SQL preview via backend const generatePreview = useCallback(async () => { if (!form.name) { - setSqlPreview("-- " + t("modifyColumn.nameRequired")); + setSqlPreview("-- " + t`Column name is required`); return; } @@ -141,7 +141,7 @@ export const ModifyColumnModal = ({ const handleSubmit = async () => { if (!form.name.trim()) { - setError(t("modifyColumn.nameRequired")); + setError(t`Column name is required`); return; } setLoading(true); @@ -189,7 +189,7 @@ export const ModifyColumnModal = ({ onClose(); } catch (e) { console.error(e); - setError(t("modifyColumn.fail") + String(e)); + setError(t`Failed: ` + String(e)); } finally { setLoading(false); } @@ -205,7 +205,7 @@ export const ModifyColumnModal = ({ {isEdit ? : }

- {isEdit ? t("modifyColumn.titleEdit") : t("modifyColumn.titleAdd")} + {isEdit ? t({ message: "Modify Column", context: "modifyColumn" }) : t({ message: "Add Column", context: "modifyColumn" })}

diff --git a/src/components/modals/NewConnectionModal.tsx b/src/components/modals/NewConnectionModal.tsx index b421eeee..64b4c0de 100644 --- a/src/components/modals/NewConnectionModal.tsx +++ b/src/components/modals/NewConnectionModal.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useMemo, useCallback, useRef } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { X, Check, @@ -155,7 +155,7 @@ export const NewConnectionModal = ({ onSave, initialConnection, }: NewConnectionModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { drivers } = useDrivers(); // ── form state ── @@ -316,7 +316,7 @@ export const NewConnectionModal = ({ const connectionStringPlaceholder = activeDriver?.capabilities?.connection_string_example?.trim() || activeDriver?.capabilities?.connectionStringExample?.trim() || - t("newConnection.connectionStringPlaceholder"); + t`e.g. mysql://user:pass@localhost:3306/db`; const isMultiDb = isMultiDatabaseCapable(activeDriver?.capabilities); // ── plugin slot: connection-modal.connection_content ── @@ -511,7 +511,7 @@ export const NewConnectionModal = ({ ? err : err instanceof Error ? err.message - : t("newConnection.failLoadDatabases"); + : t`Failed to load databases. Check your credentials.`; setDatabaseLoadError(errorMsg); setAvailableDatabases([]); } finally { @@ -700,7 +700,7 @@ export const NewConnectionModal = ({ const saveConnection = async () => { if (!name.trim()) { setStatus("error"); - setMessage(t("newConnection.nameRequired")); + setMessage(t({ message: "Connection name is required", context: "newConnection" })); setTestResult("error"); setNameError(true); nameInputRef.current?.focus(); @@ -709,7 +709,7 @@ export const NewConnectionModal = ({ if (isMultiDb) { if (selectedDatabasesState.length === 0) { setStatus("error"); - setMessage(t("newConnection.noDatabasesSelected")); + setMessage(t`Select at least one database`); setTestResult("error"); setActiveTab("databases"); setDatabasesTabError(true); @@ -721,7 +721,7 @@ export const NewConnectionModal = ({ (typeof formData.database === "string" && !formData.database.trim())) ) { setStatus("error"); - setMessage(t("newConnection.dbNameRequired")); + setMessage(t`Database name is required`); setTestResult("error"); return; } @@ -790,7 +790,7 @@ export const NewConnectionModal = ({ onClose(); } catch (err) { setStatus("error"); - setMessage(typeof err === "string" ? err : t("newConnection.failSave")); + setMessage(typeof err === "string" ? err : t`Failed to save connection`); setTestResult("error"); } }; @@ -865,7 +865,7 @@ export const NewConnectionModal = ({

- {t("newConnection.noGeneralSettings")} + {t`No general settings available for this driver.`}

) @@ -874,8 +874,8 @@ export const NewConnectionModal = ({
)}
@@ -971,13 +971,13 @@ export const NewConnectionModal = ({ > updateField("host", v)} placeholder="localhost" /> updateField("port", v)} type="number" @@ -988,13 +988,13 @@ export const NewConnectionModal = ({ {/* User + Password */}
updateField("username", v)} - placeholder={t("newConnection.usernamePlaceholder")} + placeholder={t`Enter username`} /> { setPasswordDirty(true); @@ -1004,7 +1004,7 @@ export const NewConnectionModal = ({ placeholder={ initialConnection && !passwordDirty && !formData.password ? "••••••••" - : t("newConnection.passwordPlaceholder") + : t`Enter password` } />
@@ -1014,7 +1014,7 @@ export const NewConnectionModal = ({
{availableDatabases.length > 0 ? ( @@ -1045,9 +1045,9 @@ export const NewConnectionModal = ({ } options={availableDatabases} onChange={(val) => updateField("database", val)} - placeholder={t("newConnection.selectDatabase")} - searchPlaceholder={t("common.search")} - noResultsLabel={t("newConnection.noDatabasesFound")} + placeholder={t`Select a database`} + searchPlaceholder={t`Search...`} + noResultsLabel={t`No databases found`} /> ) : ( )} {databaseLoadError && ( @@ -1085,7 +1085,7 @@ export const NewConnectionModal = ({ className="accent-blue-500 w-3.5 h-3.5 rounded" /> - {t("newConnection.saveKeychain")} + {t`Save passwords in Keychain`} @@ -1100,9 +1100,9 @@ export const NewConnectionModal = ({ className="accent-blue-500 w-3.5 h-3.5 rounded mt-0.5" /> - {t("settings.detectJsonInTextColumns")} + {t`Detect JSON in text columns`} - {t("settings.detectJsonInTextColumnsDesc")} + {t`Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.`} @@ -1117,7 +1117,7 @@ export const NewConnectionModal = ({ onChange={setAppearance} connectionId={effectiveConnectionId} driverManifest={activeDriver} - connectionName={name || t("newConnection.unnamedConnection")} + connectionName={name || t`Unnamed connection`} onImageUploaded={handleImageUploaded} /> ); @@ -1127,7 +1127,7 @@ export const NewConnectionModal = ({

- {t("newConnection.selectDatabasesHint")} + {t`Select the databases to include in this connection.`}

{databaseLoadError && ( @@ -1159,7 +1159,7 @@ export const NewConnectionModal = ({ type="text" value={dbSearchQuery} onChange={(e) => setDbSearchQuery(e.target.value)} - placeholder={t("common.search")} + placeholder={t`Search...`} autoCorrect="off" autoCapitalize="off" autoComplete="off" @@ -1193,8 +1193,8 @@ export const NewConnectionModal = ({ db.toLowerCase().includes(dbSearchQuery.toLowerCase()), ) .every((db) => selectedDatabasesState.includes(db)) - ? t("sidebar.deselectAll") - : t("sidebar.selectAll")} + ? t({ message: "Deselect All", context: "sidebar" }) + : t({ message: "Select All", context: "sidebar" })}
@@ -1234,17 +1234,15 @@ export const NewConnectionModal = ({
{selectedDatabasesState.length > 0 - ? t("newConnection.selectedDatabases", { - count: selectedDatabasesState.length, - }) - : t("newConnection.noDatabasesSelected")} + ? t`${selectedDatabasesState.length} database(s) selected` + : t`Select at least one database`}
) : (

- {t("newConnection.loadDatabasesHint")} + {t`Click Load Databases to fetch available databases.`}

)} @@ -1255,13 +1253,13 @@ export const NewConnectionModal = ({ const sslTabContent = (

- {t("newConnection.sslDescription")} + {t`Configure SSL/TLS for secure database connections (optional).`}

{/* SSL Mode */}
@@ -1355,7 +1353,7 @@ export const NewConnectionModal = ({ {/* Client Certificate */}
@@ -1393,7 +1391,7 @@ export const NewConnectionModal = ({ {/* Client Key */}
@@ -1435,7 +1433,7 @@ export const NewConnectionModal = ({ // ── rendered SSH tab content ── const sshTabContent = !isNetworkDriver ? (

- {t("newConnection.sshNotAvailable")} + {t`SSH is not available for this driver.`}

) : (
@@ -1457,7 +1455,7 @@ export const NewConnectionModal = ({ className="accent-blue-500 w-3.5 h-3.5 rounded" /> - {t("newConnection.useSsh")} + {t`Use SSH Tunnel`} @@ -1490,8 +1488,8 @@ export const NewConnectionModal = ({ )} > {mode === "existing" - ? t("newConnection.useSshConnection") - : t("newConnection.createInlineSsh")} + ? t`Use Existing SSH Connection` + : t`Configure SSH Inline`} ))}
@@ -1501,7 +1499,7 @@ export const NewConnectionModal = ({
{" "} - {t("newConnection.sshPasswordMissing")} + {t`SSH Password missing. Please re-enter.`}

)}
updateField("ssh_key_file", v)} - placeholder={t("newConnection.sshKeyFilePlaceholder")} + placeholder={t`/path/to/id_rsa`} /> updateField("ssh_key_passphrase", v)} type="password" - placeholder={t("newConnection.sshKeyPassphrasePlaceholder")} + placeholder={t`Enter key passphrase if encrypted`} />
)} @@ -1615,7 +1613,7 @@ export const NewConnectionModal = ({ // ── rendered K8s tab content ── const k8sTabContent = !isNetworkDriver ? (

- {t("newConnection.k8sNotAvailable")} + {t`Kubernetes is not available for this driver.`}

) : (
@@ -1636,7 +1634,7 @@ export const NewConnectionModal = ({ className="accent-blue-500 w-3.5 h-3.5 rounded" /> - {t("newConnection.useK8s")} + {t`Use Kubernetes Port-Forward`} @@ -1669,8 +1667,8 @@ export const NewConnectionModal = ({ )} > {mode === "existing" - ? t("newConnection.useK8sConnection") - : t("newConnection.createInlineK8s")} + ? t`Saved Connection` + : t`Inline`} ))}
@@ -1680,7 +1678,7 @@ export const NewConnectionModal = ({
{ updateField("k8s_context", val); }} - searchPlaceholder={t("common.search")} - noResultsLabel={t("common.noResults")} + searchPlaceholder={t`Search...`} + noResultsLabel={t`No results found`} placeholder={ k8sContexts.length === 0 - ? t("newConnection.noK8sContexts") - : t("newConnection.chooseContext") + ? t`No contexts found (is kubectl installed?)` + : t`Choose a context...` } />
{ updateField("k8s_resource_type", val); }} - placeholder={t("newConnection.k8sSelectType")} + placeholder={t`Select type...`} searchable={false} />
@@ -317,10 +317,10 @@ export const NewRowModal = ({ onChange={(val) => handleInputChange(col.name, val)} placeholder={ col.is_auto_increment - ? t("newRow.autoGenerated") + ? t`(Auto-generated)` : col.is_nullable ? "NULL" - : t("newRow.required") + : t`Required` } className={` w-full bg-elevated border rounded px-3 py-2 text-primary focus:outline-none focus:border-focus @@ -335,10 +335,10 @@ export const NewRowModal = ({ } placeholder={ col.is_auto_increment - ? t("newRow.autoGenerated") + ? t`(Auto-generated)` : col.is_nullable ? "NULL" - : t("newRow.required") + : t`Required` } className={` w-full bg-elevated border rounded px-3 py-2 text-primary focus:outline-none focus:border-focus @@ -380,7 +380,7 @@ export const NewRowModal = ({ onClick={onClose} className="px-4 py-2 text-secondary hover:text-primary hover:bg-surface-secondary font-medium text-sm rounded-lg transition-colors" > - {t("newRow.cancel")} + {t`Cancel`}
diff --git a/src/components/modals/OpenSourceLibrariesModal.tsx b/src/components/modals/OpenSourceLibrariesModal.tsx index 65ac9bf0..a96f841b 100644 --- a/src/components/modals/OpenSourceLibrariesModal.tsx +++ b/src/components/modals/OpenSourceLibrariesModal.tsx @@ -1,6 +1,8 @@ import { openUrl } from "@tauri-apps/plugin-opener"; import { ExternalLink, Library, X } from "lucide-react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; +import { openSourceLibrariesSections } from "../../i18n/registries/openSourceLibrariesSections"; +import { openSourceLibrariesEcosystem } from "../../i18n/registries/openSourceLibrariesEcosystem"; import { Modal } from "../ui/Modal"; import { getOpenSourceLibraryTotal, @@ -17,7 +19,7 @@ export function OpenSourceLibrariesModal({ isOpen, onClose, }: OpenSourceLibrariesModalProps) { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const totalLibraries = getOpenSourceLibraryTotal(); return ( @@ -30,12 +32,10 @@ export function OpenSourceLibrariesModal({

- {t("settings.openSourceLibraries")} + {t`Open Source Libraries`}

- {t("settings.openSourceLibrariesTotal", { - count: totalLibraries, - })} + {t`${totalLibraries} libraries`}

@@ -50,10 +50,10 @@ export function OpenSourceLibrariesModal({

- {t("settings.openSourceLibrariesDesc")} + {t`Browse the direct open source dependencies used across the app, backend, and tooling.`}

- {t("settings.openSourceLibrariesSource")} + {t`Direct dependencies declared in package.json and src-tauri/Cargo.toml.`}

@@ -66,12 +66,10 @@ export function OpenSourceLibrariesModal({

- {t(`settings.openSourceLibrariesSections.${section.id}`)} + {i18n._(openSourceLibrariesSections[section.id])}

- {t( - `settings.openSourceLibrariesEcosystem.${section.ecosystem}`, - )} + {i18n._(openSourceLibrariesEcosystem[section.ecosystem])}

@@ -104,10 +102,8 @@ export function OpenSourceLibrariesModal({ ) } className="p-2 text-secondary hover:text-blue-400 hover:bg-surface-secondary rounded-lg transition-colors" - title={t("settings.openSourceLibrariesOpenProject")} - aria-label={t( - "settings.openSourceLibrariesOpenProject", - )} + title={t`Open package page`} + aria-label={t`Open package page`} > @@ -125,7 +121,7 @@ export function OpenSourceLibrariesModal({ onClick={onClose} className="px-4 py-2 bg-blue-600 hover:bg-blue-500 text-white rounded-lg text-sm font-medium transition-colors" > - {t("common.close")} + {t`Close`}
diff --git a/src/components/modals/PluginInstallErrorModal.tsx b/src/components/modals/PluginInstallErrorModal.tsx index ed2eae02..aa62ed0d 100644 --- a/src/components/modals/PluginInstallErrorModal.tsx +++ b/src/components/modals/PluginInstallErrorModal.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Modal } from "../ui/Modal"; import { X, AlertTriangle, Copy, Check } from "lucide-react"; @@ -16,7 +16,7 @@ export const PluginInstallErrorModal = ({ pluginId, error, }: PluginInstallErrorModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [copied, setCopied] = useState(false); const handleCopy = () => { @@ -37,7 +37,7 @@ export const PluginInstallErrorModal = ({

- {t("settings.plugins.installError.title")} + {t({ message: "Installation Failed", context: "settings" })}

{pluginId}

@@ -50,13 +50,13 @@ export const PluginInstallErrorModal = ({ {/* Content */}

- {t("settings.plugins.installError.subtitle")} + {t`An error occurred while installing the plugin. See the details below.`}

- {t("settings.plugins.installError.details")} + {t({ message: "Error Details", context: "settings" })} @@ -87,7 +87,7 @@ export const PluginInstallErrorModal = ({ onClick={onClose} className="px-4 py-2 bg-blue-600 hover:bg-blue-500 text-white rounded-lg text-sm font-medium transition-colors" > - {t("common.close")} + {t`Close`}
diff --git a/src/components/modals/PluginRemoveModal.tsx b/src/components/modals/PluginRemoveModal.tsx index 6eae5251..9b350cfb 100644 --- a/src/components/modals/PluginRemoveModal.tsx +++ b/src/components/modals/PluginRemoveModal.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { ConfirmModal } from "./ConfirmModal"; interface PluginRemoveModalProps { @@ -14,15 +14,15 @@ export const PluginRemoveModal = ({ pluginName, onConfirm, }: PluginRemoveModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); return ( ); diff --git a/src/components/modals/PluginSettingsModal.tsx b/src/components/modals/PluginSettingsModal.tsx index 3c8254ef..2b7acacc 100644 --- a/src/components/modals/PluginSettingsModal.tsx +++ b/src/components/modals/PluginSettingsModal.tsx @@ -1,5 +1,6 @@ import { useState, useCallback } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; +import { pluginBuiltinSettings } from "../../i18n/registries/pluginBuiltinSettings"; import { Settings, X, FolderOpen, RotateCcw } from "lucide-react"; import { open } from "@tauri-apps/plugin-dialog"; import { Modal } from "../ui/Modal"; @@ -27,7 +28,7 @@ export const PluginSettingsModal = ({ manifest, onSave, }: PluginSettingsModalProps) => { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const [interpreter, setInterpreter] = useState(getDisplayInterpreter(currentConfig)); const definitions = manifest?.settings ?? []; @@ -38,23 +39,24 @@ export const PluginSettingsModal = ({ const [errors, setErrors] = useState>({}); const getSettingLabel = useCallback( - (def: PluginSettingDefinition) => - t( - `settings.plugins.pluginSettings.builtin.${pluginId}.${def.key}.label`, - { defaultValue: def.label }, - ), - [pluginId, t], + (def: PluginSettingDefinition) => { + const descriptor = + pluginBuiltinSettings[`${pluginId}.${def.key}.label`]; + return descriptor ? i18n._(descriptor) : def.label; + }, + [pluginId, i18n], ); const getSettingDescription = useCallback( - (def: PluginSettingDefinition) => - def.description - ? t( - `settings.plugins.pluginSettings.builtin.${pluginId}.${def.key}.description`, - { defaultValue: def.description }, - ) - : undefined, - [pluginId, t], + (def: PluginSettingDefinition) => { + if (!def.description) { + return undefined; + } + const descriptor = + pluginBuiltinSettings[`${pluginId}.${def.key}.description`]; + return descriptor ? i18n._(descriptor) : def.description; + }, + [pluginId, i18n], ); const handleBrowse = async () => { @@ -85,7 +87,7 @@ export const PluginSettingsModal = ({ if (Object.keys(validationErrors).length > 0) { const errorMessages: Record = {}; for (const [key, label] of Object.entries(validationErrors)) { - errorMessages[key] = t("settings.plugins.pluginSettings.fieldRequired", { label }); + errorMessages[key] = t`${label} is required`; } setErrors(errorMessages); return; @@ -114,8 +116,8 @@ export const PluginSettingsModal = ({ onClick={() => handleResetField(def)} disabled={isDefaultValue} className="inline-flex items-center justify-center w-8 h-8 border border-default rounded-md text-muted hover:text-primary hover:border-strong disabled:opacity-50 disabled:cursor-not-allowed transition-colors shrink-0" - title={t("settings.plugins.pluginSettings.resetToDefault")} - aria-label={t("settings.plugins.pluginSettings.resetToDefault")} + title={t`Reset to default`} + aria-label={t`Reset to default`} > @@ -189,7 +191,7 @@ export const PluginSettingsModal = ({

- {t("settings.plugins.pluginSettings.title")} + {t`Plugin Settings`}

{pluginId}

@@ -204,16 +206,16 @@ export const PluginSettingsModal = ({ {/* Interpreter */}

- {t("settings.plugins.pluginSettings.interpreterDesc")} + {t`Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default.`}

setInterpreter(e.target.value)} className="flex-1 bg-base border border-default rounded-lg px-3 py-2 text-sm text-primary placeholder:text-muted focus:outline-none focus:border-blue-500/50" autoFocus @@ -223,7 +225,7 @@ export const PluginSettingsModal = ({ className="flex items-center gap-1.5 px-3 py-2 bg-surface-secondary hover:bg-surface-tertiary border border-default rounded-lg text-sm text-secondary hover:text-primary transition-colors" > - {t("settings.plugins.pluginSettings.browse")} + {t`Browse...`}
@@ -259,13 +261,13 @@ export const PluginSettingsModal = ({ onClick={onClose} className="px-4 py-2 text-secondary hover:text-primary transition-colors text-sm" > - {t("common.cancel")} + {t`Cancel`}
diff --git a/src/components/modals/PluginStartErrorModal.tsx b/src/components/modals/PluginStartErrorModal.tsx index 25c32ef7..b8df5856 100644 --- a/src/components/modals/PluginStartErrorModal.tsx +++ b/src/components/modals/PluginStartErrorModal.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { AlertTriangle, X, Copy, Check, Settings } from "lucide-react"; import { Modal } from "../ui/Modal"; @@ -18,7 +18,7 @@ export const PluginStartErrorModal = ({ error, onConfigureInterpreter, }: PluginStartErrorModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [copied, setCopied] = useState(false); const handleCopy = () => { @@ -43,7 +43,7 @@ export const PluginStartErrorModal = ({

- {t("settings.plugins.startError.title")} + {t`Plugin Failed to Start`}

{pluginId}

@@ -56,14 +56,14 @@ export const PluginStartErrorModal = ({ {/* Content */}

- {t("settings.plugins.startError.subtitle")} + {t`The plugin process could not be launched. Check the error details below.`}

{onConfigureInterpreter && (

- {t("settings.plugins.startError.interpreterHint")} + {t`This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path.`}

)} @@ -71,7 +71,7 @@ export const PluginStartErrorModal = ({
- {t("settings.plugins.startError.details")} + {t({ message: "Error Details", context: "settings" })} @@ -102,7 +102,7 @@ export const PluginStartErrorModal = ({ onClick={onClose} className="px-4 py-2 text-secondary hover:text-primary transition-colors text-sm" > - {t("common.close")} + {t`Close`} {onConfigureInterpreter && ( )}
diff --git a/src/components/modals/QueryModal.tsx b/src/components/modals/QueryModal.tsx index f1cf9874..a89a99be 100644 --- a/src/components/modals/QueryModal.tsx +++ b/src/components/modals/QueryModal.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react'; import { X, Save } from 'lucide-react'; import MonacoEditor, { type BeforeMount } from '@monaco-editor/react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { useEditorTheme } from '../../hooks/useEditorTheme'; import { loadMonacoTheme } from '../../themes/themeUtils'; import { Modal } from '../ui/Modal'; @@ -19,7 +19,7 @@ interface QueryModalProps { } export const QueryModal = ({ isOpen, onClose, onSave, initialName = '', initialSql = '', initialDatabase, databases, title = 'Save Query' }: QueryModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [name, setName] = useState(initialName); const [sql, setSql] = useState(initialSql); const [database, setDatabase] = useState(initialDatabase ?? null); @@ -87,12 +87,12 @@ export const QueryModal = ({ isOpen, onClose, onSave, initialName = '', initialS {databases && databases.length > 1 && (
- + updateField("auth_type", val as "password" | "ssh_key") @@ -470,7 +470,7 @@ export function SshConnectionsModal({ {formData.auth_type === "password" && (
{ setPasswordDirty(true); @@ -480,12 +480,12 @@ export function SshConnectionsModal({ placeholder={ editingId && !passwordDirty && !formData.password ? "" - : t("newConnection.sshPasswordPlaceholder") + : t`Enter SSH password` } /> {editingId && !passwordDirty && formData.save_in_keychain && ( - {t("sshConnections.savedInKeychain")} + {t`Password saved in system keychain`} )}
@@ -494,15 +494,15 @@ export function SshConnectionsModal({ {formData.auth_type === "ssh_key" && ( <> updateField("key_file", val)} - placeholder={t("newConnection.sshKeyFilePlaceholder")} + placeholder={t`/path/to/id_rsa`} />
{ setPassphraseDirty(true); @@ -514,14 +514,14 @@ export function SshConnectionsModal({ !passphraseDirty && !formData.key_passphrase ? "" - : t("newConnection.sshKeyPassphrasePlaceholder") + : t`Enter key passphrase if encrypted` } /> {editingId && !passphraseDirty && formData.save_in_keychain && ( - {t("sshConnections.savedInKeychain")} + {t`Password saved in system keychain`} )}
@@ -551,7 +551,7 @@ export function SshConnectionsModal({ htmlFor="ssh-keychain-toggle" className="text-sm font-medium text-secondary cursor-pointer select-none" > - {t("newConnection.saveKeychain")} + {t`Save passwords in Keychain`}
@@ -565,7 +565,7 @@ export function SshConnectionsModal({ {testStatus === "testing" && ( )} - {t("newConnection.testConnection")} + {t`Test Connection`} {testMessage && ( @@ -591,7 +591,7 @@ export function SshConnectionsModal({ onClick={resetForm} className="flex-1 px-4 py-2 border border-strong rounded-lg hover:bg-elevated transition-colors text-secondary" > - {t("sshConnections.cancel")} + {t`Cancel`}
diff --git a/src/components/modals/TabSwitcherModal.tsx b/src/components/modals/TabSwitcherModal.tsx index 10f3aa59..f892edca 100644 --- a/src/components/modals/TabSwitcherModal.tsx +++ b/src/components/modals/TabSwitcherModal.tsx @@ -1,5 +1,6 @@ +import { plural } from "@lingui/core/macro"; import { useEffect, useRef } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { X, FileCode, Network, BookOpen } from "lucide-react"; import { Table as TableIcon } from "lucide-react"; import type { Tab } from "../../types/editor"; @@ -22,7 +23,7 @@ export const TabSwitcherModal = ({ onClose, onDismiss, }: TabSwitcherModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const listRef = useRef(null); useEffect(() => { @@ -51,9 +52,9 @@ export const TabSwitcherModal = ({ {/* Header */}

- {t("editor.tabSwitcher.title")} + {t`Open Tabs`}

- {t("editor.tabSwitcher.hint")} + {t`Ctrl+Tab`}
{/* Tab list */} @@ -82,7 +83,7 @@ export const TabSwitcherModal = ({ onClose(tab.id); }} className="p-0.5 rounded opacity-0 group-hover:opacity-100 hover:bg-surface-tertiary text-muted hover:text-primary transition-all shrink-0" - title={t("editor.closeTab")} + title={t`Close Tab`} > @@ -93,8 +94,8 @@ export const TabSwitcherModal = ({ {/* Footer */}
- {t("editor.tabSwitcher.tabs", { count: tabs.length })} - {t("editor.tabSwitcher.escHint")} + {plural(tabs.length, { one: "# tab", other: "# tabs" })} + {t({ message: "Esc to close", context: "editor" })}
diff --git a/src/components/modals/TriggerEditorModal.tsx b/src/components/modals/TriggerEditorModal.tsx index b5ad200f..95340521 100644 --- a/src/components/modals/TriggerEditorModal.tsx +++ b/src/components/modals/TriggerEditorModal.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { X, Loader2, Zap, AlertCircle } from "lucide-react"; import { invoke } from "@tauri-apps/api/core"; import { ask } from "@tauri-apps/plugin-dialog"; @@ -52,7 +52,7 @@ export const TriggerEditorModal = ({ isNewTrigger = false, onSuccess, }: TriggerEditorModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeSchema } = useDatabase(); const resolvedSchema = schemaProp ?? activeSchema ?? undefined; const { showAlert } = useAlert(); @@ -92,7 +92,7 @@ export const TriggerEditorModal = ({ setBody(parsed.body); } } catch (e) { - setError(t("triggers.failLoadDefinition") + String(e)); + setError(t`Failed to load trigger definition: ` + String(e)); } finally { setLoading(false); } @@ -142,14 +142,14 @@ export const TriggerEditorModal = ({ const handleSave = async () => { const sql = buildTriggerSql(); if (!sql.trim()) { - showAlert(t("triggers.sqlRequired"), { kind: "error" }); + showAlert(t`Trigger SQL is required`, { kind: "error" }); return; } if (!isNewTrigger) { const confirmed = await ask( - t("triggers.confirmRecreate", { trigger: name }), - { title: t("triggers.recreateTrigger"), kind: "warning" } + t`Editing a trigger requires dropping and recreating it. Continue modifying "${name}"?`, + { title: t`Recreate Trigger`, kind: "warning" } ); if (!confirmed) return; @@ -161,7 +161,7 @@ export const TriggerEditorModal = ({ ...(resolvedSchema ? { schema: resolvedSchema } : {}), }); } catch (e) { - setError(t("triggers.dropError") + String(e)); + setError(t`Failed to drop existing trigger: ` + String(e)); return; } } @@ -175,13 +175,13 @@ export const TriggerEditorModal = ({ ...(resolvedSchema ? { schema: resolvedSchema } : {}), }); showAlert( - isNewTrigger ? t("triggers.createSuccess") : t("triggers.updateSuccess"), + isNewTrigger ? t`Trigger created successfully` : t`Trigger updated successfully`, { kind: "info" } ); onSuccess?.(); onClose(); } catch (e) { - setError(t("triggers.saveError") + String(e)); + setError(t`Failed to save trigger: ` + String(e)); } finally { setSaving(false); } @@ -200,12 +200,12 @@ export const TriggerEditorModal = ({

- {isNewTrigger ? t("triggers.createTrigger") : t("triggers.editTrigger")} + {isNewTrigger ? t`Create Trigger` : t`Edit Trigger`}

{isNewTrigger - ? t("triggers.createSubtitle") - : t("triggers.editSubtitle", { name })} + ? t`Create a new database trigger` + : t`Editing trigger: ${name}`}

@@ -229,7 +229,7 @@ export const TriggerEditorModal = ({ {loading && (
- {t("triggers.loading")} + {t`Loading trigger definition...`}
)} @@ -239,20 +239,20 @@ export const TriggerEditorModal = ({ onClick={() => setUseRawSql(false)} className={`px-3 py-1.5 text-sm rounded-lg transition-colors ${!useRawSql ? "bg-blue-600 text-white" : "text-secondary hover:text-primary border border-strong"}`} > - {t("triggers.guidedMode")} + {t`Guided`} {useRawSql ? (
setName(e.target.value)} disabled={!isNewTrigger} className="w-full px-3 py-2 bg-base border border-strong rounded-lg text-primary focus:border-blue-500 focus:outline-none disabled:opacity-50" - placeholder={t("triggers.triggerNamePlaceholder")} + placeholder={t`e.g. before_insert_user`} autoFocus={isNewTrigger} />
@@ -286,7 +286,7 @@ export const TriggerEditorModal = ({ {/* Table name */}
setTableName(e.target.value)} disabled={!isNewTrigger} className="w-full px-3 py-2 bg-base border border-strong rounded-lg text-primary focus:border-blue-500 focus:outline-none disabled:opacity-50" - placeholder={t("triggers.tableNamePlaceholder")} + placeholder={t`e.g. users`} />
@@ -303,7 +303,7 @@ export const TriggerEditorModal = ({
{TIMING_OPTIONS.map((opt) => ( @@ -319,7 +319,7 @@ export const TriggerEditorModal = ({
{EVENT_OPTIONS.map((opt) => ( @@ -338,7 +338,7 @@ export const TriggerEditorModal = ({ {/* Trigger body */}
- {t("triggers.sqlPreview")} + {t`Generated SQL Preview`}
                   {buildTriggerSql()}
@@ -369,7 +369,7 @@ export const TriggerEditorModal = ({
             onClick={onClose}
             className="px-4 py-2 text-secondary hover:text-primary transition-colors text-sm"
           >
-            {t("common.cancel")}
+            {t`Cancel`}
           
           
         
diff --git a/src/components/modals/UpdateNotificationModal.tsx b/src/components/modals/UpdateNotificationModal.tsx index f7c68edb..b3d11cd2 100644 --- a/src/components/modals/UpdateNotificationModal.tsx +++ b/src/components/modals/UpdateNotificationModal.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Modal } from "../ui/Modal"; import { X, Download, ExternalLink, CheckCircle, Loader2, AlertCircle } from "lucide-react"; import { openUrl } from "@tauri-apps/plugin-opener"; @@ -34,7 +34,7 @@ export const UpdateNotificationModal = ({ onDownloadAndInstall, error }: UpdateNotificationModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); if (!updateInfo) return null; @@ -54,7 +54,7 @@ export const UpdateNotificationModal = ({

- {t("update.newVersionAvailable")} + {t`New Version Available`}

v{updateInfo.currentVersion} → v{updateInfo.latestVersion} @@ -78,7 +78,7 @@ export const UpdateNotificationModal = ({

- {t("update.version")} {updateInfo.latestVersion} + {t`Version`} {updateInfo.latestVersion} • {new Date(updateInfo.publishedAt).toLocaleDateString()} @@ -91,7 +91,7 @@ export const UpdateNotificationModal = ({
- {downloadProgress < 100 ? t("update.downloading") : t("update.installing")} + {downloadProgress < 100 ? t({ message: "Downloading...", context: "update" }) : t`Installing...`} {downloadProgress}%
@@ -103,7 +103,7 @@ export const UpdateNotificationModal = ({
{downloadProgress === 100 && (

- {t("update.installingMessage")} + {t`The app will restart automatically after installation`}

)}
@@ -114,7 +114,7 @@ export const UpdateNotificationModal = ({
-
{t("update.error")}
+
{t`Update Error`}
{error}
@@ -123,7 +123,7 @@ export const UpdateNotificationModal = ({ {/* Release Notes */}
@@ -143,7 +143,7 @@ export const UpdateNotificationModal = ({ className="px-4 py-2 text-secondary hover:text-primary transition-colors text-sm flex items-center gap-2 disabled:opacity-50" > - {t("update.viewOnGitHub")} + {t`View on GitHub`}
diff --git a/src/components/modals/ViewEditorModal.tsx b/src/components/modals/ViewEditorModal.tsx index 5edbbbb1..0e9cab02 100644 --- a/src/components/modals/ViewEditorModal.tsx +++ b/src/components/modals/ViewEditorModal.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { X, Loader2, Eye, AlertCircle, Play } from "lucide-react"; import { invoke } from "@tauri-apps/api/core"; import { ask } from "@tauri-apps/plugin-dialog"; @@ -26,7 +26,7 @@ export const ViewEditorModal = ({ isNewView = false, onSuccess, }: ViewEditorModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeSchema } = useDatabase(); const { showAlert } = useAlert(); const [name, setName] = useState(""); @@ -54,7 +54,7 @@ export const ViewEditorModal = ({ setDefinition(selectPart); setOriginalDefinition(selectPart); } catch (e) { - setError(t("views.failLoadDefinition") + String(e)); + setError(t`Failed to load view definition: ` + String(e)); } finally { setLoading(false); } @@ -97,7 +97,7 @@ export const ViewEditorModal = ({ rows: result.rows, }); } catch (e) { - setError(t("views.previewError") + String(e)); + setError(t`Preview failed: ` + String(e)); setPreviewResult(null); } finally { setPreviewLoading(false); @@ -106,12 +106,12 @@ export const ViewEditorModal = ({ const handleSave = async () => { if (!name.trim()) { - showAlert(t("views.nameRequired"), { kind: "error" }); + showAlert(t`View name is required`, { kind: "error" }); return; } if (!definition.trim()) { - showAlert(t("views.definitionRequired"), { kind: "error" }); + showAlert(t`View definition is required`, { kind: "error" }); return; } @@ -126,13 +126,13 @@ export const ViewEditorModal = ({ definition, ...(activeSchema ? { schema: activeSchema } : {}), }); - showAlert(t("views.createSuccess"), { kind: "info" }); + showAlert(t`View created successfully`, { kind: "info" }); } else { // Check if definition changed if (definition !== originalDefinition) { const confirmed = await ask( - t("views.confirmAlter", { view: name }), - { title: t("views.alterView"), kind: "warning" } + t`Are you sure you want to modify view "${name}"?`, + { title: t`Alter View`, kind: "warning" } ); if (!confirmed) { setSaving(false); @@ -146,13 +146,13 @@ export const ViewEditorModal = ({ definition, ...(activeSchema ? { schema: activeSchema } : {}), }); - showAlert(t("views.alterSuccess"), { kind: "info" }); + showAlert(t`View updated successfully`, { kind: "info" }); } onSuccess?.(); onClose(); } catch (e) { - setError(t("views.saveError") + String(e)); + setError(t`Failed to save view: ` + String(e)); } finally { setSaving(false); } @@ -169,12 +169,12 @@ export const ViewEditorModal = ({

- {isNewView ? t("views.createView") : t("views.editView")} + {isNewView ? t({ message: "Create View", context: "views" }) : t`Edit View`}

{isNewView - ? t("views.createSubtitle") - : t("views.editSubtitle", { name })} + ? t`Create a new database view` + : t`Editing view: ${name}`}

@@ -198,7 +198,7 @@ export const ViewEditorModal = ({ {/* View Name */}
setName(e.target.value)} disabled={!isNewView || loading} className="w-full px-3 py-2 bg-base border border-strong rounded-lg text-primary focus:border-blue-500 focus:outline-none disabled:opacity-50" - placeholder={t("views.viewNamePlaceholder")} + placeholder={t`e.g. active_users, order_summary`} autoFocus={isNewView} />
@@ -215,7 +215,7 @@ export const ViewEditorModal = ({ {/* View Definition */}
- {t("views.preview")} + {t({ message: "Preview", context: "views" })}
@@ -287,7 +287,7 @@ export const ViewEditorModal = ({
{previewResult.rows.length > 5 && (
- {t("views.moreRows", { count: previewResult.rows.length - 5 })} + {t`+${previewResult.rows.length - 5} more rows`}
)}
@@ -295,7 +295,7 @@ export const ViewEditorModal = ({ {!previewResult && !previewLoading && (
- {t("views.previewEmpty")} + {t`Click 'Run Preview' to see results`}
)}
@@ -307,7 +307,7 @@ export const ViewEditorModal = ({ onClick={onClose} className="px-4 py-2 text-secondary hover:text-primary transition-colors text-sm" > - {t("common.cancel")} + {t`Cancel`}
diff --git a/src/components/modals/VisualExplainModal.tsx b/src/components/modals/VisualExplainModal.tsx index a4f0c41e..7dc27adb 100644 --- a/src/components/modals/VisualExplainModal.tsx +++ b/src/components/modals/VisualExplainModal.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { X, Network, @@ -37,7 +37,7 @@ export const VisualExplainModal = ({ schema, connectionLabel, }: VisualExplainModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings } = useSettings(); const { getConnectionData, connections } = useDatabase(); const { allDrivers } = useDrivers(); @@ -69,7 +69,7 @@ export const VisualExplainModal = ({ if (!query?.trim() || !connectionId) return; if (!isExplainableQuery(query)) { - setError(t("editor.visualExplain.notExplainable")); + setError(t`EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained.`); return; } @@ -112,7 +112,7 @@ export const VisualExplainModal = ({

- {t("editor.visualExplain.title")} + {t`Visual Explain`}

@@ -160,13 +160,13 @@ export const VisualExplainModal = ({ onChange={(e) => setAnalyze(e.target.checked)} className="rounded border-strong" /> - {t("editor.visualExplain.analyze")} + {t`Analyze`} {isDml && (
- {t("editor.visualExplain.analyzeWarning")} + {t`ANALYZE executes the query. Use with caution on data-modifying statements.`}
)} @@ -178,14 +178,14 @@ export const VisualExplainModal = ({ className="flex items-center gap-1.5 px-4 py-2 bg-green-600 hover:bg-green-500 disabled:opacity-50 text-white rounded-lg text-sm font-medium transition-colors" > - {t("editor.visualExplain.rerun")} + {t`Re-run`}
diff --git a/src/components/modals/WhatsNewModal.tsx b/src/components/modals/WhatsNewModal.tsx index 028df0c7..fd02562e 100644 --- a/src/components/modals/WhatsNewModal.tsx +++ b/src/components/modals/WhatsNewModal.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { openUrl } from "@tauri-apps/plugin-opener"; import { X, @@ -30,7 +30,7 @@ export const WhatsNewModal = ({ entries, isLoading, }: WhatsNewModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); return ( @@ -43,11 +43,11 @@ export const WhatsNewModal = ({

- {t("whatsNew.title")} + {t`What's New`}

{entries.length > 0 && (

- {t("whatsNew.subtitle", { version: entries[0].version })} + {t`Version ${entries[0].version}`}

)}
@@ -65,7 +65,7 @@ export const WhatsNewModal = ({ {isLoading && (
- {t("common.loading")} + {t`Loading...`}
)} @@ -88,7 +88,7 @@ export const WhatsNewModal = ({ } className="flex items-center gap-1.5 text-xs text-blue-400 hover:text-blue-300 transition-colors" > - {t("whatsNew.readMore")} + {t`Read more`} )} @@ -97,7 +97,7 @@ export const WhatsNewModal = ({ {entry.features.length > 0 && ( } - label={t("whatsNew.features")} + label={t`New Features`} items={entry.features} dotColor="before:bg-green-400/60" /> @@ -106,7 +106,7 @@ export const WhatsNewModal = ({ {entry.bugFixes.length > 0 && ( } - label={t("whatsNew.bugFixes")} + label={t`Bug Fixes`} items={entry.bugFixes} dotColor="before:bg-blue-400/60" /> @@ -117,7 +117,7 @@ export const WhatsNewModal = ({ icon={ } - label={t("whatsNew.breakingChanges")} + label={t`Breaking Changes`} items={entry.breakingChanges} dotColor="before:bg-yellow-400/60" /> @@ -152,7 +152,7 @@ export const WhatsNewModal = ({ onClick={onClose} className="px-4 py-2 bg-blue-600 hover:bg-blue-500 text-white rounded-lg text-sm font-medium transition-colors" > - {t("whatsNew.dismiss")} + {t`Got it`} diff --git a/src/components/modals/mcp/McpSafetySection.tsx b/src/components/modals/mcp/McpSafetySection.tsx index c6ac1bc2..0cf4fc89 100644 --- a/src/components/modals/mcp/McpSafetySection.tsx +++ b/src/components/modals/mcp/McpSafetySection.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { invoke } from "@tauri-apps/api/core"; import { ShieldCheck, Lock } from "lucide-react"; import { useSettings } from "../../../hooks/useSettings"; @@ -19,7 +19,7 @@ interface ConnectionItem { /// Settings block embedded in McpModal: read-only + approval gate controls. export function McpSafetySection() { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings, updateSetting } = useSettings(); const [connections, setConnections] = useState([]); @@ -45,12 +45,12 @@ export function McpSafetySection() { return ( <> } > @@ -96,41 +96,41 @@ export function McpSafetySection() { } > value={approvalMode} onChange={(v) => updateSetting("mcpApprovalMode", v)} options={[ - { value: "off", label: t("mcp.safety.modeOff") }, - { value: "writes_only", label: t("mcp.safety.modeWritesOnly") }, - { value: "all", label: t("mcp.safety.modeAll") }, + { value: "off", label: t`Off` }, + { value: "writes_only", label: t`Writes only` }, + { value: "all", label: t`All queries` }, ]} /> updateSetting("mcpApprovalTimeoutSeconds", v ?? 120)} min={10} max={600} - suffix={t("settings.seconds")} + suffix={t`seconds`} fallback={120} /> { if (!settings.aiProvider) { - setError(t("editor.visualExplain.aiConfigRequired")); + setError(t`AI Provider not configured. Please go to Settings > AI.`); return; } @@ -62,7 +62,7 @@ export function ExplainAiAnalysis({ plan }: ExplainAiAnalysisProps) {
{!settings.aiProvider && (
- {t("editor.visualExplain.aiConfigRequired")} + {t`AI Provider not configured. Please go to Settings > AI.`}
)} @@ -70,7 +70,7 @@ export function ExplainAiAnalysis({ plan }: ExplainAiAnalysisProps) {
- {t("editor.visualExplain.aiAnalyzing")} + {t`Analyzing query plan with AI...`}
) : error ? ( @@ -79,7 +79,7 @@ export function ExplainAiAnalysis({ plan }: ExplainAiAnalysisProps) {
- {t("editor.visualExplain.aiAnalysisTitle")} + {t`AI Query Plan Analysis`}
{analysis} diff --git a/src/components/modals/visual-explain/ExplainNodeDetails.tsx b/src/components/modals/visual-explain/ExplainNodeDetails.tsx index aa2d5d59..833dc786 100644 --- a/src/components/modals/visual-explain/ExplainNodeDetails.tsx +++ b/src/components/modals/visual-explain/ExplainNodeDetails.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import type { ExplainNode } from "../../../types/explain"; import { formatCost, formatRows, formatTime } from "../../../utils/explainPlan"; @@ -11,64 +11,64 @@ export function ExplainNodeDetails({ node, hasAnalyzeData, }: ExplainNodeDetailsProps) { - const { t } = useTranslation(); + const { t } = useLingui(); if (!node) { return (
- {t("editor.visualExplain.selectNode")} + {t`Select a node to view details`}
); } const generalEntries: [string, string][] = [ - [t("editor.visualExplain.nodeType"), node.node_type], + [t`Operation`, node.node_type], ...(node.relation - ? [[t("editor.visualExplain.relation"), node.relation] as [string, string]] + ? [[t({ message: "Table", context: "editor" }), node.relation] as [string, string]] : []), ...(node.startup_cost != null && node.total_cost != null ? [ [ - t("editor.visualExplain.cost"), + t`Cost`, `${formatCost(node.startup_cost)} - ${formatCost(node.total_cost)}`, ] as [string, string], ] : node.total_cost != null - ? [[t("editor.visualExplain.cost"), formatCost(node.total_cost)] as [string, string]] + ? [[t`Cost`, formatCost(node.total_cost)] as [string, string]] : []), ...(node.plan_rows != null - ? [[t("editor.visualExplain.estRows"), formatRows(node.plan_rows)] as [string, string]] + ? [[t`Est. Rows`, formatRows(node.plan_rows)] as [string, string]] : []), ...(node.filter - ? [[t("editor.visualExplain.filter"), node.filter] as [string, string]] + ? [[t`Filter`, node.filter] as [string, string]] : []), ...(node.index_condition - ? [[t("editor.visualExplain.indexCondition"), node.index_condition] as [string, string]] + ? [[t`Index Cond.`, node.index_condition] as [string, string]] : []), ...(node.join_type - ? [[t("editor.visualExplain.joinType"), node.join_type] as [string, string]] + ? [[t`Join Type`, node.join_type] as [string, string]] : []), ...(node.hash_condition - ? [[t("editor.visualExplain.hashCondition"), node.hash_condition] as [string, string]] + ? [[t`Hash Cond.`, node.hash_condition] as [string, string]] : []), ]; const analyzeEntries: [string, string][] = hasAnalyzeData ? [ ...(node.actual_rows != null - ? [[t("editor.visualExplain.actualRows"), formatRows(node.actual_rows)] as [string, string]] + ? [[t`Actual Rows`, formatRows(node.actual_rows)] as [string, string]] : []), ...(node.actual_time_ms != null - ? [[t("editor.visualExplain.time"), formatTime(node.actual_time_ms)] as [string, string]] + ? [[t({ message: "Time", context: "editor" }), formatTime(node.actual_time_ms)] as [string, string]] : []), ...(node.actual_loops != null - ? [[t("editor.visualExplain.loops"), String(node.actual_loops)] as [string, string]] + ? [[t`Loops`, String(node.actual_loops)] as [string, string]] : []), ...(node.buffers_hit != null - ? [[t("editor.visualExplain.buffersHit"), String(node.buffers_hit)] as [string, string]] + ? [[t`Buffers Hit`, String(node.buffers_hit)] as [string, string]] : []), ...(node.buffers_read != null - ? [[t("editor.visualExplain.buffersRead"), String(node.buffers_read)] as [string, string]] + ? [[t`Buffers Read`, String(node.buffers_read)] as [string, string]] : []), ] : []; @@ -80,18 +80,18 @@ export function ExplainNodeDetails({ return (
{analyzeEntries.length > 0 && ( )} {extraEntries.length > 0 && ( )} diff --git a/src/components/modals/visual-explain/ExplainOverviewBar.tsx b/src/components/modals/visual-explain/ExplainOverviewBar.tsx index e3dc1d84..6a039c53 100644 --- a/src/components/modals/visual-explain/ExplainOverviewBar.tsx +++ b/src/components/modals/visual-explain/ExplainOverviewBar.tsx @@ -1,5 +1,5 @@ import { useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { AlertTriangle, BookOpenText, @@ -30,7 +30,7 @@ export function ExplainOverviewBar({ plan, onSelectNode, }: ExplainOverviewBarProps) { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const summary = useMemo(() => getExplainPlanSummary(plan), [plan]); const legend = useMemo(() => getExplainDriverLegend(plan), [plan]); const [overviewExpanded, setOverviewExpanded] = useState(true); @@ -38,7 +38,7 @@ export function ExplainOverviewBar({ const findings = [ summary.highestCostNode && { key: "highest-cost", - label: t("editor.visualExplain.highestCost"), + label: t`Highest Cost`, value: formatCost(summary.highestCostNode.value), description: formatNodeLabel( summary.highestCostNode.nodeType, @@ -50,7 +50,7 @@ export function ExplainOverviewBar({ }, summary.slowestNode && { key: "slowest-step", - label: t("editor.visualExplain.slowestStep"), + label: t`Slowest Step`, value: formatTime(summary.slowestNode.value), description: formatNodeLabel( summary.slowestNode.nodeType, @@ -62,31 +62,30 @@ export function ExplainOverviewBar({ }, summary.largestRowMismatchNode?.ratio != null && { key: "estimate-gap", - label: t("editor.visualExplain.largestEstimateGap"), + label: t`Estimate Gap`, value: formatRatio(summary.largestRowMismatchNode.value), - description: t( + description: summary.largestRowMismatchNode.ratio >= 1 - ? "editor.visualExplain.overEstimate" - : "editor.visualExplain.underEstimate", - ), + ? t`Actual rows exceed estimate` + : t`Estimate exceeds actual rows`, nodeId: summary.largestRowMismatchNode.nodeId, icon: AlertTriangle, tone: "red" as const, }, summary.sequentialScans > 0 && { key: "sequential-scans", - label: t("editor.visualExplain.sequentialScans"), + label: t`Sequential Scans`, value: String(summary.sequentialScans), - description: t("editor.visualExplain.scanOperations"), + description: t`Scan-heavy operations detected`, nodeId: summary.highestCostNode?.nodeId ?? plan.root.id, icon: ScanSearch, tone: "amber" as const, }, summary.tempOperations > 0 && { key: "temp-operations", - label: t("editor.visualExplain.tempOperations"), + label: t`Temp or Sort Ops`, value: String(summary.tempOperations), - description: t("editor.visualExplain.sortOrTempOperations"), + description: t`Sort or temp work detected`, nodeId: summary.slowestNode?.nodeId ?? plan.root.id, icon: Database, tone: "purple" as const, @@ -105,20 +104,20 @@ export function ExplainOverviewBar({
- {t("editor.visualExplain.overview")} + {t`Overview`}
- {findings.length} {t("editor.visualExplain.topIssues").toLowerCase()} + {findings.length} {t`Top Issues`.toLowerCase()} {legend.length > 0 - ? ` • ${legend.length} ${t("editor.visualExplain.driverNotes").toLowerCase()}` + ? ` • ${legend.length} ${t`Driver Notes`.toLowerCase()}` : ""}
{overviewExpanded - ? t("editor.visualExplain.hideOverview") - : t("editor.visualExplain.showOverview")} + ? t`Hide overview` + : t`Show overview`} {overviewExpanded ? ( @@ -133,7 +132,7 @@ export function ExplainOverviewBar({
{findings.length === 0 ? (
- {t("editor.visualExplain.noIssues")} + {t`No major issues detected in the current plan summary.`}
) : ( findings.map((finding) => { @@ -177,17 +176,17 @@ export function ExplainOverviewBar({
- {t("editor.visualExplain.driverNotes")} + {t`Driver Notes`}
- {legend.map((entry) => ( + {legend.map((entry, idx) => (
- {t(entry)} + {i18n._(entry)}
))}
diff --git a/src/components/modals/visual-explain/ExplainSummaryBar.tsx b/src/components/modals/visual-explain/ExplainSummaryBar.tsx index dff8be77..4235027d 100644 --- a/src/components/modals/visual-explain/ExplainSummaryBar.tsx +++ b/src/components/modals/visual-explain/ExplainSummaryBar.tsx @@ -1,5 +1,5 @@ import { memo } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { FileText, Sparkles, TableProperties, Network } from "lucide-react"; import type { ExplainPlan } from "../../../types/explain"; import { formatTime, formatCost, getMaxCost } from "../../../utils/explainPlan"; @@ -15,7 +15,7 @@ interface ExplainSummaryBarProps { export const ExplainSummaryBar = memo( ({ plan, viewMode, onViewModeChange, aiEnabled }: ExplainSummaryBarProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); if (!plan) return null; @@ -35,7 +35,7 @@ export const ExplainSummaryBar = memo( {plan.planning_time_ms != null && (
- {t("editor.visualExplain.planningTime")}: + {t`Planning`}: {formatTime(plan.planning_time_ms)} @@ -46,7 +46,7 @@ export const ExplainSummaryBar = memo( {plan.execution_time_ms != null && (
- {t("editor.visualExplain.executionTime")}: + {t`Execution`}: {formatTime(plan.execution_time_ms)} @@ -57,7 +57,7 @@ export const ExplainSummaryBar = memo( {maxCost > 0 && (
- {t("editor.visualExplain.totalCost")}: + {t`Total Cost`}: {formatCost(maxCost)} @@ -73,21 +73,21 @@ export const ExplainSummaryBar = memo( className={toggleButtonClass("graph")} > - {t("editor.visualExplain.graphView")} + {t`Graph`} {aiEnabled && ( )}
diff --git a/src/components/modals/visual-explain/ExplainTableView.tsx b/src/components/modals/visual-explain/ExplainTableView.tsx index aec898bd..84a5d168 100644 --- a/src/components/modals/visual-explain/ExplainTableView.tsx +++ b/src/components/modals/visual-explain/ExplainTableView.tsx @@ -1,5 +1,5 @@ import { useState, useCallback, useEffect } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { ChevronRight, ChevronDown } from "lucide-react"; import clsx from "clsx"; import type { ExplainNode, ExplainPlan } from "../../../types/explain"; @@ -24,7 +24,7 @@ export function ExplainTableView({ selectedId, onSelect, }: ExplainTableViewProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const [expandedIds, setExpandedIds] = useState>(() => collectExpandedIds(plan.root), ); @@ -51,30 +51,30 @@ export function ExplainTableView({ - {t("editor.visualExplain.nodeType")} + {t`Operation`} - {t("editor.visualExplain.relation")} + {t({ message: "Table", context: "editor" })} - {t("editor.visualExplain.cost")} + {t`Cost`} - {t("editor.visualExplain.estRows")} + {t`Est. Rows`} {plan.has_analyze_data && ( - {t("editor.visualExplain.actualRows")} + {t`Actual Rows`} )} - {t("editor.visualExplain.time")} + {t({ message: "Time", context: "editor" })} - {t("editor.visualExplain.largestEstimateGap")} + {t`Estimate Gap`} - {t("editor.visualExplain.filter")} + {t`Filter`} diff --git a/src/components/notebook/AddCellButton.tsx b/src/components/notebook/AddCellButton.tsx index 2ff4843e..eb67844f 100644 --- a/src/components/notebook/AddCellButton.tsx +++ b/src/components/notebook/AddCellButton.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Plus } from "lucide-react"; interface AddCellButtonProps { @@ -8,7 +8,7 @@ interface AddCellButtonProps { } export function AddCellButton({ onAddSql, onAddMarkdown }: AddCellButtonProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const [isOpen, setIsOpen] = useState(false); return ( @@ -44,7 +44,7 @@ export function AddCellButton({ onAddSql, onAddMarkdown }: AddCellButtonProps) { SQL - {t("editor.notebook.addSqlCell")} + {t`Add SQL Cell`}
diff --git a/src/components/notebook/CellChart.tsx b/src/components/notebook/CellChart.tsx index 1a0c42d7..af136b68 100644 --- a/src/components/notebook/CellChart.tsx +++ b/src/components/notebook/CellChart.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { BarChart, Bar, @@ -45,7 +45,7 @@ function ChartTypeSelector({ result, onConfigChange, }: ChartTypeSelectorProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const numericCols = getNumericColumns(result); const labelCols = getLabelColumns(result); const chartTypes: ChartType[] = ["bar", "line", "pie"]; @@ -54,7 +54,7 @@ function ChartTypeSelector({
- {t("editor.notebook.chartType")} + {t`Chart`}
{chartTypes.map((type) => ( @@ -76,7 +76,7 @@ function ChartTypeSelector({
- {t("editor.notebook.chartLabel")} + {t`Label`} setKeyInput(e.target.value)} autoFocus={editingKey} @@ -403,7 +404,7 @@ export function AiTab() { disabled={!keyInput.trim()} className="px-4 py-2 bg-blue-600 hover:bg-blue-500 disabled:bg-surface-secondary disabled:text-muted text-white rounded-lg text-sm font-medium transition-colors whitespace-nowrap" > - {t("common.save")} + {t`Save`} {editingKey && (
)} @@ -430,7 +431,7 @@ export function AiTab() { {settings.aiProvider === "custom-openai" && (

- {t("settings.ai.endpointUrlDesc")} + {t`The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1`}

)} @@ -470,29 +471,25 @@ export function AiTab() { <> - {t("settings.ai.ollamaConnected", { - count: ( - settings.aiCustomModels?.["ollama"] || - availableModels["ollama"] || - [] - ).length, - })} + {t`Ollama connected (${( + settings.aiCustomModels?.["ollama"] || + availableModels["ollama"] || + [] + ).length} models found)`} ) : ( <> - {t("settings.ai.ollamaNotDetected", { - port: settings.aiOllamaPort || 11434, - })} + {t`Ollama not detected on port ${settings.aiOllamaPort || 11434}. Is it running?`} )}
{(() => { const currentModels = @@ -533,13 +530,9 @@ export function AiTab() { updateSetting("aiModel", val) } options={currentModels} - placeholder={t( - "settings.ai.modelPlaceholder", - )} - searchPlaceholder={t( - "settings.ai.searchPlaceholder", - )} - noResultsLabel={t("settings.ai.noResults")} + placeholder={t`Select a model`} + searchPlaceholder={t`Search models...`} + noResultsLabel={t`No models found`} hasError={ !isModelValid && !!settings.aiModel } @@ -548,7 +541,7 @@ export function AiTab() { @@ -560,27 +553,24 @@ export function AiTab() { className="shrink-0" /> - - ), - }} - /> + + Model{" "} + + {settings.aiModel} + {" "} + not found in{" "} + + {getProviderLabel(settings.aiProvider)} + + . It may not work correctly. +
)}

{settings.aiProvider === "custom-openai" - ? t("settings.ai.customOpenaiModelHelp") - : t("settings.ai.modelDesc")} + ? t`Enter the exact model name for your OpenAI-compatible provider.` + : t`Select the model to be used for generation and explanation.`}

); @@ -590,7 +580,7 @@ export function AiTab() { )} {/* Prompt customization */} - + {(["system", "explain", "cellname", "tabrename", "explainplan"] as const).map((type) => { const isOpen = promptSectionOpen === type; const promptMap = { system: systemPrompt, explain: explainPrompt, cellname: cellnamePrompt, tabrename: tabrenamePrompt, explainplan: explainplanPrompt }; @@ -615,10 +605,10 @@ export function AiTab() {
- {t(`settings.ai.${type}Prompt`)} + {i18n._(aiPromptLabel[type])}

- {t(`settings.ai.${type}PromptDesc`)} + {i18n._(aiPromptDesc[type])}

@@ -636,22 +626,20 @@ export function AiTab() { value={prompt} onChange={(e) => setPrompt(e.target.value)} className="w-full h-36 bg-base border border-strong rounded-lg p-3 text-primary text-sm font-mono focus:outline-none focus:border-blue-500 transition-colors resize-y" - placeholder={t( - `settings.ai.enter${type === "system" ? "System" : type === "explain" ? "Explain" : type === "cellname" ? "Cellname" : "Tabrename"}Prompt`, - )} + placeholder={i18n._(aiPromptPlaceholder[type])} />
diff --git a/src/components/settings/AppearanceTab.tsx b/src/components/settings/AppearanceTab.tsx index b646ffab..75853ded 100644 --- a/src/components/settings/AppearanceTab.tsx +++ b/src/components/settings/AppearanceTab.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Monitor, Code2 } from "lucide-react"; import clsx from "clsx"; import { useSettings } from "../../hooks/useSettings"; @@ -16,7 +16,7 @@ import { FontPicker } from "./FontPicker"; import { ThemePicker } from "./ThemePicker"; export function AppearanceTab() { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings, updateSetting } = useSettings(); const { currentTheme, allThemes, setTheme } = useTheme(); const [subTab, setSubTab] = useState<"general" | "editor">("general"); @@ -35,7 +35,7 @@ export function AppearanceTab() { )} > - {t("settings.appearance_general")} + {t({ message: "General", context: "settings" })}
{/* General sub-tab */} {subTab === "general" && ( <> - +
- +
- +

- {t("settings.preview")}: + {t({ message: "Preview", context: "settings" })}:

- Aa Bb Cc 123 - {t("settings.fontPreviewText")} + Aa Bb Cc 123 - {t`The quick brown fox jumps over the lazy dog`}

@@ -111,9 +111,9 @@ export function AppearanceTab() { {/* Editor sub-tab */} {subTab === "editor" && ( <> - +

- {t("settings.appearance_editorThemeDesc")} + {t`Choose an independent theme for the SQL editor, or keep it in sync with the app theme.`}

- +
- - + + updateSetting("editorFontSize", v)} @@ -148,7 +148,7 @@ export function AppearanceTab() { /> - + updateSetting("editorLineHeight", v)} @@ -160,8 +160,8 @@ export function AppearanceTab() { - - + + updateSetting("editorTabSize", v)} @@ -175,10 +175,10 @@ export function AppearanceTab() { - + f.name === value); const [customFont, setCustomFont] = useState(() => !isPreset && value ? value : "", @@ -67,7 +67,7 @@ export function FontPicker({ >
- {t("settings.fonts.custom")} + {t`Custom Font`} {!isPreset && ( @@ -77,7 +77,7 @@ export function FontPicker({ setCustomFont(e.target.value)} onBlur={() => { @@ -100,7 +100,7 @@ export function FontPicker({ className="text-xs text-muted truncate" style={{ fontFamily: customFont || "inherit" }} > - {customFont || t("settings.fonts.enterFontName")} + {customFont || t`Enter font name above`}

diff --git a/src/components/settings/GeneralTab.tsx b/src/components/settings/GeneralTab.tsx index 9f22e47a..6c8cdfdc 100644 --- a/src/components/settings/GeneralTab.tsx +++ b/src/components/settings/GeneralTab.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { useSettings } from "../../hooks/useSettings"; import { DEFAULT_SETTINGS, type CopyFormat, type ERDiagramLayout } from "../../contexts/SettingsContext"; import { @@ -10,15 +10,15 @@ import { } from "./SettingControls"; export function GeneralTab() { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings, updateSetting } = useSettings(); return (
- + - + value={(settings.copyFormat ?? DEFAULT_SETTINGS.copyFormat) as CopyFormat} @@ -59,27 +59,27 @@ export function GeneralTab() { updateSetting("csvDelimiter", v)} options={[ - { value: ",", label: t("settings.delimiterComma") }, - { value: ";", label: t("settings.delimiterSemicolon") }, - { value: "\t", label: t("settings.delimiterTab") }, - { value: "|", label: t("settings.delimiterPipe") }, + { value: ",", label: t`Comma (,)` }, + { value: ";", label: t`Semicolon (;)` }, + { value: "\t", label: t`Tab` }, + { value: "|", label: t`Pipe (|)` }, ]} /> - + - + - + value={(settings.erDiagramDefaultLayout ?? DEFAULT_SETTINGS.erDiagramDefaultLayout) as ERDiagramLayout} onChange={(v) => updateSetting("erDiagramDefaultLayout", v)} options={[ - { value: "LR", label: t("erDiagram.horizontal") }, - { value: "TB", label: t("erDiagram.vertical") }, + { value: "LR", label: t`Horizontal` }, + { value: "TB", label: t`Vertical` }, ]} /> diff --git a/src/components/settings/InfoTab.tsx b/src/components/settings/InfoTab.tsx index c1800051..ea68cb17 100644 --- a/src/components/settings/InfoTab.tsx +++ b/src/components/settings/InfoTab.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { openUrl } from "@tauri-apps/plugin-opener"; import { invoke } from "@tauri-apps/api/core"; import { @@ -28,7 +28,7 @@ import { WhatsNewModal } from "../modals/WhatsNewModal"; import { OpenSourceLibrariesModal } from "../modals/OpenSourceLibrariesModal"; export function InfoTab() { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings, updateSetting } = useSettings(); const { currentTheme } = useTheme(); const { @@ -81,11 +81,11 @@ export function InfoTab() { className="flex items-center gap-2 bg-surface-secondary hover:bg-surface-tertiary text-primary px-4 py-2 rounded-lg font-medium transition-colors border border-strong" > - {t("settings.starOnGithub")} + {t`Star on GitHub`}
- {t("settings.version")} + {t`Version`} {APP_VERSION} (Beta) @@ -96,27 +96,27 @@ export function InfoTab() { className="flex items-center gap-2 bg-purple-900/20 hover:bg-purple-900/30 text-purple-400 px-4 py-2 rounded-lg font-medium transition-colors border border-purple-500/30" > - {t("whatsNew.title")} + {t`What's New`}
{/* Updates */} } >
- {t("settings.currentVersion")} + {t`Current Version`}
v{APP_VERSION} @@ -126,22 +126,21 @@ export function InfoTab() { {installationSource ? (
- {t("update.managedByPackageManager", { - source: - ({ aur: "AUR", snap: "Snap Store", flatpak: "Flathub" } as Record)[ - installationSource - ] ?? installationSource, - })} + {t`Updates managed by ${ + ({ aur: "AUR", snap: "Snap Store", flatpak: "Flathub" } as Record)[ + installationSource + ] ?? installationSource + }`}
- {t("update.managedByPackageManagerDesc")} + {t`Use your package manager to update Tabularis.`}
) : ( <> - {t("settings.checking")} + {t`Checking...`} ) : ( <> - {t("settings.checkNow")} + {t`Check for Updates Now`} )} @@ -172,7 +171,7 @@ export function InfoTab() { {isUpToDate && !updateInfo && (
- {t("update.upToDate")} + {t`You're up to date`}
)} @@ -180,9 +179,7 @@ export function InfoTab() {
- {t("update.updateAvailable", { - version: updateInfo.latestVersion, - })} + {t`Version ${updateInfo.latestVersion} is available`}
)} @@ -199,9 +196,9 @@ export function InfoTab() { {/* Roadmap */} } - description={t("settings.roadmapDesc")} + description={t`This project is a Work In Progress (WIP). Core features are stable, but we have big plans.`} >
@@ -263,16 +260,16 @@ export function InfoTab() { {/* Task Manager */} } - description={t("taskManager.header.description")} + description={t`Monitor plugin processes, CPU, RAM and disk usage in real time`} action={ } > @@ -281,9 +278,9 @@ export function InfoTab() { {/* Support */} } - description={t("settings.supportDesc")} + description={t`If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo.`} >
@@ -278,19 +277,15 @@ function PluginSettingsForm({ pluginId, manifest }: PluginSettingsFormProps) { {!isBuiltin && (
{ setInterpreter(e.target.value); setSaved(false); @@ -302,7 +297,7 @@ function PluginSettingsForm({ pluginId, manifest }: PluginSettingsFormProps) { className="flex items-center gap-1.5 px-3 py-2 bg-surface-secondary hover:bg-surface-tertiary border border-default rounded-lg text-sm text-secondary hover:text-primary transition-colors" > - {t("settings.plugins.pluginSettings.browse")} + {t`Browse...`}
@@ -319,7 +314,7 @@ function PluginSettingsForm({ pluginId, manifest }: PluginSettingsFormProps) { {/* Dynamic settings */} {definitions.length > 0 && ( {definitions.map((def) => (
@@ -346,12 +341,12 @@ function PluginSettingsForm({ pluginId, manifest }: PluginSettingsFormProps) { onClick={handleSave} className="px-4 py-2 bg-blue-600 hover:bg-blue-500 text-white rounded-lg text-sm font-medium transition-colors" > - {t("common.save")} + {t`Save`} {saved && ( - {t("settings.plugins.pluginSettings.saved")} + {t`Saved`} )}
diff --git a/src/components/settings/PluginsTab.tsx b/src/components/settings/PluginsTab.tsx index be154fe0..34908e90 100644 --- a/src/components/settings/PluginsTab.tsx +++ b/src/components/settings/PluginsTab.tsx @@ -7,7 +7,7 @@ import { type ReactNode, } from "react"; import { createPortal } from "react-dom"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { openUrl } from "@tauri-apps/plugin-opener"; import { invoke } from "@tauri-apps/api/core"; import { @@ -100,7 +100,7 @@ function PluginCard({ pulse, showBand, }: PluginCardProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const parsedAuthor = author ? parseAuthor(author) : null; const band = BAND_PALETTES[nameBandIndex(name)]; @@ -186,7 +186,7 @@ function PluginCard({
{parsedAuthor && (

- {t("settings.plugins.by")}{" "} + {t`by`}{" "} {parsedAuthor.url ?? homepage ? (

@@ -721,7 +721,7 @@ export function PluginsTab({ className="inline-flex items-center justify-center gap-1.5 px-3 py-2 rounded-lg border border-default bg-base text-xs text-secondary hover:text-primary hover:border-strong transition-colors" > - {t("settings.plugins.refresh")} + {t`Refresh`}
@@ -730,28 +730,28 @@ export function PluginsTab({ } value={installedPlugins.length} - label={t("settings.plugins.installedMetric")} + label={t({ message: "Installed", context: "settings" })} colorClass="text-green-400" bgClass="bg-green-500/10" /> } value={externalDrivers.length} - label={t("settings.plugins.enabledMetric")} + label={t`Enabled`} colorClass="text-blue-400" bgClass="bg-blue-500/10" /> } value={registryPlugins.length} - label={t("settings.plugins.registryMetric")} + label={t`Registry`} colorClass="text-purple-400" bgClass="bg-purple-500/10" /> } value={updateCount} - label={t("settings.plugins.updatesMetric")} + label={t`Updates`} colorClass={updateCount > 0 ? "text-amber-400" : "text-muted"} bgClass={ updateCount > 0 ? "bg-amber-500/10" : "bg-surface-secondary" @@ -770,10 +770,10 @@ export function PluginsTab({

- {t("settings.plugins.available")} + {t`Available Plugins`}

- {t("settings.plugins.availableDesc")} + {t`Browse and install plugins from the registry.`}

@@ -783,7 +783,7 @@ export function PluginsTab({ /> setSearchQuery(e.target.value)} className="w-44 rounded-lg border border-default bg-base py-1.5 pl-7 pr-3 text-xs text-primary placeholder:text-muted transition-all focus:w-56 focus:border-blue-500 focus:outline-none" @@ -798,13 +798,13 @@ export function PluginsTab({ [ { id: "all" as const, - label: t("settings.plugins.filterAll"), + label: t`All`, count: registryPlugins.filter((p) => !p.installed_version) .length, }, { id: "installed" as const, - label: t("settings.plugins.filterInstalled"), + label: t({ message: "Installed", context: "settings" }), count: allDrivers.length + installedPlugins.filter( @@ -813,7 +813,7 @@ export function PluginsTab({ }, { id: "updates" as const, - label: t("settings.plugins.filterUpdates"), + label: t`Updates`, count: updateCount, }, ] satisfies Array<{ @@ -855,7 +855,7 @@ export function PluginsTab({ className="mb-px flex items-center gap-1 text-xs text-muted transition-colors hover:text-primary" > - {t("settings.plugins.refresh")} + {t`Refresh`}
@@ -936,9 +936,7 @@ export function PluginsTab({ handleOpenPluginSettings(driver.id) } className="p-1.5 text-secondary hover:text-primary transition-colors" - title={t( - "settings.plugins.pluginSettings.title", - )} + title={t`Plugin Settings`} > @@ -958,7 +956,7 @@ export function PluginsTab({ ) : ( )} - {t("settings.plugins.remove")} + {t({ message: "Remove", context: "settings" })} )}
@@ -1020,9 +1018,7 @@ export function PluginsTab({ handleOpenPluginSettings(plugin.id) } className="p-1.5 text-secondary hover:text-primary transition-colors" - title={t( - "settings.plugins.pluginSettings.title", - )} + title={t`Plugin Settings`} > @@ -1038,7 +1034,7 @@ export function PluginsTab({ ) : ( )} - {t("settings.plugins.remove")} + {t({ message: "Remove", context: "settings" })}
} @@ -1049,8 +1045,8 @@ export function PluginsTab({ {isEmpty && (

{sq - ? t("settings.plugins.searchNoResults") - : t("settings.plugins.noPlugins")} + ? t`No plugins match your search.` + : t`No plugins available in the registry.`}

)}
@@ -1062,14 +1058,14 @@ export function PluginsTab({ {registryLoading && (
- {t("settings.plugins.loadingRegistry")} + {t`Loading plugin registry...`}
)} {registryError && (
- {t("settings.plugins.registryError")}: {registryError} + {t`Failed to load registry`}: {registryError}
)} @@ -1129,7 +1125,7 @@ export function PluginsTab({ : "bg-green-500/10 text-green-400 border-green-500/25", )} > - {t("settings.plugins.installed")} v + {t({ message: "Installed", context: "settings" })} v {plugin.installed_version} ) : undefined; @@ -1148,7 +1144,7 @@ export function PluginsTab({ actions={ !selectedPlatformSupported ? ( - {t("settings.plugins.platformNotSupported")} + {t`Not available for your platform`} ) : ( <> @@ -1160,7 +1156,7 @@ export function PluginsTab({ className="text-green-400" /> - {t("settings.plugins.upToDate")} + {t`Up to date`}
)} @@ -1195,29 +1191,24 @@ export function PluginsTab({ )} {isDowngrade - ? `${t("settings.plugins.downgrade")} v${selectedVer}` + ? `${t`Downgrade to`} v${selectedVer}` : isUpdate - ? `${t("settings.plugins.update")} v${selectedVer}` - : `${t("settings.plugins.install")} v${selectedVer}`} + ? `${t({ message: "Update", context: "settings" })} v${selectedVer}` + : `${t`Install`} v${selectedVer}`} ) : (
- {t("settings.plugins.requiresVersion", { - version: minVersion, - })} + {t`Requires Tabularis ≥ ${minVersion}`}
))} @@ -1256,7 +1247,7 @@ export function PluginsTab({ isDowngrade={isDowngrade} label={ isAtLatest && isSelectedInstalled - ? t("settings.plugins.olderVersions") + ? t`Older versions` : `v${selectedVer}` } /> @@ -1271,12 +1262,12 @@ export function PluginsTab({ {filteredPlugins.length === 0 && registryPlugins.length > 0 && (

- {t("settings.plugins.searchNoResults")} + {t`No plugins match your search.`}

)} {registryPlugins.length === 0 && (

- {t("settings.plugins.noPlugins")} + {t`No plugins available in the registry.`}

)}
diff --git a/src/components/settings/ShortcutsTab.tsx b/src/components/settings/ShortcutsTab.tsx index 03ee0469..31ad35d3 100644 --- a/src/components/settings/ShortcutsTab.tsx +++ b/src/components/settings/ShortcutsTab.tsx @@ -1,6 +1,8 @@ import { useState, useCallback } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Keyboard, Lock, RotateCcw, Loader2, X } from "lucide-react"; +import { shortcutLabels } from "../../i18n/registries/shortcutLabels"; +import { shortcutCategories } from "../../i18n/registries/shortcutCategories"; import clsx from "clsx"; import { useKeybindings } from "../../hooks/useKeybindings"; import { formatEvent, formatMatch, parseCombo } from "../../utils/keybindings"; @@ -25,7 +27,7 @@ function ShortcutsEditModal({ onSave: (combo: string) => Promise; isMac: boolean; }) { - const { t } = useTranslation(); + const { t } = useLingui(); const [combo, setCombo] = useState(""); const [saving, setSaving] = useState(false); @@ -93,15 +95,15 @@ function ShortcutsEditModal({ ) : ( - {t("settings.shortcuts.pressKeys")} + {t`Press key combination...`} )}

{combo - ? t("common.save") + " / Esc" - : "Esc " + t("common.cancel")} + ? t`Save` + " / Esc" + : "Esc " + t`Cancel`}

@@ -109,7 +111,7 @@ function ShortcutsEditModal({ onClick={onClose} className="flex-1 px-4 py-2 rounded-lg text-sm border border-default text-muted hover:text-primary hover:border-blue-500/50 transition-colors" > - {t("common.cancel")} + {t`Cancel`}
@@ -128,7 +130,7 @@ function ShortcutsEditModal({ /* ── Main tab ── */ export function ShortcutsTab() { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const { shortcuts, saveOverride, resetOverride, overrides, isMac } = useKeybindings(); const [editingShortcut, setEditingShortcut] = @@ -141,7 +143,7 @@ export function ShortcutsTab() { const hasOverride = !!overrides[s.id]; setEditingShortcut({ id: s.id, - label: t(s.i18nKey as Parameters[0]), + label: i18n._(shortcutLabels[s.i18nKey]), current: isMac ? hasOverride ? formatMatch(overrides[s.id].mac, true) @@ -190,7 +192,7 @@ export function ShortcutsTab() { )} } description={ isMac @@ -209,9 +211,7 @@ export function ShortcutsTab() { >

- {t( - `settings.shortcuts.categories.${cat}` as Parameters[0], - )} + {i18n._(shortcutCategories[cat])}

@@ -234,7 +234,7 @@ export function ShortcutsTab() { ) : ( @@ -243,7 +243,7 @@ export function ShortcutsTab() {
- {t(s.i18nKey as Parameters[0])} + {i18n._(shortcutLabels[s.i18nKey])} {hasOverride && ( @@ -259,14 +259,12 @@ export function ShortcutsTab() { onClick={() => openEdit(s)} className="px-2.5 py-1 text-xs rounded-lg border border-default text-muted hover:text-primary hover:border-blue-500/60 hover:bg-blue-500/5 transition-colors" > - {t("common.edit")} + {t`Edit`} {hasOverride && ( @@ -273,7 +274,7 @@ function FiltersBar({ @@ -281,7 +282,7 @@ function FiltersBar({ @@ -290,9 +291,9 @@ function FiltersBar({
@@ -315,7 +316,7 @@ function EventsTable({ onCopyQuery, onOpenInVisualExplain, }: EventsTableProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings } = useSettings(); const [sortField, setSortField] = useState("timestamp"); const [sortDir, setSortDir] = useState("desc"); @@ -337,14 +338,14 @@ function EventsTable({ if (loading && events.length === 0) { return (
- {t("common.loading")} + {t`Loading...`}
); } if (events.length === 0) { return (
- {t("aiActivity.empty")} + {t`No MCP activity yet.`}
); } @@ -356,7 +357,7 @@ function EventsTable({ - {t("aiActivity.col.query")} + {t`Query`} - {t("aiActivity.col.actions")} + {t({ message: "Actions", context: "aiActivity" })} @@ -446,7 +447,7 @@ function EventsTable({ @@ -454,7 +455,7 @@ function EventsTable({ @@ -463,7 +464,7 @@ function EventsTable({ @@ -498,7 +499,7 @@ function SortableHeader({ className, align = "left", }: SortableHeaderProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const isActive = field === activeField; const Icon = isActive ? (direction === "asc" ? ArrowUp : ArrowDown) : ArrowUpDown; const ariaSort = isActive @@ -508,9 +509,9 @@ function SortableHeader({ : "none"; const nextLabel = isActive ? direction === "asc" - ? t("aiActivity.sort.toggleDescending") - : t("aiActivity.sort.toggleAscending") - : t("aiActivity.sort.sortBy", { defaultValue: "Sort by {{field}}", field: label }); + ? t`Sort descending` + : t`Sort ascending` + : t`Sort by ${field}`; return ( (null); const [search, setSearch] = useState(""); @@ -43,9 +44,9 @@ export function AiActivitySessionsTab() { const sortOptions: SessionSortField[] = ["started", "events", "runQueries"]; const sortLabels: Record = { - started: t("aiActivity.sort.started"), - events: t("aiActivity.sort.eventCount"), - runQueries: t("aiActivity.sort.runQueries"), + started: t`Started`, + events: t({ message: "Events", context: "aiActivity" }), + runQueries: t`Run queries`, }; const visibleSessions = useMemo(() => { @@ -64,7 +65,7 @@ export function AiActivitySessionsTab() { /> setSearch(e.target.value)} className="h-9 w-full rounded border border-strong bg-base pl-9 pr-3 text-sm text-primary placeholder:text-muted focus:border-blue-500 focus:outline-none" @@ -75,7 +76,7 @@ export function AiActivitySessionsTab() { options={sortOptions} labels={sortLabels} onChange={(value) => setSortField(value as SessionSortField)} - placeholder={t("aiActivity.sort.sortByPlaceholder")} + placeholder={t`Sort by…`} searchable={false} className="min-w-0" /> @@ -84,24 +85,24 @@ export function AiActivitySessionsTab() { className="flex h-9 items-center gap-1.5 rounded border border-strong bg-base px-2.5 text-xs text-muted transition-colors hover:bg-surface-tertiary hover:text-primary" title={ sortDir === "asc" - ? t("aiActivity.sort.toggleDescending") - : t("aiActivity.sort.toggleAscending") + ? t`Sort descending` + : t`Sort ascending` } aria-label={ sortDir === "asc" - ? t("aiActivity.sort.toggleDescending") - : t("aiActivity.sort.toggleAscending") + ? t`Sort descending` + : t`Sort ascending` } > {sortDir === "asc" ? : } {sortDir === "asc" - ? t("aiActivity.sort.ascending") - : t("aiActivity.sort.descending")} + ? t`Asc` + : t`Desc`} @@ -110,27 +111,24 @@ export function AiActivitySessionsTab() {
- {t("aiActivity.sessionsCount", { count: visibleSessions.length })} + {plural(visibleSessions.length, { one: "# session", other: "# sessions" })} {search && visibleSessions.length !== sessions.length && ( - {t("aiActivity.filteredFrom", { - defaultValue: "of {{total}}", - total: sessions.length, - })} + {t`of ${sessions.length}`} )}
{loading && sessions.length === 0 ? (
- {t("common.loading")} + {t`Loading...`}
) : visibleSessions.length === 0 ? (
{sessions.length === 0 - ? t("aiActivity.empty") - : t("aiActivity.noMatches")} + ? t`No MCP activity yet.` + : t`No sessions match the current filters.`}
) : (
@@ -159,7 +157,7 @@ interface SessionCardProps { } function SessionCard({ session, expanded, onToggle }: SessionCardProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const { showAlert } = useAlert(); const { settings } = useSettings(); @@ -178,12 +176,12 @@ function SessionCard({ session, expanded, onToggle }: SessionCardProps) { }); if (typeof target === "string" && target.length > 0) { await writeTextFile(target, JSON.stringify(file, null, 2)); - showAlert(t("aiActivity.exportSuccess", { path: target }), { + showAlert(t`Exported to ${target}`, { kind: "info", }); } } catch (err) { - showAlert(String(err), { kind: "error", title: t("common.error") }); + showAlert(String(err), { kind: "error", title: t({ message: "Error", context: "common" }) }); } }; @@ -211,14 +209,14 @@ function SessionCard({ session, expanded, onToggle }: SessionCardProps) {
- {t("aiActivity.events")}: {session.eventCount} + {t({ message: "Events", context: "aiActivity" })}: {session.eventCount} - {t("aiActivity.runQueries")}: {session.runQueryCount} + {t`Queries`}: {session.runQueryCount} {session.connectionNames.length > 0 && ( - {t("aiActivity.connections")}:{" "} + {t`Connections`}:{" "} {session.connectionNames.join(", ")} )} @@ -236,7 +234,7 @@ function SessionCard({ session, expanded, onToggle }: SessionCardProps) { className="flex items-center gap-1.5 px-2.5 py-1 text-xs text-muted hover:text-primary hover:bg-surface-tertiary rounded transition-colors shrink-0" > - {t("aiActivity.exportNotebook")} + {t`Export as Notebook`} {expanded && } @@ -245,18 +243,18 @@ function SessionCard({ session, expanded, onToggle }: SessionCardProps) { } function SessionEventList({ sessionId }: { sessionId: string }) { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings } = useSettings(); const { events, loading } = useAiSessionEvents(sessionId); if (loading) { return ( -
{t("common.loading")}
+
{t`Loading...`}
); } if (events.length === 0) { return (
- {t("aiActivity.empty")} + {t`No MCP activity yet.`}
); } diff --git a/src/components/settings/ai-activity/EventDetailModal.tsx b/src/components/settings/ai-activity/EventDetailModal.tsx index 76fcb569..00a91a03 100644 --- a/src/components/settings/ai-activity/EventDetailModal.tsx +++ b/src/components/settings/ai-activity/EventDetailModal.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { X } from "lucide-react"; import type { AiActivityEvent } from "../../../types/ai"; import { formatDurationMs, formatLocalTimestamp } from "../../../utils/aiActivity"; @@ -12,7 +12,7 @@ interface EventDetailModalProps { } export function EventDetailModal({ event, onClose }: EventDetailModalProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings } = useSettings(); return (
@@ -20,7 +20,7 @@ export function EventDetailModal({ event, onClose }: EventDetailModalProps) {

- {t("aiActivity.detailTitle")} + {t`Event details`}

{event.id}

@@ -33,12 +33,12 @@ export function EventDetailModal({ event, onClose }: EventDetailModalProps) {
- +
- {t("aiActivity.col.status")} + {t`Status`}
@@ -59,21 +59,21 @@ export function EventDetailModal({ event, onClose }: EventDetailModalProps) {
{event.clientHint && ( - + )} {event.rows !== null && event.rows !== undefined && ( )} {event.approvalId && ( - + )} {event.error && (
- {t("common.error")} + {t({ message: "Error", context: "common" })}
                 {event.error}
@@ -83,7 +83,7 @@ export function EventDetailModal({ event, onClose }: EventDetailModalProps) {
           {event.query && (
             
- {t("aiActivity.col.query")} + {t`Query`}
                 {event.query}
diff --git a/src/components/settings/ai-activity/QueryKindBadge.tsx b/src/components/settings/ai-activity/QueryKindBadge.tsx
index cebcd8cc..7f486933 100644
--- a/src/components/settings/ai-activity/QueryKindBadge.tsx
+++ b/src/components/settings/ai-activity/QueryKindBadge.tsx
@@ -1,16 +1,18 @@
-import { useTranslation } from "react-i18next";
+import { useLingui } from "@lingui/react/macro";
 import clsx from "clsx";
 import { getQueryKindBadgeStyle } from "../../../utils/aiActivity";
+import { aiActivityQueryKind } from "../../../i18n/registries/aiActivityQueryKind";
 
 interface QueryKindBadgeProps {
   kind: string | null;
 }
 
 export function QueryKindBadge({ kind }: QueryKindBadgeProps) {
-  const { t } = useTranslation();
+  const { i18n } = useLingui();
   if (!kind) return null;
   const style = getQueryKindBadgeStyle(kind);
-  const label = t(`aiActivity.queryKind.${kind}`, { defaultValue: kind });
+  const descriptor = aiActivityQueryKind[kind];
+  const label = descriptor ? i18n._(descriptor) : kind;
   return (
     
               
-              {t("ai.generateSql")}
+              {t({ message: "Generate SQL", context: "ai" })}
             
             
           
diff --git a/src/components/ui/BlobInput.tsx b/src/components/ui/BlobInput.tsx index 93c4f455..60ebba90 100644 --- a/src/components/ui/BlobInput.tsx +++ b/src/components/ui/BlobInput.tsx @@ -1,5 +1,5 @@ import { useEffect, useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Download, Upload, @@ -55,7 +55,7 @@ export const BlobInput = ({ colName, schema, }: BlobInputProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [isDownloading, setIsDownloading] = useState(false); const [isUploading, setIsUploading] = useState(false); const [error, setError] = useState(null); @@ -230,7 +230,7 @@ export const BlobInput = ({
{t("blobInput.imagePreview")} @@ -269,8 +269,8 @@ export const BlobInput = ({ disabled={isUploading} title={ isUploading - ? t("blobInput.uploading") - : t("blobInput.uploadFile") + ? t`Uploading...` + : t`Upload File` } className="p-1.5 rounded text-muted hover:text-secondary hover:bg-surface-tertiary transition-colors disabled:opacity-30 disabled:cursor-not-allowed" > @@ -287,10 +287,10 @@ export const BlobInput = ({ disabled={isDownloadDisabled} title={ isDownloading - ? t("blobInput.downloading") + ? t({ message: "Downloading...", context: "blobInput" }) : isDownloadDisabled - ? t("blobInput.downloadDisabledTruncated") - : t("blobInput.download") + ? t`Download unavailable - only preview loaded` + : t`Download` } className="p-1.5 rounded text-muted hover:text-secondary hover:bg-surface-tertiary transition-colors disabled:opacity-30 disabled:cursor-not-allowed" > @@ -307,7 +307,7 @@ export const BlobInput = ({ type="button" onClick={() => onChange(null)} disabled={isUploading} - title={t("blobInput.delete")} + title={t({ message: "Delete", context: "blobInput" })} className="p-1.5 rounded text-muted hover:text-red-400 hover:bg-red-900/10 transition-colors disabled:opacity-30 disabled:cursor-not-allowed" > @@ -323,7 +323,7 @@ export const BlobInput = ({ className="text-amber-500 flex-shrink-0" /> - {t("blobInput.truncatedWarning")} + {t`Preview only - full data not loaded`}
)} @@ -354,8 +354,8 @@ export const BlobInput = ({
{isUploading - ? t("blobInput.uploading") - : placeholder || t("blobInput.noData")} + ? t`Uploading...` + : placeholder || t`No BLOB data`} diff --git a/src/components/ui/DataGrid.tsx b/src/components/ui/DataGrid.tsx index fadbd185..5f757389 100644 --- a/src/components/ui/DataGrid.tsx +++ b/src/components/ui/DataGrid.tsx @@ -1,3 +1,4 @@ +import { plural } from "@lingui/core/macro"; import React, { useState, useEffect, @@ -5,7 +6,7 @@ import React, { useCallback, useMemo, } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { useReactTable, getCoreRowModel, @@ -146,7 +147,7 @@ export const DataGrid = React.memo( onSort, readonly: readonlyProp, }: DataGridProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeSchema, connections } = useDatabase(); const { showAlert } = useAlert(); @@ -268,7 +269,7 @@ export const DataGrid = React.memo( const buildRowLabel = useCallback( (rowData: unknown[], rowIndex: number, isInsertion: boolean): string => { - if (isInsertion) return t("dataGrid.newRow"); + if (isInsertion) return t`NEW`; if (pkColumn && pkIndexMap !== null) { const pkVal = rowData[pkIndexMap]; if (pkVal !== null && pkVal !== undefined && pkVal !== "") { @@ -610,8 +611,8 @@ export const DataGrid = React.memo( if (onRefresh) onRefresh(); } catch (e) { console.error("Update failed:", e); - showAlert(t("dataGrid.updateFailed") + e, { - title: t("common.error"), + showAlert(t`Update failed: ` + e, { + title: t({ message: "Error", context: "common" }), kind: "error", }); } @@ -708,10 +709,10 @@ export const DataGrid = React.memo( title={ onSort ? displaySortState === "none" - ? t("dataGrid.sortByAsc", { col: colName }) + ? t`Sort by ${colName} ASC` : displaySortState === "asc" - ? t("dataGrid.sortByDesc", { col: colName }) - : t("dataGrid.clearSort") + ? t`Sort by ${colName} DESC` + : t`Clear sort` : undefined } > @@ -1008,7 +1009,7 @@ export const DataGrid = React.memo( } }) .catch((err) => { - showAlert(String(err), { title: t("common.error"), kind: "error" }); + showAlert(String(err), { title: t({ message: "Error", context: "common" }), kind: "error" }); }); }, [ contextMenu, @@ -1025,12 +1026,10 @@ export const DataGrid = React.memo( async (text: string) => { try { await copyTextToClipboard(text); - // Optional: show a brief success message - // showAlert(t("dataGrid.copied"), { title: t("common.success"), kind: "info" }); } catch (e) { console.error("Copy failed:", e); - showAlert(t("common.error") + ": " + e, { - title: t("common.error"), + showAlert(t({ message: "Error", context: "common" }) + ": " + e, { + title: t({ message: "Error", context: "common" }), kind: "error", }); } @@ -1215,7 +1214,7 @@ export const DataGrid = React.memo( if (columns.length === 0) { return (
- {t("dataGrid.noData")} + {t`No data to display`}
); } @@ -1352,21 +1351,21 @@ export const DataGrid = React.memo( // SET GENERATED only for insertion rows, not for existing rows if (isAutoIncrement && isInsertion) { menuItems.push({ - label: t("dataGrid.setGenerate"), + label: t`Set GENERATED`, icon: Sparkles, action: setCellGenerate, }); } if (isNullable) { menuItems.push({ - label: t("dataGrid.setNull"), + label: t`Set NULL`, icon: Ban, action: setCellNull, }); } if (hasDefault) { menuItems.push({ - label: t("dataGrid.setDefault"), + label: t`Set DEFAULT`, icon: FileDigit, action: setCellDefault, }); @@ -1375,21 +1374,21 @@ export const DataGrid = React.memo( const colDataType = columnTypeMap?.get(colName) ?? ""; if (!isBlobColumn(colDataType, columnLengthMap?.get(colName))) { menuItems.push({ - label: t("dataGrid.setEmpty"), + label: t`Set EMPTY`, icon: Copy, action: setCellEmpty, }); } if (getDateInputMode(colDataType) !== null) { menuItems.push({ - label: t("dataGrid.setServerNow"), + label: t`Insert Current Timestamp`, icon: Clock, action: setCellServerNow, }); } if (isJsonColumn(colDataType)) { menuItems.push({ - label: t("contextMenu.openJsonEditor"), + label: t`Open in JSON Editor`, icon: Braces, action: openJsonEditor, }); @@ -1412,7 +1411,7 @@ export const DataGrid = React.memo( if (fkForContextPreview) { if (onForeignKeyShowPanel) { menuItems.push({ - label: t("dataGrid.previewReferenced"), + label: t`Preview related record`, icon: PanelBottomOpen, action: () => { setFocusedCell({ @@ -1430,9 +1429,7 @@ export const DataGrid = React.memo( } if (onForeignKeyNavigate) { menuItems.push({ - label: t("dataGrid.openReferenced", { - table: fkForContextPreview.ref_table, - }), + label: t`Open referenced row in ${table}`, icon: ExternalLink, action: () => { onForeignKeyNavigate( @@ -1449,13 +1446,13 @@ export const DataGrid = React.memo( } menuItems.push({ - label: t("dataGrid.copyCell"), + label: t`Copy Cell`, icon: Copy, action: copyCellFromContext, }); menuItems.push({ - label: t("dataGrid.copySelectedRows"), + label: t`Copy selected row(s)`, icon: Copy, action: copySelectedOrContextRow, }); @@ -1463,25 +1460,25 @@ export const DataGrid = React.memo( if (!readonlyProp) { menuItems.push( { - label: t("contextMenu.openSidebar"), + label: t`Open Sidebar Editor`, icon: Edit, action: openSidebarEditor, }, { - label: t("dataGrid.duplicateRow"), + label: t`Duplicate Row`, icon: CopyPlus, action: duplicateSelectedRow, }, { label: deleteRowCount > 1 - ? t("dataGrid.deleteRows", { count: deleteRowCount }) - : t("dataGrid.deleteRow"), + ? plural(deleteRowCount, { one: "Delete # row", other: "Delete # rows" }) + : t`Delete Row`, icon: Trash2, danger: true, action: deleteSelectedRow, }, { - label: t("dataGrid.revertSelected"), + label: t`Revert Selected`, icon: Undo, action: revertSelectedRow, disabled: !canRevert, @@ -1522,17 +1519,17 @@ export const DataGrid = React.memo( onClose={() => setHeaderContextMenu(null)} items={[ { - label: t("dataGrid.copyColumnName"), + label: t`Copy column name`, icon: Copy, action: copyHeaderName, }, { - label: t("dataGrid.copyColumnNameQuoted"), + label: t({ message: "Copy as `column`" }), icon: Copy, action: copyHeaderNameQuoted, }, { - label: t("dataGrid.copyColumnNameTable"), + label: t`Copy as table.column`, icon: Copy, action: copyHeaderNameTable, }, diff --git a/src/components/ui/DataGridRow.tsx b/src/components/ui/DataGridRow.tsx index 61318a27..56ae9949 100644 --- a/src/components/ui/DataGridRow.tsx +++ b/src/components/ui/DataGridRow.tsx @@ -1,5 +1,6 @@ import React from "react"; import { ExternalLink } from "lucide-react"; +import type { LinguiT } from "../../i18n/lingui"; import { formatCellValue, resolveInsertionCellDisplay, @@ -41,7 +42,7 @@ export interface RowCtx { columnLengthMap: Map | null; isJsonCellTarget: (colType: string | undefined, value: unknown) => boolean; fksByColumn: Map; - t: (key: string, opts?: Record) => string; + t: LinguiT; mergedRows: MergedRow[]; pkIndexMap: number | null; parentViewportWidth: number; @@ -304,7 +305,7 @@ export const MemoRow = React.memo(function MemoRow(rowCtx: MemoRowProps) { // the rendered content (previously formatted twice). const formattedDisplay = formatCellValue( displayValue, - t("dataGrid.null"), + t`null`, colTypeForCell, columnLengthMap?.get(colName), ); @@ -569,7 +570,7 @@ export const MemoRow = React.memo(function MemoRow(rowCtx: MemoRowProps) { } }} className="opacity-0 group-hover/blobcell:opacity-100 transition-opacity p-0.5 rounded text-muted hover:text-secondary hover:bg-surface-tertiary flex-shrink-0" - title={t("blobInput.openSidebar")} + title={t`Open in editor`} > @@ -593,9 +594,7 @@ export const MemoRow = React.memo(function MemoRow(rowCtx: MemoRowProps) { onForeignKeyNavigate(fkForPreview, rawCellValue); }} className="opacity-0 group-hover/fkcell:opacity-100 transition-opacity p-0.5 rounded text-muted hover:text-blue-400 hover:bg-surface-tertiary flex-shrink-0" - title={t("dataGrid.openReferenced", { - table: fkForPreview.ref_table, - })} + title={t`Open referenced row in ${fkForPreview.ref_table}`} > diff --git a/src/components/ui/EditorErrorBoundary.tsx b/src/components/ui/EditorErrorBoundary.tsx index da02ee11..2b38e132 100644 --- a/src/components/ui/EditorErrorBoundary.tsx +++ b/src/components/ui/EditorErrorBoundary.tsx @@ -1,13 +1,13 @@ import { Component } from "react"; import type { ErrorInfo, ReactNode } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { useNavigate } from "react-router-dom"; import { AlertTriangle, Home, RotateCcw, XCircle } from "lucide-react"; -import type { TFunction } from "i18next"; +import type { LinguiT } from "../../i18n/lingui"; import { useEditor } from "../../hooks/useEditor"; interface InnerProps { - t: TFunction; + t: LinguiT; onBackToConnections: () => void; onCloseActiveTab: (() => void) | null; children: ReactNode; @@ -66,10 +66,10 @@ class EditorErrorBoundaryInner extends Component {

- {t("editor.errorBoundary.title")} + {t`The editor crashed unexpectedly`}

- {t("editor.errorBoundary.description")} + {t`Something in the editor failed to render. The error is shown below — try again, or go back to your connections.`}

@@ -81,7 +81,7 @@ class EditorErrorBoundaryInner extends Component { {details && (
- {t("editor.errorBoundary.showDetails")} + {t`Show technical details`}
                     {details}
@@ -96,7 +96,7 @@ class EditorErrorBoundaryInner extends Component {
                   className="inline-flex items-center gap-1.5 px-3 py-1.5 bg-blue-600 hover:bg-blue-500 text-white rounded-md text-sm font-medium transition-colors"
                 >
                   
-                  {t("editor.errorBoundary.retry")}
+                  {t({ message: "Try again", context: "editor" })}
                 
                 {onCloseActiveTab && (
                   
                 )}
                 
               
@@ -130,7 +130,7 @@ interface EditorErrorBoundaryProps { } export function EditorErrorBoundary({ children }: EditorErrorBoundaryProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const navigate = useNavigate(); const { activeTabId, closeTab } = useEditor(); diff --git a/src/components/ui/ErrorDisplay.tsx b/src/components/ui/ErrorDisplay.tsx index a60160c1..8573f55a 100644 --- a/src/components/ui/ErrorDisplay.tsx +++ b/src/components/ui/ErrorDisplay.tsx @@ -1,10 +1,10 @@ import { useState } from "react"; import { ChevronDown, ChevronUp } from "lucide-react"; -import type { TFunction } from "i18next"; +import type { LinguiT } from "../../i18n/lingui"; interface ErrorDisplayProps { error: string; - t: TFunction; + t: LinguiT; } export function ErrorDisplay({ error, t }: ErrorDisplayProps) { @@ -27,8 +27,8 @@ export function ErrorDisplay({ error, t }: ErrorDisplayProps) { > {showDetails ? : } {showDetails - ? t("editor.hideErrorDetails") - : t("editor.showErrorDetails")} + ? t`Hide details` + : t`Show details`} {showDetails && (
diff --git a/src/components/ui/ExplainPlanNode.tsx b/src/components/ui/ExplainPlanNode.tsx index 7ba6047f..9490eb82 100644 --- a/src/components/ui/ExplainPlanNode.tsx +++ b/src/components/ui/ExplainPlanNode.tsx @@ -1,6 +1,6 @@ import { memo } from "react"; import { Handle, Position, type Node, type NodeProps } from "@xyflow/react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import type { ExplainNode } from "../../types/explain"; import { getNodeCostStyle, @@ -24,7 +24,7 @@ export type ExplainPlanNodeType = Node; export const ExplainPlanNodeComponent = memo( ({ data }: NodeProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { node, maxCost, hasAnalyzeData, isSelected } = data; const costStyle = getNodeCostStyle(node.total_cost ?? 0, maxCost); const rowRatio = getRowEstimateRatio(node); @@ -33,11 +33,11 @@ export const ExplainPlanNodeComponent = memo( ? rowRatio >= 1 ? { value: formatRatio(rowRatio), - label: t("editor.visualExplain.overEstimate"), + label: t`Actual rows exceed estimate`, } : { value: formatRatio(1 / rowRatio), - label: t("editor.visualExplain.underEstimate"), + label: t`Estimate exceeds actual rows`, } : null; @@ -55,7 +55,7 @@ export const ExplainPlanNodeComponent = memo(
{node.node_type}
{node.relation && (
- {t("editor.visualExplain.relation")}: {node.relation} + {t({ message: "Table", context: "editor" })}: {node.relation}
)}
@@ -64,7 +64,7 @@ export const ExplainPlanNodeComponent = memo(
- {t("editor.visualExplain.estRows")} + {t`Est. Rows`} {node.plan_rows != null ? formatRows(node.plan_rows) : "-"} @@ -74,7 +74,7 @@ export const ExplainPlanNodeComponent = memo( {node.total_cost != null && (
- {t("editor.visualExplain.cost")} + {t`Cost`} {formatCost(node.total_cost)} @@ -85,7 +85,7 @@ export const ExplainPlanNodeComponent = memo( {mismatch && (
- {t("editor.visualExplain.largestEstimateGap")} + {t`Estimate Gap`} {mismatch.value} @@ -96,7 +96,7 @@ export const ExplainPlanNodeComponent = memo( {hasAnalyzeData && node.actual_rows != null && (
- {t("editor.visualExplain.actualRows")} + {t`Actual Rows`} {formatRows(node.actual_rows)} @@ -107,7 +107,7 @@ export const ExplainPlanNodeComponent = memo( {hasAnalyzeData && node.actual_time_ms != null && (
- {t("editor.visualExplain.time")} + {t({ message: "Time", context: "editor" })} {formatTime(node.actual_time_ms)} @@ -118,7 +118,7 @@ export const ExplainPlanNodeComponent = memo( {hasAnalyzeData && node.actual_loops != null && node.actual_loops > 1 && (
- {t("editor.visualExplain.loops")} + {t`Loops`} {node.actual_loops} @@ -128,13 +128,13 @@ export const ExplainPlanNodeComponent = memo( {node.filter && (
- {t("editor.visualExplain.filter")}: {node.filter} + {t`Filter`}: {node.filter}
)} {node.index_condition && (
- {t("editor.visualExplain.indexCondition")}: {node.index_condition} + {t`Index Cond.`}: {node.index_condition}
)} diff --git a/src/components/ui/FieldEditor.tsx b/src/components/ui/FieldEditor.tsx index 28621167..0c3dde2b 100644 --- a/src/components/ui/FieldEditor.tsx +++ b/src/components/ui/FieldEditor.tsx @@ -1,5 +1,5 @@ import { useMemo } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Sparkles, Ban, FileDigit } from "lucide-react"; import { GeometryInput } from "./GeometryInput"; import { BlobInput } from "./BlobInput"; @@ -58,7 +58,7 @@ export const FieldEditor = ({ pkVal, schema, }: FieldEditorProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const isGeometric = type && isGeometricType(type); const isBlob = type && isBlobColumn(type, characterMaximumLength); const isJsonByType = !!(type && isJsonColumn(type)); @@ -80,7 +80,7 @@ export const FieldEditor = ({ isTextColumn(type) && (isLongTextValue(value) || isLongTextValue(originalValue)); - const defaultPlaceholder = placeholder || t("rowEditor.enterValue"); + const defaultPlaceholder = placeholder || t`Enter value...`; // Determine if we should show quick action buttons const showQuickActions = isAutoIncrement || hasDefault || isNullable; @@ -165,10 +165,10 @@ export const FieldEditor = ({ type="button" onClick={() => onChange(null)} className="px-2 py-1 text-xs bg-purple-900/20 text-purple-400 rounded border border-purple-900/50 hover:bg-purple-900/30 transition-colors flex items-center gap-1" - title={t("dataGrid.setGenerate")} + title={t`Set GENERATED`} > - {t("dataGrid.setGenerate")} + {t`Set GENERATED`} )} {isNullable && ( @@ -176,10 +176,10 @@ export const FieldEditor = ({ type="button" onClick={() => onChange(null)} className="px-2 py-1 text-xs bg-surface-secondary text-muted rounded border border-default hover:bg-surface-tertiary transition-colors flex items-center gap-1" - title={t("dataGrid.setNull")} + title={t`Set NULL`} > - {t("dataGrid.setNull")} + {t`Set NULL`} )} {hasDefault && ( @@ -187,10 +187,10 @@ export const FieldEditor = ({ type="button" onClick={() => onChange(isInsertion ? null : USE_DEFAULT_SENTINEL)} className="px-2 py-1 text-xs bg-blue-900/20 text-blue-400 rounded border border-blue-900/50 hover:bg-blue-900/30 transition-colors flex items-center gap-1" - title={t("dataGrid.setDefault")} + title={t`Set DEFAULT`} > - {t("dataGrid.setDefault")} + {t`Set DEFAULT`} )} {!isBlob && ( @@ -198,9 +198,9 @@ export const FieldEditor = ({ type="button" onClick={() => onChange(" ")} className="px-2 py-1 text-xs bg-surface-secondary text-secondary rounded border border-default hover:bg-surface-tertiary transition-colors" - title={t("dataGrid.setEmpty")} + title={t`Set EMPTY`} > - {t("dataGrid.setEmpty")} + {t`Set EMPTY`} )}
diff --git a/src/components/ui/FilterRow.tsx b/src/components/ui/FilterRow.tsx index 90bb234b..d774fe45 100644 --- a/src/components/ui/FilterRow.tsx +++ b/src/components/ui/FilterRow.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Check, Plus, Minus } from "lucide-react"; import type { TableColumn } from "../../types/editor"; import { getOperatorsForType } from "../../utils/filterBar"; @@ -29,7 +29,7 @@ export const FilterRow = ({ isApplied, onTriggerApplied, }: FilterRowProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const selectedCol = columns.find((c) => c.name === filter.column); const operators = getOperatorsForType(selectedCol?.data_type ?? ""); const enabled = filter.enabled !== false; @@ -61,7 +61,7 @@ export const FilterRow = ({ {/* Checkbox -- selected for Apply All */}
)} @@ -131,21 +131,21 @@ export const FilterRow = ({ : "bg-blue-600/15 border-blue-500/40 text-blue-300 hover:bg-blue-600/25 hover:border-blue-400/60" }`} > - {isApplied ? t("toolbar.applied") : t("toolbar.apply")} + {isApplied ? t`Applied` : t`Apply`} {/* Duplicate / Remove */}
diff --git a/src/components/ui/JsonCell.tsx b/src/components/ui/JsonCell.tsx index 5ace2888..51f926b9 100644 --- a/src/components/ui/JsonCell.tsx +++ b/src/components/ui/JsonCell.tsx @@ -1,5 +1,5 @@ import { useLayoutEffect, useMemo, useRef, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Braces, ChevronRight } from "lucide-react"; import { tokenizeJsonDisplay, type JsonToken } from "../../utils/jsonHighlight"; import { truncateCellPreview } from "../../utils/text"; @@ -31,7 +31,7 @@ export const JsonCell = ({ onToggleExpand, onOpenViewer, }: JsonCellProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const textRef = useRef(null); const [isOverflowing, setIsOverflowing] = useState(false); @@ -96,8 +96,8 @@ export const JsonCell = ({ className={`${iconVisibilityClass} transition-all p-0.5 rounded text-muted hover:text-secondary hover:bg-surface-tertiary flex-shrink-0 ${ isExpanded ? "rotate-90" : "" }`} - title={t("jsonCell.expand")} - aria-label={t("jsonCell.expand")} + title={t`Toggle inline JSON tree`} + aria-label={t`Toggle inline JSON tree`} > @@ -108,8 +108,8 @@ export const JsonCell = ({ onOpenViewer(); }} className={`${iconVisibilityClass} transition-opacity p-0.5 rounded text-muted hover:text-secondary hover:bg-surface-tertiary flex-shrink-0`} - title={t("jsonCell.openViewer")} - aria-label={t("jsonCell.openViewer")} + title={t`Open JSON viewer`} + aria-label={t`Open JSON viewer`} > diff --git a/src/components/ui/JsonExpansionEditor.tsx b/src/components/ui/JsonExpansionEditor.tsx index 0ad968d9..645ba6dc 100644 --- a/src/components/ui/JsonExpansionEditor.tsx +++ b/src/components/ui/JsonExpansionEditor.tsx @@ -1,5 +1,5 @@ import { useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Columns2, GitCompare } from "lucide-react"; import { CellCodeEditor } from "./CellCodeEditor"; import { CellDiffEditor } from "./CellDiffEditor"; @@ -28,7 +28,7 @@ export const JsonExpansionEditor = ({ onCancel, originalValue, }: JsonExpansionEditorProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const initial = useMemo(() => formatJsonForEditor(value), [value]); const originalText = useMemo( () => @@ -80,10 +80,10 @@ export const JsonExpansionEditor = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("jsonInput.diff")} + title={t`Diff`} > - {t("jsonInput.diff")} + {t`Diff`} {hasDiff && ( - {t("jsonInput.sideBySide")} + {t`Side by side`} )}
@@ -127,7 +127,7 @@ export const JsonExpansionEditor = ({ onClick={onCancel} className="px-3 py-1 text-secondary hover:text-primary transition-colors" > - {t("common.cancel")} + {t`Cancel`}
)} diff --git a/src/components/ui/JsonInput.tsx b/src/components/ui/JsonInput.tsx index f94ea76b..e5f2b5c4 100644 --- a/src/components/ui/JsonInput.tsx +++ b/src/components/ui/JsonInput.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Check, Code, @@ -52,7 +52,7 @@ export const JsonInput: React.FC = ({ fillHeight = false, originalValue, }) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [mode, setMode] = useState("code"); const valueKey = JSON.stringify(value); const [text, setText] = useState(() => formatJsonForEditor(value)); @@ -136,9 +136,9 @@ export const JsonInput: React.FC = ({ const modes: Array<{ key: JsonInputMode; label: string; Icon: typeof Code }> = [ - { key: "code", label: t("jsonInput.mode.code"), Icon: Code }, - { key: "tree", label: t("jsonInput.mode.tree"), Icon: Network }, - { key: "raw", label: t("jsonInput.mode.raw"), Icon: FileText }, + { key: "code", label: t`Code`, Icon: Code }, + { key: "tree", label: t`Tree`, Icon: Network }, + { key: "raw", label: t`Raw`, Icon: FileText }, ]; const isTextMode = mode === "code" || mode === "raw"; @@ -183,7 +183,7 @@ export const JsonInput: React.FC = ({ {/* Mode selector */}
= ({ data-testid="json-input-raw" value={text} onChange={handleRawChange} - placeholder={placeholder || t("jsonInput.placeholder")} + placeholder={placeholder || t`Enter JSON...`} spellCheck={false} readOnly={readOnly} className={`w-full px-3 py-2 bg-base border rounded-lg text-primary font-mono text-sm resize-y focus:outline-none transition-colors ${ @@ -290,10 +290,10 @@ export const JsonInput: React.FC = ({ onClick={handleFormat} disabled={!!error || text.trim() === ""} className="px-2 py-1 text-xs bg-surface-secondary text-secondary rounded border border-default hover:bg-surface-tertiary transition-colors flex items-center gap-1 disabled:opacity-40 disabled:cursor-not-allowed" - title={t("jsonInput.format")} + title={t`Format`} > - {t("jsonInput.format")} + {t`Format`} )} {mode === "code" && originalText !== null && ( @@ -307,10 +307,10 @@ export const JsonInput: React.FC = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("jsonInput.diff")} + title={t`Diff`} > - {t("jsonInput.diff")} + {t`Diff`} {hasDiff && ( = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("jsonInput.sideBySide")} + title={t`Side by side`} > - {t("jsonInput.sideBySide")} + {t`Side by side`} )} {!disableExpand && ( @@ -340,10 +340,10 @@ export const JsonInput: React.FC = ({ type="button" onClick={handleExpandToWindow} className="px-2 py-1 text-xs bg-surface-secondary text-secondary rounded border border-default hover:bg-surface-tertiary transition-colors flex items-center gap-1" - title={t("jsonInput.expand")} + title={t({ message: "Expand", context: "jsonInput" })} > - {t("jsonInput.expand")} + {t({ message: "Expand", context: "jsonInput" })} )}
@@ -355,12 +355,12 @@ export const JsonInput: React.FC = ({ (error ? ( - {t("jsonInput.invalid")} + {t`Invalid JSON`} ) : ( - {t("jsonInput.valid")} + {t`Valid JSON`} ))}
diff --git a/src/components/ui/JsonTreeView.tsx b/src/components/ui/JsonTreeView.tsx index 816d1f8b..bc05c8c1 100644 --- a/src/components/ui/JsonTreeView.tsx +++ b/src/components/ui/JsonTreeView.tsx @@ -1,5 +1,5 @@ import { useContext, useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Search } from "lucide-react"; import { JsonEditor, @@ -87,7 +87,7 @@ export const JsonTreeView = ({ onCopy, fillHeight = false, }: JsonTreeViewProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const themeContext = useContext(ThemeContext); const currentTheme = themeContext?.currentTheme; const [internalSearch, setInternalSearch] = useState(""); @@ -122,7 +122,7 @@ export const JsonTreeView = ({ role="searchbox" value={internalSearch} onChange={(e) => setInternalSearch(e.target.value)} - placeholder={t("jsonInput.search")} + placeholder={t`Search`} spellCheck={false} className="w-full bg-transparent border-none text-sm text-primary focus:outline-none placeholder:text-muted" /> @@ -171,7 +171,7 @@ export const JsonTreeView = ({ role="searchbox" value={internalSearch} onChange={(e) => setInternalSearch(e.target.value)} - placeholder={t("jsonInput.search")} + placeholder={t`Search`} spellCheck={false} className="w-full bg-transparent border-none text-sm text-primary focus:outline-none placeholder:text-muted" /> diff --git a/src/components/ui/MultiResultPanel.tsx b/src/components/ui/MultiResultPanel.tsx index b4c19eec..84893084 100644 --- a/src/components/ui/MultiResultPanel.tsx +++ b/src/components/ui/MultiResultPanel.tsx @@ -1,5 +1,5 @@ import { useState, useRef, useEffect, useCallback } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Play, Check, @@ -84,7 +84,7 @@ function ResultTab({ onAiRename: () => void; onContextMenu: (e: React.MouseEvent) => void; }) { - const { t } = useTranslation(); + const { t } = useLingui(); const displayLabel = getEntryDisplayLabel(entry, queryPrefix); const [isEditing, setIsEditing] = useState(initialEditing); const [editValue, setEditValue] = useState( @@ -187,7 +187,7 @@ function ResultTab({ }} disabled={aiRenaming} className="p-0.5 rounded-sm hover:bg-surface-secondary transition-opacity shrink-0 opacity-0 group-hover:opacity-100 disabled:opacity-50" - title={aiRenaming ? t("editor.multiResult.generatingName") : t("editor.multiResult.aiGenerateName")} + title={aiRenaming ? t`Generating name...` : t`Generate name with AI`} > {aiRenaming ? ( @@ -205,7 +205,7 @@ function ResultTab({ onRerun(); }} className="p-0.5 rounded-sm hover:bg-surface-secondary transition-opacity shrink-0 opacity-0 group-hover:opacity-100" - title={t("editor.multiResult.rerun")} + title={t`Re-run query`} > @@ -244,7 +244,7 @@ export function MultiResultPanel({ onCloseAllEntries, onRenameEntry, }: MultiResultPanelProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings } = useSettings(); const scrollRef = useRef(null); const [canScrollLeft, setCanScrollLeft] = useState(false); @@ -263,7 +263,7 @@ export function MultiResultPanel({ const succeeded = countSucceeded(results); const failed = countFailed(results); const totalTime = totalExecutionTime(results); - const queryPrefix = t("editor.multiResult.queryPrefix"); + const queryPrefix = t`Query`; const updateScrollArrows = useCallback(() => { const el = scrollRef.current; @@ -345,7 +345,7 @@ export function MultiResultPanel({ @@ -467,7 +467,7 @@ export function MultiResultPanel({
- {t("editor.multiResult.results")} + {t`Results`} ({results.length}) @@ -485,8 +485,8 @@ export function MultiResultPanel({ className="flex items-center justify-center w-8 h-full text-muted border-l border-default shrink-0 transition-colors hover:text-white hover:bg-surface-secondary" title={ collapsedIds.size === results.length - ? t("editor.multiResult.expandAll") - : t("editor.multiResult.collapseAll") + ? t`Expand all` + : t`Collapse all` } > {collapsedIds.size === results.length ? ( @@ -537,7 +537,7 @@ export function MultiResultPanel({ onClose={() => setContextMenu(null)} items={[ { - label: t("editor.multiResult.rename"), + label: t`Rename`, icon: Pencil, action: () => setEditingEntryId(contextMenu.entryId), }, @@ -545,8 +545,8 @@ export function MultiResultPanel({ ? [ { label: aiRenamingEntryId === contextMenu.entryId - ? t("editor.multiResult.generatingName") - : t("editor.multiResult.aiGenerateName"), + ? t`Generating name...` + : t`Generate name with AI`, icon: Sparkles, action: () => handleAiRename(contextMenu.entryId), disabled: aiRenamingEntryId !== null, @@ -555,18 +555,18 @@ export function MultiResultPanel({ : []), { separator: true }, { - label: t("editor.closeTab"), + label: t`Close Tab`, icon: X, action: () => onCloseEntry(contextMenu.entryId), }, { - label: t("editor.closeOthers"), + label: t`Close Other Tabs`, icon: XCircle, action: () => onCloseOtherEntries(contextMenu.entryId), disabled: results.length <= 1, }, { - label: t("editor.closeRight"), + label: t`Close Tabs to Right`, icon: ArrowRightToLine, action: () => onCloseEntriesToRight(contextMenu.entryId), disabled: @@ -574,7 +574,7 @@ export function MultiResultPanel({ results.length - 1, }, { - label: t("editor.closeLeft"), + label: t`Close Tabs to Left`, icon: ArrowLeftToLine, action: () => onCloseEntriesToLeft(contextMenu.entryId), disabled: @@ -582,7 +582,7 @@ export function MultiResultPanel({ }, { separator: true }, { - label: t("editor.closeAll"), + label: t`Close All Tabs`, icon: Trash2, danger: true, action: () => onCloseAllEntries(), diff --git a/src/components/ui/PaginationControls.tsx b/src/components/ui/PaginationControls.tsx index 4f81c9da..ad35a152 100644 --- a/src/components/ui/PaginationControls.tsx +++ b/src/components/ui/PaginationControls.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { ChevronLeft, ChevronRight, @@ -18,7 +18,7 @@ export function PaginationControls({ isLoading, onPageChange, }: PaginationControlsProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const isFirstPage = pagination.page === 1; const totalPages = pagination.total_rows !== null @@ -45,13 +45,8 @@ export function PaginationControls({
{totalPages !== null - ? t("editor.pageOf", { - current: pagination.page, - total: totalPages, - }) - : t("editor.page", { - current: pagination.page, - })} + ? t`Page ${pagination.page} of ${totalPages}` + : t`Page ${pagination.page}`}
@@ -360,17 +360,17 @@ const SchemaDiagramContent = ({ )}
{selectedTable && (
- {t("erDiagram.focusedOn")}: {selectedTable} + {t`Focused on`}: {selectedTable}
)} @@ -418,7 +418,7 @@ const SchemaDiagramContent = ({ onClose={() => setContextMenu(null)} items={[ { - label: t("erDiagram.focusOnTable"), + label: t`Focus on Table`, icon: Focus, action: () => { setSelectedTable(contextMenu.tableId); @@ -427,7 +427,7 @@ const SchemaDiagramContent = ({ ...(selectedTable ? [ { - label: t("erDiagram.showAll"), + label: t`Show All`, icon: Maximize2, action: () => { setSelectedTable(null); diff --git a/src/components/ui/StackedResultItem.tsx b/src/components/ui/StackedResultItem.tsx index 412c7563..08278415 100644 --- a/src/components/ui/StackedResultItem.tsx +++ b/src/components/ui/StackedResultItem.tsx @@ -1,5 +1,5 @@ import { useState, useRef, useEffect, useCallback } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Loader2, XCircle, @@ -51,12 +51,12 @@ export function StackedResultItem({ onAiRename, onClose, }: StackedResultItemProps) { - const { t } = useTranslation(); + const { t } = useLingui(); const [queryExpanded, setQueryExpanded] = useState(false); const [isEditing, setIsEditing] = useState(false); const displayLabel = getEntryDisplayLabel( entry, - t("editor.multiResult.queryPrefix"), + t`Query`, ); const [editValue, setEditValue] = useState(""); const inputRef = useRef(null); @@ -164,7 +164,7 @@ export function StackedResultItem({ startEditing(); }} className="p-0.5 rounded-sm hover:bg-surface-secondary text-muted hover:text-white shrink-0 opacity-0 group-hover:opacity-100 transition-opacity" - title={t("editor.multiResult.rename")} + title={t`Rename`} > @@ -179,7 +179,7 @@ export function StackedResultItem({ }} disabled={aiRenaming} className="p-0.5 rounded-sm hover:bg-surface-secondary shrink-0 opacity-0 group-hover:opacity-100 transition-opacity disabled:opacity-50" - title={aiRenaming ? t("editor.multiResult.generatingName") : t("editor.multiResult.aiGenerateName")} + title={aiRenaming ? t`Generating name...` : t`Generate name with AI`} > {aiRenaming ? ( @@ -197,7 +197,7 @@ export function StackedResultItem({ onRerun(); }} className="p-0.5 rounded-sm hover:bg-surface-secondary text-muted hover:text-white shrink-0 opacity-0 group-hover:opacity-100 transition-opacity" - title={t("editor.multiResult.rerun")} + title={t`Re-run query`} > @@ -210,7 +210,7 @@ export function StackedResultItem({ onClose(); }} className="p-0.5 rounded-sm hover:bg-surface-secondary text-muted hover:text-white shrink-0 opacity-0 group-hover:opacity-100 transition-opacity" - title={t("editor.multiResult.close")} + title={t`Close tab`} > @@ -223,11 +223,11 @@ export function StackedResultItem({
{entry.result!.pagination?.has_more && ( - {t("editor.autoPaginated")} + {t`Auto paginated`} )} - {t("editor.rowsRetrieved", { count: entry.result!.rows.length })} + {t`${entry.result!.rows.length} rows retrieved`} {entry.executionTime !== null && ( ({formatDuration(entry.executionTime)}) @@ -284,7 +284,7 @@ export function StackedResultItem({ {entry.isLoading ? (
- {t("editor.executingQuery")} + {t`Executing query...`}
) : entry.error ? (
diff --git a/src/components/ui/TableToolbar.tsx b/src/components/ui/TableToolbar.tsx index 0ca71429..cf364020 100644 --- a/src/components/ui/TableToolbar.tsx +++ b/src/components/ui/TableToolbar.tsx @@ -1,5 +1,5 @@ import React, { useState, useRef, useCallback, useEffect } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Filter, ArrowUpDown, @@ -66,7 +66,7 @@ const TableToolbarInternal = ({ onResetAllApplied, onUpdate, }: TableToolbarInternalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeDriver } = useDatabase(); const [filterInput, setFilterInput] = useState(initialFilter || ""); const [sortInput, setSortInput] = useState(initialSort || ""); @@ -410,7 +410,7 @@ const TableToolbarInternal = ({
@@ -554,16 +554,16 @@ const TableToolbarInternal = ({
- {t("toolbar.filterConditions")} + {t`Filter conditions`} {structuredFilters.length > 0 && ( - {t("toolbar.activeOf", { active: activeFilterCount, total: structuredFilters.length })} + {t`${activeFilterCount} of ${structuredFilters.length} active`} )}
) : ( @@ -606,15 +606,15 @@ const TableToolbarInternal = ({ onClick={handleUnset} className="px-2.5 py-1 rounded text-xs text-muted border border-default/70 hover:text-secondary hover:border-default transition-colors" > - {t("toolbar.unset")} + {t`Unset`}
@@ -632,7 +632,7 @@ const TableToolbarInternal = ({ onClick={handleApplyAll} className="px-3 py-1 rounded text-xs font-medium border transition-colors bg-blue-600/20 border-blue-500/50 text-blue-300 hover:bg-blue-600/30 hover:border-blue-400/70" > - {t("toolbar.applyAll")} + {t`Apply All`}
diff --git a/src/components/ui/TextCell.tsx b/src/components/ui/TextCell.tsx index 137c7b69..84d0c0e2 100644 --- a/src/components/ui/TextCell.tsx +++ b/src/components/ui/TextCell.tsx @@ -1,5 +1,5 @@ import { useLayoutEffect, useMemo, useRef, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { ChevronRight } from "lucide-react"; import { truncateCellPreview } from "../../utils/text"; @@ -18,7 +18,7 @@ export const TextCell = ({ isPendingDelete, onToggleExpand, }: TextCellProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const textRef = useRef(null); const [isOverflowing, setIsOverflowing] = useState(false); @@ -66,8 +66,8 @@ export const TextCell = ({ className={`${iconVisibilityClass} transition-all p-0.5 rounded text-muted hover:text-secondary hover:bg-surface-tertiary flex-shrink-0 ${ isExpanded ? "rotate-90" : "" }`} - title={t("textCell.expand")} - aria-label={t("textCell.expand")} + title={t`Toggle inline text editor`} + aria-label={t`Toggle inline text editor`} > diff --git a/src/components/ui/TextExpansionEditor.tsx b/src/components/ui/TextExpansionEditor.tsx index 0a9a2cff..41cd9fdf 100644 --- a/src/components/ui/TextExpansionEditor.tsx +++ b/src/components/ui/TextExpansionEditor.tsx @@ -1,5 +1,5 @@ import { useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Columns2, GitCompare } from "lucide-react"; import { CellCodeEditor } from "./CellCodeEditor"; import { CellDiffEditor } from "./CellDiffEditor"; @@ -24,7 +24,7 @@ export const TextExpansionEditor = ({ onCancel, originalValue, }: TextExpansionEditorProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); const initial = useMemo(() => formatTextForEditor(value), [value]); const originalText = useMemo( () => @@ -67,10 +67,10 @@ export const TextExpansionEditor = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("textInput.diff")} + title={t`Diff`} > - {t("textInput.diff")} + {t`Diff`} {hasDiff && ( - {t("textInput.sideBySide")} + {t`Side by side`} )}
@@ -105,7 +105,7 @@ export const TextExpansionEditor = ({ onClick={onCancel} className="px-3 py-1 text-secondary hover:text-primary transition-colors" > - {t("common.cancel")} + {t`Cancel`}
)} diff --git a/src/components/ui/TextInput.tsx b/src/components/ui/TextInput.tsx index f254c111..85a250d2 100644 --- a/src/components/ui/TextInput.tsx +++ b/src/components/ui/TextInput.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Columns2, GitCompare } from "lucide-react"; import { formatTextForEditor } from "../../utils/text"; import { CellCodeEditor } from "./CellCodeEditor"; @@ -26,7 +26,7 @@ export const TextInput: React.FC = ({ readOnly = false, originalValue, }) => { - const { t } = useTranslation(); + const { t } = useLingui(); const valueKey = useMemo(() => formatTextForEditor(value), [value]); const [text, setText] = useState(valueKey); const [prevValueKey, setPrevValueKey] = useState(valueKey); @@ -106,10 +106,10 @@ export const TextInput: React.FC = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("textInput.diff")} + title={t`Diff`} > - {t("textInput.diff")} + {t`Diff`} {hasDiff && ( = ({ ? "bg-blue-600/30 text-blue-100 border-blue-500/50" : "bg-surface-secondary text-secondary border-default hover:bg-surface-tertiary" }`} - title={t("textInput.sideBySide")} + title={t`Side by side`} > - {t("textInput.sideBySide")} + {t`Side by side`} )}
diff --git a/src/contexts/SettingsProvider.tsx b/src/contexts/SettingsProvider.tsx index 9340b642..bfd0c9ec 100644 --- a/src/contexts/SettingsProvider.tsx +++ b/src/contexts/SettingsProvider.tsx @@ -1,5 +1,4 @@ import { useEffect, useState, type ReactNode } from "react"; -import { useTranslation } from "react-i18next"; import { invoke } from "@tauri-apps/api/core"; import { SettingsContext, @@ -7,9 +6,23 @@ import { type Settings, } from "./SettingsContext"; import { getFontCSS } from "../utils/settings"; +import { dynamicActivate } from "../i18n/lingui"; +import { SUPPORTED_LANGUAGES } from "../i18n/config"; + +// Resolve the "auto" language setting to a supported locale via the browser +// language, falling back to English. +function resolveLocale(language: string): string { + if (language !== "auto") { + return language; + } + const ids = SUPPORTED_LANGUAGES.map((l) => l.id) as readonly string[]; + const preferred = (navigator.languages ?? [navigator.language]) + .map((tag) => tag.split("-")[0]) + .find((base) => ids.includes(base)); + return preferred ?? "en"; +} export const SettingsProvider = ({ children }: { children: ReactNode }) => { - const { i18n } = useTranslation(); const [settings, setSettings] = useState(DEFAULT_SETTINGS); const [isLoading, setIsLoading] = useState(true); @@ -133,12 +146,8 @@ export const SettingsProvider = ({ children }: { children: ReactNode }) => { // Update i18n when language changes useEffect(() => { - if (settings.language === "auto") { - i18n.changeLanguage(); - } else { - i18n.changeLanguage(settings.language); - } - }, [settings.language, i18n]); + void dynamicActivate(resolveLocale(settings.language)); + }, [settings.language]); // Apply font family useEffect(() => { diff --git a/src/hooks/usePluginApi.ts b/src/hooks/usePluginApi.ts index b968d18c..d39c692c 100644 --- a/src/hooks/usePluginApi.ts +++ b/src/hooks/usePluginApi.ts @@ -2,7 +2,7 @@ import { useState, useCallback, useContext, useMemo } from "react"; import { invoke } from "@tauri-apps/api/core"; import { message } from "@tauri-apps/plugin-dialog"; import { openUrl as openExternal } from "@tauri-apps/plugin-opener"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { ThemeContext } from "../contexts/ThemeContext"; import { DatabaseContext } from "../contexts/DatabaseContext"; @@ -147,8 +147,8 @@ export function usePluginSetting(pluginId: string) { * Uses the plugin ID as the i18next namespace, which must be pre-loaded * by the Tabularis plugin loader before the component mounts. */ -export function usePluginTranslation(pluginId: string) { - const { t } = useTranslation(pluginId); +export function usePluginTranslation(_pluginId: string) { + const { t } = useLingui(); return t; } diff --git a/src/i18n/lingui.ts b/src/i18n/lingui.ts index a8b155dd..ec93ead0 100644 --- a/src/i18n/lingui.ts +++ b/src/i18n/lingui.ts @@ -1,7 +1,11 @@ import { i18n } from "@lingui/core"; +import type { useLingui } from "@lingui/react/macro"; export { i18n }; +/** The `t` macro function returned by `useLingui()` (tagged template + descriptor). */ +export type LinguiT = ReturnType["t"]; + export async function dynamicActivate(locale: string): Promise { const { messages } = await import(`../locales/${locale}/messages.ts`); i18n.load(locale, messages); diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index bb80eb57..dcfc7f68 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -39,6 +39,7 @@ "refresh": "Refresh" }, "sidebar": { + "actions": "Actions", "connections": "Connections", "settings": "Settings", "savedQueries": "Saved Queries", diff --git a/src/i18n/registries/aiActivityQueryKind.ts b/src/i18n/registries/aiActivityQueryKind.ts new file mode 100644 index 00000000..9d4b3de4 --- /dev/null +++ b/src/i18n/registries/aiActivityQueryKind.ts @@ -0,0 +1,9 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const aiActivityQueryKind: Record = { + select: msg`Select`, + write: msg`Write`, + ddl: msg`DDL`, + unknown: msg`Unknown`, +}; diff --git a/src/i18n/registries/aiActivityStatus.ts b/src/i18n/registries/aiActivityStatus.ts new file mode 100644 index 00000000..ddf1e648 --- /dev/null +++ b/src/i18n/registries/aiActivityStatus.ts @@ -0,0 +1,11 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const aiActivityStatus: Record = { + success: msg`Success`, + blocked_readonly: msg`Blocked (read-only)`, + blocked_pending_approval: msg`Pending approval`, + denied: msg`Denied`, + error: msg`Error`, + timeout: msg`Timeout`, +}; diff --git a/src/i18n/registries/aiPromptKinds.ts b/src/i18n/registries/aiPromptKinds.ts new file mode 100644 index 00000000..da4b2892 --- /dev/null +++ b/src/i18n/registries/aiPromptKinds.ts @@ -0,0 +1,26 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const aiPromptLabel: Record = { + system: msg`SQL Generation`, + explain: msg`Query Explanation`, + cellname: msg`Notebook Cell Name Prompt`, + tabrename: msg`Query Tab Name Prompt`, + explainplan: msg`Explain Plan Analysis Prompt`, +}; + +export const aiPromptDesc: Record = { + system: msg`Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure.`, + explain: msg`Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language.`, + cellname: msg`Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message.`, + tabrename: msg`Customize instructions for AI query result tab name generation. The SQL query is sent as the user message.`, + explainplan: msg`Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language.`, +}; + +export const aiPromptPlaceholder: Record = { + system: msg`Enter system prompt...`, + explain: msg`Enter explain prompt...`, + cellname: msg`Enter notebook cell name prompt...`, + tabrename: msg`Enter query tab name prompt...`, + explainplan: msg`Enter explain plan analysis prompt...`, +}; diff --git a/src/i18n/registries/connectionAppearanceTabs.ts b/src/i18n/registries/connectionAppearanceTabs.ts new file mode 100644 index 00000000..2310e0b3 --- /dev/null +++ b/src/i18n/registries/connectionAppearanceTabs.ts @@ -0,0 +1,9 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const connectionAppearanceTabs: Record = { + default: msg`Default`, + pack: msg`Icon`, + emoji: msg`Emoji`, + image: msg`Image`, +}; diff --git a/src/i18n/registries/dumpErrorKeys.ts b/src/i18n/registries/dumpErrorKeys.ts new file mode 100644 index 00000000..ecc05816 --- /dev/null +++ b/src/i18n/registries/dumpErrorKeys.ts @@ -0,0 +1,7 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const dumpErrorKeys: Record = { + "dump.errorNoOption": msg`Please select at least Structure or Data`, + "dump.errorNoTables": msg`Please select at least one table`, +}; diff --git a/src/i18n/registries/k8sErrorKeys.ts b/src/i18n/registries/k8sErrorKeys.ts new file mode 100644 index 00000000..2785b9d3 --- /dev/null +++ b/src/i18n/registries/k8sErrorKeys.ts @@ -0,0 +1,12 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; +import type { K8sValidationErrorKey } from "../../utils/k8s"; + +export const k8sErrorKeys: Record = { + "k8sConnections.errors.nameRequired": msg`Connection name is required`, + "k8sConnections.errors.contextRequired": msg`Kubernetes context is required`, + "k8sConnections.errors.namespaceRequired": msg`Namespace is required`, + "k8sConnections.errors.resourceTypeInvalid": msg`Resource type must be "service" or "pod"`, + "k8sConnections.errors.resourceNameRequired": msg`Resource name is required`, + "k8sConnections.errors.portInvalid": msg`Port must be between 1 and 65535`, +}; diff --git a/src/i18n/registries/notebookHistoryChange.ts b/src/i18n/registries/notebookHistoryChange.ts new file mode 100644 index 00000000..1390e828 --- /dev/null +++ b/src/i18n/registries/notebookHistoryChange.ts @@ -0,0 +1,19 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const notebookHistoryChange: Record = { + initial: msg`Initial version`, + editCell: msg({ message: "Edited cell {n}" }), + addSql: msg({ message: "Added SQL cell {n}" }), + addMarkdown: msg({ message: "Added Markdown cell {n}" }), + deleteCell: msg({ message: "Deleted cell {n}" }), + reorder: msg`Reordered cells`, + renameCell: msg({ message: "Renamed cell {n}" }), + schemaCell: msg({ message: "Changed database (cell {n})" }), + chartCell: msg({ message: "Changed chart (cell {n})" }), + parallelCell: msg({ message: "Toggled parallel (cell {n})" }), + collapse: msg`Collapsed/expanded cells`, + params: msg`Changed parameters`, + stopOnError: msg`Toggled stop on error`, + other: msg`Edited notebook`, +}; diff --git a/src/i18n/registries/openSourceLibrariesEcosystem.ts b/src/i18n/registries/openSourceLibrariesEcosystem.ts new file mode 100644 index 00000000..56c371c8 --- /dev/null +++ b/src/i18n/registries/openSourceLibrariesEcosystem.ts @@ -0,0 +1,7 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const openSourceLibrariesEcosystem: Record = { + npm: msg`npm ecosystem`, + cargo: msg`Cargo ecosystem`, +}; diff --git a/src/i18n/registries/openSourceLibrariesSections.ts b/src/i18n/registries/openSourceLibrariesSections.ts new file mode 100644 index 00000000..db110567 --- /dev/null +++ b/src/i18n/registries/openSourceLibrariesSections.ts @@ -0,0 +1,9 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const openSourceLibrariesSections: Record = { + "npm-runtime": msg`Frontend Dependencies`, + "npm-tooling": msg`Frontend Dev Dependencies`, + "cargo-runtime": msg`Rust Dependencies`, + "cargo-tooling": msg`Rust Build and Test`, +}; diff --git a/src/i18n/registries/pluginBuiltinSettings.ts b/src/i18n/registries/pluginBuiltinSettings.ts new file mode 100644 index 00000000..9868e08a --- /dev/null +++ b/src/i18n/registries/pluginBuiltinSettings.ts @@ -0,0 +1,17 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +/** + * Keyed by `${pluginId}.${def.key}.label` and `${pluginId}.${def.key}.description` + * to mirror the i18next key shape used at the call sites. + */ +export const pluginBuiltinSettings: Record = { + "mysql.maxAllowedPacket.label": msg`Max Allowed Packet`, + "mysql.maxAllowedPacket.description": msg`Maximum packet size used by the MySQL connector.`, + "mysql.socketTimeout.label": msg`Socket Timeout`, + "mysql.socketTimeout.description": msg`Socket timeout in milliseconds.`, + "mysql.connectTimeout.label": msg`Connect Timeout`, + "mysql.connectTimeout.description": msg`Connection timeout in milliseconds.`, + "mysql.timezone.label": msg`Timezone`, + "mysql.timezone.description": msg`Session timezone sent to MySQL after connect.`, +}; diff --git a/src/i18n/registries/quickNavigatorType.ts b/src/i18n/registries/quickNavigatorType.ts new file mode 100644 index 00000000..aaae53ec --- /dev/null +++ b/src/i18n/registries/quickNavigatorType.ts @@ -0,0 +1,9 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const quickNavigatorType: Record = { + table: msg`table`, + view: msg`view`, + routine: msg`routine`, + trigger: msg`trigger`, +}; diff --git a/src/i18n/registries/shortcutCategories.ts b/src/i18n/registries/shortcutCategories.ts new file mode 100644 index 00000000..753d3941 --- /dev/null +++ b/src/i18n/registries/shortcutCategories.ts @@ -0,0 +1,8 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const shortcutCategories: Record = { + editor: msg`Editor`, + navigation: msg`Navigation`, + data_grid: msg`Data Grid`, +}; diff --git a/src/i18n/registries/shortcutLabels.ts b/src/i18n/registries/shortcutLabels.ts new file mode 100644 index 00000000..e3e72fcf --- /dev/null +++ b/src/i18n/registries/shortcutLabels.ts @@ -0,0 +1,20 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const shortcutLabels: Record = { + "settings.shortcuts.runQuery": msg`Run query`, + "settings.shortcuts.runQueryEditor": msg`Run query (in editor)`, + "settings.shortcuts.newTab": msg`New tab`, + "settings.shortcuts.closeTab": msg`Close tab`, + "settings.shortcuts.nextPage": msg`Next page`, + "settings.shortcuts.prevPage": msg`Previous page`, + "settings.shortcuts.tabSwitcher": msg`Switch tab`, + "settings.shortcuts.copySelection": msg`Copy selection`, + "settings.shortcuts.toggleSidebar": msg`Toggle sidebar`, + "settings.shortcuts.openConnections": msg`Open connections`, + "settings.shortcuts.newConnection": msg`New connection`, + "settings.shortcuts.switchConnection": msg`Switch to connection 1–9`, + "settings.shortcuts.pasteImportClipboard": msg`Import from Clipboard`, + "settings.shortcuts.notebookRunAll": msg`Run All Cells`, + "settings.shortcuts.quickNavigator": msg`Quick Navigator`, +}; diff --git a/src/i18n/registries/sidebarDateGroups.ts b/src/i18n/registries/sidebarDateGroups.ts new file mode 100644 index 00000000..3fab6ac3 --- /dev/null +++ b/src/i18n/registries/sidebarDateGroups.ts @@ -0,0 +1,10 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const sidebarDateGroups: Record = { + dateGroupToday: msg`Today`, + dateGroupYesterday: msg`Yesterday`, + dateGroupThisWeek: msg`This Week`, + dateGroupThisMonth: msg`This Month`, + dateGroupOlder: msg`Older`, +}; diff --git a/src/i18n/registries/taskManagerProcessStatus.ts b/src/i18n/registries/taskManagerProcessStatus.ts new file mode 100644 index 00000000..e6d91152 --- /dev/null +++ b/src/i18n/registries/taskManagerProcessStatus.ts @@ -0,0 +1,8 @@ +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; + +export const taskManagerProcessStatus: Record = { + running: msg`running`, + stopped: msg`stopped`, + unknown: msg`unknown`, +}; diff --git a/src/pages/Connections.tsx b/src/pages/Connections.tsx index 47ac2814..2a35a921 100644 --- a/src/pages/Connections.tsx +++ b/src/pages/Connections.tsx @@ -1,6 +1,7 @@ +import { plural } from "@lingui/core/macro"; import { useState, useEffect, useMemo, useRef } from "react"; import { useNavigate, useLocation } from "react-router-dom"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { NewConnectionModal } from "../components/modals/NewConnectionModal"; import { ConfirmModal } from "../components/modals/ConfirmModal"; import { invoke } from "@tauri-apps/api/core"; @@ -33,7 +34,7 @@ import { ConnectionCard } from "../components/connections/ConnectionCard"; import { ConnectionListItem } from "../components/connections/ConnectionListItem"; export const Connections = () => { - const { t } = useTranslation(); + const { t } = useLingui(); const navigate = useNavigate(); const location = useLocation(); const { @@ -144,7 +145,7 @@ export const Connections = () => { await loadConnections(); } catch (e) { console.error("Failed to create group:", e); - setError(t("groups.createError")); + setError(t`Failed to create group`); } }; @@ -163,9 +164,9 @@ export const Connections = () => { const handleExport = async () => { setConfirmModal({ - title: t("connections.exportTitle"), - message: t("connections.exportWarning"), - confirmLabel: t("common.save"), + title: t({ message: "Export Connections", context: "connections" }), + message: t`The exported file will contain your database and SSH passwords in plaintext. Please store it securely.`, + confirmLabel: t`Save`, variant: "warning", confirmClassName: "px-4 py-2 bg-blue-600 hover:bg-blue-500 text-white rounded-lg text-sm font-medium transition-colors", onConfirm: async () => { @@ -212,15 +213,15 @@ export const Connections = () => { await loadConnections(); } catch (e) { console.error("Failed to rename group:", e); - setError(t("groups.renameError") + `: ${toErrorMessage(e)}`); + setError(t`Failed to rename group` + `: ${toErrorMessage(e)}`); } }; const handleDeleteGroup = (groupId: string) => { const group = connectionGroups.find((g) => g.id === groupId); setConfirmModal({ - title: t("groups.deleteTitle"), - message: t("groups.deleteConfirm", { name: group?.name }), + title: t`Delete Group`, + message: t`Are you sure you want to delete group "${group?.name}"? Connections in this group will be moved to ungrouped.`, onConfirm: async () => { setConfirmModal(null); try { @@ -228,7 +229,7 @@ export const Connections = () => { await loadConnections(); } catch (e) { console.error("Failed to delete group:", e); - setError(t("groups.deleteError") + `: ${toErrorMessage(e)}`); + setError(t`Failed to delete group` + `: ${toErrorMessage(e)}`); } }, }); @@ -243,7 +244,7 @@ export const Connections = () => { await loadConnections(); } catch (e) { console.error("Failed to move connection:", e); - setError(t("groups.moveError") + `: ${toErrorMessage(e)}`); + setError(t`Failed to move connection` + `: ${toErrorMessage(e)}`); } }; @@ -273,7 +274,7 @@ export const Connections = () => { navigate("/editor"); } catch (e) { setError( - `${t("connections.failConnect", { name: conn.name })}\n\nError: ${toErrorMessage(e)}`, + `${t`Failed to connect to ${name}. Please check your settings or ensuring the database is running.`}\n\nError: ${toErrorMessage(e)}`, ); } finally { setConnectingId(null); @@ -285,14 +286,14 @@ export const Connections = () => { try { await disconnect(connId); } catch (e) { - setError(`${t("connections.failDisconnect")}\n\nError: ${toErrorMessage(e)}`); + setError(`${t`Failed to disconnect from database`}\n\nError: ${toErrorMessage(e)}`); } }; const handleDelete = (id: string) => { setConfirmModal({ - title: t("connections.deleteTitle"), - message: t("connections.confirmDelete"), + title: t`Confirm Delete`, + message: t`Are you sure you want to delete this connection?`, onConfirm: async () => { setConfirmModal(null); try { @@ -323,7 +324,7 @@ export const Connections = () => { void openEdit(newConn); } catch (e) { console.error(e); - setError(t("connections.failDuplicate")); + setError(t`Failed to duplicate connection`); } }; @@ -483,15 +484,13 @@ export const Connections = () => {

- {t("connections.title")} + {t`Connections`}

{connections.length === 0 - ? t("connections.noConnections") - : t("connections.connectionCount", { - count: connections.length, - })} + ? t`No active connections` + : plural(connections.length, { one: "# connection", other: "# connections" })} {openCount > 0 && ( <> @@ -513,7 +512,7 @@ export const Connections = () => { className="relative flex items-center gap-2 bg-blue-600 hover:bg-blue-500 text-white px-4 py-2.5 rounded-xl font-semibold text-sm transition-all duration-150 shadow-lg shadow-blue-500/20 hover:shadow-blue-500/30 hover:-translate-y-px" > - {t("connections.addConnection")} + {t`Add Connection`}
@@ -547,10 +546,10 @@ export const Connections = () => {

- {t("connections.noConnections")} + {t`No active connections`}

- {t("connections.noConnectionsHint")} + {t`Create your first connection to get started.`}

@@ -585,7 +584,7 @@ export const Connections = () => { type="text" value={search} onChange={(e) => setSearch(e.target.value)} - placeholder={t("connections.searchPlaceholder")} + placeholder={t`Search connections...`} className="w-full pl-10 pr-9 py-2.5 bg-elevated border border-strong rounded-xl text-sm text-primary placeholder:text-muted focus:border-blue-500/70 focus:outline-none transition-colors" /> {search && ( @@ -612,7 +611,7 @@ export const Connections = () => { setNewGroupName(""); } }} - placeholder={t("groups.groupName")} + placeholder={t`Group name`} autoFocus className="w-40 px-3 py-2 bg-elevated border border-strong rounded-xl text-sm text-primary placeholder:text-muted focus:border-amber-500/70 focus:outline-none transition-colors" /> @@ -637,11 +636,11 @@ export const Connections = () => { )} @@ -651,14 +650,14 @@ export const Connections = () => { @@ -674,7 +673,7 @@ export const Connections = () => { ? "bg-blue-500/15 text-blue-400 shadow-sm" : "text-muted hover:text-secondary hover:bg-surface-secondary", )} - title={t("connections.gridView")} + title={t`Grid view`} > @@ -686,7 +685,7 @@ export const Connections = () => { ? "bg-blue-500/15 text-blue-400 shadow-sm" : "text-muted hover:text-secondary hover:bg-surface-secondary", )} - title={t("connections.listView")} + title={t`List view`} > @@ -728,7 +727,7 @@ export const Connections = () => { {sortedGroups.length > 0 && (
- {t("groups.ungrouped")} + {t`Ungrouped`} ({filteredUngroupedConnections.length}) @@ -755,7 +754,7 @@ export const Connections = () => { filteredUngroupedConnections.length === 0 && search && (
- {t("connections.noSearchResults", { query: search })} + {t`No connections match "${search}"`}
)}
@@ -794,7 +793,7 @@ export const Connections = () => { {sortedGroups.length > 0 && (
- {t("groups.ungrouped")} + {t`Ungrouped`} ({filteredUngroupedConnections.length}) @@ -821,7 +820,7 @@ export const Connections = () => { filteredUngroupedConnections.length === 0 && search && (
- {t("connections.noSearchResults", { query: search })} + {t`No connections match "${search}"`}
)}
@@ -860,7 +859,7 @@ export const Connections = () => { y={groupContextMenu.y} items={[ { - label: t("groups.rename"), + label: t`Rename`, icon: Edit, action: () => { const group = connectionGroups.find( @@ -874,7 +873,7 @@ export const Connections = () => { }, { separator: true as const }, { - label: t("groups.delete"), + label: t({ message: "Delete", context: "groups" }), icon: Trash2, action: () => handleDeleteGroup(groupContextMenu.groupId), danger: true, @@ -915,7 +914,7 @@ export const Connections = () => { ? [{ separator: true as const }] : []), { - label: t("groups.removeFromGroup"), + label: t`Remove from Group`, icon: X, action: () => void handleMoveToGroup( diff --git a/src/pages/Editor.tsx b/src/pages/Editor.tsx index 695d4f3b..4965e94a 100644 --- a/src/pages/Editor.tsx +++ b/src/pages/Editor.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useRef, useCallback, useMemo } from "react"; import { useLocation, useNavigate } from "react-router-dom"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { reconstructTableQuery } from "../utils/editor"; import { isMultiDatabaseCapable } from "../utils/database"; import { isReadonly } from "../utils/driverCapabilities"; @@ -134,7 +134,7 @@ const CHEVRON_SELECT_STYLE: React.CSSProperties = { }; export const Editor = () => { - const { t } = useTranslation(); + const { t } = useLingui(); const { activeConnectionId, tables, @@ -768,7 +768,7 @@ export const Editor = () => { } } catch (err) { updateTab(targetTabId, { - error: typeof err === "string" ? err : t("editor.queryFailed"), + error: typeof err === "string" ? err : t`Query failed.`, isLoading: false, }); @@ -778,7 +778,7 @@ export const Editor = () => { null, "error", null, - typeof err === "string" ? err : t("editor.queryFailed"), + typeof err === "string" ? err : t`Query failed.`, historyDb, ); } @@ -944,7 +944,7 @@ export const Editor = () => { // mark only the entries that haven't already resolved via a live event // as failed, so statements that completed first keep their results. const fallbackElapsed = performance.now() - batchStart; - const message = typeof err === "string" ? err : t("editor.queryFailed"); + const message = typeof err === "string" ? err : t`Query failed.`; entries.forEach((entry, idx) => { if (applied.has(idx)) return; if (shouldRecordHistory) { @@ -1048,7 +1048,7 @@ export const Editor = () => { updateTab(targetTabId, { results: updateResultEntry(latestTab.results, entryId, { error: - typeof err === "string" ? err : t("editor.queryFailed"), + typeof err === "string" ? err : t`Query failed.`, isLoading: false, }), }); @@ -1750,8 +1750,8 @@ export const Editor = () => { updateTab(activeTabIdRef.current, updates); } catch (err) { console.error("Failed to create new row:", err); - showAlert(t("editor.failedCreateRow") + String(err), { - title: t("common.error"), + showAlert(t`Failed to create new row: ` + String(err), { + title: t({ message: "Error", context: "common" }), kind: "error", }); } @@ -1869,8 +1869,8 @@ export const Editor = () => { } } catch (err) { console.error("Failed to process insertions:", err); - showAlert(t("editor.failedProcessInsertions") + String(err), { - title: t("common.error"), + showAlert(t`Failed to process insertions: ` + String(err), { + title: t({ message: "Error", context: "common" }), kind: "error", }); return; @@ -1992,8 +1992,8 @@ export const Editor = () => { } catch (e) { console.error("Batch update failed", e); updateActiveTab({ isLoading: false }); - showAlert(t("dataGrid.updateFailed") + String(e), { - title: t("common.error"), + showAlert(t`Update failed: ` + String(e), { + title: t({ message: "Error", context: "common" }), kind: "error", }); } @@ -2163,7 +2163,7 @@ export const Editor = () => { }); editor.addAction({ id: "explain-selection", - label: t("editor.visualExplain.contextMenuExplain"), + label: t`Explain Plan`, contextMenuGroupId: "navigation", contextMenuOrder: 1.6, run: (ed) => { @@ -2243,7 +2243,7 @@ export const Editor = () => { } = state; const tabId = addTab({ type: table ? "table" : "console", - title: navTitle || queryName || table || t("sidebar.newConsole"), + title: navTitle || queryName || table || t`New Console`, query: sql, activeTable: table, schema: navSchema, @@ -2436,16 +2436,16 @@ export const Editor = () => { {activeConnectionId ? (
-

{t("editor.noTabs")}

+

{t`No open tabs for this connection.`}

) : ( -

{t("editor.noActiveSession")}

+

{t`No active session. Please select a connection.`}

)} ); @@ -2567,14 +2567,14 @@ export const Editor = () => { }) } className="flex items-center justify-center w-9 h-full text-muted hover:text-white hover:bg-surface-secondary border-l border-default transition-colors shrink-0" - title={t("editor.newConsole")} + title={t`New Console`} > @@ -2590,7 +2590,7 @@ export const Editor = () => { }); }} className="flex items-center justify-center w-9 h-full text-orange-400 hover:text-white hover:bg-surface-secondary border-l border-default transition-colors shrink-0" - title={t("editor.newNotebook")} + title={t`New Notebook`} > @@ -2603,7 +2603,7 @@ export const Editor = () => { onClick={stopQuery} className="flex items-center gap-2 px-3 py-1.5 bg-red-700 hover:bg-red-600 text-white rounded text-sm font-medium" > - {t("editor.stop")} + {t`Stop`} ) : !activeTab.readOnly ? (
@@ -2615,7 +2615,7 @@ export const Editor = () => { isTableTab ? "rounded" : "rounded-l", )} > - {t("editor.run")} + {t`Run`} {!isTableTab && ( <> @@ -2637,7 +2637,7 @@ export const Editor = () => {
{dropdownQueries.length === 0 ? (
- {t("editor.noValidQueries")} + {t`No valid queries found`}
) : ( dropdownQueries.map((q, i) => { @@ -2664,7 +2664,7 @@ export const Editor = () => { setSaveQueryModal({ isOpen: true, sql: q }); }} className="p-2 text-muted hover:text-white hover:bg-surface transition-colors mr-1 rounded shrink-0 opacity-0 group-hover:opacity-100" - title={t("editor.saveThisQuery")} + title={t`Save this query`} > @@ -2689,12 +2689,12 @@ export const Editor = () => { extractQueryParams(activeTab.query).length === 0 } className="flex items-center gap-2 px-3 py-1.5 bg-surface-secondary hover:bg-surface text-primary rounded text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed border border-strong" - title={t("editor.queryParameters")} + title={t`Query Parameters`} > P - {t("editor.parameters")} + {t`Parameters`} )} @@ -2712,7 +2712,7 @@ export const Editor = () => { )} > - {t("editor.export")} + {t`Export`} {
} @@ -2872,10 +2872,10 @@ export const Editor = () => { onClick={handleExplainButton} disabled={!activeConnectionId || !tab.query?.trim()} className="flex items-center gap-1.5 px-2 py-1 rounded text-xs text-muted hover:text-green-300 bg-elevated/80 hover:bg-green-900/40 border border-default hover:border-green-500/40 transition-all disabled:opacity-30 disabled:pointer-events-none backdrop-blur-sm" - title={t("editor.visualExplain.title")} + title={t`Visual Explain`} > - {t("editor.visualExplain.buttonShort")} + {t`Explain Plan`} )} {/* AI dropdown — only if AI enabled */} @@ -3038,7 +3038,7 @@ export const Editor = () => { ) : activeTab.isLoading ? (
-

{t("editor.executingQuery")}

+

{t`Executing query...`}

) : activeTab.error ? ( @@ -3050,9 +3050,7 @@ export const Editor = () => {
- {t("editor.rowsRetrieved", { - count: activeTab.result.rows.length, - })}{" "} + {t`${activeTab.result.rows.length} rows retrieved`}{" "} {activeTab.executionTime !== null && ( ({formatDuration(activeTab.executionTime)}) @@ -3062,7 +3060,7 @@ export const Editor = () => { {activeTab.result.pagination?.has_more && ( - {t("editor.autoPaginated")} + {t`Auto paginated`} )}
@@ -3106,7 +3104,7 @@ export const Editor = () => { String(activeTab.result!.pagination!.page), ); }} - title={t("editor.jumpToPage")} + title={t`Click to jump to page`} > {isEditingPage ? ( { ) : ( <> {activeTab.result.pagination.total_rows !== null - ? t("editor.pageOf", { - current: activeTab.result.pagination.page, - total: Math.ceil( - activeTab.result.pagination.total_rows / - activeTab.result.pagination.page_size, - ), - }) - : t("editor.page", { - current: activeTab.result.pagination.page, - })} + ? t`Page ${activeTab.result.pagination.page} of ${Math.ceil( + activeTab.result.pagination.total_rows / + activeTab.result.pagination.page_size, + )}` + : t`Page ${activeTab.result.pagination.page}`} )}
@@ -3165,7 +3158,7 @@ export const Editor = () => { disabled={isCountLoading || activeTab.isLoading} onClick={loadCount} className="p-1 hover:bg-surface-tertiary text-secondary hover:text-white disabled:opacity-30 disabled:cursor-not-allowed border-l border-strong" - title={t("editor.loadRowCount")} + title={t`Load row count`} > {isCountLoading ? ( @@ -3223,7 +3216,7 @@ export const Editor = () => { @@ -3234,7 +3227,7 @@ export const Editor = () => { activeTab.selectedRows.length === 0 } className="flex items-center justify-center w-7 h-7 text-secondary hover:text-red-400 hover:bg-surface-secondary rounded transition-colors disabled:opacity-30" - title={t("dataGrid.deleteRow")} + title={t`Delete Row`} > @@ -3251,7 +3244,7 @@ export const Editor = () => { setCopyFormat(e.target.value as "csv" | "json" | "sql-insert") } className="bg-transparent border-none text-[11px] text-secondary hover:text-primary focus:outline-none cursor-pointer appearance-none pr-3 font-medium uppercase tracking-wide" - title={t("settings.copyFormat")} + title={t`Default Copy Format`} style={CHEVRON_SELECT_STYLE} > @@ -3263,20 +3256,20 @@ export const Editor = () => { value={csvDelimiter} onChange={(e) => setCsvDelimiter(e.target.value)} className="bg-transparent border-none text-[11px] text-secondary hover:text-primary focus:outline-none cursor-pointer appearance-none pr-3 font-medium tracking-wide" - title={t("settings.csvDelimiter")} + title={t`CSV Delimiter`} style={CHEVRON_SELECT_STYLE} > )} @@ -3297,7 +3290,7 @@ export const Editor = () => { className="w-3.5 h-3.5 cursor-pointer accent-blue-500" /> - {t("editor.applyToAll")} + {t`Apply to all`}
@@ -3305,7 +3298,7 @@ export const Editor = () => { onClick={handleSubmitChanges} disabled={!applyToAll && !selectionHasPending} className="flex items-center gap-1.5 px-2 h-7 text-green-400 hover:bg-green-900/20 hover:text-green-300 rounded text-xs font-medium border border-transparent hover:border-green-900/50 transition-all disabled:opacity-30 disabled:hover:bg-transparent disabled:hover:border-transparent disabled:cursor-not-allowed" - title={t("editor.submitChanges")} + title={t`Submit Changes`} > Submit @@ -3314,7 +3307,7 @@ export const Editor = () => { onClick={handleRollbackChanges} disabled={!applyToAll && !selectionHasPending} className="flex items-center gap-1.5 px-2 h-7 text-secondary hover:bg-surface-secondary hover:text-primary rounded text-xs font-medium border border-transparent hover:border-strong transition-all disabled:opacity-30 disabled:hover:bg-transparent disabled:hover:border-transparent disabled:cursor-not-allowed" - title={t("editor.rollbackChanges")} + title={t`Rollback Changes`} > Rollback @@ -3389,8 +3382,8 @@ export const Editor = () => { ) : (
{activeTab.type === "table" - ? t("editor.tableRunPrompt") - : t("editor.executePrompt")} + ? t`Press Run (Ctrl/Command+F5) to load table data` + : t`Execute a query to see results`}
)}
@@ -3454,7 +3447,7 @@ export const Editor = () => { initialDatabase={activeTab?.schema ?? activeSchema ?? activeDatabaseName} databases={isMultiDb ? selectedDatabases : undefined} onSave={async (name, sql, database) => await saveQuery(name, sql, database ?? activeTab?.schema ?? activeSchema ?? activeDatabaseName)} - title={t("editor.saveQuery")} + title={t`Save Query`} /> )} { "notebook" ? [ { - label: t("sidebar.notebooks.rename"), + label: t`Rename`, icon: Pencil, action: () => startTabRename(tabContextMenu.tabId), }, @@ -3510,34 +3503,34 @@ export const Editor = () => { ) ? [ { - label: t("editor.convertToConsole"), + label: t`Convert to Console`, icon: FileCode, action: () => handleConvertToConsole(tabContextMenu.tabId), }, ] : []), { - label: t("editor.closeTab"), + label: t`Close Tab`, icon: X, action: () => handleCloseTab(tabContextMenu.tabId), }, { - label: t("editor.closeOthers"), + label: t`Close Other Tabs`, icon: XCircle, action: () => closeOtherTabs(tabContextMenu.tabId), }, { - label: t("editor.closeRight"), + label: t`Close Tabs to Right`, icon: ArrowRightToLine, action: () => closeTabsToRight(tabContextMenu.tabId), }, { - label: t("editor.closeLeft"), + label: t`Close Tabs to Left`, icon: ArrowLeftToLine, action: () => closeTabsToLeft(tabContextMenu.tabId), }, { - label: t("editor.closeAll"), + label: t`Close All Tabs`, icon: Trash2, danger: true, action: () => closeAllTabs(), diff --git a/src/pages/JsonViewerPage.tsx b/src/pages/JsonViewerPage.tsx index 6371d116..b5d7a944 100644 --- a/src/pages/JsonViewerPage.tsx +++ b/src/pages/JsonViewerPage.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useCallback } from "react"; import { useSearchParams } from "react-router-dom"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { invoke } from "@tauri-apps/api/core"; import { getCurrentWindow } from "@tauri-apps/api/window"; import { JsonInput } from "../components/ui/JsonInput"; @@ -13,7 +13,7 @@ interface SessionDto { } export const JsonViewerPage = () => { - const { t } = useTranslation(); + const { t } = useLingui(); const [searchParams] = useSearchParams(); const sessionId = searchParams.get("session") ?? ""; @@ -75,7 +75,7 @@ export const JsonViewerPage = () => { fillHeight /> ) : ( -

{t("common.loading")}

+

{t`Loading...`}

)} @@ -87,14 +87,14 @@ export const JsonViewerPage = () => { onClick={handleClose} className="px-4 py-2 text-secondary hover:text-primary transition-colors text-sm" > - {t("common.cancel")} + {t`Cancel`} ) : ( @@ -103,7 +103,7 @@ export const JsonViewerPage = () => { onClick={handleClose} className="px-4 py-2 bg-blue-600 hover:bg-blue-500 text-white rounded-lg text-sm font-medium transition-colors" > - {t("jsonViewer.close")} + {t`Close`} )} diff --git a/src/pages/McpPage.tsx b/src/pages/McpPage.tsx index 81b703a1..b952bcb3 100644 --- a/src/pages/McpPage.tsx +++ b/src/pages/McpPage.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useMemo, useState } from "react"; import { invoke } from "@tauri-apps/api/core"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import clsx from "clsx"; import Editor from "@monaco-editor/react"; import { @@ -61,7 +61,7 @@ const ClientIcon = ({ }; export function McpPage() { - const { t } = useTranslation(); + const { t } = useLingui(); const [tab, setTab] = useState("setup"); const tabs: Array<{ @@ -69,9 +69,9 @@ export function McpPage() { icon: React.ComponentType<{ size: number }>; label: string; }> = [ - { id: "setup", icon: Cpu, label: t("mcp.tabs.setup") }, - { id: "activity", icon: Activity, label: t("mcp.tabs.activity") }, - { id: "safety", icon: ShieldCheck, label: t("mcp.tabs.safety") }, + { id: "setup", icon: Cpu, label: t`Setup` }, + { id: "activity", icon: Activity, label: t`Activity` }, + { id: "safety", icon: ShieldCheck, label: t`Safety` }, ]; return ( @@ -84,13 +84,13 @@ export function McpPage() {

- {t("mcp.title")} + {t`MCP Server Integration`}

-

{t("mcp.subtitle")}

+

{t`Connect Tabularis to Claude Desktop, Cursor, and more`}

- {t("mcp.description")} + {t`The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely.`}

@@ -125,7 +125,7 @@ export function McpPage() { } function McpSetupPanel() { - const { t } = useTranslation(); + const { t } = useLingui(); const editorTheme = useEditorTheme(); const { showAlert } = useAlert(); const [clients, setClients] = useState([]); @@ -190,13 +190,13 @@ function McpSetupPanel() { const clientName = await invoke("install_mcp_config", { clientId, }); - showAlert(t("mcp.successMsg", { client: clientName }), { + showAlert(t`Configuration installed successfully for ${clientName}! Restart the app to apply.`, { kind: "info", - title: t("mcp.successTitle"), + title: t({ message: "Success", context: "mcp" }), }); await loadStatus(); } catch (e) { - showAlert(String(e), { kind: "error", title: t("mcp.errorTitle") }); + showAlert(String(e), { kind: "error", title: t({ message: "Installation Failed", context: "mcp" }) }); } }; @@ -205,7 +205,7 @@ function McpSetupPanel() { if (loading) { return (
- {t("mcp.checking")} + {t`Checking configuration...`}
); } @@ -214,7 +214,7 @@ function McpSetupPanel() {

- {t("mcp.clients")} + {t`AI CLIENTS`}

{clients.map((client) => ( @@ -240,14 +240,14 @@ function McpSetupPanel() { )}
- {client.config_path ?? t("mcp.notFound")} + {client.config_path ?? t`Config file not found (create manually)`}
{client.installed ? (
- {t("mcp.installed")} + {t({ message: "Installed", context: "mcp" })}
) : ( )} @@ -269,7 +269,7 @@ function McpSetupPanel() { {selectedClient && !selectedClient.installed ? ( <>

- {isCommandClient ? t("mcp.manualCommand") : t("mcp.manualConfig")} + {isCommandClient ? t`MANUAL COMMAND` : t`MANUAL CONFIGURATION`} {" - "} {selectedClient.client_name}

@@ -331,12 +331,12 @@ function McpSetupPanel() { )}

- {isCommandClient ? t("mcp.manualCommandText") : t("mcp.manualText")} + {isCommandClient ? t`Run this command in your terminal, then restart Claude Code.` : t`Add this to your client config file manually if automatic install fails.`}

) : (
- {t("mcp.installed")} + {t({ message: "Installed", context: "mcp" })}
)} diff --git a/src/pages/SchemaDiagramPage.tsx b/src/pages/SchemaDiagramPage.tsx index 618e5a49..e5bd43ba 100644 --- a/src/pages/SchemaDiagramPage.tsx +++ b/src/pages/SchemaDiagramPage.tsx @@ -2,12 +2,12 @@ import { useState, useEffect } from 'react'; import { useSearchParams } from 'react-router-dom'; import { SchemaDiagram } from '../components/ui/SchemaDiagram'; import { Maximize2, Minimize2, RefreshCw } from 'lucide-react'; -import { useTranslation } from 'react-i18next'; +import { useLingui } from '@lingui/react/macro'; import { DatabaseProvider } from '../contexts/DatabaseProvider'; import { EditorProvider } from '../contexts/EditorProvider'; export const SchemaDiagramPage = () => { - const { t } = useTranslation(); + const { t } = useLingui(); const [isFullscreen, setIsFullscreen] = useState(false); const [refreshTrigger, setRefreshTrigger] = useState(0); const [searchParams] = useSearchParams(); @@ -48,10 +48,10 @@ export const SchemaDiagramPage = () => {

- {t('erDiagram.noConnection')} + {t`No Connection ID`}

- {t('erDiagram.noConnectionDesc')} + {t`Cannot display diagram without a connection ID.`}

@@ -71,25 +71,25 @@ export const SchemaDiagramPage = () => { diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index b9d4aa33..094326f5 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -1,5 +1,7 @@ import { useCallback, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; +import { msg } from "@lingui/core/macro"; +import type { MessageDescriptor } from "@lingui/core"; import { Settings as SettingsIcon, Palette, @@ -48,17 +50,17 @@ interface PluginSidebarChange { const TAB_ITEMS: Array<{ id: SettingsTab; icon: React.ComponentType<{ size: number }>; - labelKey: string; + label: MessageDescriptor; }> = [ - { id: "general", icon: SettingsIcon, labelKey: "settings.general" }, - { id: "plugins", icon: Plug, labelKey: "settings.plugins.title" }, - { id: "appearance", icon: Palette, labelKey: "settings.appearance" }, - { id: "localization", icon: Languages, labelKey: "settings.localization" }, - { id: "ai", icon: Sparkles, labelKey: "settings.ai.tab" }, - { id: "ai-activity", icon: Shield, labelKey: "settings.aiActivity" }, - { id: "logs", icon: ScrollText, labelKey: "settings.logs" }, - { id: "shortcuts", icon: Keyboard, labelKey: "settings.shortcuts.title" }, - { id: "info", icon: Info, labelKey: "settings.info" }, + { id: "general", icon: SettingsIcon, label: msg`General` }, + { id: "plugins", icon: Plug, label: msg`Plugins` }, + { id: "appearance", icon: Palette, label: msg`Appearance` }, + { id: "localization", icon: Languages, label: msg`Localization` }, + { id: "ai", icon: Sparkles, label: msg`AI` }, + { id: "ai-activity", icon: Shield, label: msg`AI Activity` }, + { id: "logs", icon: ScrollText, label: msg`Logs` }, + { id: "shortcuts", icon: Keyboard, label: msg`Keyboard Shortcuts` }, + { id: "info", icon: Info, label: msg`Info` }, ]; const TAB_COMPONENTS: Partial> = { @@ -74,7 +76,7 @@ const TAB_COMPONENTS: Partial> = { }; export const Settings = () => { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const { allDrivers, installedPlugins, @@ -164,7 +166,7 @@ export const Settings = () => { {/* Sidebar */} diff --git a/src/pages/TaskManagerPage.tsx b/src/pages/TaskManagerPage.tsx index 96f262ca..7347c875 100644 --- a/src/pages/TaskManagerPage.tsx +++ b/src/pages/TaskManagerPage.tsx @@ -1,6 +1,8 @@ +import { plural } from "@lingui/core/macro"; import { useState, useCallback } from "react"; +import { taskManagerProcessStatus } from "../i18n/registries/taskManagerProcessStatus"; import { invoke } from "@tauri-apps/api/core"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { Activity, RefreshCw, @@ -43,7 +45,7 @@ interface KillConfirmModalProps { } const KillConfirmModal = ({ pluginName, onConfirm, onCancel }: KillConfirmModalProps) => { - const { t } = useTranslation(); + const { t } = useLingui(); return (
@@ -52,8 +54,8 @@ const KillConfirmModal = ({ pluginName, onConfirm, onCancel }: KillConfirmModalP
-

{t("taskManager.killModal.title")}

-

{t("taskManager.killModal.subtitle")}

+

{t`Force Kill Plugin Process`}

+

{t`This action cannot be undone immediately`}

@@ -96,7 +98,7 @@ const KillConfirmModal = ({ pluginName, onConfirm, onCancel }: KillConfirmModalP // Tabularis self stats panel // --------------------------------------------------------------------------- const TabularisSelfPanel = ({ stats }: { stats: TabularisSelfStats }) => { - const { t } = useTranslation(); + const { t } = useLingui(); const [expanded, setExpanded] = useState(false); const [children, setChildren] = useState([]); const [loadingChildren, setLoadingChildren] = useState(false); @@ -124,29 +126,29 @@ const TabularisSelfPanel = ({ stats }: { stats: TabularisSelfStats }) => {

- {t("taskManager.tabularisProcess.title")} + {t`Tabularis Process`} PID {stats.pid}

} - label={t("taskManager.tabularisProcess.cpu")} + label={t`CPU`} value={formatCpuPercent(stats.cpu_percent)} /> } - label={t("taskManager.tabularisProcess.ram")} + label={t`RAM`} value={formatBytes(stats.self_memory_bytes)} /> } - label={t("taskManager.tabularisProcess.diskRead")} + label={t`Disk Read/s`} value={formatBytes(stats.disk_read_bytes)} suffix="/s" /> } - label={t("taskManager.tabularisProcess.diskWrite")} + label={t`Disk Write/s`} value={formatBytes(stats.disk_write_bytes)} suffix="/s" /> @@ -166,14 +168,14 @@ const TabularisSelfPanel = ({ stats }: { stats: TabularisSelfStats }) => { )} {stats.child_count > 0 - ? t("taskManager.tabularisProcess.childCount", { count: stats.child_count }) - : t("taskManager.tabularisProcess.noChildren")} + ? plural(stats.child_count, { one: "# child process", other: "# child processes" }) + : t`No child processes`} {stats.child_count > 0 && ( - {t("taskManager.tabularisProcess.treeTotal", { size: formatBytes(stats.total_memory_bytes) })} + {t`Tree total: ${formatBytes(stats.total_memory_bytes)}`} )} @@ -184,22 +186,22 @@ const TabularisSelfPanel = ({ stats }: { stats: TabularisSelfStats }) => { {loadingChildren ? (
- {t("taskManager.tabularisProcess.loadingProcesses")} + {t`Loading processes…`}
) : ( <> - - - - + + + + @@ -302,7 +304,7 @@ const ChildRow = ({ child }: { child: ChildProcessInfo }) => { @@ -421,7 +423,7 @@ const ProcessRow = ({ // Main page // --------------------------------------------------------------------------- export const TaskManagerPage = () => { - const { t } = useTranslation(); + const { t } = useLingui(); const { processes, systemStats, @@ -481,8 +483,8 @@ export const TaskManagerPage = () => {
-

{t("taskManager.header.title")}

-

{t("taskManager.header.subtitle")}

+

{t`Task Manager`}

+

{t`Plugin processes & system resources`}

@@ -508,14 +510,14 @@ export const TaskManagerPage = () => {

- {t("taskManager.systemResources.title")} + {t`System Resources`}

{/* CPU */}
- {t("taskManager.systemResources.cpu")} + {t`CPU`}

{systemStats ? formatCpuPercent(systemStats.cpu_percent) : "—"} @@ -526,7 +528,7 @@ export const TaskManagerPage = () => {

- {t("taskManager.systemResources.ram")} + {t`RAM`}

{systemStats ? formatBytes(systemStats.memory_used) : "—"} @@ -551,7 +553,7 @@ export const TaskManagerPage = () => {

- {t("taskManager.systemResources.diskRead")} + {t`Disk Read/s`}

@@ -567,7 +569,7 @@ export const TaskManagerPage = () => {

- {t("taskManager.systemResources.diskWrite")} + {t`Disk Write/s`}

@@ -582,7 +584,7 @@ export const TaskManagerPage = () => { {systemStats && (

- {t("taskManager.systemResources.processCount", { count: systemStats.process_count })} + {plural(systemStats.process_count, { one: "# system process running", other: "# system processes running" })}
)}
@@ -596,7 +598,7 @@ export const TaskManagerPage = () => {
-

{t("taskManager.pluginProcesses.title")}

+

{t`Plugin Processes`}

{processes.length > 0 && ( {processes.length} @@ -607,31 +609,31 @@ export const TaskManagerPage = () => { {loading && processes.length === 0 ? (
- {t("taskManager.pluginProcesses.loading")} + {t`Loading processes…`}
) : processes.length === 0 ? (
-

{t("taskManager.pluginProcesses.empty")}

-

{t("taskManager.pluginProcesses.emptyHint")}

+

{t`No plugin processes are running`}

+

{t`Install and enable plugins to see them here`}

) : (
{t("taskManager.tabularisProcess.colPid")}{t("taskManager.tabularisProcess.colName")}{t("taskManager.tabularisProcess.colCpu")}{t("taskManager.tabularisProcess.colRam")}{t`PID`}{t`Name`}{t`CPU`}{t`RAM`} @@ -283,13 +285,13 @@ const Th = ({ label, col, current, asc, onClick }: ThProps) => ( // Child process row // --------------------------------------------------------------------------- const ChildRow = ({ child }: { child: ChildProcessInfo }) => { - const { t } = useTranslation(); + const { t } = useLingui(); return (
- {t("taskManager.pluginProcesses.childProcess")} + {t`child process`}
{child.pid} - {t("taskManager.pluginProcesses.status.running")} + {t`running`} @@ -328,7 +330,7 @@ const ProcessRow = ({ onKillRequest, onRestart, }: ProcessRowProps) => { - const { t } = useTranslation(); + const { t, i18n } = useLingui(); const [expanded, setExpanded] = useState(false); const busy = isKilling || isRestarting; const hasChildren = proc.children.length > 0; @@ -344,8 +346,8 @@ const ProcessRow = ({ className="p-0.5 rounded text-muted hover:text-primary transition-colors shrink-0" title={ expanded - ? t("taskManager.pluginProcesses.collapseChildren") - : t("taskManager.pluginProcesses.childCount", { count: proc.children.length }) + ? t`Collapse child processes` + : plural(proc.children.length, { one: "# child process", other: "# child processes" }) } > {expanded ? : } @@ -376,7 +378,7 @@ const ProcessRow = ({ getStatusBadgeColor(proc.status), )} > - {t(`taskManager.pluginProcesses.status.${proc.status}`, proc.status)} + {i18n._(taskManagerProcessStatus[proc.status])} @@ -385,27 +387,27 @@ const ProcessRow = ({ onClick={() => onRestart(proc.plugin_id)} disabled={busy} className="flex items-center gap-1 px-2.5 py-1 rounded-md text-xs bg-blue-500/10 border border-blue-500/20 text-blue-400 hover:bg-blue-500/20 transition-colors disabled:opacity-40 disabled:cursor-not-allowed" - title={t("taskManager.pluginProcesses.restart")} + title={t`Restart`} > {isRestarting ? ( ) : ( )} - {t("taskManager.pluginProcesses.restart")} + {t`Restart`}
- - - diff --git a/src/pages/VisualExplainPage.tsx b/src/pages/VisualExplainPage.tsx index 4294297a..6af90607 100644 --- a/src/pages/VisualExplainPage.tsx +++ b/src/pages/VisualExplainPage.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useState } from "react"; import { useLocation } from "react-router-dom"; -import { useTranslation } from "react-i18next"; +import { useLingui } from "@lingui/react/macro"; import { FileJson, FolderOpen, Loader2, RefreshCw } from "lucide-react"; import { invoke } from "@tauri-apps/api/core"; import { open as openDialog } from "@tauri-apps/plugin-dialog"; @@ -26,7 +26,7 @@ export const VisualExplainPage = ({ initialPlan = null, compactMode = false, }: VisualExplainPageProps = {}) => { - const { t } = useTranslation(); + const { t } = useLingui(); const { settings } = useSettings(); const { search } = useLocation(); const initialParamPath = parseExplainFileParam(search); @@ -157,7 +157,7 @@ export const VisualExplainPage = ({

- {t("visualExplainPage.title")} + {t`Visual Explain`}

{fileLabel ? (

) : (

- {t("visualExplainPage.noFile")} + {t`No file loaded`}

)}
@@ -179,7 +179,7 @@ export const VisualExplainPage = ({ className="flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm text-muted hover:text-primary hover:bg-surface-secondary/50 transition-colors" > - {t("visualExplainPage.openFile")} + {t`Open file`} @@ -200,19 +200,19 @@ export const VisualExplainPage = ({ {!compactMode && !filePath && !plan && !isLoading ? (
-

{t("visualExplainPage.emptyHint")}

+

{t`Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it.`}

) : isLoading && !plan ? (
- {t("visualExplainPage.loading")} + {t`Loading explain plan…`}
) : ( Date: Fri, 19 Jun 2026 10:51:05 +0200 Subject: [PATCH 11/22] fix(i18n): restore 4 interpolation value expressions lost in codemod MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Post-Task-3 audit (compared every interpolated call site against its pre-codemod i18next binding) found 4 sites where the codemod emitted the placeholder NAME but the original value was a different in-scope expression — compiled clean but rendered the wrong value: - ExplorerSidebar import-confirm: ${file} -> ${file.split(/[\\/]/).pop()} (basename, not full path) - ExplorerSidebar delete-query: ${name} -> the looked-up favourite's name - DataGrid open-referenced: ${table} -> ${fkForContextPreview.ref_table} - Connections fail-connect: ${name} -> ${conn.name} The other 55 renamed-value bindings were already correct. --- src/components/layout/ExplorerSidebar.tsx | 4 ++-- src/components/ui/DataGrid.tsx | 2 +- src/pages/Connections.tsx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/layout/ExplorerSidebar.tsx b/src/components/layout/ExplorerSidebar.tsx index f0298393..f15c8a74 100644 --- a/src/components/layout/ExplorerSidebar.tsx +++ b/src/components/layout/ExplorerSidebar.tsx @@ -436,7 +436,7 @@ export const ExplorerSidebar = ({ sidebarWidth, startResize, onCollapse, sidebar }); if (file && typeof file === "string") { const confirmed = await ask( - t`Are you sure you want to import "${file}"? + t`Are you sure you want to import "${file.split(/[\\/]/).pop()}"? This may overwrite existing data.`, { title: t`Run SQL File...`, kind: "warning" }, ); @@ -2382,7 +2382,7 @@ This may overwrite existing data.`, isOpen={favoriteDeleteConfirm !== null} onClose={() => setFavoriteDeleteConfirm(null)} title={t`Delete Query`} - message={t`Are you sure you want to delete query "${name}"?`} + message={t`Are you sure you want to delete query "${queries.find((q) => q.id === favoriteDeleteConfirm)?.name ?? ""}"?`} onConfirm={() => { if (favoriteDeleteConfirm) { deleteQuery(favoriteDeleteConfirm); diff --git a/src/components/ui/DataGrid.tsx b/src/components/ui/DataGrid.tsx index 5f757389..656419d8 100644 --- a/src/components/ui/DataGrid.tsx +++ b/src/components/ui/DataGrid.tsx @@ -1429,7 +1429,7 @@ export const DataGrid = React.memo( } if (onForeignKeyNavigate) { menuItems.push({ - label: t`Open referenced row in ${table}`, + label: t`Open referenced row in ${fkForContextPreview.ref_table}`, icon: ExternalLink, action: () => { onForeignKeyNavigate( diff --git a/src/pages/Connections.tsx b/src/pages/Connections.tsx index 2a35a921..33cfb18c 100644 --- a/src/pages/Connections.tsx +++ b/src/pages/Connections.tsx @@ -274,7 +274,7 @@ export const Connections = () => { navigate("/editor"); } catch (e) { setError( - `${t`Failed to connect to ${name}. Please check your settings or ensuring the database is running.`}\n\nError: ${toErrorMessage(e)}`, + `${t`Failed to connect to ${conn.name}. Please check your settings or ensuring the database is running.`}\n\nError: ${toErrorMessage(e)}`, ); } finally { setConnectingId(null); From 56dd529971713d71ec1d8763002469da24d5fec5 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 11:21:54 +0200 Subject: [PATCH 12/22] feat(i18n): backfill lingui PO catalogs from existing translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit scripts/i18n/backfill.mjs fills each non-en PO msgstr from the old src/i18n/locales/.json, joining the extracted catalog to the codemod manifest by a placeholder-insensitive SKELETON + context (Lingui derives different placeholder names than i18next: simple idents keep their name, everything else goes positional {0}). Naive msgid-equality could not join these. - 0 unmatched catalog entries across all 7 locales (verified). - Translations rewritten to the catalog's placeholder names by positional correspondence of the English source (handles locale reordering by name). - Plurals rebuilt per target locale from the i18next stem (ru keeps one/few/ many/other); the 2 extra-variable plurals preserve their positional tokens. - Context split preserved: generateSQL DELETE vs common.delete Löschen. - SchemaModal's 5 spike messages (hand-converted in Task 1, never in the manifest) bridged via SPIKE_EXTRAS. - All 'empty' msgstr confirmed genuinely-untranslated in source (no drops). Known: 12 same-namespace duplicate-English keys collapse to one entry with a minor translation-nuance divergence in some locale (spec-anticipated risk; English correct everywhere). Listed for an optional finer-context follow-up. --- package.json | 2 + pnpm-lock.yaml | 8 + scripts/i18n/backfill.mjs | 166 ++ src/locales/de/messages.po | 5278 ++++++++++++++++++++++++++++++++++- src/locales/de/messages.ts | 2 +- src/locales/en/messages.po | 5284 +++++++++++++++++++++++++++++++++++- src/locales/en/messages.ts | 2 +- src/locales/es/messages.po | 5278 ++++++++++++++++++++++++++++++++++- src/locales/es/messages.ts | 2 +- src/locales/fr/messages.po | 5278 ++++++++++++++++++++++++++++++++++- src/locales/fr/messages.ts | 2 +- src/locales/it/messages.po | 5278 ++++++++++++++++++++++++++++++++++- src/locales/it/messages.ts | 2 +- src/locales/ja/messages.po | 5278 ++++++++++++++++++++++++++++++++++- src/locales/ja/messages.ts | 2 +- src/locales/ru/messages.po | 5278 ++++++++++++++++++++++++++++++++++- src/locales/ru/messages.ts | 2 +- src/locales/zh/messages.po | 5278 ++++++++++++++++++++++++++++++++++- src/locales/zh/messages.ts | 2 +- 19 files changed, 42305 insertions(+), 117 deletions(-) create mode 100644 scripts/i18n/backfill.mjs diff --git a/package.json b/package.json index 8a75199e..a09977b9 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "smoke:create-plugin": "pnpm --filter @tabularis/create-plugin smoke", "i18n:extract": "lingui extract", "i18n:compile": "lingui compile --typescript --namespace es", + "i18n:backfill": "node scripts/i18n/backfill.mjs", "roadmap": "node scripts/update-roadmap.js", "sync-links": "node scripts/sync-links.js", "sync-sponsors": "node scripts/sync-sponsors.js", @@ -92,6 +93,7 @@ "eslint-plugin-react-refresh": "^0.4.26", "globals": "^16.5.0", "jsdom": "^28.1.0", + "pofile": "^1.1.4", "postcss": "^8.5.8", "tailwindcss": "^4.2.2", "ts-morph": "^28.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 25dbb688..4fb85c00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -189,6 +189,9 @@ importers: jsdom: specifier: ^28.1.0 version: 28.1.0 + pofile: + specifier: ^1.1.4 + version: 1.1.4 postcss: specifier: ^8.5.8 version: 8.5.8 @@ -2844,6 +2847,9 @@ packages: resolution: {integrity: sha512-sz1pnjgEfPyZ+QvaeX3NtCmbYnEvG01LZRLoN/uXoLtPZtxCIH5IctL7yXXc0fFyk/fqV6K8g3hlNfr6IJwupA==} engines: {node: '>=20'} + pofile@1.1.4: + resolution: {integrity: sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g==} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -6077,6 +6083,8 @@ snapshots: pofile-ts@4.0.3: {} + pofile@1.1.4: {} + possible-typed-array-names@1.1.0: {} postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0): diff --git a/scripts/i18n/backfill.mjs b/scripts/i18n/backfill.mjs new file mode 100644 index 00000000..f33e1efc --- /dev/null +++ b/scripts/i18n/backfill.mjs @@ -0,0 +1,166 @@ +import { readFileSync, writeFileSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, join } from "node:path"; +import PO from "pofile"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const ROOT = join(__dirname, "../.."); +const OLD = join(ROOT, "src/i18n/locales"); +const CAT = join(ROOT, "src/locales"); +const LOCALES = ["it", "es", "zh", "fr", "de", "ja", "ru"]; +const CONTEXT_DELIM = "\x04"; + +function flatten(obj, prefix = "", out = {}) { + for (const k of Object.keys(obj)) { + const v = obj[k]; + const nk = prefix ? `${prefix}.${k}` : k; + if (v && typeof v === "object" && !Array.isArray(v)) flatten(v, nk, out); + else out[nk] = v; + } + return out; +} + +const enJson = flatten(JSON.parse(readFileSync(join(OLD, "en.json"), "utf8"))); +const oldLocale = Object.fromEntries( + LOCALES.map((l) => [l, flatten(JSON.parse(readFileSync(join(OLD, `${l}.json`), "utf8")))]), +); +const manifest = JSON.parse(readFileSync(join(__dirname, "manifest.json"), "utf8")); + +// SchemaModal was hand-converted in the Task-1 spike (not by the codemod), so its +// messages never reached the manifest. Bridge them here. +const SPIKE_EXTRAS = [ + { message: "Key", context: null, kind: "plain", stem: null, originalKeys: ["schema.colKey"] }, + { message: "NO", context: null, kind: "plain", stem: null, originalKeys: ["schema.no"] }, + { message: "Nullable", context: null, kind: "plain", stem: null, originalKeys: ["schema.colNullable"] }, + { message: "YES", context: null, kind: "plain", stem: null, originalKeys: ["schema.yes"] }, + { message: "Schema: {tableName}", context: null, kind: "interp", stem: null, originalKeys: ["schema.title"] }, +]; + +// Skeleton: normalize placeholder NAMES (Lingui derives different names than i18next) +// and the plural/select count var, while PRESERVING all literal text incl. plural-form +// contents and `#`. Two messages join iff they are the same text up to placeholder names. +function skeleton(msg) { + return msg + .replace(/\{\s*[\w0-9]+\s*,\s*(plural|select|selectordinal)\s*,/g, "{\x01, $1,") + .replace(/\{\s*[\w0-9]+\s*\}/g, "\x01"); +} + +// Build skeleton+context -> entry index; hard-fail on ambiguous collisions. +const index = new Map(); +for (const entry of [...Object.values(manifest), ...SPIKE_EXTRAS]) { + const k = skeleton(entry.message) + CONTEXT_DELIM + (entry.context || ""); + if (!index.has(k)) index.set(k, entry); + else if (index.get(k).message !== entry.message) { + // Same skeleton+context but different literal text: a real collision the join + // cannot disambiguate. Surface it loudly rather than mistranslate. + console.error(`COLLISION: ${JSON.stringify(index.get(k).message)} vs ${JSON.stringify(entry.message)}`); + } +} + +// Ordered placeholder tokens in a non-plural message ({name} or {0}). +const tokens = (s) => [...s.matchAll(/\{\s*([\w0-9]+)\s*\}/g)].map((m) => m[1]); +// Ordered i18next placeholder names ({{name}}). +const i18nTokens = (s) => [...s.matchAll(/\{\{\s*(\w+)\s*\}\}/g)].map((m) => m[1]); + +// Map an i18next translation's {{name}} placeholders to the Lingui names used by the +// catalog msgid, by positional correspondence of the English source. +function buildNameMap(enMsgid, enKey) { + const lui = tokens(enMsgid); + const i18 = i18nTokens(enJson[enKey] ?? ""); + const map = {}; + const seen = []; + for (const n of i18) if (!seen.includes(n)) seen.push(n); + seen.forEach((name, i) => { + if (i < lui.length) map[name] = lui[i]; + }); + return map; +} + +function applyNameMap(text, map) { + return text.replace(/\{\{\s*(\w+)\s*\}\}/g, (_, name) => + map[name] !== undefined ? `{${map[name]}}` : `{${name}}`, + ); +} + +// Parse a plural msgid: { countVar, formTokens: { cat: [tokens excluding count] } }. +function parsePlural(msgid) { + const head = msgid.match(/^\{\s*([\w0-9]+)\s*,\s*plural\s*,/); + const countVar = head[1]; + const body = msgid.slice(head[0].length, msgid.lastIndexOf("}")); + const formTokens = {}; + const re = /(\w+)\s*\{((?:[^{}]|\{[^{}]*\})*)\}/g; + let m; + while ((m = re.exec(body))) formTokens[m[1]] = tokens(m[2]); + return { countVar, formTokens }; +} + +// Resolve, for a locale, the first original key that actually has a translation. +function pickKey(keys, loc) { + for (const k of keys) if (oldLocale[loc][k] != null && oldLocale[loc][k] !== "") return k; + return null; +} + +const I18N_PLURAL_CATS = ["zero", "one", "two", "few", "many", "other"]; + +function backfillLocale(loc) { + return new Promise((resolve, reject) => { + PO.load(join(CAT, `${loc}/messages.po`), (err, po) => { + if (err) return reject(err); + let filled = 0, empty = 0, unmatched = 0; + const misses = []; + for (const item of po.items) { + if (!item.msgid) continue; + const key = skeleton(item.msgid) + CONTEXT_DELIM + (item.msgctxt || ""); + const entry = index.get(key); + if (!entry) { + unmatched++; + if (misses.length < 8) misses.push((item.msgctxt ? `[${item.msgctxt}] ` : "") + item.msgid.slice(0, 50)); + continue; + } + + if (entry.kind === "plural" || /,\s*plural\s*,/.test(item.msgid)) { + const { countVar, formTokens } = parsePlural(item.msgid); + const stem = entry.stem; + const parts = []; + for (const cat of I18N_PLURAL_CATS) { + const suffixKey = `${stem}_${cat}`; + // every catalog plural carries a base i18next stem in some locales as _one/.._other + const raw = oldLocale[loc][suffixKey]; + if (raw == null || raw === "") continue; + // {{count}} -> #; other {{var}} -> the positional/named token the en form used. + const formTok = formTokens[cat] ?? formTokens.other ?? []; + let ti = 0; + const text = raw.replace(/\{\{\s*(\w+)\s*\}\}/g, (_, name) => { + if (name === "count") return "#"; + const tok = formTok[ti] ?? formTokens.other?.[ti] ?? name; + ti++; + return `{${tok}}`; + }); + parts.push(`${cat} {${text}}`); + } + if (!parts.length) { empty++; continue; } + item.msgstr = [`{${countVar}, plural, ${parts.join(" ")}}`]; + filled++; + continue; + } + + const ok = pickKey(entry.originalKeys, loc); + if (!ok) { empty++; continue; } + const translation = oldLocale[loc][ok]; + const map = buildNameMap(item.msgid, ok); + item.msgstr = [applyNameMap(translation, map)]; + filled++; + } + writeFileSync(join(CAT, `${loc}/messages.po`), po.toString()); + resolve({ loc, filled, empty, unmatched, misses, total: po.items.length }); + }); + }); +} + +const results = []; +for (const loc of LOCALES) results.push(await backfillLocale(loc)); +console.log("locale filled empty unmatched total"); +for (const r of results) { + console.log(`${r.loc.padEnd(6)} ${String(r.filled).padStart(6)} ${String(r.empty).padStart(5)} ${String(r.unmatched).padStart(9)} ${String(r.total).padStart(5)}`); + if (r.unmatched) console.log(` unmatched samples: ${r.misses.join(" | ")}`); +} diff --git a/src/locales/de/messages.po b/src/locales/de/messages.po index 4a765e00..826f6f07 100644 --- a/src/locales/de/messages.po +++ b/src/locales/de/messages.po @@ -6,39 +6,5291 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: @lingui/cli\n" "Language: de\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" +#: src/components/modals/NewRowModal.tsx +msgid "(Auto-generated)" +msgstr "(Automatisch generiert)" + +#. placeholder {0}: stats.blocked +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# blocked} other {# blocked}}" +msgstr "{0, plural, one {# blockiert} other {# blockiert}}" + +#. placeholder {0}: proc.children.length +#. placeholder {0}: stats.child_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# child process} other {# child processes}}" +msgstr "{0, plural, one {# Kindprozess} other {# Kindprozesse}}" + +#. placeholder {0}: connections.length +#: src/pages/Connections.tsx +msgid "{0, plural, one {# connection} other {# connections}}" +msgstr "{0, plural, one {# Verbindung(en)} other {# Verbindung(en)}}" + +#. placeholder {0}: stats.errors +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# error} other {# errors}}" +msgstr "{0, plural, one {# Fehler} other {# Fehler}}" + +#. placeholder {0}: stats.total +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# event} other {# events}}" +msgstr "{0, plural, one {# Ereignis} other {# Ereignisse}}" + +#. placeholder {0}: queries.length +#: src/components/modals/ExplainSelectionModal.tsx +msgid "{0, plural, one {# explainable query found} other {# explainable queries found}}" +msgstr "{0, plural, one {# erklärbare Abfragen gefunden} other {# erklärbare Abfragen gefunden}}" + +#. placeholder {0}: parsed.warnings.length +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# parsing warning} other {# parsing warnings}}" +msgstr "{0, plural, one {# Parser-Warnungen} other {# Parser-Warnungen}}" + +#. placeholder {0}: queries.length +#: src/components/modals/QuerySelectionModal.tsx +msgid "{0, plural, one {# query found} other {# queries found}}" +msgstr "{0, plural, one {# Abfragen gefunden} other {# Abfragen gefunden}}" + +#. placeholder {0}: result.rows.length +#. placeholder {1}: executionTime != null ? Math.round(executionTime) : "—" +#. placeholder {2}: executionTime != null ? Math.round(executionTime) : "—" +#: src/components/notebook/ResultToolbar.tsx +msgid "{0, plural, one {# row · {1}ms} other {# rows · {2}ms}}" +msgstr "{0, plural, one {# Zeilen · {1} ms} other {# Zeilen · {2} ms}}" + +#. placeholder {0}: result.rows_inserted +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row imported into \"{tableName}\"} other {# rows imported into \"{tableName}\"}}" +msgstr "{0, plural, one {# Zeilen in \"{tableName}\" importiert} other {# Zeilen in \"{tableName}\" importiert}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row} other {# rows}}" +msgstr "{0, plural, one {# Zeilen} other {# Zeilen}}" + +#. placeholder {0}: visibleSessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "{0, plural, one {# session} other {# sessions}}" +msgstr "{0, plural, one {# Sitzung} other {# Sitzungen}}" + +#. placeholder {0}: systemStats.process_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# system process running} other {# system processes running}}" +msgstr "{0, plural, one {# Systemprozess läuft} other {# Systemprozesse laufen}}" + +#. placeholder {0}: tabs.length +#: src/components/modals/TabSwitcherModal.tsx +msgid "{0, plural, one {# tab} other {# tabs}}" +msgstr "{0, plural, one {# Tab} other {# Tabs}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {Import # row} other {Import # rows}}" +msgstr "{0, plural, one {# Zeilen importieren} other {# Zeilen importieren}}" + +#. placeholder {0}: progress.statements_executed +#. placeholder {1}: progress.total_statements +#: src/components/modals/ImportDatabaseModal.tsx +msgid "{0} / {1} statements" +msgstr "{0} / {1} Statements" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "{0} API Key" +msgstr "{0} API-Schlüssel" + +#. placeholder {0}: selectedDatabasesState.length +#: src/components/modals/NewConnectionModal.tsx +msgid "{0} database(s) selected" +msgstr "{0} Datenbank(en) ausgewählt" + +#. placeholder {0}: filteredItems.length +#: src/components/modals/QuickNavigatorModal.tsx +msgid "{0} elements" +msgstr "{0} Elemente" + +#. placeholder {0}: approval.clientHint +#. placeholder {1}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "{0} on {1} — review and decide before it executes." +msgstr "{0} auf {1} — vor Ausführung prüfen." + +#. placeholder {0}: activeTab.result.rows.length +#. placeholder {0}: entry.result!.rows.length +#. placeholder {0}: entry.result.rows.length +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "{0} rows retrieved" +msgstr "{0} Zeilen abgerufen" + +#. placeholder {0}: selected.size +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "{0} selected" +msgstr "{0} ausgewählt" + +#. placeholder {0}: structuredFilters.length +#: src/components/ui/TableToolbar.tsx +msgid "{activeFilterCount} of {0} active" +msgstr "{activeFilterCount} von {0} aktiv" + +#: src/components/ui/DataGrid.tsx +msgid "{deleteRowCount, plural, one {Delete # row} other {Delete # rows}}" +msgstr "{deleteRowCount, plural, one {# Zeilen löschen} other {# Zeilen löschen}}" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "{label} is required" +msgstr "{label} ist erforderlich" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "{rowCount, plural, one {# row} other {# rows}}" +msgstr "{rowCount, plural, one {# Zeilen} other {# Zeilen}}" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "{totalLibraries} libraries" +msgstr "{totalLibraries} Bibliotheken" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/db.sqlite" +msgstr "/absoluter/pfad/zu/db.sqlite" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/folder" +msgstr "/absoluter/pfad/zum/ordner" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "/path/to/id_rsa" +msgstr "/pfad/zu/id_rsa" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "↑↓ to navigate, Enter to open" +msgstr "↑↓ zum Navigieren, Enter zum Öffnen" + +#. placeholder {0}: previewResult.rows.length - 5 +#: src/components/modals/ViewEditorModal.tsx +msgid "+{0} more rows" +msgstr "+{0} weitere Zeilen" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "1 element" +msgstr "1 Element" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "A database connection was lost" +msgstr "Eine Datenbankverbindung wurde verloren" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "A new table will be created" +msgstr "Eine neue Tabelle wird erstellt" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "A restart is required to apply changes." +msgstr "Ein Neustart ist erforderlich, um Änderungen anzuwenden." + +#: src/components/modals/CommunityModal.tsx +msgid "A star helps others discover the project" +msgstr "Ein Stern hilft anderen, das Projekt zu entdecken" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Accent color" +msgstr "Akzentfarbe" + +#: src/components/settings/AppearanceTab.tsx +msgid "Accept Suggestion with Enter" +msgstr "Vorschlag mit Eingabetaste übernehmen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Actions" +msgstr "" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Actions" +msgstr "Aktionen" + +#: src/pages/TaskManagerPage.tsx +msgctxt "taskManager" +msgid "Actions" +msgstr "Aktionen" + +#: src/components/connections/StatusBadge.tsx +msgid "Active" +msgstr "Aktiv" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/pages/Editor.tsx +msgid "Active database" +msgstr "Aktive Datenbank" + +#: src/pages/TaskManagerPage.tsx +msgid "Active queries and connections through this plugin will be interrupted." +msgstr "Aktive Abfragen und Verbindungen über dieses Plugin werden unterbrochen." + +#: src/pages/McpPage.tsx +msgid "Activity" +msgstr "Aktivität" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual Rows" +msgstr "Tatsächliche Zeilen" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual rows exceed estimate" +msgstr "Tatsächliche Zeilen übersteigen die Schätzung" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Add" +msgstr "Hinzufügen" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Add Column" +msgstr "Spalte hinzufügen" + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Add Column" +msgstr "Spalte hinzufügen" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Add Column" +msgstr "Spalte hinzufügen" + +#: src/pages/Connections.tsx +msgid "Add Connection" +msgstr "Verbindung hinzufügen" + +#: src/components/ui/TableToolbar.tsx +msgid "Add filter" +msgstr "Filter hinzufügen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Foreign Key" +msgstr "Fremdschlüssel hinzufügen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Index" +msgstr "Index hinzufügen" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add Markdown Cell" +msgstr "Markdown-Zelle hinzufügen" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add SQL Cell" +msgstr "SQL-Zelle hinzufügen" + +#: src/components/ui/TableToolbar.tsx +msgid "add the first filter" +msgstr "den ersten Filter hinzufügen" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Add this to your client config file manually if automatic install fails." +msgstr "Füge dies manuell zur Konfigurationsdatei deines Clients hinzu, falls die automatische Installation fehlschlägt." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add to Favorites" +msgstr "Zu Favoriten hinzufügen" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added Markdown cell {n}" +msgstr "Markdown-Zelle {n} hinzugefügt" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added SQL cell {n}" +msgstr "SQL-Zelle {n} hinzugefügt" + +#: src/components/settings/AppearanceTab.tsx +msgid "Adjust the base font size used throughout the application (10-20px)." +msgstr "Passt die in der gesamten Anwendung verwendete Grundschriftgröße an (10-20 px)." + +#: src/pages/Settings.tsx +msgid "AI" +msgstr "KI" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "AI" +msgstr "AI" + +#: src/components/settings/AiActivityPanel.tsx +#: src/pages/Settings.tsx +msgid "AI Activity" +msgstr "KI-Aktivität" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "AI Analysis" +msgstr "KI-Analyse" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "AI CLIENTS" +msgstr "KI-CLIENTS" + +#: src/components/settings/AiTab.tsx +msgid "AI models refreshed from providers" +msgstr "KI-Modelle von Anbietern aktualisiert" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Provider not configured. Please go to Settings > AI." +msgstr "KI-Anbieter nicht konfiguriert. Bitte gehe zu Einstellungen > KI." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Query Plan Analysis" +msgstr "KI-Analyse des Abfrageplans" + +#: src/components/modals/AiApprovalModal.tsx +msgid "AI requested a database write" +msgstr "KI möchte in die Datenbank schreiben" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "AI Suggest" +msgstr "KI-Vorschlag" + +#: src/components/settings/PluginsTab.tsx +msgid "All" +msgstr "Alle" + +#: src/components/settings/LogsTab.tsx +msgid "All levels" +msgstr "Alle Level" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All other connections stay read-only. Only the connections checked here may execute writes." +msgstr "Andere bleiben nur lesbar. Nur markierte dürfen schreiben." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All queries" +msgstr "Alle Abfragen" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All statuses" +msgstr "Alle Status" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All tools" +msgstr "Alle Tools" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Allow" +msgstr "Erlauben" + +#: src/components/settings/AppearanceTab.tsx +msgid "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline." +msgstr "Erlaubt der Eingabetaste (zusätzlich zu Tab), den aktiven Autovervollständigungsvorschlag zu übernehmen. Bei deaktivierter Option fügt Enter immer einen Zeilenumbruch ein." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Allow writes from MCP" +msgstr "Schreibvorgänge erlauben" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Already exists" +msgstr "Bereits vorhanden" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Alter View" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "An environment variable is present, but you can override it by setting a key above." +msgstr "Eine Umgebungsvariable ist vorhanden, aber du kannst sie überschreiben, indem du oben einen Schlüssel setzt." + +#: src/components/modals/PluginInstallErrorModal.tsx +msgid "An error occurred while installing the plugin. See the details below." +msgstr "Bei der Installation des Plugins ist ein Fehler aufgetreten. Siehe Details unten." + +#: src/components/modals/VisualExplainModal.tsx +msgid "Analyze" +msgstr "Analysieren" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Analyze Data" +msgstr "Daten analysieren" + +#: src/components/modals/VisualExplainModal.tsx +msgid "ANALYZE executes the query. Use with caution on data-modifying statements." +msgstr "ANALYZE führt die Abfrage aus. Bei datenverändernden Statements mit Vorsicht verwenden." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "Analyzing query plan with AI..." +msgstr "Abfrageplan wird mit KI analysiert..." + +#: src/components/settings/AiTab.tsx +msgid "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable." +msgstr "Der API-Schlüssel wird sicher im System-Keychain gespeichert. Ein hier gesetzter Schlüssel überschreibt die Umgebungsvariable." + +#: src/pages/Settings.tsx +msgid "Appearance" +msgstr "Darstellung" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Appearance" +msgstr "Darstellung" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Appearance" +msgstr "Erscheinungsbild" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Append rows" +msgstr "Zeilen anhängen" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Append to existing" +msgstr "An bestehende anhängen" + +#: src/components/ui/FilterRow.tsx +msgid "Applied" +msgstr "Angewendet" + +#: src/components/ui/FilterRow.tsx +msgid "Apply" +msgstr "Anwenden" + +#: src/components/ui/TableToolbar.tsx +msgid "Apply All" +msgstr "Alle anwenden" + +#: src/pages/Editor.tsx +msgid "Apply to all" +msgstr "Auf alle anwenden" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval gate" +msgstr "Freigabe" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Approval ID" +msgstr "Freigabe-ID" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval required" +msgstr "Freigabe erforderlich" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Approve" +msgstr "Freigeben" + +#: src/components/settings/LogsTab.tsx +msgid "Are you sure you want to clear all logs?" +msgstr "Möchtest du wirklich alle Logs löschen?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to clear all query history for this connection?" +msgstr "Möchtest du den gesamten Abfrageverlauf für diese Verbindung wirklich löschen?" + +#. placeholder {0}: column.name +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "" +"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +"\n" +"WARNING: This will permanently delete all data in this column. This action cannot be undone." +msgstr "" +"Möchtest du die Spalte \"{0}\" aus der Tabelle \"{tableName}\" wirklich löschen?\n" +"\n" +"WARNUNG: Dadurch werden alle Daten in dieser Spalte dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden." + +#. placeholder {0}: group?.name +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete group \"{0}\"? Connections in this group will be moved to ungrouped." +msgstr "Möchtest du die Gruppe \"{0}\" wirklich löschen? Verbindungen in dieser Gruppe werden in Ungruppiert verschoben." + +#. placeholder {0}: queries.find((q) => q.id === favoriteDeleteConfirm)?.name ?? "" +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete query \"{0}\"?" +msgstr "Möchtest du die Abfrage \"{0}\" wirklich löschen?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete table \"{0}\"?" +msgstr "Möchtest du die Tabelle \"{0}\" wirklich löschen?" + +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete this connection?" +msgstr "Möchtest du diese Verbindung wirklich löschen?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete this query from history?" +msgstr "Möchtest du diese Abfrage wirklich aus dem Verlauf löschen?" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Are you sure you want to delete this SSH connection?" +msgstr "Möchtest du diese SSH-Verbindung wirklich löschen?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop trigger \"{0}\"?" +msgstr "" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop view \"{0}\"?" +msgstr "Möchtest du die Ansicht \"{0}\" wirklich löschen?" + +#. placeholder {0}: file.split(/[\\/]/).pop() +#: src/components/layout/ExplorerSidebar.tsx +msgid "" +"Are you sure you want to import \"{0}\"?\n" +"This may overwrite existing data." +msgstr "" +"Möchtest du \"{0}\" wirklich importieren?\n" +"Dadurch können vorhandene Daten überschrieben werden." + +#: src/components/modals/ViewEditorModal.tsx +msgid "Are you sure you want to modify view \"{name}\"?" +msgstr "Möchtest du die Ansicht \"{name}\" wirklich ändern?" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Are you sure you want to remove \"{pluginName}\"? This will delete the plugin files." +msgstr "Möchtest du \"{pluginName}\" wirklich entfernen? Dadurch werden die Plugin-Dateien gelöscht." + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Asc" +msgstr "Aufst." + +#: src/components/modals/CreateTableModal.tsx +msgid "At least one column is required" +msgstr "Mindestens eine Spalte ist erforderlich" + +#: src/components/modals/CreateIndexModal.tsx +msgid "At least one column must be selected" +msgstr "Mindestens eine Spalte muss ausgewählt werden" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere." +msgstr "Protokoll aller MCP-Aufrufe und ausstehender Freigaben. Lokal gespeichert." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Authentication Type" +msgstr "Authentifizierungstyp" + +#: src/components/modals/NewRowModal.tsx +msgid "Auto" +msgstr "Auto" + +#: src/components/settings/LocalizationTab.tsx +msgid "Auto (System)" +msgstr "Auto (System)" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Auto Increment" +msgstr "Auto Increment" + +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Auto paginated" +msgstr "Automatisch paginiert" + +#: src/components/settings/InfoTab.tsx +msgid "Automatically check for new versions when the app launches" +msgstr "Automatisch nach neuen Versionen suchen, wenn die App gestartet wird" + +#: src/components/settings/PluginsTab.tsx +msgid "Available Plugins" +msgstr "Verfügbare Plugins" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below." +msgstr "Blockiere jede Nicht-SELECT-Anweisung über MCP, außer für die unten erlaubten Verbindungen." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Blocked (read-only)" +msgstr "Blockiert (nur lesen)" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Brand-new Discord community!" +msgstr "Neue Discord-Community!" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Breaking Changes" +msgstr "Breaking Changes" + +#: src/components/settings/PluginsTab.tsx +msgid "Browse and install plugins from the registry." +msgstr "Durchsuche und installiere Plugins aus dem Registry." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse file" +msgstr "Datei auswählen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse folder" +msgstr "Ordner auswählen" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Browse the direct open source dependencies used across the app, backend, and tooling." +msgstr "Durchsuche die direkten Open-Source-Abhängigkeiten, die in App, Backend und Tooling verwendet werden." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Browse..." +msgstr "Durchsuchen..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Hit" +msgstr "Buffer-Treffer" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Read" +msgstr "Buffer gelesen" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Bug Fixes" +msgstr "Fehlerbehebungen" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Built-in, not customizable" +msgstr "Integriert, nicht anpassbar" + +#: src/components/settings/PluginsTab.tsx +msgid "by" +msgstr "von" + +#: src/components/modals/NewConnectionModal.tsx +msgid "CA Certificate" +msgstr "" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "cancel" +msgstr "abbrechen" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/ConfirmModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/JsonViewerPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Cancel" +msgstr "Abbrechen" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Cannot display diagram without a connection ID." +msgstr "Diagramm kann ohne Verbindungs-ID nicht angezeigt werden." + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "Cargo ecosystem" +msgstr "Cargo-Ökosystem" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Certificate paths are optional. Leave empty to use system defaults." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Change" +msgstr "Ändern" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed chart (cell {n})" +msgstr "Diagramm geändert (Zelle {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed database (cell {n})" +msgstr "Datenbank geändert (Zelle {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed parameters" +msgstr "Parameter geändert" + +#: src/components/notebook/CellChart.tsx +msgid "Chart" +msgstr "Diagramm" + +#: src/components/modals/CommunityModal.tsx +msgid "Chat with the community, get help, suggest features" +msgstr "Mit der Community chatten, Hilfe bekommen, Features vorschlagen" + +#: src/components/settings/InfoTab.tsx +msgid "Check for Updates Now" +msgstr "Jetzt nach Updates suchen" + +#: src/components/settings/InfoTab.tsx +msgid "Check for updates on startup" +msgstr "Beim Start nach Updates suchen" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Checking configuration..." +msgstr "Konfiguration wird geprüft..." + +#: src/components/settings/InfoTab.tsx +msgid "Checking..." +msgstr "Prüfung läuft..." + +#: src/pages/TaskManagerPage.tsx +msgid "child process" +msgstr "Kindprozess" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a connection..." +msgstr "Verbindung auswählen..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a context..." +msgstr "Kontext auswählen..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a namespace..." +msgstr "Namespace auswählen..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a resource..." +msgstr "Ressource auswählen..." + +#: src/components/settings/AppearanceTab.tsx +msgid "Choose an independent theme for the SQL editor, or keep it in sync with the app theme." +msgstr "Wähle ein unabhängiges Thema für den SQL-Editor oder halte es mit dem App-Thema synchron." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Choose image…" +msgstr "Bild auswählen…" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Choose target..." +msgstr "Ziel wählen..." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default delimiter character used when copying or exporting rows as CSV." +msgstr "Wähle das Standard-Trennzeichen für das Kopieren oder Exportieren von Zeilen als CSV." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default format when copying rows with Ctrl+C / Cmd+C." +msgstr "Wähle das Standardformat beim Kopieren von Zeilen mit Ctrl+C / Cmd+C." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default layout direction for ER diagrams" +msgstr "Wähle die Standard-Layout-Richtung für ER-Diagramme" + +#: src/components/settings/LocalizationTab.tsx +msgid "Choose your preferred language. 'Auto' will use your system language." +msgstr "Wähle deine bevorzugte Sprache. \"Auto\" verwendet die Systemsprache." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Clear" +msgstr "Leeren" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "common" +msgid "Clear" +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Clear" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Clear All History" +msgstr "Gesamten Verlauf löschen" + +#: src/components/settings/LogsTab.tsx +msgid "Clear Logs" +msgstr "Logs löschen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Clear Query History" +msgstr "Abfrageverlauf löschen" + +#: src/components/ui/DataGrid.tsx +msgid "Clear sort" +msgstr "Sortierung löschen" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Click 'Run Preview' to see results" +msgstr "Klicke auf 'Vorschau ausführen', um Ergebnisse zu sehen" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Click another emoji below to change." +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Click Load Databases to fetch available databases." +msgstr "" + +#: src/pages/Editor.tsx +msgid "Click to jump to page" +msgstr "Klicken, um zur Seite zu springen" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Client" +msgstr "Client" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Certificate" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Key" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Clipboard column" +msgstr "Zwischenablage-Spalte" + +#: src/components/connections/ActionButtons.tsx +msgid "Clone" +msgstr "Klonen" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/McpModal.tsx +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx #: src/components/modals/SchemaModal.tsx +#: src/components/modals/VisualExplainModal.tsx +#: src/pages/JsonViewerPage.tsx msgid "Close" +msgstr "Schließen" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close All Tabs" +msgstr "Alle Tabs schließen" + +#: src/components/ui/TableToolbar.tsx +msgid "Close filter panel (ESC)" +msgstr "Filterpanel schließen (ESC)" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Other Tabs" +msgstr "Andere Tabs schließen" + +#: src/components/layout/SplitPaneLayout.tsx +msgid "Close panel" +msgstr "Panel schließen" + +#: src/components/ui/StackedResultItem.tsx +#: src/i18n/registries/shortcutLabels.ts +msgid "Close tab" +msgstr "Tab schließen" + +#: src/components/modals/TabSwitcherModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tab" +msgstr "Tab schließen" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Left" +msgstr "Tabs links schließen" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Right" +msgstr "Tabs rechts schließen" + +#: src/components/ui/JsonInput.tsx +msgid "Code" +msgstr "Code" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Collapse" +msgstr "Verkleinern" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Collapse all" +msgstr "Alle einklappen" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Collapse All" +msgstr "Alle einklappen" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Collapse Cell" +msgstr "Zelle einklappen" + +#: src/pages/TaskManagerPage.tsx +msgid "Collapse child processes" +msgstr "Kindprozesse einklappen" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Collapsed/expanded cells" +msgstr "Zellen ein-/ausgeklappt" + +#: src/components/settings/LogsTab.tsx +msgid "Collect application logs in memory for debugging" +msgstr "Anwendungslogs zur Fehlersuche im Speicher sammeln" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Column name is required" +msgstr "Spaltenname ist erforderlich" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Column Schema" +msgstr "Spalten-Schema" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "columns" +msgstr "Spalten" + +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +msgid "Columns" +msgstr "Spalten" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Comma (,)" +msgstr "Komma (,)" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Config file not found (create manually)" +msgstr "Konfigurationsdatei nicht gefunden (manuell erstellen)" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "config.json" +msgstr "config.json" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Configuration installed successfully for {clientName}! Restart the app to apply." +msgstr "Konfiguration für {clientName} erfolgreich installiert! Starte die App neu, um sie anzuwenden." + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Configure destination" +msgstr "Ziel konfigurieren" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Configure Interpreter" +msgstr "Interpreter konfigurieren" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSH Inline" +msgstr "SSH inline konfigurieren" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSL/TLS for secure database connections (optional)." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Configured" +msgstr "Konfiguriert" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Confirm" +msgstr "Bestätigen" + +#: src/pages/Connections.tsx +msgid "Confirm Delete" +msgstr "Löschen bestätigen" + +#: src/components/connections/ActionButtons.tsx +msgid "Connect" +msgstr "Verbinden" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Connect Tabularis to Claude Desktop, Cursor, and more" +msgstr "Verbinde Tabularis mit Claude Desktop, Cursor und mehr" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connect Timeout" +msgstr "Verbindungs-Timeout" + +#: src/pages/Editor.tsx +msgid "Connected" +msgstr "Verbunden" + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connection" +msgstr "Verbindung" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Connection" +msgstr "Verbindung" + +#: src/components/settings/GeneralTab.tsx +msgid "Connection Health Check" +msgstr "Verbindungszustandsprüfung" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "Connection Lost" +msgstr "Verbindung verloren" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection Name" +msgstr "Verbindungsname" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Connection name is required" +msgstr "Der Verbindungsname ist erforderlich" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Connection name is required" +msgstr "Verbindungsname ist erforderlich" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Connection String" +msgstr "" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection test failed" +msgstr "Verbindungstest fehlgeschlagen" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connection timeout in milliseconds." +msgstr "Verbindungs-Timeout in Millisekunden." + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connections" +msgstr "Verbindungen" + +#: src/components/layout/Sidebar.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/Connections.tsx +msgid "Connections" +msgstr "Verbindungen" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Container Port" +msgstr "Container-Port" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Context" +msgstr "Kontext" + +#: src/pages/Editor.tsx +msgid "Convert to Console" +msgstr "In Konsole umwandeln" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Copied to clipboard" +msgstr "In Zwischenablage kopiert" + +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copied!" +msgstr "Kopiert!" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copy" +msgstr "Kopieren" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as `column`" +msgstr "Als `column` kopieren" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as table.column" +msgstr "Als table.column kopieren" + +#: src/components/ui/DataGrid.tsx +msgid "Copy Cell" +msgstr "Zelle kopieren" + +#: src/components/ui/DataGrid.tsx +msgid "Copy column name" +msgstr "Spaltennamen kopieren" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy error message" +msgstr "Fehlermeldung kopieren" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Copy name" +msgstr "Namen kopieren" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Copy Name" +msgstr "Namen kopieren" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Copy query" +msgstr "Abfrage kopieren" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy Query" +msgstr "Abfrage kopieren" + +#: src/components/ui/DataGrid.tsx +msgid "Copy selected row(s)" +msgstr "Ausgewählte Zeile(n) kopieren" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Copy selection" +msgstr "Auswahl kopieren" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Copy SQL" +msgstr "SQL kopieren" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Cost" +msgstr "Kosten" + +#: src/utils/explainPlan.ts +msgid "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL." +msgstr "Kosten, Laufzeit und Zeilenschätzungen sind im Vergleich zu PostgreSQL und MySQL oft nicht verfügbar." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Count rows" +msgstr "Zeilen zählen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Count Rows" +msgstr "Zeilen zählen" + +#: src/pages/TaskManagerPage.tsx +msgid "CPU" +msgstr "CPU" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create a new database trigger" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Create a new database view" +msgstr "Neue Datenbankansicht erstellen" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk" +msgid "Create Foreign Key" +msgstr "Fremdschlüssel erstellen" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex" +msgid "Create Index" +msgstr "Index erstellen" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Create new column" +msgstr "Neue Spalte erstellen" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Create New SSH Connection" +msgstr "Neue SSH-Verbindung erstellen" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Create new table" +msgstr "Neue Tabelle erstellen" + +#: src/components/modals/CreateTableModal.tsx +msgid "Create New Table" +msgstr "Neue Tabelle erstellen" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New View" +msgstr "Neue Ansicht erstellen" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Create Table" +msgstr "Tabelle erstellen" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Create Table" +msgstr "Tabelle erstellen" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create Trigger" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Create View" +msgstr "Ansicht erstellen" + +#: src/pages/Connections.tsx +msgid "Create your first connection" +msgstr "Erstelle deine erste Verbindung" + +#: src/pages/Connections.tsx +msgid "Create your first connection to get started." +msgstr "Erstelle deine erste Verbindung, um loszulegen." + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "CSV Delimiter" +msgstr "CSV-Trennzeichen" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Ctrl+Tab" +msgstr "Ctrl+Tab" + +#: src/components/settings/LogsTab.tsx +msgid "Current Logs" +msgstr "Aktuelle Logs" + +#: src/components/settings/InfoTab.tsx +msgid "Current Version" +msgstr "Aktuelle Version" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Custom" +msgstr "Benutzerdefiniert" + +#: src/components/settings/FontPicker.tsx +msgid "Custom Font" +msgstr "Benutzerdefinierte Schrift" + +#: src/components/settings/AiTab.tsx +msgid "Custom key deleted successfully" +msgstr "Benutzerdefinierter Schlüssel erfolgreich gelöscht" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language." +msgstr "Passe die Anweisungen für die KI-Analyse von EXPLAIN-Abfrageplänen an. Verwende {LANGUAGE} für die Ausgabesprache." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message." +msgstr "Passe die Anweisungen für die KI-Namensgenerierung von Notebook-Zellen an. Der Zelleninhalt (SQL oder Markdown) wird als Benutzernachricht gesendet." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message." +msgstr "Passe die Anweisungen für die KI-Namensgenerierung von Abfrage-Ergebnis-Tabs an. Die SQL-Abfrage wird als Benutzernachricht gesendet." + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Data (INSERT)" +msgstr "Daten (INSERT)" + +#: src/components/settings/GeneralTab.tsx +msgid "Data Editor" +msgstr "Dateneditor" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Data Grid" +msgstr "Datenraster" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "Data Preview" +msgstr "Datenvorschau" + +#: src/components/modals/QueryModal.tsx +msgid "Database" +msgstr "Datenbank" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Database exported successfully" +msgstr "Datenbank erfolgreich exportiert" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name" +msgstr "Datenbankname" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Name" +msgstr "Datenbankname" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name is required" +msgstr "Datenbankname ist erforderlich" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Type" +msgstr "Datenbanktyp" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Databases" +msgstr "Datenbanken" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "DDL" +msgstr "DDL" + +#: src/components/settings/LogsTab.tsx +msgid "Debug" +msgstr "Debug" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Default" +msgstr "Standard" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Default" +msgstr "Standardwert" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Default Copy Format" +msgstr "Standard-Kopierformat" + +#: src/components/settings/GeneralTab.tsx +msgid "Default Layout" +msgstr "Standard-Layout" + +#: src/components/settings/AiTab.tsx +msgid "Default Model" +msgstr "Standard-Modell" + +#: src/components/settings/AiTab.tsx +msgid "Default Provider" +msgstr "Standard-Anbieter" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Default Value" +msgstr "Standardwert" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Delete" +msgstr "DELETE" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Delete" +msgstr "Löschen" + +#: src/components/modals/ConfirmModal.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Delete" +msgstr "Löschen" + +#: src/components/connections/ActionButtons.tsx +msgctxt "connections" +msgid "Delete" +msgstr "Löschen" + +#: src/pages/Connections.tsx +msgctxt "groups" +msgid "Delete" +msgstr "Löschen" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +msgctxt "sidebar" +msgid "Delete" +msgstr "Löschen" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Delete" +msgstr "Löschen" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Delete Cell" +msgstr "Zelle löschen" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete column" +msgstr "Spalte löschen" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Delete Column" +msgstr "Spalte löschen" + +#: src/components/settings/AiTab.tsx +msgid "Delete custom key and revert to environment variable (if present)" +msgstr "Benutzerdefinierten Schlüssel löschen und auf Umgebungsvariable zurücksetzen (falls vorhanden)" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete FK" +msgstr "FK löschen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete foreign key \"{name}\"?" +msgstr "Fremdschlüssel \"{name}\" löschen?" + +#: src/pages/Connections.tsx +msgid "Delete Group" +msgstr "Gruppe löschen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Index" +msgstr "Index löschen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete index \"{name}\"?" +msgstr "Index \"{name}\" löschen?" + +#. placeholder {0}: pendingDelete?.title ?? "" +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Delete notebook \"{0}\"? This cannot be undone." +msgstr "Notebook \"{0}\" löschen? Dies kann nicht rückgängig gemacht werden." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Query" +msgstr "Abfrage löschen" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Delete Row" +msgstr "Zeile löschen" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete selected" +msgstr "Auswahl löschen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Table" +msgstr "Tabelle löschen" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Delete the entire AI activity history? This cannot be undone." +msgstr "Den gesamten KI-Aktivitätsverlauf löschen? Unwiderruflich." + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Deleted cell {n}" +msgstr "Zelle {n} gelöscht" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Denied" +msgstr "Abgelehnt" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Deny" +msgstr "Ablehnen" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Desc" +msgstr "Abst." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Deselect All" +msgstr "Alle abwählen" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Deselect All" +msgstr "Alle abwählen" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Deselect All" +msgstr "Alle abwählen" + +#: src/components/ui/FilterRow.tsx +msgid "Deselect from Apply All" +msgstr "Von \"Alle anwenden\" abwählen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Details" +msgstr "Details" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Detect JSON in text columns" +msgstr "JSON in Text-Spalten erkennen" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Diff" +msgstr "" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Direct dependencies declared in package.json and src-tauri/Cargo.toml." +msgstr "Direkte Abhängigkeiten, deklariert in package.json und src-tauri/Cargo.toml." + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Directly edit the raw configuration file. A restart is required to apply changes." +msgstr "Bearbeite die rohe Konfigurationsdatei direkt. Ein Neustart ist erforderlich, um Änderungen anzuwenden." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disable" +msgstr "Deaktivieren" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disabled" +msgstr "" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Disconnect" +msgstr "Trennen" + +#: src/pages/Editor.tsx +msgid "Disconnected" +msgstr "Getrennt" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk R/W" +msgstr "Datenträger L/S" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Read/s" +msgstr "Datenträger lesen/s" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Write/s" +msgstr "Datenträger schreiben/s" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgctxt "discordCallout" +msgid "Dismiss" +msgstr "Schließen" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgctxt "sidebar" +msgid "Dismiss" +msgstr "Schließen" + +#: src/components/settings/AppearanceTab.tsx +msgid "Display line numbers in the editor gutter." +msgstr "Zeigt Zeilennummern im Rand des Editors an." + +#: src/components/settings/GeneralTab.tsx +msgid "Display the welcome screen when the application starts." +msgstr "Willkommensbildschirm beim Start der Anwendung anzeigen." + +#: src/components/settings/PluginsTab.tsx +msgid "Downgrade to" +msgstr "Herabstufen auf" + +#: src/components/ui/BlobInput.tsx +msgid "Download" +msgstr "Herunterladen" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Download & Install" +msgstr "Herunterladen und installieren" + +#: src/components/ui/BlobInput.tsx +msgid "Download unavailable - only preview loaded" +msgstr "Download nicht verfügbar - nur Vorschau geladen" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Downloading..." +msgstr "Wird heruntergeladen..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgctxt "update" +msgid "Downloading..." +msgstr "Wird heruntergeladen..." + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Driver Notes" +msgstr "Treiberhinweise" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop View" +msgstr "Ansicht löschen" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Dump Database" +msgstr "Datenbank sichern" + +#: src/components/ui/FilterRow.tsx +msgid "Duplicate filter" +msgstr "Filter duplizieren" + +#: src/components/ui/DataGrid.tsx +msgid "Duplicate Row" +msgstr "Zeile duplizieren" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Duration" +msgstr "Dauer" + +#: src/components/modals/ViewEditorModal.tsx +msgid "e.g. active_users, order_summary" +msgstr "z. B. active_users, order_summary" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. before_insert_user" +msgstr "" + +#: src/components/modals/AiApprovalModal.tsx +msgid "e.g. Looks risky on prod, please confirm…" +msgstr "z.B. In Prod riskant, bestätigen…" + +#: src/components/modals/NewConnectionModal.tsx +msgid "e.g. mysql://user:pass@localhost:3306/db" +msgstr "" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "e.g. python3" +msgstr "z. B. python3" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "e.g. sales_data" +msgstr "z.B. verkaufsdaten" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. users" +msgstr "" + +#: src/components/modals/CreateTableModal.tsx +msgid "e.g. users, orders, products" +msgstr "z. B. users, orders, products" + +#: src/components/settings/FontPicker.tsx +msgid "e.g., Comic Sans MS" +msgstr "z. B. Comic Sans MS" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Edit" +msgstr "Bearbeiten" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Edit before approving" +msgstr "Vor Freigabe bearbeiten" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Edit cell name" +msgstr "Zellnamen bearbeiten" + +#: src/pages/Settings.tsx +msgid "Edit config.json" +msgstr "config.json bearbeiten" + +#: src/components/notebook/NotebookHistoryPanel.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Edit history" +msgstr "Bearbeitungsverlauf" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Edit Row" +msgstr "Zeile bearbeiten" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Edit Schemas" +msgstr "Schemata bearbeiten" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Edit Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Edit View" +msgstr "Ansicht bearbeiten" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited cell {n}" +msgstr "Zelle {n} bearbeitet" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited notebook" +msgstr "Notebook bearbeitet" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing a trigger requires dropping and recreating it. Continue modifying \"{name}\"?" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing trigger: {name}" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Editing view: {name}" +msgstr "Ansicht wird bearbeitet: {name}" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Editor" +msgstr "Editor" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Family" +msgstr "Editor-Schriftfamilie" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Size" +msgstr "Editor-Schriftgröße" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Theme" +msgstr "Editor-Thema" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Elapsed time" +msgstr "Verstrichene Zeit" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Emoji" +msgstr "Emoji" + +#: src/utils/explainPlan.ts +msgid "Enable ANALYZE to inspect actual rows, timing, loops, and buffers." +msgstr "Aktiviere ANALYZE, um tatsächliche Zeilen, Laufzeit, Schleifen und Buffer zu prüfen." + +#: src/components/settings/LogsTab.tsx +msgid "Enable Logging" +msgstr "Logging aktivieren" + +#: src/components/settings/PluginsTab.tsx +msgid "Enabled" +msgstr "Aktiviert" + +#: src/components/settings/AiTab.tsx +msgid "Endpoint URL" +msgstr "Endpoint-URL" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Enter {0} Key" +msgstr "{0}-Schlüssel eingeben" + +#: src/components/ui/GeometryInput.tsx +msgid "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))" +msgstr "Gib eine vollständige SQL-Funktion ein (z. B. ST_GeomFromText('POINT(30 40)', 4326))" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain plan analysis prompt..." +msgstr "Prompt für Explain-Plan-Analyse eingeben..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain prompt..." +msgstr "Explain-Prompt eingeben..." + +#: src/components/settings/FontPicker.tsx +msgid "Enter font name above" +msgstr "Schriftnamen oben eingeben" + +#: src/components/ui/JsonInput.tsx +msgid "Enter JSON..." +msgstr "JSON eingeben..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter key passphrase if encrypted" +msgstr "Passphrase eingeben, falls der Schlüssel verschlüsselt ist" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter notebook cell name prompt..." +msgstr "Prompt für Notebook-Zellnamen eingeben..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter password" +msgstr "Passwort eingeben" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter query tab name prompt..." +msgstr "Prompt für Abfrage-Tabnamen eingeben..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter SSH password" +msgstr "SSH-Passwort eingeben" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter system prompt..." +msgstr "System-Prompt eingeben..." + +#: src/components/settings/AiTab.tsx +msgid "Enter the exact model name for your OpenAI-compatible provider." +msgstr "Gib den exakten Modellnamen für deinen OpenAI-kompatiblen Anbieter ein." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter username" +msgstr "Benutzername eingeben" + +#: src/components/ui/FieldEditor.tsx +#: src/components/ui/RowEditorSidebar.tsx +msgid "Enter value..." +msgstr "Wert eingeben..." + +#: src/components/settings/GeneralTab.tsx +msgid "entries" +msgstr "Einträge" + +#: src/components/settings/AiTab.tsx +msgid "Environment" +msgstr "Umgebung" + +#: src/components/settings/GeneralTab.tsx +msgid "ER Diagram" +msgstr "ER-Diagramm" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Error" +msgstr "Fehler" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Error" +msgstr "Fehler" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgctxt "common" +msgid "Error" +msgstr "Fehler" + +#: src/components/settings/LogsTab.tsx +msgctxt "settings" +msgid "Error" +msgstr "Fehler" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgctxt "settings" +msgid "Error Details" +msgstr "Fehlerdetails" + +#: src/components/modals/QuickNavigatorModal.tsx +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor" +msgid "Esc to close" +msgstr "Esc zum Schließen" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Est. Rows" +msgstr "Geschätzte Zeilen" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate exceeds actual rows" +msgstr "Schätzung übersteigt tatsächliche Zeilen" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate Gap" +msgstr "Größte Schätzabweichung" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Event details" +msgstr "Ereignisdetails" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Events" +msgstr "Ereignisse" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity" +msgid "Events" +msgstr "Ereignisse" + +#: src/components/modals/TriggerEditorModal.tsx +msgctxt "triggers" +msgid "Events" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Execute" +msgstr "Ausführen" + +#: src/components/ui/ResultEntryContent.tsx +#: src/pages/Editor.tsx +msgid "Execute a query to see results" +msgstr "Führe eine Abfrage aus, um Ergebnisse zu sehen" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Execute all SQL cells top to bottom" +msgstr "Alle SQL-Zellen von oben nach unten ausführen" + +#: src/components/notebook/SqlCellResult.tsx +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Executing query..." +msgstr "Abfrage wird ausgeführt..." + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Execution" +msgstr "Ausführung" + +#: src/components/notebook/CellHistoryPanel.tsx +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Execution History" +msgstr "Ausführungsverlauf" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Exit Fullscreen" +msgstr "Vollbild verlassen" + +#: src/components/modals/AiApprovalModal.tsx +msgctxt "aiApproval" +msgid "Expand" +msgstr "Vergrößern" + +#: src/components/ui/JsonInput.tsx +msgctxt "jsonInput" +msgid "Expand" +msgstr "Aufklappen" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Expand all" +msgstr "Alle ausklappen" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Expand All" +msgstr "Alle ausklappen" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Expand Cell" +msgstr "Zelle ausklappen" + +#: src/components/layout/Sidebar.tsx +msgid "Expand Explorer" +msgstr "Explorer ausklappen" + +#: src/components/ui/AiDropdownButton.tsx +msgid "Explain" +msgstr "Erklären" + +#. placeholder {0}: approval.explainError +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN failed: {0}" +msgstr "EXPLAIN fehlgeschlagen: {0}" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain focused" +msgstr "fokussierte erklären" + +#: src/components/modals/VisualExplainModal.tsx +msgid "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained." +msgstr "EXPLAIN wird nur für DML-Statements (SELECT, INSERT, UPDATE, DELETE) unterstützt. DDL-Statements wie CREATE, DROP oder ALTER können nicht erklärt werden." + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain Nth" +msgstr "n-te erklären" + +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +msgid "Explain Plan" +msgstr "Plan erklären" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Explain Plan Analysis Prompt" +msgstr "Prompt für Explain-Plan-Analyse" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Explain this query" +msgstr "Diese Abfrage erklären" + +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN unavailable for this query." +msgstr "EXPLAIN nicht verfügbar." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Explorer" +msgstr "Explorer" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Export" +msgstr "Exportieren" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as CSV" +msgstr "Als CSV exportieren" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export as HTML" +msgstr "Als HTML exportieren" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as JSON" +msgstr "Als JSON exportieren" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Export as Notebook" +msgstr "Als Notebook exportieren" + +#: src/pages/Connections.tsx +msgctxt "connections" +msgid "Export Connections" +msgstr "Verbindungen exportieren" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export CSV" +msgstr "" + +#: src/components/notebook/NotebookView.tsx +msgid "Export failed" +msgstr "" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Export failed: " +msgstr "Export fehlgeschlagen: " + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export JSON" +msgstr "" + +#: src/components/settings/LogsTab.tsx +msgid "Export Logs" +msgstr "Logs exportieren" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export Notebook" +msgstr "Notebook exportieren" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Exported to {target}" +msgstr "Exportiert nach {target}" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Exporting..." +msgstr "Wird exportiert..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Extra" +msgstr "Zusätzlich" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Fail with error" +msgstr "Fehler" + +#: src/components/notebook/RunAllSummary.tsx +msgid "failed" +msgstr "fehlgeschlagen" + +#. placeholder {0}: conn.name +#: src/pages/Connections.tsx +msgid "Failed to connect to {0}. Please check your settings or ensuring the database is running." +msgstr "Verbindung zu {0} fehlgeschlagen. Bitte prüfe deine Einstellungen oder stelle sicher, dass die Datenbank läuft." + +#: src/pages/Connections.tsx +msgid "Failed to create group" +msgstr "Erstellen der Gruppe fehlgeschlagen" + +#: src/pages/Editor.tsx +msgid "Failed to create new row: " +msgstr "Erstellen einer neuen Zeile fehlgeschlagen: " + +#: src/components/modals/CreateTableModal.tsx +msgid "Failed to create table: " +msgstr "Erstellen der Tabelle fehlgeschlagen: " + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Failed to delete column: " +msgstr "Löschen der Spalte fehlgeschlagen: " + +#: src/pages/Connections.tsx +msgid "Failed to delete group" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete index: " +msgstr "Löschen des Index fehlgeschlagen: " + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to delete SSH connection" +msgstr "Löschen der SSH-Verbindung fehlgeschlagen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete table: " +msgstr "Löschen der Tabelle fehlgeschlagen: " + +#: src/pages/Connections.tsx +msgid "Failed to disconnect from database" +msgstr "Trennen von der Datenbank fehlgeschlagen" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to drop existing trigger: " +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop trigger: " +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop view: " +msgstr "Löschen der Ansicht fehlgeschlagen: " + +#: src/pages/Connections.tsx +msgid "Failed to duplicate connection" +msgstr "Duplizieren der Verbindung fehlgeschlagen" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get routine definition: " +msgstr "Abrufen der Routinen-Definition fehlgeschlagen: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get trigger definition: " +msgstr "" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to insert row: " +msgstr "Einfügen der Zeile fehlgeschlagen: " + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to load databases. Check your credentials." +msgstr "Laden der Datenbanken fehlgeschlagen. Prüfe deine Anmeldedaten." + +#: src/components/settings/PluginsTab.tsx +msgid "Failed to load registry" +msgstr "Laden des Registry fehlgeschlagen" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to load schema: " +msgstr "Laden des Schemas fehlgeschlagen: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to load schemas" +msgstr "Schemata konnten nicht geladen werden" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to load trigger definition: " +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to load view definition: " +msgstr "Laden der Ansichtsdefinition fehlgeschlagen: " + +#: src/pages/Connections.tsx +msgid "Failed to move connection" +msgstr "" + +#: src/pages/Editor.tsx +msgid "Failed to process insertions: " +msgstr "Verarbeitung von Einfügungen fehlgeschlagen: " + +#: src/components/settings/AiTab.tsx +msgid "Failed to refresh models" +msgstr "Aktualisierung der Modelle fehlgeschlagen" + +#: src/pages/Connections.tsx +msgid "Failed to rename group" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to save connection" +msgstr "Speichern der Verbindung fehlgeschlagen" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to save SSH connection" +msgstr "Speichern der SSH-Verbindung fehlgeschlagen" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to save trigger: " +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to save view: " +msgstr "Speichern der Ansicht fehlgeschlagen: " + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Failed: " +msgstr "Fehlgeschlagen: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Favorites" +msgstr "Favoriten" + +#: src/components/modals/NewConnectionModal.tsx +msgid "File Path" +msgstr "Dateipfad" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Filter" +msgstr "Filter" + +#: src/components/settings/LogsTab.tsx +msgid "Filter by level" +msgstr "Nach Level filtern" + +#: src/components/ui/TableToolbar.tsx +msgid "Filter conditions" +msgstr "Filterbedingungen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Filter databases..." +msgstr "Datenbanken filtern..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter tables..." +msgstr "Tabellen filtern..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter triggers..." +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Filters" +msgstr "Filter" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +msgid "First row as header" +msgstr "Erste Zeile als Kopfzeile" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "FK Name (Optional)" +msgstr "FK-Name (optional)" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focus on Table" +msgstr "Auf Tabelle fokussieren" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focused on" +msgstr "Fokussiert auf" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Folder Path" +msgstr "Ordnerpfad" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Family" +msgstr "Schriftfamilie" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Size" +msgstr "Schriftgröße" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill" +msgstr "Zwangsweise beenden" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill Plugin Process" +msgstr "Plugin-Prozess zwangsweise beenden" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "foreign keys" +msgstr "Fremdschlüssel" + +#: src/components/ui/JsonInput.tsx +msgid "Format" +msgstr "Formatieren" + +#: src/components/ui/FilterRow.tsx +msgid "from" +msgstr "von" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dependencies" +msgstr "Frontend-Abhängigkeiten" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dev Dependencies" +msgstr "Frontend-Entwicklungsabhängigkeiten" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Fullscreen" +msgstr "Vollbild" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Functions" +msgstr "Funktionen" + +#: src/pages/Settings.tsx +msgid "General" +msgstr "Allgemein" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgctxt "editor" +msgid "General" +msgstr "Allgemein" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "General" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "General" +msgstr "Allgemein" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generate name with AI" +msgstr "Namen mit KI generieren" + +#: src/components/notebook/NotebookOutline.tsx +msgid "Generate names for unnamed cells with AI" +msgstr "Namen für unbenannte Zellen mit KI generieren" + +#: src/components/ui/AiDropdownButton.tsx +msgctxt "ai" +msgid "Generate SQL" +msgstr "SQL generieren" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Generate SQL" +msgstr "SQL generieren" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Generate SQL templates" +msgstr "SQL-Vorlagen generieren" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Generated SQL Preview" +msgstr "" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generated SQL: {tableName}" +msgstr "Generiertes SQL: {tableName}" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generating name..." +msgstr "Name wird generiert..." + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generating SQL..." +msgstr "SQL wird generiert..." + +#: src/components/modals/WhatsNewModal.tsx +msgid "Got it" +msgstr "Verstanden" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Graph" +msgstr "Graph" + +#: src/pages/Connections.tsx +msgid "Grid view" +msgstr "Rasteransicht" + +#: src/pages/Connections.tsx +msgid "Group name" +msgstr "Gruppenname" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Guided" +msgstr "" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Hash Cond." +msgstr "Hash-Bedingung" + +#: src/components/modals/CommunityModal.tsx +msgid "Help tabularis grow" +msgstr "Hilf tabularis zu wachsen" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Hide overview" +msgstr "Übersicht ausblenden" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Highest Cost" +msgstr "Höchste Kosten" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "History" +msgstr "Verlauf" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Horizontal" +msgstr "Horizontal" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Host" +msgstr "Host" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "How long the MCP subprocess will wait for the user's decision before failing the request." +msgstr "Wie lange gewartet wird, bevor abgebrochen wird." + +#: src/components/settings/LogsTab.tsx +msgid "How many logs to keep in memory (1-10000)" +msgstr "Wie viele Logs im Speicher behalten werden sollen (1-10000)" + +#: src/components/settings/GeneralTab.tsx +msgid "How often to check if active connections are still alive. Set to 0 to disable." +msgstr "Wie oft geprüft werden soll, ob aktive Verbindungen noch erreichbar sind. Setze 0, um die Prüfung zu deaktivieren." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Icon" +msgstr "Symbol" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "If exists" +msgstr "Falls vorhanden" + +#: src/utils/explainPlan.ts +msgid "If timing is missing, the server likely returned an estimate-only plan." +msgstr "Fehlen Zeitwerte, hat der Server wahrscheinlich nur einen geschätzten Plan geliefert." + +#: src/components/settings/InfoTab.tsx +msgid "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo." +msgstr "Wenn dir tabularis gefällt und du mehr Funktionen sehen möchtest, unterstütze das Projekt durch Code-Beiträge, Bug-Reports oder einen Stern auf GitHub." + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Image" +msgstr "Bild" + +#: src/components/ui/BlobInput.tsx +msgid "Image preview" +msgstr "Bildvorschau" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import cancelled" +msgstr "Import abgebrochen" + +#: src/pages/Connections.tsx +msgid "Import Connections" +msgstr "Verbindungen importieren" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import Database" +msgstr "Datenbank importieren" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed" +msgstr "Import fehlgeschlagen" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed: " +msgstr "Import fehlgeschlagen: " + +#: src/i18n/registries/shortcutLabels.ts +msgid "Import from Clipboard" +msgstr "Aus Zwischenablage importieren" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Import from Clipboard" +msgstr "Aus Zwischenablage importieren" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Import from Clipboard..." +msgstr "Aus Zwischenablage importieren..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Import Notebook" +msgstr "Notebook importieren" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Importing from" +msgstr "Importiere aus" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Importing..." +msgstr "Importiert..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Index Cond." +msgstr "Index-Bedingung" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index Name" +msgstr "Indexname" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index name is required" +msgstr "Indexname ist erforderlich" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "indexes" +msgstr "Indizes" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Info" +msgstr "Info" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Initial version" +msgstr "Erste Version" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Inline" +msgstr "Inline" + +#: src/components/modals/NewRowModal.tsx +msgid "Insert" +msgstr "Einfügen" + +#: src/components/ui/DataGrid.tsx +msgid "Insert Current Timestamp" +msgstr "Aktuellen Zeitstempel einfügen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Insert to Editor" +msgstr "In Editor einfügen" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Inspect structure" +msgstr "Struktur anzeigen" + +#: src/components/settings/PluginsTab.tsx +msgid "Install" +msgstr "Installieren" + +#: src/pages/TaskManagerPage.tsx +msgid "Install and enable plugins to see them here" +msgstr "Installiere und aktiviere Plugins, um sie hier zu sehen" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Install Config" +msgstr "Konfiguration installieren" + +#: src/components/settings/PluginsTab.tsx +msgid "Install extensions, manage plugin drivers, and keep runtime settings under control." +msgstr "Installiere Erweiterungen, verwalte Plugin-Treiber und behalte Laufzeiteinstellungen im Blick." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installation Failed" +msgstr "Installation fehlgeschlagen" + +#: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings" +msgid "Installation Failed" +msgstr "Installation fehlgeschlagen" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installed" +msgstr "Installiert" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Installed" +msgstr "Installiert" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Installing..." +msgstr "Wird installiert..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language." +msgstr "Anweisungen für KI-gestützte Abfrageerklärungen. Verwende {LANGUAGE} als Platzhalter für die Ausgabesprache." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure." +msgstr "Anweisungen für KI-gestützte SQL-Generierung. Verwende {SCHEMA} als Platzhalter für die Datenbankstruktur." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Interpreter" +msgstr "Interpreter" + +#: src/components/ui/JsonInput.tsx +msgid "Invalid JSON" +msgstr "Ungültiges JSON" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Invalid notebook file format" +msgstr "Ungültiges Notebook-Dateiformat" + +#: src/components/notebook/ParamsPanel.tsx +msgid "Invalid parameter name" +msgstr "Ungültiger Parametername" + +#: src/components/modals/CommunityModal.tsx +msgid "Join Discord" +msgstr "Discord beitreten" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Join now" +msgstr "Jetzt beitreten" + +#: src/components/modals/CommunityModal.tsx +msgid "Join the Community" +msgstr "Der Community beitreten" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Join Type" +msgstr "Join-Typ" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "Schlüssel" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Key file" +msgstr "Schlüsseldatei" + +#: src/components/settings/ShortcutsTab.tsx +#: src/pages/Settings.tsx +msgid "Keyboard Shortcuts" +msgstr "Tastenkürzel" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "keys" +msgstr "Schlüssel" + +#: src/pages/TaskManagerPage.tsx +msgid "Kill" +msgstr "Beenden" + +#: src/pages/TaskManagerPage.tsx +msgid "Killing" +msgstr "Das Beenden von" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Kind" +msgstr "Typ" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Kubernetes Connections" +msgstr "Kubernetes-Verbindungen" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Kubernetes context is required" +msgstr "Der Kubernetes-Kontext ist erforderlich" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Kubernetes is not available for this driver." +msgstr "Kubernetes ist für diesen Treiber nicht verfügbar." + +#: src/components/notebook/CellChart.tsx +msgid "Label" +msgstr "Beschriftung" + +#: src/components/settings/LocalizationTab.tsx +msgid "Language" +msgstr "Sprache" + +#: src/utils/explainPlan.ts +msgid "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well." +msgstr "Große Schätzabweichungen deuten meist auf veraltete Statistiken oder Prädikate hin, die der Planner schlecht modellieren kann." + +#: src/components/modals/CreateTableModal.tsx +msgid "Len" +msgstr "Länge" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Length" +msgstr "Länge" + +#: src/components/settings/LogsTab.tsx +msgid "Level" +msgstr "Level" + +#: src/components/settings/GeneralTab.tsx +msgid "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended)." +msgstr "Begrenzt die Anzahl der pro Abfrage geladenen Zeilen, um Performance-Probleme zu vermeiden. Setze den Wert auf 0, um die Begrenzung zu deaktivieren (nicht empfohlen)." + +#: src/components/settings/AppearanceTab.tsx +msgid "Line Height" +msgstr "Zeilenhöhe" + +#: src/pages/Connections.tsx +msgid "List view" +msgstr "Listenansicht" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Load Databases" +msgstr "Datenbanken laden" + +#: src/pages/Editor.tsx +msgid "Load row count" +msgstr "Zeilenanzahl laden" + +#: src/pages/VisualExplainPage.tsx +msgid "Loading explain plan…" +msgstr "Ausführungsplan wird geladen…" + +#: src/components/settings/PluginsTab.tsx +msgid "Loading plugin registry..." +msgstr "Plugin-Registry wird geladen..." + +#: src/pages/TaskManagerPage.tsx +msgid "Loading processes…" +msgstr "Prozesse werden geladen…" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarRoutineItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "Schema wird geladen..." + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Loading trigger definition..." +msgstr "" + +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Loading..." +msgstr "Wird geladen..." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Local Column" +msgstr "Lokale Spalte" + +#: src/components/settings/LocalizationTab.tsx +#: src/pages/Settings.tsx +msgid "Localization" +msgstr "Lokalisierung" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Lock query" +msgstr "Sperren" + +#: src/components/settings/LogsTab.tsx +msgid "Log Settings" +msgstr "Log-Einstellungen" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Logs" +msgstr "Logs" + +#: src/components/settings/LogsTab.tsx +msgid "Logs exported to clipboard" +msgstr "Logs in die Zwischenablage exportiert" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Loops" +msgstr "Schleifen" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Make all MCP queries read-only" +msgstr "Alle MCP-Abfragen nur lesen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage" +msgstr "Verwalten" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Manage Databases" +msgstr "Datenbanken verwalten" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage SSH Connections" +msgstr "SSH-Verbindungen verwalten" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL COMMAND" +msgstr "MANUELLER BEFEHL" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL CONFIGURATION" +msgstr "MANUELLE KONFIGURATION" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Markdown" +msgstr "Markdown" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Max Allowed Packet" +msgstr "Max Allowed Packet" + +#: src/components/settings/GeneralTab.tsx +msgid "Max History Entries" +msgstr "Maximale Verlaufseinträge" + +#: src/components/settings/LogsTab.tsx +msgid "Max Log Entries" +msgstr "Maximale Log-Einträge" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Maximize" +msgstr "Maximieren" + +#: src/components/settings/GeneralTab.tsx +msgid "Maximum number of query history entries stored per connection." +msgstr "Maximale Anzahl an Abfrageverlaufseinträgen pro Verbindung." + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Maximum packet size used by the MySQL connector." +msgstr "Maximale Paketgröße, die vom MySQL-Connector verwendet wird." + +#: src/components/modals/CommunityModal.tsx +msgid "Maybe later" +msgstr "Vielleicht später" + +#: src/components/layout/Sidebar.tsx +msgid "MCP Server" +msgstr "MCP-Server" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MCP Server Integration" +msgstr "MCP-Server-Integration" + +#: src/components/settings/LogsTab.tsx +msgid "Message" +msgstr "Nachricht" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Minimize" +msgstr "Minimieren" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Mixed types detected, defaulted to TEXT" +msgstr "Gemischte Typen erkannt, Standard TEXT" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Mode" +msgstr "Modus" + +#. placeholder {0}: settings.aiModel +#. placeholder {1}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Model <0>{0} not found in <1>{1}. It may not work correctly." +msgstr "Modell {0} wurde in {1} nicht gefunden. Es funktioniert möglicherweise nicht korrekt." + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Modify Column" +msgstr "Spalte ändern" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgctxt "sidebar" +msgid "Modify Column" +msgstr "Spalte ändern" + +#: src/components/settings/InfoTab.tsx +msgid "Monitor plugin processes, CPU, RAM and disk usage in real time" +msgstr "Überwache Plugin-Prozesse, CPU, RAM und Datenträgernutzung in Echtzeit" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Down" +msgstr "Nach unten" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Up" +msgstr "Nach oben" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "My K8s cluster" +msgstr "Mein K8s-Cluster" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "My SSH Server" +msgstr "Mein SSH-Server" + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants." +msgstr "MySQL und MariaDB liefern echte Metriken nur bei unterstützten EXPLAIN ANALYZE- oder ANALYZE FORMAT-Varianten." + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version." +msgstr "MySQL und MariaDB können je nach Serverversion auf EXPLAIN FORMAT=JSON oder tabellarisches EXPLAIN zurückfallen." + +#: src/components/notebook/ParamsPanel.tsx +msgid "name" +msgstr "name" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/SchemaModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Name" +msgstr "Name" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Name is required" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Namespace" +msgstr "Namespace" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Namespace is required" +msgstr "Der Namespace ist erforderlich" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Navigation" +msgstr "Navigation" + +#: src/components/ui/DataGrid.tsx +msgid "NEW" +msgstr "NEU" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New connection" +msgstr "Neue Verbindung" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "New console" +msgstr "Neue Konsole" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/pages/Editor.tsx +msgid "New Console" +msgstr "Neue Konsole" + +#: src/components/modals/WhatsNewModal.tsx +msgid "New Features" +msgstr "Neue Funktionen" + +#: src/pages/Connections.tsx +msgid "New Group" +msgstr "Neue Gruppe" + +#: src/pages/Editor.tsx +msgid "New Notebook" +msgstr "Neues Notebook" + +#: src/components/modals/NewRowModal.tsx +#: src/pages/Editor.tsx +msgid "New Row" +msgstr "Neue Zeile" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New tab" +msgstr "Neuer Tab" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "New table created" +msgstr "Neue Tabelle erstellt" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "New Version Available" +msgstr "Neue Version verfügbar" + +#: src/pages/Editor.tsx +msgid "New Visual Query" +msgstr "Neue visuelle Abfrage" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Next page" +msgstr "Nächste Seite" + +#: src/components/modals/CreateTableModal.tsx +msgid "NN" +msgstr "NN" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "NEIN" + +#: src/pages/Connections.tsx +msgid "No active connections" +msgstr "Keine aktiven Verbindungen" + +#: src/components/ui/TableToolbar.tsx +msgid "no active filters" +msgstr "keine aktiven Filter" + +#: src/pages/Editor.tsx +msgid "No active session. Please select a connection." +msgstr "Keine aktive Sitzung. Bitte wähle eine Verbindung aus." + +#: src/components/ui/BlobInput.tsx +msgid "No BLOB data" +msgstr "Keine BLOB-Daten" + +#: src/pages/TaskManagerPage.tsx +msgid "No child processes" +msgstr "Keine Kindprozesse" + +#: src/pages/SchemaDiagramPage.tsx +msgid "No Connection ID" +msgstr "Keine Verbindungs-ID" + +#: src/pages/Connections.tsx +msgid "No connections match \"{search}\"" +msgstr "Keine Verbindung entspricht \"{search}\"" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No contexts found (is kubectl installed?)" +msgstr "Keine Kontexte gefunden (ist kubectl installiert?)" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "No data found in clipboard" +msgstr "Keine Daten in der Zwischenablage" + +#: src/components/ui/DataGrid.tsx +msgid "No data to display" +msgstr "Keine Daten zum Anzeigen" + +#: src/components/modals/QueryModal.tsx +msgid "No database" +msgstr "Keine Datenbank" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No databases found" +msgstr "Keine Datenbanken gefunden" + +#: src/components/notebook/CellHistoryPanel.tsx +msgid "No execution history yet" +msgstr "Noch kein Ausführungsverlauf" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No favorites match your search" +msgstr "Keine Favoriten entsprechen deiner Suche" + +#: src/pages/VisualExplainPage.tsx +msgid "No file loaded" +msgstr "Keine Datei geladen" + +#: src/components/ui/TableToolbar.tsx +msgid "No filters —" +msgstr "Keine Filter —" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No general settings available for this driver." +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No icons match." +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "No Kubernetes connections saved. Click \"Add\" to create one." +msgstr "Keine Kubernetes-Verbindungen gespeichert. Klicke auf „Hinzufügen“, um eine zu erstellen." + +#: src/components/settings/LogsTab.tsx +msgid "No logs available" +msgstr "Keine Logs verfügbar" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "No major issues detected in the current plan summary." +msgstr "In der aktuellen Planzusammenfassung wurden keine größeren Probleme erkannt." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "No matching elements found" +msgstr "Keine passenden Elemente gefunden" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No MCP activity yet." +msgstr "Noch keine MCP-Aktivität." + +#: src/components/settings/AiTab.tsx +msgid "No models found" +msgstr "Keine Modelle gefunden" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No notebooks match your search." +msgstr "Keine Notebooks entsprechen der Suche." + +#: src/pages/Editor.tsx +msgid "No open tabs for this connection." +msgstr "Keine geöffneten Tabs für diese Verbindung." + +#: src/components/modals/NewRowModal.tsx +msgid "No options found" +msgstr "Keine Optionen gefunden" + +#: src/pages/TaskManagerPage.tsx +msgid "No plugin processes are running" +msgstr "Es laufen keine Plugin-Prozesse" + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins available in the registry." +msgstr "Keine Plugins im Registry verfügbar." + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins match your search." +msgstr "Keine Plugins entsprechen der Suche." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No preview" +msgstr "" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No queries match your search" +msgstr "Keine Abfragen entsprechen deiner Suche" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No query history" +msgstr "Kein Abfrageverlauf" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "No results found" +msgstr "Keine Ergebnisse gefunden" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No routines found" +msgstr "Keine Routinen gefunden" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No saved connections — create one below" +msgstr "Keine gespeicherten Verbindungen — erstelle unten eine" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No saved notebooks yet." +msgstr "Noch keine gespeicherten Notebooks." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No saved queries" +msgstr "Keine gespeicherten Abfragen" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No sessions match the current filters." +msgstr "Keine Sitzung entspricht den Filtern." + +#: src/components/modals/NewConnectionModal.tsx +msgid "No SSH connections available" +msgstr "Keine SSH-Verbindungen verfügbar" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "No SSH connections configured yet" +msgstr "Noch keine SSH-Verbindungen konfiguriert" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables found" +msgstr "Keine Tabellen gefunden" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables match" +msgstr "Keine passende Tabelle" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers found" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers match your filter" +msgstr "" + +#: src/pages/Editor.tsx +msgid "No valid queries found" +msgstr "Keine gültigen Abfragen gefunden" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No views found" +msgstr "Keine Ansichten gefunden" + +#: src/components/settings/PluginsTab.tsx +msgid "Not available for your platform" +msgstr "Für deine Plattform nicht verfügbar" + +#: src/components/settings/AiTab.tsx +msgid "Not configured" +msgstr "Nicht konfiguriert" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Not Null" +msgstr "Nicht Null" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Notebook Cell Name Prompt" +msgstr "Notebook-Zellnamen-Prompt" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook exported successfully" +msgstr "Notebook erfolgreich exportiert" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook imported successfully" +msgstr "Notebook erfolgreich importiert" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Notebook name" +msgstr "Notebook-Name" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Notebooks" +msgstr "Notebooks" + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "npm ecosystem" +msgstr "npm-Ökosystem" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "Nullable" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Objects" +msgstr "Objekte" + +#. placeholder {0}: sessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "of {0}" +msgstr "von {0}" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Off" +msgstr "Aus" + +#: src/components/modals/AlertModal.tsx +#: src/components/modals/ConfirmModal.tsx +msgid "OK" +msgstr "OK" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Older" +msgstr "Älter" + +#: src/utils/explainPlan.ts +msgid "Older servers may fall back to estimated plans with fewer metrics." +msgstr "Ältere Server können auf geschätzte Pläne mit weniger Metriken zurückfallen." + +#: src/components/settings/PluginsTab.tsx +msgid "Older versions" +msgstr "Ältere Versionen" + +#. placeholder {0}: ( settings.aiCustomModels?.["ollama"] || availableModels["ollama"] || [] ).length +#: src/components/settings/AiTab.tsx +msgid "Ollama connected ({0} models found)" +msgstr "Ollama verbunden ({0} Modelle gefunden)" + +#. placeholder {0}: settings.aiOllamaPort || 11434 +#: src/components/settings/AiTab.tsx +msgid "Ollama not detected on port {0}. Is it running?" +msgstr "Ollama wurde auf Port {0} nicht erkannt. Läuft es?" + +#: src/components/settings/AiTab.tsx +msgid "Ollama Port" +msgstr "Ollama-Port" + +#. placeholder {0}: trigger.table_name +#: src/components/layout/sidebar/SidebarTriggerItem.tsx +msgid "on {0}" +msgstr "" + +#. placeholder {0}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "On {0} — review and decide before it executes." +msgstr "Auf {0} — vor Ausführung prüfen." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Delete" +msgstr "Bei Löschen" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Update" +msgstr "Bei Aktualisierung" + +#: src/components/connections/StatusBadge.tsx +msgctxt "connections" +msgid "Open" +msgstr "Öffnen" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Open connections" +msgstr "Verbindungen öffnen" + +#: src/pages/VisualExplainPage.tsx +msgid "Open file" +msgstr "Datei öffnen" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Open in Editor" +msgstr "Im Editor öffnen" + +#: src/components/ui/DataGrid.tsx +msgid "Open in JSON Editor" +msgstr "Im JSON-Editor öffnen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Open in New Tab" +msgstr "In neuem Tab öffnen" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Open in Visual Explain" +msgstr "In Visual Explain öffnen" + +#: src/components/ui/JsonCell.tsx +msgid "Open JSON viewer" +msgstr "JSON-Viewer öffnen" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Open package page" +msgstr "Paketseite öffnen" + +#. placeholder {0}: fkForContextPreview.ref_table +#: src/components/ui/DataGrid.tsx +msgid "Open referenced row in {0}" +msgstr "Referenzierte Zeile in {0} öffnen" + +#: src/components/ui/DataGrid.tsx +msgid "Open Sidebar Editor" +msgstr "Seitenleisten-Editor öffnen" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Open Source Libraries" +msgstr "Open-Source-Bibliotheken" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Open Tabs" +msgstr "Geöffnete Tabs" + +#: src/components/settings/InfoTab.tsx +msgid "Open Task Manager" +msgstr "Task-Manager öffnen" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +msgid "Operation" +msgstr "Operation" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default." +msgstr "Optional. Gib die ausführbare Datei an, die zum Starten dieses Plugins verwendet wird (z. B. python3 unter macOS/Linux, python oder ein vollständiger Pfad unter Windows). Leer lassen, um den Standard zu verwenden." + +#: src/components/notebook/NotebookOutline.tsx +msgid "Outline" +msgstr "Gliederung" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Overview" +msgstr "Übersicht" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +#: src/pages/Editor.tsx +msgid "Page {0}" +msgstr "Seite {0}" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {1}: Math.ceil( activeTab.result.pagination.total_rows / activeTab.result.pagination.page_size, ) +#: src/pages/Editor.tsx +msgid "Page {0} of {1}" +msgstr "Seite {0} von {1}" + +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +msgid "Page {0} of {totalPages}" +msgstr "Seite {0} von {totalPages}" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Parallel Execution (Run All)" +msgstr "Parallele Ausführung (Alle ausführen)" + +#: src/components/notebook/ParamsPanel.tsx +#: src/pages/Editor.tsx +msgid "Parameters" +msgstr "Parameter" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password" +msgstr "Passwort" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password saved in system keychain" +msgstr "Passwort im System-Keychain gespeichert" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Paste structured data and preview the schema before importing" +msgstr "Strukturierte Daten einfügen und Schema vor dem Import prüfen" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database." +msgstr "Pausiert Schreibvorgänge (oder jede Abfrage) und fragt den Nutzer vor der Ausführung." + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Pending approval" +msgstr "Ausstehend" + +#: src/pages/TaskManagerPage.tsx +msgid "PID" +msgstr "PID" + +#: src/components/settings/GeneralTab.tsx +msgid "Ping Interval" +msgstr "Ping-Intervall" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Pipe (|)" +msgstr "Pipe (|)" + +#: src/components/modals/CreateTableModal.tsx +msgid "PK" +msgstr "PK" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Planning" +msgstr "Planung" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Please fill in all required fields" +msgstr "Bitte fülle alle erforderlichen Felder aus" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least one table" +msgstr "Bitte wähle mindestens eine Tabelle" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least Structure or Data" +msgstr "Bitte wähle mindestens Struktur oder Daten" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin" +msgstr "Plugin" + +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Center" +msgstr "Plugin-Center" + +#: src/components/connections/ActionButtons.tsx +#: src/components/connections/ConnectionCard.tsx +#: src/components/connections/ConnectionListItem.tsx +msgid "Plugin disabled" +msgstr "Plugin deaktiviert" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Plugin Failed to Start" +msgstr "Plugin konnte nicht gestartet werden" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin Processes" +msgstr "Plugin-Prozesse" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin processes & system resources" +msgstr "Plugin-Prozesse und Systemressourcen" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Settings" +msgstr "Plugin-Einstellungen" + +#: src/pages/Settings.tsx +msgid "Plugins" +msgstr "Plugins" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "PNG, JPG, WebP or SVG · max 512 KB" +msgstr "PNG, JPG, WebP oder SVG · max. 512 KB" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Pod" +msgstr "Pod" + +#: src/components/ui/GeometryInput.tsx +msgid "POINT(30 40)" +msgstr "POINT(30 40)" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Port" +msgstr "Port" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Port must be between 1 and 65535" +msgstr "Der Port muss zwischen 1 und 65535 liegen" + +#: src/utils/explainPlan.ts +msgid "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available." +msgstr "PostgreSQL ANALYZE enthält tatsächliche Zeilen, Laufzeit, Schleifen und Buffer-Zähler, sofern verfügbar." + +#: src/utils/explainPlan.ts +msgid "PostgreSQL without ANALYZE shows planner estimates only." +msgstr "PostgreSQL ohne ANALYZE zeigt nur Schätzungen des Planners." + +#: src/components/modals/AiApprovalModal.tsx +msgid "Pre-flight execution plan" +msgstr "Vorab-Ausführungsplan" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pre-flight EXPLAIN" +msgstr "Vorab-EXPLAIN" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Prefer" +msgstr "Bevorzugen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Preferred" +msgstr "" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Press key combination..." +msgstr "Tastenkombination drücken..." + +#: src/pages/Editor.tsx +msgid "Press Run (Ctrl/Command+F5) to load table data" +msgstr "Drücke Ausführen (Ctrl/Command+F5), um Tabellendaten zu laden" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Preview" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "Preview" +msgstr "Vorschau" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Preview" +msgstr "Vorschau" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Preview failed: " +msgstr "Vorschau fehlgeschlagen: " + +#: src/components/ui/BlobInput.tsx +msgid "Preview only - full data not loaded" +msgstr "Nur Vorschau - vollständige Daten nicht geladen" + +#: src/components/ui/DataGrid.tsx +msgid "Preview related record" +msgstr "Verknüpften Datensatz anzeigen" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Previous page" +msgstr "Vorherige Seite" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Primary Key" +msgstr "Primärschlüssel" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Procedures" +msgstr "Prozeduren" + +#: src/components/settings/InfoTab.tsx +msgid "Project Status" +msgstr "Projektstatus" + +#: src/components/settings/AiTab.tsx +msgid "Prompt Customization" +msgstr "Prompt-Anpassung" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Provide your connection name" +msgstr "Gib deinen Verbindungsnamen an" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Queries" +msgstr "Abfragen" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Query" +msgstr "Abfrage" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Explanation" +msgstr "Abfrageerklärung" + +#: src/pages/Editor.tsx +msgid "Query failed." +msgstr "Abfrage fehlgeschlagen." + +#: src/components/settings/GeneralTab.tsx +msgid "Query History" +msgstr "Abfrageverlauf" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Query history was reset" +msgstr "Abfrageverlauf zurückgesetzt" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Query Parameters" +msgstr "Abfrageparameter" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Tab Name Prompt" +msgstr "Prompt für Abfrage-Tabnamen" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Quick connection test" +msgstr "Schneller Verbindungstest" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Quick Navigator" +msgstr "Schnellnavigation" + +#: src/pages/TaskManagerPage.tsx +msgid "RAM" +msgstr "RAM" + +#: src/components/ui/JsonInput.tsx +msgid "Raw" +msgstr "Rohtext" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Raw Output" +msgstr "Rohausgabe" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Raw SQL" +msgstr "" + +#: src/components/modals/VisualExplainModal.tsx +msgid "Re-run" +msgstr "Erneut ausführen" + +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Re-run query" +msgstr "Abfrage erneut ausführen" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Read more" +msgstr "Mehr lesen" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only connections" +msgstr "Nur-Lese-Verbindungen" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only mode" +msgstr "Nur-Lese-Modus" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Reason (optional)" +msgstr "Grund (optional)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Recreate Trigger" +msgstr "" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Redo" +msgstr "Wiederholen" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Column" +msgstr "Referenzierte Spalte" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Table" +msgstr "Referenzierte Tabelle" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/LogsTab.tsx +#: src/components/settings/PluginsTab.tsx +#: src/pages/SchemaDiagramPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Refresh" +msgstr "Aktualisieren" + +#: src/components/settings/AiTab.tsx +msgid "Refresh Models" +msgstr "Modelle aktualisieren" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Routines" +msgstr "Routinen aktualisieren" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Refresh Tables" +msgstr "Tabellen aktualisieren" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Triggers" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Views" +msgstr "Ansichten aktualisieren" + +#: src/components/settings/PluginsTab.tsx +msgid "Registry" +msgstr "Registry" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Release Notes" +msgstr "Release Notes" + +#: src/pages/VisualExplainPage.tsx +msgid "Reload" +msgstr "Neu laden" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Remind Me Later" +msgstr "Später erinnern" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Remove" +msgstr "Entfernen" + +#: src/components/modals/PluginRemoveModal.tsx +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Remove" +msgstr "Entfernen" + +#: src/components/ui/FilterRow.tsx +msgid "Remove filter" +msgstr "Filter entfernen" + +#: src/pages/Connections.tsx +msgid "Remove from Group" +msgstr "Aus Gruppe entfernen" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Remove Plugin" +msgstr "Plugin entfernen" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Connections.tsx +#: src/pages/Editor.tsx +msgid "Rename" +msgstr "Umbenennen" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Renamed cell {n}" +msgstr "Zelle {n} umbenannt" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Reordered cells" +msgstr "Zellen neu angeordnet" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Replace table" +msgstr "Tabelle ersetzen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Require" +msgstr "Erforderlich" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Required" +msgstr "Erforderlich" + +#. placeholder {0}: availableTypes.find((t) => t.name === form.type)?.requires_extension +#. placeholder {0}: exts.join(', ') +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "Requires extension: {0}" +msgstr "Erfordert Erweiterung: {0}" + +#: src/components/settings/PluginsTab.tsx +msgid "Requires Tabularis ≥ {minVersion}" +msgstr "Erfordert Tabularis ≥ {minVersion}" + +#: src/components/settings/AiTab.tsx +msgid "Reset" +msgstr "Zurücksetzen" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Reset to default" +msgstr "Auf Standard zurücksetzen" + +#: src/components/settings/AiTab.tsx +msgid "Reset to Default" +msgstr "Auf Standard zurücksetzen" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Reset to driver default" +msgstr "Auf Treiber-Standard zurücksetzen" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Resize sidebar" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Name" +msgstr "Ressourcenname" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource name is required" +msgstr "Der Ressourcenname ist erforderlich" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Type" +msgstr "Ressourcentyp" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource type must be \"service\" or \"pod\"" +msgstr "Der Ressourcentyp muss \"service\" oder \"pod\" sein" + +#: src/pages/TaskManagerPage.tsx +msgid "Restart" +msgstr "Neu starten" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Restart Now" +msgstr "Jetzt neu starten" + +#: src/components/settings/GeneralTab.tsx +msgid "Result Page Size (Limit)" +msgstr "Ergebnisse pro Seite (Limit)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Results" +msgstr "Ergebnisse" + +#: src/components/ui/DataGrid.tsx +msgid "Revert Selected" +msgstr "Auswahl zurücksetzen" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Review & adjust" +msgstr "Überprüfen & anpassen" + +#: src/pages/Editor.tsx +msgid "Rollback Changes" +msgstr "Änderungen zurückrollen" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "routine" +msgstr "Routine" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Routines" +msgstr "Routinen" + +#. placeholder {0}: rowIndex + 1 +#: src/components/ui/RowEditorSidebar.tsx +msgid "Row #{0}" +msgstr "Zeile #{0}" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "rows" +msgstr "Zeilen" + +#: src/components/settings/GeneralTab.tsx +msgctxt "settings" +msgid "rows" +msgstr "Zeilen" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Rows Processed" +msgstr "Verarbeitete Zeilen" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Rows returned" +msgstr "Zeilen zurück" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Rows will be added to an existing table" +msgstr "Zeilen werden an eine bestehende Tabelle angehängt" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Run" +msgstr "Ausführen" + +#: src/components/modals/QuerySelectionModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgctxt "editor" +msgid "Run All" +msgstr "Alle ausführen" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run All Cells" +msgstr "Alle Zellen ausführen" + +#: src/components/notebook/RunAllSummary.tsx +msgid "Run All Complete" +msgstr "Alle Ausführungen abgeschlossen" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan." +msgstr "Führt vor dem Modal ein EXPLAIN aus, damit der Plan sichtbar ist." + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Run Cell" +msgstr "Zelle ausführen" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Run in console" +msgstr "In Konsole ausführen" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Run Preview" +msgstr "Vorschau ausführen" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Run queries" +msgstr "Ausgeführte Abfragen" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query" +msgstr "Abfrage ausführen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Run Query" +msgstr "Abfrage ausführen" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query (in editor)" +msgstr "Abfrage ausführen (im Editor)" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Run SELECT query" +msgstr "SELECT-Abfrage ausführen" + +#. placeholder {0}: selectedIndices.size +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run Selected ({0})" +msgstr "Ausgewählte ausführen ({0})" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "Run SQL File..." +msgstr "SQL-Datei ausführen..." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Run this command in your terminal, then restart Claude Code." +msgstr "Führe diesen Befehl im Terminal aus und starte anschließend Claude Code neu." + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run this query" +msgstr "Diese Abfrage ausführen" + +#: src/i18n/registries/taskManagerProcessStatus.ts +#: src/pages/TaskManagerPage.tsx +msgid "running" +msgstr "läuft" + +#: src/components/explain/VisualExplainView.tsx +msgid "Running EXPLAIN..." +msgstr "EXPLAIN wird ausgeführt..." + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Build and Test" +msgstr "Rust-Build und Tests" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Dependencies" +msgstr "Rust-Abhängigkeiten" + +#: src/pages/McpPage.tsx +msgid "Safety" +msgstr "Sicherheit" + +#: src/components/settings/ThemePicker.tsx +msgid "Same as App" +msgstr "Wie App" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Sample values" +msgstr "Beispielwerte" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/Connections.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Save" +msgstr "Speichern" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Save & Restart" +msgstr "Speichern und neu starten" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Save Changes" +msgstr "Änderungen speichern" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Save passwords in Keychain" +msgstr "Passwörter im Keychain speichern" + +#: src/components/settings/AiTab.tsx +msgid "Save Prompt" +msgstr "Prompt speichern" + +#: src/pages/Editor.tsx +msgid "Save Query" +msgstr "Abfrage speichern" + +#: src/pages/Editor.tsx +msgid "Save this query" +msgstr "Diese Abfrage speichern" + +#: src/components/settings/PluginSettingsPage.tsx +msgid "Saved" +msgstr "Gespeichert" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Saved Connection" +msgstr "Gespeicherte Verbindung" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Scan-heavy operations detected" +msgstr "Scan-lastige Operationen erkannt" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "Schema: {tableName}" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Schemas" +msgstr "Schemata" + +#: src/components/ui/JsonTreeView.tsx +msgid "Search" +msgstr "Suchen" + +#: src/pages/Connections.tsx +msgid "Search connections..." +msgstr "Verbindungen suchen..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search emoji…" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Search favorites..." +msgstr "Favoriten durchsuchen..." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Search history..." +msgstr "Verlauf durchsuchen..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search icons…" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Search models..." +msgstr "Modelle suchen..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Search notebooks" +msgstr "Notebooks suchen" + +#: src/components/settings/PluginsTab.tsx +msgid "Search plugins…" +msgstr "Plugins suchen…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Search query…" +msgstr "In Abfrage suchen…" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Search session, client, connection…" +msgstr "Suche Sitzung, Client, Verbindung…" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Search tables, views, routines, triggers..." +msgstr "Tabellen, Views, Routinen, Trigger suchen..." + +#: src/components/settings/LocalizationTab.tsx +msgid "Search timezones..." +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Search..." +msgstr "Suchen..." + +#: src/components/modals/mcp/McpSafetySection.tsx +#: src/components/settings/GeneralTab.tsx +msgid "seconds" +msgstr "Sekunden" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Select" +msgstr "Lesen" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select [fields]" +msgstr "SELECT [Felder]" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select *" +msgstr "SELECT *" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a context first" +msgstr "Zuerst einen Kontext auswählen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a database" +msgstr "Datenbank auswählen" + +#: src/pages/VisualExplainPage.tsx +msgid "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it." +msgstr "Wählen Sie eine Datei mit einem EXPLAIN-Plan (PostgreSQL JSON- oder Textformat), um ihn zu visualisieren." + +#: src/components/settings/AiTab.tsx +msgid "Select a model" +msgstr "Modell auswählen" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Select a node to view details" +msgstr "Wähle einen Knoten aus, um Details zu sehen" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Select a table..." +msgstr "Tabelle auswählen..." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Select All" +msgstr "Alle auswählen" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Select All" +msgstr "Alle auswählen" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Select All" +msgstr "Alle auswählen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select at least one database" +msgstr "Wähle mindestens eine Datenbank aus" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select context/namespace/type first" +msgstr "Zuerst Kontext/Namespace/Typ auswählen" + +#: src/components/ui/FilterRow.tsx +msgid "Select for Apply All" +msgstr "Für \"Alle anwenden\" auswählen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select K8s Connection" +msgstr "K8s-Verbindung auswählen" + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Select Query to Execute" +msgstr "Abfrage zum Ausführen auswählen" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Select Query to Explain" +msgstr "Abfrage zum Erklären auswählen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Select schemas to load:" +msgstr "Wähle die zu ladenden Schemata aus:" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select SSH Connection" +msgstr "SSH-Verbindung auswählen" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Select Tables" +msgstr "Tabellen auswählen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select the databases to include in this connection." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Key" +#: src/components/settings/AiTab.tsx +msgid "Select the model to be used for generation and explanation." +msgstr "Wähle das Modell, das für Generierung und Erklärung verwendet werden soll." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select type..." +msgstr "Typ auswählen..." + +#: src/components/modals/NewRowModal.tsx +msgid "Select Value..." +msgstr "Wert auswählen..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Selected emoji" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Loading schema..." +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Semicolon (;)" +msgstr "Semikolon (;)" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Separate Connections" +msgstr "Verbindungen trennen" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sequential Scans" +msgstr "Sequentielle Scans" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Service" +msgstr "Service" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Session timezone sent to MySQL after connect." +msgstr "Sitzungszeitzone, die nach dem Verbindungsaufbau an MySQL gesendet wird." + +#: src/components/settings/AiActivityPanel.tsx +msgid "Sessions" +msgstr "Sitzungen" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Set as Active" +msgstr "Als aktiv festlegen" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set DEFAULT" +msgstr "DEFAULT setzen" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set EMPTY" +msgstr "EMPTY setzen" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set GENERATED" +msgstr "GENERATED setzen" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set NULL" +msgstr "NULL setzen" + +#: src/components/layout/Sidebar.tsx +msgid "Settings" +msgstr "Einstellungen" + +#: src/pages/McpPage.tsx +msgid "Setup" +msgstr "Einrichtung" + +#: src/components/settings/AiTab.tsx +msgid "Show AI Assist and Explain buttons in the editor" +msgstr "Zeigt die Schaltflächen AI Assist und Explain im Editor an" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All" +msgstr "Alle anzeigen" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All Tables" +msgstr "Alle Tabellen anzeigen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Show Data" +msgstr "Daten anzeigen" + +#: src/components/settings/AppearanceTab.tsx +msgid "Show Line Numbers" +msgstr "Zeilennummern anzeigen" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Show overview" +msgstr "Übersicht anzeigen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost." +msgstr "Zeigt JSON-Viewer-Bedienelemente, wenn eine nicht typisierte Text-Zelle ein JSON-Objekt oder -Array enthält. Verursacht kleine Parse-Kosten pro Zelle." + +#: src/components/settings/GeneralTab.tsx +msgid "Show Welcome Screen" +msgstr "Willkommensbildschirm anzeigen" + +#. placeholder {0}: all.length +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Showing {RESULT_LIMIT} of {0} — refine search to narrow down." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Name" +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "showing first {MAX_PREVIEW_ROWS}" +msgstr "erste {MAX_PREVIEW_ROWS}" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Side by side" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "NO" +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Skip (do not import)" +msgstr "Überspringen (nicht importieren)" + +#: src/components/notebook/RunAllSummary.tsx +msgid "skipped" +msgstr "übersprungen" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Slowest Step" +msgstr "Langsamster Schritt" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket Timeout" +msgstr "Socket-Timeout" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket timeout in milliseconds." +msgstr "Socket-Timeout in Millisekunden." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort ascending" +msgstr "Aufsteigend sortieren" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} ASC" +msgstr "Nach {colName} ASC sortieren" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} DESC" +msgstr "Nach {colName} DESC sortieren" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Sort by {field}" +msgstr "Sortieren nach {field}" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort by…" +msgstr "Sortieren nach…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort descending" +msgstr "Absteigend sortieren" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sort or temp work detected" +msgstr "Sortier- oder temporäre Arbeit erkannt" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Split Group" +msgstr "Gruppe teilen" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Horizontal" +msgstr "Horizontal teilen" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Vertical" +msgstr "Vertikal teilen" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +#: src/components/ui/TableToolbar.tsx +msgid "SQL" +msgstr "SQL" + +#: src/components/settings/AppearanceTab.tsx +msgid "SQL Editor" +msgstr "SQL-Editor" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "SQL file executed successfully" +msgstr "SQL-Datei erfolgreich ausgeführt" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Functions" +msgstr "SQL-Funktionen" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "SQL Generation" +msgstr "SQL-Generierung" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Mode" +msgstr "SQL-Modus" + +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQL Preview" +msgstr "SQL-Vorschau" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "SQLite does not support dropping FKs via ALTER TABLE." +msgstr "SQLite unterstützt das Löschen von Fremdschlüsseln via ALTER TABLE nicht." + +#: src/utils/explainPlan.ts +msgid "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural." +msgstr "SQLite EXPLAIN QUERY PLAN ist leichtgewichtig und hauptsächlich strukturell." + +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQLite only supports renaming columns. Other modifications require recreating the table manually." +msgstr "SQLite unterstützt nur das Umbenennen von Spalten. Andere Änderungen erfordern, dass die Tabelle manuell neu erstellt wird." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Connections" +msgstr "SSH-Verbindungen" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Host" +msgstr "SSH-Host" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH is not available for this driver." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Nullable" +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key" +msgstr "SSH-Schlüssel" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key File (Optional)" +msgstr "SSH-Schlüsseldatei (optional)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key Passphrase (Optional)" +msgstr "Passphrase für SSH-Schlüssel (optional)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Password" +msgstr "SSH-Passwort" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH Password missing. Please re-enter." +msgstr "SSH-Passwort fehlt. Bitte erneut eingeben." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Port" +msgstr "SSH-Port" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH User" +msgstr "SSH-Benutzer" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSL Mode" +msgstr "SSL-Modus" + +#: src/components/ui/GeometryInput.tsx +msgid "ST_GeomFromText('POINT(30 40)', 4326)" +msgstr "ST_GeomFromText('POINT(30 40)', 4326)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Stacked view" +msgstr "Gestapelte Ansicht" + +#: src/components/modals/CommunityModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Star on GitHub" +msgstr "Auf GitHub mit Stern markieren" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Started" +msgstr "Start" + +#: src/components/settings/GeneralTab.tsx +msgid "Startup" +msgstr "Start" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Status" +msgstr "Status" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Stop" +msgstr "Stopp" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop execution when a cell fails" +msgstr "Ausführung stoppen, wenn eine Zelle fehlschlägt" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop on Error" +msgstr "Bei Fehler stoppen" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "stopped" +msgstr "gestoppt" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Structure" +msgstr "Struktur" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Structure (DDL)" +msgstr "Struktur (DDL)" + +#: src/pages/Editor.tsx +msgid "Submit Changes" +msgstr "Änderungen übernehmen" + +#: src/components/notebook/RunAllSummary.tsx +msgid "succeeded" +msgstr "erfolgreich" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Success" +msgstr "Erfolg" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Success" +msgstr "Erfolg" + +#: src/components/modals/ExportProgressModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Success" +msgstr "Erfolg" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Success" +msgstr "Erfolg" + +#: src/pages/TaskManagerPage.tsx +msgid "Sum of RSS across the process tree — may overcount shared memory" +msgstr "Summe des RSS über den Prozessbaum — gemeinsam genutzter Speicher kann doppelt gezählt werden" + +#: src/components/settings/InfoTab.tsx +msgid "Support the Development" +msgstr "Entwicklung unterstützen" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch tab" +msgstr "Tab wechseln" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch to connection 1–9" +msgstr "Zu Verbindung 1-9 wechseln" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Horizontal Layout" +msgstr "Zum horizontalen Layout wechseln" + +#: src/components/ui/TableToolbar.tsx +msgid "Switch to SQL WHERE input" +msgstr "Zum SQL-WHERE-Eingabefeld wechseln" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Vertical Layout" +msgstr "Zum vertikalen Layout wechseln" + +#: src/pages/TaskManagerPage.tsx +msgid "System Resources" +msgstr "Systemressourcen" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Tab" +msgstr "Tabulator" + +#: src/components/settings/AppearanceTab.tsx +msgid "Tab Size" +msgstr "Tabgröße" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Tab view" +msgstr "Tab-Ansicht" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "table" +msgstr "Tabelle" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Table" +msgstr "Tabelle" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Table name" +msgstr "Tabellenname" + +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Table Name" +msgstr "Tabellenname" + +#: src/components/modals/CreateTableModal.tsx +msgid "Table name is required" +msgstr "Tabellenname ist erforderlich" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Tables" +msgstr "Tabellen" + +#: src/components/modals/CommunityModal.tsx +msgid "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community." +msgstr "Tabularis ist ein freies Open-Source-Projekt. Wenn du es nützlich findest, unterstütze das Projekt und vernetze dich mit der Community." + +#: src/pages/TaskManagerPage.tsx +msgid "Tabularis Process" +msgstr "Tabularis-Prozess" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Target column" +msgstr "Zielspalte" + +#: src/components/settings/InfoTab.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Task Manager" +msgstr "Task-Manager" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Temp or Sort Ops" +msgstr "Temporäre oder Sortier-Operationen" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Test" +msgstr "Testen" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Test Connection" +msgstr "Verbindung testen" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Testing..." +msgstr "Wird getestet..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "The app will restart automatically after installation" +msgstr "Die App wird nach der Installation automatisch neu gestartet" + +#: src/components/settings/AiTab.tsx +msgid "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1" +msgstr "Die Basis-URL deiner OpenAI-kompatiblen API. Beispiele: https://api.groq.com/openai/v1, http://localhost:8000/v1" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "The configuration file has been saved. Restart now to apply the changes?" +msgstr "Die Konfigurationsdatei wurde gespeichert. Jetzt neu starten, um die Änderungen anzuwenden?" + +#: src/pages/Connections.tsx +msgid "The exported file will contain your database and SSH passwords in plaintext. Please store it securely." +msgstr "Die exportierte Datei enthält deine Datenbank- und SSH-Passwörter im Klartext. Bewahre sie sicher auf." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:" +msgstr "Die Verlaufsdatei war beschädigt und wurde beiseitegelegt. Neue Abfragen werden wie gewohnt aufgezeichnet. Sicherungsdatei:" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely." +msgstr "Das Model Context Protocol (MCP) ermöglicht KI-Assistenten (wie Claude), sich mit deinen lokalen Tools zu verbinden. Tabularis stellt einen MCP-Server bereit, über den KI dein Datenbankschema lesen und Abfragen sicher ausführen kann." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "The plugin process could not be launched. Check the error details below." +msgstr "Der Plugin-Prozess konnte nicht gestartet werden. Prüfe die Fehlerdetails unten." + +#: src/components/settings/AppearanceTab.tsx +msgid "The quick brown fox jumps over the lazy dog" +msgstr "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern" + +#: src/components/settings/AppearanceTab.tsx +msgid "Theme Selection" +msgstr "Themaauswahl" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "These connections will reject writes from MCP. Other connections behave normally." +msgstr "Diese Verbindungen lehnen Schreibvorgänge ab. Andere verhalten sich normal." + +#: src/pages/TaskManagerPage.tsx +msgid "This action cannot be undone immediately" +msgstr "Diese Aktion kann nicht sofort rückgängig gemacht werden" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "This driver only supports primary keys at table creation time" +msgstr "Dieser Treiber unterstützt Primärschlüssel nur beim Erstellen einer Tabelle" + +#: src/components/settings/AiTab.tsx +msgid "This key is loaded from an environment variable" +msgstr "Dieser Schlüssel wird aus einer Umgebungsvariable geladen" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Month" +msgstr "Diesen Monat" + +#: src/components/notebook/NotebookView.tsx +msgid "This notebook is empty. Add a cell to get started." +msgstr "Dieses Notebook ist leer. Füge eine Zelle hinzu, um zu beginnen." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path." +msgstr "Dieses Plugin benötigt möglicherweise einen Interpreter (z. B. Python). Verwende die Plugin-Einstellungen, um den Interpreter-Pfad zu konfigurieren." + +#: src/components/settings/InfoTab.tsx +msgid "This project is a Work In Progress (WIP). Core features are stable, but we have big plans." +msgstr "Dieses Projekt ist Work in Progress (WIP). Die Kernfunktionen sind stabil, aber wir haben große Pläne." + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Week" +msgstr "Diese Woche" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgctxt "aiActivity" +msgid "Time" +msgstr "Zeit" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Time" +msgstr "Zeit" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Timeout" +msgstr "Zeitüberschreitung" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Timeout" +msgstr "Zeitüberschreitung" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgctxt "mcp" +msgid "Timeout" +msgstr "Zeitlimit" + +#: src/components/settings/LogsTab.tsx +msgid "Timestamp" +msgstr "Zeitstempel" + +#: src/components/settings/LocalizationTab.tsx +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Timezone" +msgstr "Zeitzone" + +#: src/components/settings/LocalizationTab.tsx +msgid "Timezone used to display timestamps and exports. 'Auto' follows your system timezone." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Schema: {tableName}" +#: src/components/modals/TriggerEditorModal.tsx +msgid "Timing" msgstr "" +#: src/components/ui/FilterRow.tsx +msgid "to" +msgstr "bis" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Today" +msgstr "Heute" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Toggle Chart" +msgstr "Diagramm umschalten" + +#: src/components/ui/JsonCell.tsx +msgid "Toggle inline JSON tree" +msgstr "JSON-Baum ein-/ausklappen" + +#: src/components/ui/TextCell.tsx +msgid "Toggle inline text editor" +msgstr "" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Toggle Preview" +msgstr "Vorschau umschalten" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Toggle sidebar" +msgstr "Seitenleiste umschalten" + +#: src/components/ui/TableToolbar.tsx +msgid "Toggle structured filter panel" +msgstr "Strukturiertes Filterpanel ein-/ausblenden" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled parallel (cell {n})" +msgstr "Parallel umgeschaltet (Zelle {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled stop on error" +msgstr "Bei Fehler stoppen umgeschaltet" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Tool" +msgstr "Tool" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Top Issues" +msgstr "Wichtigste Probleme" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Total Cost" +msgstr "Gesamtkosten" + +#: src/components/ui/JsonInput.tsx +msgid "Tree" +msgstr "Baum" + +#. placeholder {0}: formatBytes(stats.total_memory_bytes) +#: src/pages/TaskManagerPage.tsx +msgid "Tree total: {0}" +msgstr "Baum-Gesamt: {0}" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "trigger" +msgstr "Trigger" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Body (SQL)" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger created successfully" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Name" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger SQL is required" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger updated successfully" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Triggers" +msgstr "" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Try again" +msgstr "Erneut versuchen" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Try again" +msgstr "Erneut versuchen" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx #: src/components/modals/SchemaModal.tsx msgid "Type" +msgstr "Typ" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Undo" +msgstr "Rückgängig" + +#: src/pages/Connections.tsx +msgid "Ungrouped" +msgstr "Ungruppiert" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Unique Index" +msgstr "Eindeutiger Index" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "unknown" +msgstr "unbekannt" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Unknown" +msgstr "Unbekannt" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Unnamed connection" +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Unset" +msgstr "Nicht gesetzt" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Untitled" +msgstr "Ohne Titel" + +#: src/components/settings/PluginsTab.tsx +msgid "Up to date" +msgstr "Aktuell" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Update" +msgstr "UPDATE" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Update" +msgstr "Aktualisieren" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Update" +msgstr "Aktualisieren" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Update Error" +msgstr "Update-Fehler" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Update failed: " +msgstr "Aktualisierung fehlgeschlagen: " + +#: src/components/settings/InfoTab.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Updates" +msgstr "Updates" + +#. placeholder {0}: ({ aur: "AUR", snap: "Snap Store", flatpak: "Flathub" } as Record)[ installationSource ] ?? installationSource +#: src/components/settings/InfoTab.tsx +msgid "Updates managed by {0}" +msgstr "Updates werden von {0} verwaltet" + +#: src/components/ui/BlobInput.tsx +msgid "Upload File" +msgstr "Datei hochladen" + +#: src/components/ui/BlobInput.tsx +msgid "Uploading..." +msgstr "Wird hochgeladen..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Existing SSH Connection" +msgstr "Vorhandene SSH-Verbindung verwenden" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Kubernetes Port-Forward" +msgstr "Kubernetes-Port-Forward verwenden" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use SSH Tunnel" +msgstr "SSH-Tunnel verwenden" + +#: src/components/settings/InfoTab.tsx +msgid "Use your package manager to update Tabularis." +msgstr "Verwende deinen Paketmanager, um Tabularis zu aktualisieren." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Username" +msgstr "Benutzername" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Using the driver's default icon." +msgstr "" + +#: src/components/ui/JsonInput.tsx +msgid "Valid JSON" +msgstr "Gültiges JSON" + +#: src/components/notebook/ParamsPanel.tsx +msgctxt "editor" +msgid "value" +msgstr "wert" + +#: src/components/ui/FilterRow.tsx +msgctxt "toolbar" +msgid "value" +msgstr "Wert" + +#: src/components/modals/QueryParamsModal.tsx +msgid "Value (e.g. 'text' or 123)" +msgstr "Wert (z. B. 'Text' oder 123)" + +#: src/components/notebook/CellChart.tsx +msgid "Values" +msgstr "Werte" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify CA" +msgstr "CA prüfen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Full" +msgstr "Vollständig prüfen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Identity" msgstr "" +#: src/components/modals/UpdateNotificationModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Version" +msgstr "Version" + +#. placeholder {0}: entries[0].version +#: src/components/modals/WhatsNewModal.tsx +msgid "Version {0}" +msgstr "Version {0}" + +#. placeholder {0}: updateInfo.latestVersion +#: src/components/settings/InfoTab.tsx +msgid "Version {0} is available" +msgstr "Version {0} ist verfügbar" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Vertical" +msgstr "Vertikal" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "view" +msgstr "View" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View created successfully" +msgstr "Ansicht erfolgreich erstellt" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "View Definition" +msgstr "Ansichtsdefinition" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Definition (SQL)" +msgstr "Ansichtsdefinition (SQL)" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View definition is required" +msgstr "Ansichtsdefinition ist erforderlich" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "View details" +msgstr "Details anzeigen" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "View ER Diagram" +msgstr "ER-Diagramm anzeigen" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Name" +msgstr "Ansichtsname" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View name is required" +msgstr "Ansichtsname ist erforderlich" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "View on GitHub" +msgstr "Auf GitHub ansehen" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "View Schema" +msgstr "Schema anzeigen" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View updated successfully" +msgstr "Ansicht erfolgreich aktualisiert" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Views" +msgstr "Ansichten" + +#: src/components/modals/VisualExplainModal.tsx +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +#: src/pages/VisualExplainPage.tsx +msgid "Visual Explain" +msgstr "Visual Explain" + +#: src/components/settings/LogsTab.tsx +msgid "Warn" +msgstr "Warnung" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap." +msgstr "Wir haben einen eigenen Treffpunkt für Tabularis-Nutzer eröffnet: Hilfe, Tipps und Mitgestaltung der Roadmap." + +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "What's New" +msgstr "Neuigkeiten" + +#: src/pages/TaskManagerPage.tsx +msgid "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted." +msgstr "stoppt den Prozess sofort. Alle aktiven Datenbankverbindungen über dieses Plugin funktionieren erst wieder, wenn das Plugin neu gestartet wird." + +#: src/components/ui/GeometryInput.tsx +msgid "WKT Mode" +msgstr "WKT-Modus" + +#: src/components/settings/AppearanceTab.tsx +msgid "Word Wrap" +msgstr "Zeilenumbruch" + +#: src/components/settings/AppearanceTab.tsx +msgid "Wrap long lines in the editor instead of scrolling horizontally." +msgstr "Lange Zeilen im Editor umbrechen statt horizontal zu scrollen." + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Write" +msgstr "Schreiben" + +#: src/components/notebook/MarkdownCell.tsx +msgid "Write Markdown here..." +msgstr "Markdown hier schreiben..." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Writes only" +msgstr "Nur Schreibvorgänge" + #: src/components/modals/SchemaModal.tsx msgid "YES" -msgstr "" +msgstr "JA" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Yesterday" +msgstr "Gestern" + +#: src/components/settings/InfoTab.tsx +msgid "You're up to date" +msgstr "Du bist auf dem neuesten Stand" diff --git a/src/locales/de/messages.ts b/src/locales/de/messages.ts index 39f11cf5..7d9e021b 100644 --- a/src/locales/de/messages.ts +++ b/src/locales/de/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Maximale Verlaufseinträge\"],\"-6AWa-\":[\"Verbindungen importieren\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Trennen\"],\"-PLZfh\":[\"Aktualisierung der Modelle fehlgeschlagen\"],\"-T5W2e\":[\"Treiberhinweise\"],\"-ZgeeE\":[\"Bearbeitungsverlauf\"],\"-aYrdc\":[\"Version \",[\"0\"],\" ist verfügbar\"],\"-fBGXl\":[\"Höchste Kosten\"],\"-jIQDz\":[\"Zelle einklappen\"],\"-u1eRo\":[\"Keine Datenbank\"],\"-yoeVU\":[\"Schema wird geladen...\"],\"-zy2Nq\":[\"Typ\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"Freigabe-ID\"],\"0E5-gF\":[\"Möchtest du diese Verbindung wirklich löschen?\"],\"0HCubq\":[\"Vergrößern\"],\"0Kmdvy\":[\"Benutzerdefinierte Schrift\"],\"0Nj13E\":[\"SQL generieren\"],\"0ROgz5\":[\"JSON eingeben...\"],\"0SY9sU\":[\"Trennen von der Datenbank fehlgeschlagen\"],\"0b3kL9\":[\"Datenbank auswählen\"],\"0caMy7\":[\"Verlauf\"],\"0mx5ow\":[\"Abfrage\"],\"0n9BtL\":[\"Vorschau\"],\"0pHB9N\":[\"Als table.column kopieren\"],\"0sQzZK\":[\"Datenbanken filtern...\"],\"0uPP9X\":[\"FK-Name (optional)\"],\"0wxuek\":[\"Aktuelle Version\"],\"0x09Aw\":[\"Bei Fehler stoppen umgeschaltet\"],\"0yBP6v\":[\"Entwicklung unterstützen\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen\"],\"other\":[\"#\",\" Zeilen\"]}]],\"0yVAoD\":[\"Zeilen zählen\"],\"0zxJ87\":[\"Keine Logs verfügbar\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Ansicht bearbeiten\"],\"11fGJ6\":[\"Abfragen\"],\"13hIUA\":[[\"0\"],\" API-Schlüssel\"],\"14qNWF\":[\"SSH-Verbindung auswählen\"],\"17qHRP\":[\"Neue Verbindung\"],\"1Dn6bg\":[\"Aus Zwischenablage importieren\"],\"1Dnd0I\":[\"Zeilenanzahl laden\"],\"1FjTLW\":[\"z. B. python3\"],\"1GOvbo\":[\"Ollama verbunden (\",[\"0\"],\" Modelle gefunden)\"],\"1I6UoR\":[\"Ansichten\"],\"1U7hS5\":[\"Länge\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Editor-Schriftfamilie\"],\"1ekzlY\":[\"Plugin-Prozesse\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Themaauswahl\"],\"1xVZkL\":[\"Keine Modelle gefunden\"],\"26Joci\":[[\"0\"],\" Zeilen abgerufen\"],\"2Bf-Qe\":[\"Neue Konsole\"],\"2CrSmP\":[\"Hilf tabularis zu wachsen\"],\"2D9F8_\":[\"Duplizieren der Verbindung fehlgeschlagen\"],\"2Eoi_a\":[\"Details anzeigen\"],\"2F4pE5\":[\"Rust-Build und Tests\"],\"2Fsd9r\":[\"Diesen Monat\"],\"2JzKXI\":[\"GENERATED setzen\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Alle auswählen\"],\"2SO5RM\":[\"Kubernetes ist für diesen Treiber nicht verfügbar.\"],\"2Uh5GA\":[\"Cargo-Ökosystem\"],\"2YylFp\":[\"Neue visuelle Abfrage\"],\"2luuSG\":[\"Erneut versuchen\"],\"2wxgft\":[\"Umbenennen\"],\"2yG2GC\":[\"Pausiert Schreibvorgänge (oder jede Abfrage) und fragt den Nutzer vor der Ausführung.\"],\"30-b5r\":[\"Löschen\"],\"31kwdN\":[\"Filter duplizieren\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Alle Tools\"],\"3Am5DS\":[\"Tab-Ansicht\"],\"3BhBCj\":[\"Ereignisse\"],\"3FVg9_\":[\"Lokale Spalte\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Ausführen\"],\"3L0HCz\":[\"Keine Plugins entsprechen der Suche.\"],\"3Nv3JV\":[\"Abfrage wird ausgeführt...\"],\"3TSz9S\":[\"Minimieren\"],\"3UW8fG\":[\"Updates werden von \",[\"0\"],\" verwaltet\"],\"3YvS-c\":[\"Neuer Tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook-Zellnamen-Prompt\"],\"3qkggm\":[\"Vollbild\"],\"3rBJ1T\":[\"Schema anzeigen\"],\"3xZ-xV\":[\"Aktuellen Zeitstempel einfügen\"],\"40Gx0U\":[\"Zeitzone\"],\"41GP4f\":[\"Wähle das Standard-Trennzeichen für das Kopieren oder Exportieren von Zeilen als CSV.\"],\"42iaEi\":[\"PostgreSQL ohne ANALYZE zeigt nur Schätzungen des Planners.\"],\"44cXI8\":[\"Nach \",[\"colName\"],\" ASC sortieren\"],\"4AF7FO\":[\"Datenbanken verwalten\"],\"4CK17g\":[\"Möchtest du die Ansicht \\\"\",[\"name\"],\"\\\" wirklich ändern?\"],\"4DDaw-\":[\"Wähle mindestens eine Datenbank aus\"],\"4D_Nvt\":[\"Erstellen der Gruppe fehlgeschlagen\"],\"4RiR6c\":[\"Als HTML exportieren\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Kindprozess\"],\"other\":[\"#\",\" Kindprozesse\"]}]],\"4VyuY3\":[\"Möchtest du wirklich alle Logs löschen?\"],\"4WWqS3\":[\"JSON-Baum ein-/ausklappen\"],\"4cEClj\":[\"Sitzungen\"],\"4cmfYp\":[\"Zeile duplizieren\"],\"4lIZTB\":[\"Frontend-Entwicklungsabhängigkeiten\"],\"4oYjvJ\":[\"In Abfrage suchen…\"],\"4tMxW4\":[\"Verknüpften Datensatz anzeigen\"],\"4yJcjm\":[\"Typ auswählen...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Filterpanel schließen (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Semikolon (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Ereignis\"],\"other\":[\"#\",\" Ereignisse\"]}]],\"5I2fxu\":[\"/pfad/zu/id_rsa\"],\"5NZpX8\":[\"Listenansicht\"],\"5To6Z6\":[\"Abfrage kopieren\"],\"5gqNQl\":[\"Rasteransicht\"],\"5igIzr\":[\"Import abgebrochen\"],\"5nTIup\":[\"Ansicht wird bearbeitet: \",[\"name\"]],\"66bEht\":[\"Projektstatus\"],\"6PIJVc\":[\"Start\"],\"6QvP0l\":[\"Als JSON exportieren\"],\"6W41Xq\":[\"Task-Manager\"],\"6WngBH\":[\"NULL setzen\"],\"6YtxFj\":[\"Name\"],\"6_dCYd\":[\"Übersicht\"],\"6gvoHP\":[\"Fehlermeldung kopieren\"],\"6oCVzX\":[\"Der Kubernetes-Kontext ist erforderlich\"],\"6wQO0f\":[\"Daten anzeigen\"],\"6z9W13\":[\"Neu starten\"],\"71agNy\":[\"Namen für unbenannte Zellen mit KI generieren\"],\"74J3FG\":[\"Erste Version\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Verstanden\"],\"77nSMU\":[\"Den gesamten KI-Aktivitätsverlauf löschen? Unwiderruflich.\"],\"79UVYW\":[\"Esc zum Schließen\"],\"7ABmyQ\":[\"Erneut versuchen\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" von \",[\"0\"],\" aktiv\"],\"7E864M\":[\"Datenbanktyp\"],\"7FqaG1\":[\"Passe die Anweisungen für die KI-Analyse von EXPLAIN-Abfrageplänen an. Verwende \",[\"LANGUAGE\"],\" für die Ausgabesprache.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Gemischte Typen erkannt, Standard TEXT\"],\"7RSQQd\":[\"Passwörter im Keychain speichern\"],\"7VpPHA\":[\"Bestätigen\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fehlgeschlagen\"],\"7sMeHQ\":[\"Schlüssel\"],\"7sNhEz\":[\"Benutzername\"],\"7tATh2\":[\"Abfrage ausführen\"],\"7yb4gk\":[\"Fehlgeschlagen: \"],\"8-4V8D\":[\"Tabellen\"],\"82G-l5\":[\"Das Model Context Protocol (MCP) ermöglicht KI-Assistenten (wie Claude), sich mit deinen lokalen Tools zu verbinden. Tabularis stellt einen MCP-Server bereit, über den KI dein Datenbankschema lesen und Abfragen sicher ausführen kann.\"],\"83VjWE\":[\"Neues Notebook\"],\"86IgoU\":[\"Abfrage ausführen (im Editor)\"],\"86fCgf\":[\"Passe die Anweisungen für die KI-Namensgenerierung von Abfrage-Ergebnis-Tabs an. Die SQL-Abfrage wird als Benutzernachricht gesendet.\"],\"87a_t_\":[\"Beschriftung\"],\"8CWirf\":[\"MCP-Server\"],\"8S8aIX\":[\"Verbindungszustandsprüfung\"],\"8TMaZI\":[\"Zeitstempel\"],\"8Tg_JR\":[\"Benutzerdefiniert\"],\"8UFKYr\":[\"Abfrage zum Ausführen auswählen\"],\"8VKSGV\":[\"SQL generieren\"],\"8Wjy6z\":[\"Tabs links schließen\"],\"8ZsakT\":[\"Passwort\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL-Editor\"],\"8bRgTe\":[\"KI-Anbieter nicht konfiguriert. Bitte gehe zu Einstellungen > KI.\"],\"8c_W0h\":[\"Ältere Versionen\"],\"8guEQP\":[\"Ansichten aktualisieren\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN ist leichtgewichtig und hauptsächlich strukturell.\"],\"8q_sOc\":[\"Entfernen\"],\"8t-akp\":[\"erste \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Verbindungsname\"],\"91gnWY\":[\"Logs exportieren\"],\"91rtHL\":[\"Neue Ansicht erstellen\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Neue Gruppe\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Ansicht erfolgreich aktualisiert\"],\"9NzDFn\":[\"Willkommensbildschirm beim Start der Anwendung anzeigen.\"],\"9OoUS3\":[\"Neue SSH-Verbindung erstellen\"],\"9QGRD5\":[\"Zielspalte\"],\"9QTny9\":[\"Abfrage fehlgeschlagen.\"],\"9S-fyV\":[\"Vorab-Ausführungsplan\"],\"9SJ_Sx\":[\"Systemressourcen\"],\"9UQ730\":[\"Klonen\"],\"9X6cky\":[\"NEIN\"],\"9XUV5V\":[\"Keine Daten in der Zwischenablage\"],\"9mMU1R\":[\"Zeit\"],\"9mvFo_\":[\"Zeit\"],\"9npOH9\":[\"Datei öffnen\"],\"9uI_rE\":[\"Rückgängig\"],\"9xUjzm\":[\"Alle auswählen\"],\"9y_02p\":[\"Mit der Community chatten, Hilfe bekommen, Features vorschlagen\"],\"A1pPcI\":[\"SSH-Host\"],\"A1taO8\":[\"Suchen\"],\"A6C0pv\":[\"Gesamtkosten\"],\"A7WG0p\":[\"Plugin deaktiviert\"],\"A7yRz3\":[\"Ansichtsdefinition ist erforderlich\"],\"A9Uyp6\":[\"Import fehlgeschlagen: \"],\"ABEd-z\":[\"Verwende deinen Paketmanager, um Tabularis zu aktualisieren.\"],\"AMdgKV\":[\"Prompt für Explain-Plan-Analyse\"],\"ANSTMe\":[\"In der aktuellen Planzusammenfassung wurden keine größeren Probleme erkannt.\"],\"ANzIr7\":[\"Abfrageverlauf\"],\"AOnaU7\":[\"übersprungen\"],\"AVlZoM\":[\"Umgebung\"],\"AXTVsE\":[\"Vollständig prüfen\"],\"AXdRYR\":[\"Aktuelle Logs\"],\"Aa-YkQ\":[\"Notebook exportieren\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Nach Level filtern\"],\"AlPiMN\":[\"Klicken, um zur Seite zu springen\"],\"An-1rA\":[\"Zeilen zurück\"],\"AnV8j-\":[\"Spalte ändern\"],\"AvEr_L\":[\"Neue Konsole\"],\"AvYbUL\":[\"Auf GitHub mit Stern markieren\"],\"Aw_eOs\":[\"Erfordert Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Keine Ergebnisse gefunden\"],\"B0mJGb\":[\"Rohausgabe\"],\"B1c58n\":[\"Spalte ändern\"],\"B3toQF\":[\"Objekte\"],\"B5nKny\":[\"/absoluter/pfad/zum/ordner\"],\"B5xevr\":[\"Der Verbindungsname ist erforderlich\"],\"BAVvWJ\":[\"ER-Diagramm\"],\"BBtVak\":[\"Alle einklappen\"],\"BEVzjL\":[\"Import fehlgeschlagen\"],\"BFxXo5\":[\"Alle ausführen\"],\"BJe2lZ\":[\"Seitenleiste umschalten\"],\"BK3WCj\":[\"Laden des Registry fehlgeschlagen\"],\"BKbO3i\":[\"Notebook bearbeitet\"],\"BMB51y\":[\"In Konsole ausführen\"],\"BNW_Z4\":[\"z. B. active_users, order_summary\"],\"BUO_JN\":[\"Abfrage kopieren\"],\"BYkhHY\":[\"Beim Start nach Updates suchen\"],\"BbHofF\":[\"Verbindungen exportieren\"],\"BeSg6-\":[\"Anwendungslogs zur Fehlersuche im Speicher sammeln\"],\"BgAyQH\":[\"Sortierung löschen\"],\"BinTJI\":[\"npm-Ökosystem\"],\"BkFson\":[\"Automatisch paginiert\"],\"Bpglf1\":[\"Nach oben\"],\"BrGo6h\":[\"Notebooks suchen\"],\"BxiAN_\":[\"Abfrage löschen\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Frontend-Abhängigkeiten\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Keine Filter —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Wird heruntergeladen...\"],\"CUxwxn\":[\"Alle Tabellen anzeigen\"],\"CWMXbw\":[\"stoppt den Prozess sofort. Alle aktiven Datenbankverbindungen über dieses Plugin funktionieren erst wieder, wenn das Plugin neu gestartet wird.\"],\"CZt6BX\":[\"MANUELLE KONFIGURATION\"],\"Ca8ixZ\":[\"Löschen\"],\"CbJBQS\":[\"Aktualisierung fehlgeschlagen: \"],\"Cdz-YU\":[\"Gestapelte Ansicht\"],\"CpeQf9\":[\"Schleifen\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Wähle das Modell, das für Generierung und Erklärung verwendet werden soll.\"],\"DB8zMK\":[\"Anwenden\"],\"DDXf5E\":[\"SQL-Funktionen\"],\"DEwnwi\":[\"Löschen\"],\"DNTvdl\":[\"Im Editor öffnen\"],\"DPc2P9\":[\"Zelle löschen\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Zeilenhöhe\"],\"Dd7YLj\":[\"Vielleicht später\"],\"Deej3j\":[\"Ungültiges JSON\"],\"DfKhk_\":[\"Aktualisieren\"],\"DiRiTz\":[\"Paketseite öffnen\"],\"DlRHAD\":[\"EXPLAIN wird ausgeführt...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Fehler\"],\"other\":[\"#\",\" Fehler\"]}]],\"Dvdihe\":[\"Auf \",[\"0\"],\" — vor Ausführung prüfen.\"],\"DzFLzw\":[\"JA\"],\"E-JUtQ\":[\"Freigabe\"],\"E0kcnZ\":[\"Allgemein\"],\"E2mje_\":[\"Abfrage zum Erklären auswählen\"],\"EDieyg\":[\"Möchtest du diese SSH-Verbindung wirklich löschen?\"],\"EHZxPj\":[\"Aufklappen\"],\"EL4oDO\":[\"Neue Version verfügbar\"],\"EPi4gT\":[\"Sortieren nach \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Ungruppiert\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Unbekannt\"],\"EhADgB\":[\"Spalte löschen\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Du bist auf dem neuesten Stand\"],\"Em6JFd\":[\"Zeilen zählen\"],\"EnGiqG\":[[\"0\"],\" Elemente\"],\"Ew1n5z\":[\"Plugins suchen…\"],\"F18WP3\":[\"Parameter\"],\"F3uc1x\":[\"Die exportierte Datei enthält deine Datenbank- und SSH-Passwörter im Klartext. Bewahre sie sicher auf.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" Zeilen\"],\"other\":[\"#\",\" Zeilen\"]}]],\"F6pfE9\":[\"Aktiv\"],\"F8tXg7\":[\"Datenvorschau\"],\"F9-6yK\":[\"Standard-Kopierformat\"],\"F9lxfG\":[\"Entfernen\"],\"F9nsa2\":[\"Die Verlaufsdatei war beschädigt und wurde beiseitegelegt. Neue Abfragen werden wie gewohnt aufgezeichnet. Sicherungsdatei:\"],\"FF_oap\":[\"Standardwert\"],\"FK8rlP\":[\"Noch keine SSH-Verbindungen konfiguriert\"],\"FMRcH8\":[\"Erste Zeile als Kopfzeile\"],\"FNvDMc\":[\"Diese Woche\"],\"FQe1FI\":[\"Geschätzte Zeilen\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warnung\"],\"FZg3wM\":[\"Operation\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Wähle ein unabhängiges Thema für den SQL-Editor oder halte es mit dem App-Thema synchron.\"],\"FsvZQL\":[\"Zelle \",[\"n\"],\" bearbeitet\"],\"FtwKL9\":[\"Tab wechseln\"],\"FznI3z\":[\"Fremdschlüssel \\\"\",[\"name\"],\"\\\" löschen?\"],\"G6W8j1\":[\"Vorschau fehlgeschlagen: \"],\"G8Q5Zq\":[\"Der Namespace ist erforderlich\"],\"GAohqx\":[\"Spalte löschen\"],\"GJR99u\":[\"Löschen der Spalte fehlgeschlagen: \"],\"GKfzzM\":[\"Verbindung auswählen...\"],\"GS-Mus\":[\"Exportieren\"],\"GUaLUq\":[\"Laden des Schemas fehlgeschlagen: \"],\"GXP-Iw\":[\"SQL-Zelle hinzufügen\"],\"Gj1mLb\":[\"Zellen neu angeordnet\"],\"GlbqG2\":[\"Auf Treiber-Standard zurücksetzen\"],\"Gs5AlY\":[\"Öffnen\"],\"GtmO8_\":[\"von\"],\"GxkJXS\":[\"Wird hochgeladen...\"],\"H-o4D2\":[\"Neue Spalte erstellen\"],\"H2B-KW\":[\"Wähle das Standardformat beim Kopieren von Zeilen mit Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Wiederholen\"],\"H7mlCc\":[\"/absoluter/pfad/zu/db.sqlite\"],\"H86f9p\":[\"Verkleinern\"],\"H9P8CD\":[\"den ersten Filter hinzufügen\"],\"HAQlGl\":[\"KI-Aktivität\"],\"HKNZrs\":[\"Index-Bedingung\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"#\",\" Zeilen löschen\"],\"other\":[\"#\",\" Zeilen löschen\"]}]],\"HPuCiP\":[\"Ordnerpfad\"],\"HUs1R3\":[\"Keine geöffneten Tabs für diese Verbindung.\"],\"HV4Isp\":[\"SSH-Passwort eingeben\"],\"HVC8Hh\":[\"In Zwischenablage kopiert\"],\"HWEpq8\":[\"Datenträger schreiben/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Speichern der Ansicht fehlgeschlagen: \"],\"He8v1Y\":[\"Von \\\"Alle anwenden\\\" abwählen\"],\"HehHP1\":[\"Standard-Layout\"],\"HilYn4\":[\"Dieses Notebook ist leer. Füge eine Zelle hinzu, um zu beginnen.\"],\"HjxVK_\":[\"Schneller Verbindungstest\"],\"HmMnRx\":[\"WKT-Modus\"],\"HoKCiI\":[\"Die App wird nach der Installation automatisch neu gestartet\"],\"HpK_8d\":[\"Neu laden\"],\"Hpi4Jm\":[\"Jetzt beitreten\"],\"HuA3RU\":[\"Tabulator\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"SSH inline konfigurieren\"],\"I5VBsr\":[\"Wie App\"],\"I8yrPb\":[\"Tabelle ersetzen\"],\"I92BdB\":[\"Aus Gruppe entfernen\"],\"I92fr4\":[\"Später erinnern\"],\"I99Miw\":[\"Kosten\"],\"IETZIR\":[\"Zellnamen bearbeiten\"],\"IG9wzA\":[\"Einfügen der Zeile fehlgeschlagen: \"],\"ILleOG\":[\"Der Ressourcentyp muss \\\"service\\\" oder \\\"pod\\\" sein\"],\"IQ3gAw\":[\"Datei hochladen\"],\"IUwGEM\":[\"Änderungen speichern\"],\"IUwmLq\":[\"Direkte Abhängigkeiten, deklariert in package.json und src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Open-Source-Bibliotheken\"],\"I_43p6\":[\"Sicherheit\"],\"Iaizf4\":[\"Darstellung\"],\"Il3FBB\":[\"Strukturiertes Filterpanel ein-/ausblenden\"],\"IniZRK\":[\"Download nicht verfügbar - nur Vorschau geladen\"],\"Isaozb\":[\"Überprüfen & anpassen\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Aktive Abfragen und Verbindungen über dieses Plugin werden unterbrochen.\"],\"J6v1s_\":[\"Standard-Modell\"],\"JE-DVk\":[\"Interpreter\"],\"JEGlfK\":[\"Start\"],\"JKDPqP\":[\"Zuerst einen Kontext auswählen\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"SSH-Tunnel verwenden\"],\"JRz8tw\":[\"MySQL und MariaDB liefern echte Metriken nur bei unterstützten EXPLAIN ANALYZE- oder ANALYZE FORMAT-Varianten.\"],\"JUICth\":[\"PNG, JPG, WebP oder SVG · max. 512 KB\"],\"JY5Oyv\":[\"Datenbank\"],\"JlFRIB\":[\"Sitzungszeitzone, die nach dem Verbindungsaufbau an MySQL gesendet wird.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Abgelehnt\"],\"K3H9p5\":[\"Nicht gesetzt\"],\"K5Dgu_\":[\"Datenbanken\"],\"K8IGKf\":[\"Authentifizierungstyp\"],\"KAYNSW\":[\"Wie viele Logs im Speicher behalten werden sollen (1-10000)\"],\"KHTGbr\":[\"Vorab-EXPLAIN\"],\"KHvda8\":[\"Nicht Null\"],\"KJKNaZ\":[\"Als `column` kopieren\"],\"KM5Kc8\":[\"Mindestens eine Spalte muss ausgewählt werden\"],\"KSCnVQ\":[\"Typ\"],\"KUjOb9\":[\"läuft\"],\"KXBdwy\":[\"Routinen aktualisieren\"],\"KXNyX7\":[\"DEFAULT setzen\"],\"Kd70-v\":[\"Aus Zwischenablage importieren...\"],\"KhI4oS\":[\"Referenzierte Zeile in \",[\"0\"],\" öffnen\"],\"KhgrNu\":[\"MCP-Server-Integration\"],\"KirERL\":[\"Zeitüberschreitung\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Löschen des Index fehlgeschlagen: \"],\"KzeARD\":[\"Löschen der Tabelle fehlgeschlagen: \"],\"L-rMC9\":[\"Auf Standard zurücksetzen\"],\"L3HXkQ\":[\"Fehlerbehebungen\"],\"LCZ7Dy\":[\"Namen kopieren\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"Indizes\"],\"LMeAoR\":[\"Zeilen\"],\"LPCdc-\":[\"Prompt für Abfrage-Tabnamen\"],\"LPFmga\":[\"Für \\\"Alle anwenden\\\" auswählen\"],\"LYzbQ2\":[\"Tool\"],\"Lbis_V\":[\"Schnellnavigation\"],\"Lcpbe2\":[\"Der Plugin-Prozess konnte nicht gestartet werden. Prüfe die Fehlerdetails unten.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN wird nur für DML-Statements (SELECT, INSERT, UPDATE, DELETE) unterstützt. DDL-Statements wie CREATE, DROP oder ALTER können nicht erklärt werden.\"],\"LnT0hQ\":[\"Spalte hinzufügen\"],\"LvutiO\":[\"KI-Vorschlag\"],\"M-rHQO\":[\"Vollbild verlassen\"],\"M0XJba\":[\"Möchtest du den gesamten Abfrageverlauf für diese Verbindung wirklich löschen?\"],\"M1co_O\":[\"Konfiguriert\"],\"M73whl\":[\"Kontext\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Alle anzeigen\"],\"MXdOwj\":[\"Verbindungen trennen\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"K8s-Verbindung auswählen\"],\"Mc1tjS\":[\"Aktiviere ANALYZE, um tatsächliche Zeilen, Laufzeit, Schleifen und Buffer zu prüfen.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" weitere Zeilen\"],\"Mp0jQ_\":[\"Dieser Treiber unterstützt Primärschlüssel nur beim Erstellen einer Tabelle\"],\"MqpZwN\":[\"Tabularis-Prozess\"],\"MxIx43\":[\"↑↓ zum Navigieren, Enter zum Öffnen\"],\"MygtgQ\":[\"Markdown-Zelle hinzufügen\"],\"N40H-G\":[\"Alle\"],\"N5UQxq\":[\"Ollama wurde auf Port \",[\"0\"],\" nicht erkannt. Läuft es?\"],\"N6GBcC\":[\"Löschen bestätigen\"],\"N6aqHp\":[\"Ausgeführte Abfragen\"],\"N9_S15\":[\"Eine neue Tabelle wird erstellt\"],\"NBdMa1\":[\"Langsamster Schritt\"],\"NC2AI2\":[\"Länge\"],\"NCzNnx\":[\"Aufsteigend sortieren\"],\"NT4Ubs\":[\"Benutzerdefinierten Schlüssel löschen und auf Umgebungsvariable zurücksetzen (falls vorhanden)\"],\"NUjrCO\":[\"Keine Favoriten entsprechen deiner Suche\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Baum-Gesamt: \",[\"0\"]],\"Nc2VQn\":[\"An bestehende anhängen\"],\"NgFERn\":[\"Zu Favoriten hinzufügen\"],\"NktMHG\":[\"Datenbankname\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Testen\"],\"Nq5QTk\":[\"n-te erklären\"],\"O2STgu\":[\"Export fehlgeschlagen: \"],\"O8SV8O\":[\"Wird heruntergeladen...\"],\"O9_WW6\":[\"Verbindung\"],\"OGEsKj\":[\"Alle Zellen ausführen\"],\"OGWdBg\":[\"Ansichtsname\"],\"OHqT6w\":[\"Tastenkombination drücken...\"],\"OXJsaG\":[\"Ungültiger Parametername\"],\"OfhWJH\":[\"Zurücksetzen\"],\"OlAl5i\":[\"Alle ausklappen\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Discord beitreten\"],\"P1YGsb\":[\"SQL-Generierung\"],\"P2m1xb\":[\"Bei Fehler stoppen\"],\"P3Qlys\":[\"Keine Verbindungs-ID\"],\"P6Y3Yf\":[\"Führe diesen Befehl im Terminal aus und starte anschließend Claude Code neu.\"],\"PCdj-c\":[\"Alle abwählen\"],\"PMnFt9\":[\"Datenträger lesen/s\"],\"PQU2Va\":[\"Vorschlag mit Eingabetaste übernehmen\"],\"PRnH8G\":[\"von \",[\"0\"]],\"PY8UF3\":[\"Parallel umgeschaltet (Zelle \",[\"n\"],\")\"],\"PiH3UR\":[\"Kopiert!\"],\"Pia95d\":[\"Spaltenname ist erforderlich\"],\"PrElXQ\":[\"Aktualisieren\"],\"PrixCC\":[\"Zeilen werden an eine bestehende Tabelle angehängt\"],\"Pujgbb\":[\"Ziel konfigurieren\"],\"Pw_eQV\":[\"Plugin konnte nicht gestartet werden\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Keine gespeicherten Abfragen\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Keine Kindprozesse\"],\"QCxMC0\":[\"Automatisch nach neuen Versionen suchen, wenn die App gestartet wird\"],\"QEazml\":[\"Auswahl löschen\"],\"QHcLEN\":[\"Verbunden\"],\"QLHHFO\":[\"Nur-Lese-Modus\"],\"QOvAW3\":[\"Neue Funktionen\"],\"QULGRi\":[\"Keine gültigen Abfragen gefunden\"],\"QZwllF\":[\"Durchsuchen...\"],\"QbkSr_\":[\"EXPLAIN nicht verfügbar.\"],\"QeHFYZ\":[\"EXPLAIN fehlgeschlagen: \",[\"0\"]],\"Qll2Tb\":[\"Abst.\"],\"Qoq-GP\":[\"Mehr lesen\"],\"Qu4Hog\":[\"Notebook erfolgreich importiert\"],\"R-A2Vd\":[\"Keine Daten zum Anzeigen\"],\"R0Hkb2\":[[\"0\"],\" Datenbank(en) ausgewählt\"],\"R1nHhB\":[\"Bereits vorhanden\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"In Konsole umwandeln\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Einrichtung\"],\"RF-HyV\":[\"Wähle deine bevorzugte Sprache. \\\"Auto\\\" verwendet die Systemsprache.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Namen kopieren\"],\"RI-HZc\":[[\"0\"],\"-Schlüssel eingeben\"],\"RJrE17\":[\"Möchtest du die Ansicht \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Ein Stern hilft anderen, das Projekt zu entdecken\"],\"Rb3Tdm\":[\"Notebook-Name\"],\"RcbKJ3\":[\"Bei Aktualisierung\"],\"RkefFq\":[\"Führt vor dem Modal ein EXPLAIN aus, damit der Plan sichtbar ist.\"],\"RnF_hl\":[\"Plugin-Registry wird geladen...\"],\"Rns7_C\":[\"Diese Aktion kann nicht sofort rückgängig gemacht werden\"],\"RoKRqW\":[\"Verfügbare Plugins\"],\"RphpKk\":[\"Erscheinungsbild\"],\"Rt8sHM\":[\"Sortier- oder temporäre Arbeit erkannt\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Aktiviert\"],\"S1veKH\":[\"Auswahl zurücksetzen\"],\"S5zeZU\":[\"Vorschau umschalten\"],\"S8Yqbl\":[\"Einfügen\"],\"SDND4q\":[\"Nicht konfiguriert\"],\"SJRy3D\":[\"(Automatisch generiert)\"],\"SSwIjo\":[\"EMPTY setzen\"],\"SgvA_r\":[\"Drücke Ausführen (Ctrl/Command+F5), um Tabellendaten zu laden\"],\"SlfejT\":[\"Fehler\"],\"SoATkx\":[\"Zelle kopieren\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"Endpoint-URL\"],\"T7w5CQ\":[\"Erstellen einer neuen Zeile fehlgeschlagen: \"],\"T9947j\":[\"Wert (z. B. 'Text' oder 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Zum vertikalen Layout wechseln\"],\"TK5oex\":[\"Prompt speichern\"],\"TKQ7K-\":[\"Installieren\"],\"TKZreP\":[\"Erforderlich\"],\"TMLAx2\":[\"Erforderlich\"],\"TO08JI\":[\"Fremdschlüssel\"],\"TQloo1\":[\"Fremdschlüssel erstellen\"],\"TVKqvO\":[\"Zeile bearbeiten\"],\"TYSdQ3\":[\"SELECT-Abfrage ausführen\"],\"TfDFHS\":[\"Lange Zeilen im Editor umbrechen statt horizontal zu scrollen.\"],\"Tibfjs\":[\"Keine gespeicherten Verbindungen — erstelle unten eine\"],\"Tj36Dr\":[\"Auf Standard zurücksetzen\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Sperren\"],\"TpwXyg\":[\"Fehlen Zeitwerte, hat der Server wahrscheinlich nur einen geschätzten Plan geliefert.\"],\"Tw2M1h\":[\"Installation fehlgeschlagen\"],\"Ty-rm9\":[\"SSH-Verbindungen\"],\"Tz0i8g\":[\"Einstellungen\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes-Verbindungen\"],\"U4uzyV\":[\"Neuigkeiten\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Ausführung stoppen, wenn eine Zelle fehlschlägt\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" auf \",[\"1\"],\" — vor Ausführung prüfen.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Konfiguration für \",[\"clientName\"],\" erfolgreich installiert! Starte die App neu, um sie anzuwenden.\"],\"URmyfc\":[\"Details\"],\"UWQBvp\":[\"SQL-Vorlagen generieren\"],\"UawTKZ\":[\"Optional. Gib die ausführbare Datei an, die zum Starten dieses Plugins verwendet wird (z. B. python3 unter macOS/Linux, python oder ein vollständiger Pfad unter Windows). Leer lassen, um den Standard zu verwenden.\"],\"Ub8sf5\":[\"SQLite unterstützt das Löschen von Fremdschlüsseln via ALTER TABLE nicht.\"],\"UbbJ8j\":[\"Keine Optionen gefunden\"],\"Ubs68g\":[\"Allgemein\"],\"UftN8J\":[\"Diese Verbindungen lehnen Schreibvorgänge ab. Andere verhalten sich normal.\"],\"UnQNah\":[\"Möchtest du die Spalte \\\"\",[\"0\"],\"\\\" aus der Tabelle \\\"\",[\"tableName\"],\"\\\" wirklich löschen?\\n\\nWARNUNG: Dadurch werden alle Daten in dieser Spalte dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.\"],\"UncTTh\":[\"Summe des RSS über den Prozessbaum — gemeinsam genutzter Speicher kann doppelt gezählt werden\"],\"UpjgFm\":[\"Parameter geändert\"],\"UsAnu1\":[\"ANALYZE führt die Abfrage aus. Bei datenverändernden Statements mit Vorsicht verwenden.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tabgröße\"],\"UzWGWO\":[\"Zum SQL-WHERE-Eingabefeld wechseln\"],\"V-chk5\":[\"Wie oft geprüft werden soll, ob aktive Verbindungen noch erreichbar sind. Setze 0, um die Prüfung zu deaktivieren.\"],\"V-pw1j\":[\"Tabellenname\"],\"V2T0Uw\":[\"Noch keine gespeicherten Notebooks.\"],\"V3aNwx\":[\"Dateneditor\"],\"VGYp2r\":[\"Auf alle anwenden\"],\"VH8S7x\":[\"Zwischenablage-Spalte\"],\"VIAEcS\":[\"Laden der Datenbanken fehlgeschlagen. Prüfe deine Anmeldedaten.\"],\"VKdztF\":[\"Zeilen anhängen\"],\"VLiHXI\":[\"Daten analysieren\"],\"VMbmXc\":[\"Möchtest du \\\"\",[\"pluginName\"],\"\\\" wirklich entfernen? Dadurch werden die Plugin-Dateien gelöscht.\"],\"VO3weF\":[\"Keine Datei geladen\"],\"VOZlKc\":[\"Datenbank importieren\"],\"VPzsIz\":[\"Name wird generiert...\"],\"VUul0v\":[\"Das Beenden von\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Alle Abfragen\"],\"Vi2Pqx\":[\"von\"],\"Vl2zn2\":[\"gestoppt\"],\"Vo4uBA\":[\"Bei der Installation des Plugins ist ein Fehler aufgetreten. Siehe Details unten.\"],\"VqqyOs\":[\"Führe eine Abfrage aus, um Ergebnisse zu sehen\"],\"VzhDFh\":[\"Blockiere jede Nicht-SELECT-Anweisung über MCP, außer für die unten erlaubten Verbindungen.\"],\"W3uwpT\":[\"Alle Tabs schließen\"],\"W4MKLh\":[\"z.B. In Prod riskant, bestätigen…\"],\"WA8RND\":[\"Möchtest du die Tabelle \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"WG8Qgt\":[\"Tabelle löschen\"],\"WLnvCZ\":[\"Benutzername eingeben\"],\"WM-__8\":[\"Verbindungen suchen...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen in \\\"\",[\"tableName\"],\"\\\" importiert\"],\"other\":[\"#\",\" Zeilen in \\\"\",[\"tableName\"],\"\\\" importiert\"]}]],\"WTfntM\":[\"Möchtest du die Abfrage \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"WarTN_\":[\"erfolgreich\"],\"WcF1uL\":[\"Gruppenname\"],\"Weq9zb\":[\"Allgemein\"],\"WmPpB1\":[\"Ausführungsplan wird geladen…\"],\"Wu7cK0\":[\"Keine Datenbanken gefunden\"],\"WvoUQF\":[\"Zelle \",[\"n\"],\" gelöscht\"],\"Ww3pDD\":[\"MANUELLER BEFEHL\"],\"X-20AU\":[\"Prompt für Abfrage-Tabnamen eingeben...\"],\"X-U6_w\":[\"Schriftfamilie\"],\"X5fs0g\":[\"Erstelle deine erste Verbindung, um loszulegen.\"],\"X7Ayjp\":[\"Passwort im System-Keychain gespeichert\"],\"X9kySA\":[\"Favoriten\"],\"XJOV1Y\":[\"Aktivität\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Abfrageerklärung\"],\"XVF2Pf\":[\"Schemata bearbeiten\"],\"XW6OYF\":[\"Dieses Plugin benötigt möglicherweise einen Interpreter (z. B. Python). Verwende die Plugin-Einstellungen, um den Interpreter-Pfad zu konfigurieren.\"],\"XZB6Xr\":[\"Maximale Log-Einträge\"],\"Xcffv2\":[\"Zeigt die Schaltflächen AI Assist und Explain im Editor an\"],\"XeqTSh\":[\"Join-Typ\"],\"XmJfZT\":[\"name\"],\"XoQfG1\":[\"SSH-Benutzer\"],\"XwI0Vw\":[\"Auto (System)\"],\"XyDlLX\":[\"Indexname\"],\"Y2P2aK\":[\"Wähle die zu ladenden Schemata aus:\"],\"Y8HYw2\":[\"Wert\"],\"Y8zX3R\":[\"In Editor einfügen\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Suchen...\"],\"YWlnMZ\":[\"Ollama-Port\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Durchsuche und installiere Plugins aus dem Registry.\"],\"Y_3yKT\":[\"In neuem Tab öffnen\"],\"YiAQ_Q\":[\"Tabellen aktualisieren\"],\"Ysjr9Y\":[\"SQL-Vorschau\"],\"YswNf7\":[\"Alle Level\"],\"YtNwr6\":[\"Maximale Anzahl an Abfrageverlaufseinträgen pro Verbindung.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Wird geladen...\"],\"Z7ZXbT\":[\"Freigeben\"],\"Z8JpBH\":[\"Als Notebook exportieren\"],\"Z8fBIc\":[\"Tatsächliche Zeilen übersteigen die Schätzung\"],\"ZC2VJP\":[\"Ausführen\"],\"ZCIS4k\":[\"keine aktiven Filter\"],\"ZF1_UT\":[\"SSL-Modus\"],\"ZGjBPa\":[\"Logs löschen\"],\"ZHQTlM\":[\"Importiere aus\"],\"ZIFDoJ\":[\"Bitte wähle mindestens Struktur oder Daten\"],\"ZIZA6o\":[\"Vor Freigabe bearbeiten\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Parser-Warnungen\"],\"other\":[\"#\",\" Parser-Warnungen\"]}]],\"ZVn8p2\":[\"Zeigt Zeilennummern im Rand des Editors an.\"],\"ZYnwzF\":[\"Getrennt\"],\"Za3_fO\":[\"Fehler\"],\"Zf7LHg\":[\"Keine Kontexte gefunden (ist kubectl installiert?)\"],\"Zfotp5\":[\"Große Schätzabweichungen deuten meist auf veraltete Statistiken oder Prädikate hin, die der Planner schlecht modellieren kann.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Schemata konnten nicht geladen werden\"],\"ZqXGPF\":[\"Löschen der Ansicht fehlgeschlagen: \"],\"ZuL73E\":[\"Neue Datenbankansicht erstellen\"],\"_-bi4r\":[\"Referenzierte Tabelle\"],\"_AEYGI\":[\"Noch kein Ausführungsverlauf\"],\"_FdpZc\":[\"Laden der Ansichtsdefinition fehlgeschlagen: \"],\"_FxSdi\":[\"Durchsuche die direkten Open-Source-Abhängigkeiten, die in App, Backend und Tooling verwendet werden.\"],\"_JyTG8\":[\"Explain-Prompt eingeben...\"],\"_Ltc_k\":[\"Zusätzlich\"],\"_Q2Wix\":[\"Zeilen\"],\"_TK1zF\":[\"Gespeicherte Verbindung\"],\"_bJFBE\":[\"Verbindungs-Timeout\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Baum\"],\"_dqduX\":[\"Nächste Seite\"],\"_fwE6J\":[\"Älter\"],\"_n04sB\":[\"Beenden\"],\"_otxbQ\":[\"Schlüsseldatei\"],\"_pezIT\":[\"Verbindung zu \",[\"0\"],\" fehlgeschlagen. Bitte prüfe deine Einstellungen oder stelle sicher, dass die Datenbank läuft.\"],\"_srfkj\":[\"Benutzerdefinierter Schlüssel erfolgreich gelöscht\"],\"_t6aFo\":[\"MySQL und MariaDB können je nach Serverversion auf EXPLAIN FORMAT=JSON oder tabellarisches EXPLAIN zurückfallen.\"],\"_xTbaM\":[\"Spalten\"],\"_yxaaL\":[\"Eindeutiger Index\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis ist ein freies Open-Source-Projekt. Wenn du es nützlich findest, unterstütze das Projekt und vernetze dich mit der Community.\"],\"a9CASo\":[\"SQLite unterstützt nur das Umbenennen von Spalten. Andere Änderungen erfordern, dass die Tabelle manuell neu erstellt wird.\"],\"aAIQg2\":[\"Darstellung\"],\"aC_vCa\":[\"Namen mit KI generieren\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Wähle einen Knoten aus, um Details zu sehen\"],\"aHKcKc\":[\"Vorherige Seite\"],\"aI-5wG\":[\"CA prüfen\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Standardwert\"],\"aScJP1\":[\"Diese Abfrage ausführen\"],\"aVNbN8\":[\"Filterbedingungen\"],\"aWhdMQ\":[\"Vorhandene SSH-Verbindung verwenden\"],\"aXYd8V\":[\"Zeitlimit\"],\"aX_S_r\":[\"Seite \",[\"0\"],\" von \",[\"totalPages\"]],\"agZcf8\":[\"Generiertes SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [Felder]\"],\"alplHn\":[\"Abfrageplan wird mit KI analysiert...\"],\"anBcU3\":[\"Wenn dir tabularis gefällt und du mehr Funktionen sehen möchtest, unterstütze das Projekt durch Code-Beiträge, Bug-Reports oder einen Stern auf GitHub.\"],\"arHmj2\":[\"Möchtest du diese Abfrage wirklich aus dem Verlauf löschen?\"],\"arKcqW\":[\"Ältere Server können auf geschätzte Pläne mit weniger Metriken zurückfallen.\"],\"arcpYe\":[\"Freigabe erforderlich\"],\"aurEkh\":[\"Prozesse werden geladen…\"],\"avtdsd\":[\"SQL-Modus\"],\"az8lvo\":[\"Aus\"],\"b1Ah3z\":[\"Fokussiert auf\"],\"b392Dr\":[\"Alle ausklappen\"],\"b5S_PU\":[\"Datenbankname\"],\"bAvovP\":[\"Nach unten\"],\"bH3JqY\":[\"Keine Tabellen gefunden\"],\"bP5JOn\":[\"Zeilenumbruch\"],\"bcOdok\":[\"Gruppe löschen\"],\"bcqeas\":[\"Alle MCP-Abfragen nur lesen\"],\"bmca5u\":[\"Nur Schreibvorgänge\"],\"bpCiBU\":[\"Schreibvorgänge erlauben\"],\"bqnhqW\":[\"Schätzung übersteigt tatsächliche Zeilen\"],\"bqpcP7\":[\"Datenbank sichern\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Fehler\"],\"bw22Gk\":[\"Spalten-Schema\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Wichtigste Probleme\"],\"cFCKYZ\":[\"Ablehnen\"],\"cFGrCP\":[\"Tabelle\"],\"cGeFup\":[\"Schriftgröße\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Auf Tabelle fokussieren\"],\"cM9NHc\":[\"Herabstufen auf\"],\"cO9-2L\":[\"Deaktivieren\"],\"cSev-j\":[\"Filter\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen importieren\"],\"other\":[\"#\",\" Zeilen importieren\"]}]],\"c_xoSn\":[\"Zelle \",[\"n\"],\" umbenannt\"],\"cd0XEW\":[\"Abfrage speichern\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Gruppe teilen\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" Statements\"],\"d34vwG\":[\"Datenbanken laden\"],\"d6ynQ7\":[\"Absteigend sortieren\"],\"d8_6_v\":[\"abbrechen\"],\"d8wc1_\":[\"Beispielwerte\"],\"dBXoCS\":[\"Eine Umgebungsvariable ist vorhanden, aber du kannst sie überschreiben, indem du oben einen Schlüssel setzt.\"],\"dD7NPy\":[\"Gliederung\"],\"dEgA5A\":[\"Abbrechen\"],\"dMtLDE\":[\"bis\"],\"dPJVhW\":[\"Installation fehlgeschlagen\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Sitzung\"],\"other\":[\"#\",\" Sitzungen\"]}]],\"dTUzKm\":[\"Ausgewählte ausführen (\",[\"0\"],\")\"],\"dU_iQN\":[\"Keine Sitzung entspricht den Filtern.\"],\"dUh9QW\":[\"Planung\"],\"dVoir2\":[\"Markdown-Zelle \",[\"n\"],\" hinzugefügt\"],\"dZ0d2O\":[\"Bitte wähle mindestens eine Tabelle\"],\"dhi13U\":[\"Bild auswählen…\"],\"dli1JX\":[\"Änderungen übernehmen\"],\"dmYV6f\":[\"Routinen\"],\"dohZCo\":[\"Anweisungen für KI-gestützte SQL-Generierung. Verwende \",[\"SCHEMA\"],\" als Platzhalter für die Datenbankstruktur.\"],\"dtxpK2\":[\"Analysieren\"],\"dwW9nJ\":[\"Zeilennummern anzeigen\"],\"dwWVw_\":[\"Willkommensbildschirm anzeigen\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Tab\"],\"other\":[\"#\",\" Tabs\"]}]],\"dxxY9r\":[\"Falls vorhanden\"],\"dyN4j9\":[\"Klicke auf 'Vorschau ausführen', um Ergebnisse zu sehen\"],\"e07Iz5\":[\"Task-Manager öffnen\"],\"e0NzXu\":[\"Dieses Projekt ist Work in Progress (WIP). Die Kernfunktionen sind stabil, aber wir haben große Pläne.\"],\"e1UKxf\":[\"Diese Abfrage speichern\"],\"e34gdU\":[\"Wie lange gewartet wird, bevor abgebrochen wird.\"],\"e62LQd\":[\"Zwangsweise beenden\"],\"e6QZsM\":[\"Editor-Thema\"],\"e8CirT\":[\"Abfrage ausführen\"],\"eD2kUP\":[\"Buffer gelesen\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Prompt für Explain-Plan-Analyse eingeben...\"],\"eIVolo\":[\"Datenträger L/S\"],\"eJOEBy\":[\"Wird exportiert...\"],\"eKHY3W\":[\"Plugin-Einstellungen\"],\"eMb6Ub\":[\"Ressource auswählen...\"],\"ePK91l\":[\"Bearbeiten\"],\"eXweu6\":[\"Zelle ausklappen\"],\"ecNsTE\":[\"Keine Abfragen entsprechen deiner Suche\"],\"ecUA8p\":[\"Heute\"],\"ecpIZP\":[\"Passphrase eingeben, falls der Schlüssel verschlüsselt ist\"],\"esl-Tv\":[\"Ressourcentyp\"],\"exyUec\":[\"Verbindung\"],\"f2AJjl\":[\"Zeile löschen\"],\"f4pD-j\":[\"Verbindungstest fehlgeschlagen\"],\"f7sXvi\":[\"Passwort eingeben\"],\"fAsxc0\":[\"Sequentielle Scans\"],\"fIeFs0\":[\"Wert auswählen...\"],\"fJm92A\":[\"Wählen Sie eine Datei mit einem EXPLAIN-Plan (PostgreSQL JSON- oder Textformat), um ihn zu visualisieren.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Werte\"],\"f_b1TA\":[\"Ausführungsverlauf\"],\"fghnqP\":[\"Zu Verbindung 1-9 wechseln\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Komma (,)\"],\"fp711N\":[\"Blockiert (nur lesen)\"],\"fpzyLj\":[\"Seite \",[\"0\"],\" von \",[\"1\"]],\"fuA6oy\":[\"Socket-Timeout\"],\"fvImQM\":[[\"0\"],\" ausgewählt\"],\"fwr_nh\":[\"Installiere Erweiterungen, verwalte Plugin-Treiber und behalte Laufzeiteinstellungen im Blick.\"],\"g0ZzK4\":[\"Gültiges JSON\"],\"g11hAR\":[\"Neue Zeile\"],\"g8VcMm\":[\"Mein K8s-Cluster\"],\"gCFR_O\":[\"Parallele Ausführung (Alle ausführen)\"],\"gEjU98\":[\"Verbindungen öffnen\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Mindestens eine Spalte ist erforderlich\"],\"gSuQrG\":[\"Keine Verbindung entspricht \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Abfrage erneut ausführen\"],\"gZWMnn\":[\"KI-Analyse\"],\"ghYd73\":[\"Ziel wählen...\"],\"giAqEC\":[\"Neue Tabelle erstellen\"],\"gnQS8X\":[\"Maximale Paketgröße, die vom MySQL-Connector verwendet wird.\"],\"gqV5VL\":[\"Integriert, nicht anpassbar\"],\"gww_XE\":[\"Referenzierte Spalte\"],\"gxXPJ9\":[\"Interpreter konfigurieren\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximieren\"],\"h-XNc9\":[\"CSV-Trennzeichen\"],\"h-kNAk\":[\"z.B. verkaufsdaten\"],\"h3Z_aK\":[\"Markdown hier schreiben...\"],\"h7MgpO\":[\"Tastenkürzel\"],\"h7peZQ\":[\"Erlauben\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Systemprozess läuft\"],\"other\":[\"#\",\" Systemprozesse laufen\"]}]],\"hEZrFh\":[\"SQL-Datei ausführen...\"],\"hEipgW\":[\"Jetzt nach Updates suchen\"],\"hG89Ed\":[\"Bild\"],\"hIHcBE\":[\"Als CSV exportieren\"],\"hItdtk\":[\"Ordner auswählen\"],\"hXFVjo\":[\"Tabellenname ist erforderlich\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Erneut ausführen\"],\"hbz1rh\":[\"Schlüssel\"],\"hdsaJo\":[\"Importiert...\"],\"he3ygx\":[\"Kopieren\"],\"hfGimp\":[\"Namespace auswählen...\"],\"hjjSEi\":[\"Nur-Lese-Verbindungen\"],\"hjwN_s\":[\"Ressourcenname\"],\"hlF1mD\":[\"Auswahl kopieren\"],\"hnboBb\":[\"KI-Analyse des Abfrageplans\"],\"hq4-D2\":[\"Der API-Schlüssel wird sicher im System-Keychain gespeichert. Ein hier gesetzter Schlüssel überschreibt die Umgebungsvariable.\"],\"hqjXdn\":[\"Löschen der SSH-Verbindung fehlgeschlagen\"],\"hqofAK\":[\"SQL kopieren\"],\"hy6L14\":[\"Auf GitHub ansehen\"],\"hyjACX\":[\"Zellen ein-/ausgeklappt\"],\"hz1b5W\":[\"Keine passenden Elemente gefunden\"],\"i1vAVM\":[\"Neue Tabelle erstellen\"],\"i3S5T3\":[\"Favoriten durchsuchen...\"],\"i4_LY_\":[\"Schreiben\"],\"i5HBWh\":[\"Abfrageverlauf zurückgesetzt\"],\"iAVlge\":[\"Passe die Anweisungen für die KI-Namensgenerierung von Notebook-Zellen an. Der Zelleninhalt (SQL oder Markdown) wird als Benutzernachricht gesendet.\"],\"iE1yAB\":[\"Tabellen filtern...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Verbinden\"],\"iSryJ2\":[\"Mein SSH-Server\"],\"iT7UeX\":[\"Index hinzufügen\"],\"iUWwuR\":[\"Herunterladen und installieren\"],\"ia7i08\":[\"Zuerst Kontext/Namespace/Typ auswählen\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Gespeichert\"],\"igcsfY\":[\"Keine Plugins im Registry verfügbar.\"],\"ij-Elv\":[\"Bildvorschau\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" erklärbare Abfragen gefunden\"],\"other\":[\"#\",\" erklärbare Abfragen gefunden\"]}]],\"ioL38P\":[\"Überwache Plugin-Prozesse, CPU, RAM und Datenträgernutzung in Echtzeit\"],\"ixlL_e\":[\"SSH-Schlüsseldatei (optional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Modell auswählen\"],\"j3gyYH\":[\"Alle anwenden\"],\"j5CWO4\":[\"Aktuell\"],\"j9HPuI\":[\"Zeile #\",[\"0\"]],\"jBtpMP\":[\"Alle Status\"],\"jEu4bB\":[\"Spalten\"],\"jEyQIs\":[\"Keine Routinen gefunden\"],\"jHc1By\":[\"Ansicht löschen\"],\"jI6sj4\":[\"Kosten, Laufzeit und Zeilenschätzungen sind im Vergleich zu PostgreSQL und MySQL oft nicht verfügbar.\"],\"jIxQCZ\":[\"Für deine Plattform nicht verfügbar\"],\"jKIncn\":[\"Datenbankname ist erforderlich\"],\"jPSk57\":[\"Grund (optional)\"],\"jUNY_d\":[\"View\"],\"jVqjDo\":[\"Ungültiges Notebook-Dateiformat\"],\"jWSZ-A\":[\"Nur Vorschau - vollständige Daten nicht geladen\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket-Timeout in Millisekunden.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Verbindungsname ist erforderlich\"],\"jsQZMk\":[\"KI\"],\"juO8wz\":[\"Kindprozess\"],\"jx0t66\":[\"Kindprozesse einklappen\"],\"jxShEf\":[\"Ansicht erstellen\"],\"jz5PKx\":[\"Ansichtsdefinition\"],\"k-0mL-\":[\"Spalte hinzufügen\"],\"k-XiMX\":[\"Rohtext\"],\"k2UnVy\":[\"Hash-Bedingung\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"Sekunden\"],\"kBiBq7\":[\"Index \\\"\",[\"name\"],\"\\\" löschen?\"],\"kEYasw\":[\"Diagramm umschalten\"],\"kI1qVD\":[\"Formatieren\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen · \",[\"1\"],\" ms\"],\"other\":[\"#\",\" Zeilen · \",[\"2\"],\" ms\"]}]],\"kJDmsI\":[\"Ereignisdetails\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registry\"],\"kY-q3P\":[[\"label\"],\" ist erforderlich\"],\"kexIdC\":[\"Kubernetes-Port-Forward verwenden\"],\"kj2-CR\":[\"Fehlerdetails\"],\"krksx_\":[\"Erfolg\"],\"kwY6nh\":[\"Schließen\"],\"kx0s-n\":[\"Ergebnisse\"],\"kxUEfE\":[\"Abrufen der Routinen-Definition fehlgeschlagen: \"],\"l2Op2p\":[\"Abfrageparameter\"],\"l9Ivba\":[\"Plugin-Prozesse und Systemressourcen\"],\"lBdPxu\":[\"Akzentfarbe\"],\"lCF0wC\":[\"Aktualisieren\"],\"lEQRwq\":[\"Daten (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Neue Tabelle erstellt\"],\"lOekZ3\":[\"Zum horizontalen Layout wechseln\"],\"lUA1C1\":[\"Passphrase für SSH-Schlüssel (optional)\"],\"lVeG20\":[\"Rust-Abhängigkeiten\"],\"lXAG6D\":[\"Anweisungen für KI-gestützte Abfrageerklärungen. Verwende \",[\"LANGUAGE\"],\" als Platzhalter für die Ausgabesprache.\"],\"lbbYjy\":[\"Bearbeite die rohe Konfigurationsdatei direkt. Ein Neustart ist erforderlich, um Änderungen anzuwenden.\"],\"lhKW0m\":[\"SQL-Zelle \",[\"n\"],\" hinzugefügt\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Ergebnisse pro Seite (Limit)\"],\"lkz6PL\":[\"Dauer\"],\"lmVGeo\":[\"Fremdschlüssel hinzufügen\"],\"lnnx3E\":[\"Verbinde Tabularis mit Claude Desktop, Cursor und mehr\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Hinzufügen\"],\"m2Q_r8\":[\"JSON in Text-Spalten erkennen\"],\"m2tskz\":[\"Erfolg\"],\"mA-qpe\":[\"Alle Ausführungen abgeschlossen\"],\"mBhhbA\":[\"Logs in die Zwischenablage exportiert\"],\"mCNdzH\":[\"Zelle ausführen\"],\"mO95sp\":[\"Panel schließen\"],\"mP7dLi\":[\"Schriftnamen oben eingeben\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" blockiert\"],\"other\":[\"#\",\" blockiert\"]}]],\"mS74ir\":[\"Speichern der SSH-Verbindung fehlgeschlagen\"],\"mSqtw8\":[\"Vorschau ausführen\"],\"mURmfQ\":[\"Ansichtsdefinition (SQL)\"],\"mX_isJ\":[\"Vertikal\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Struktur (DDL)\"],\"mrk4Cf\":[\"Nach \",[\"colName\"],\" DESC sortieren\"],\"msJ8t1\":[\"Wir haben einen eigenen Treffpunkt für Tabularis-Nutzer eröffnet: Hilfe, Tipps und Mitgestaltung der Roadmap.\"],\"mtvVdV\":[\"Verarbeitete Zeilen\"],\"mx4evv\":[\"Tabelle erstellen\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Herunterladen\"],\"n7JDTx\":[\"Installiere und aktiviere Plugins, um sie hier zu sehen\"],\"nDDJir\":[\"Suche Sitzung, Client, Verbindung…\"],\"nHP-Kr\":[\"Keine aktive Sitzung. Bitte wähle eine Verbindung aus.\"],\"nKhCjW\":[\"Tabellen auswählen\"],\"nNmhuY\":[\"Index erstellen\"],\"nNwvm4\":[\"Fehler\"],\"nOVim5\":[\"Speichern der Verbindung fehlgeschlagen\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Erfordert Erweiterung: \",[\"0\"]],\"ngO6Pv\":[\"Erlaubt der Eingabetaste (zusätzlich zu Tab), den aktiven Autovervollständigungsvorschlag zu übernehmen. Bei deaktivierter Option fügt Enter immer einen Zeilenumbruch ein.\"],\"nhmF3p\":[\"Verbindungen\"],\"noM5A_\":[\"Erstelle deine erste Verbindung\"],\"nohy4m\":[\"Noch keine MCP-Aktivität.\"],\"nr-axf\":[\"Plugin entfernen\"],\"nsPFX9\":[\"In Visual Explain öffnen\"],\"nuBbBr\":[\"Diagramm\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Ändern\"],\"o21Y-P\":[\"Einträge\"],\"o3tP_A\":[\"Index löschen\"],\"o45L8r\":[\"Gib deinen Verbindungsnamen an\"],\"o53XGh\":[\"Ausgewählte Zeile(n) kopieren\"],\"o7J4JM\":[\"Filter\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Level\"],\"oGiIL7\":[\"Standard-Anbieter\"],\"oJ4rAm\":[\"Verbindung verloren\"],\"oJlXF2\":[\"Notebook importieren\"],\"oMFv82\":[\"Vertikal teilen\"],\"oOFiQg\":[\"Begrenzt die Anzahl der pro Abfrage geladenen Zeilen, um Performance-Probleme zu vermeiden. Setze den Wert auf 0, um die Begrenzung zu deaktivieren (nicht empfohlen).\"],\"oT9ZD3\":[\"Übersicht ausblenden\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Diagramm geändert (Zelle \",[\"n\"],\")\"],\"oWfclW\":[\"Zeigt JSON-Viewer-Bedienelemente, wenn eine nicht typisierte Text-Zelle ein JSON-Objekt oder -Array enthält. Verursacht kleine Parse-Kosten pro Zelle.\"],\"obpbdz\":[\"Konfigurationsdatei nicht gefunden (manuell erstellen)\"],\"odZgfC\":[\"KI-CLIENTS\"],\"ogZhXn\":[\"Wähle die Standard-Layout-Richtung für ER-Diagramme\"],\"ohUJJM\":[\"Plugins\"],\"ok3hJJ\":[\"Installiert\"],\"olAdaI\":[\"Tatsächliche Zeilen\"],\"olWzar\":[\"Plugin-Prozess zwangsweise beenden\"],\"ovBPCi\":[\"Standard\"],\"owzTWN\":[\"KI-Modelle von Anbietern aktualisiert\"],\"oxYi6j\":[\"Passt die in der gesamten Anwendung verwendete Grundschriftgröße an (10-20 px).\"],\"p--hsQ\":[\"Eine Datenbankverbindung wurde verloren\"],\"p6NueD\":[\"NEU\"],\"pOYHox\":[\"Aktionen\"],\"pR9bTR\":[\"Keine BLOB-Daten\"],\"pRDT0m\":[\"Tabelle\"],\"pS8S5q\":[\"z. B. users, orders, products\"],\"pSws_M\":[\"Tabellenname\"],\"pVLbKZ\":[\"Ansicht erfolgreich erstellt\"],\"pWT04I\":[\"Prüfung läuft...\"],\"pZJ_6D\":[\"Indexname ist erforderlich\"],\"pddYFG\":[\"Prompt für Notebook-Zellnamen eingeben...\"],\"pnpyuD\":[\"Logging aktivieren\"],\"pqKMPv\":[\"Erstellen der Tabelle fehlgeschlagen: \"],\"pqaP1h\":[\"Schließen\"],\"pqarBu\":[\"Aufst.\"],\"ptuq35\":[\"z. B. Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"Andere bleiben nur lesbar. Nur markierte dürfen schreiben.\"],\"qIrtcK\":[\"Updates\"],\"qOqy8G\":[\"Konfiguration wird geprüft...\"],\"qWaVNs\":[\"Speichern und neu starten\"],\"qb3LPX\":[\"ER-Diagramm anzeigen\"],\"qkK0vq\":[\"Ansichtsname ist erforderlich\"],\"qki9tG\":[\"Fehler\"],\"qoIir-\":[\"Die Basis-URL deiner OpenAI-kompatiblen API. Beispiele: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Alle einklappen\"],\"r6ncaO\":[\"Tab schließen\"],\"rAJlpP\":[\"Container-Port\"],\"rG3WVm\":[\"Lesen\"],\"rGRCeK\":[\"Abfrageverlauf löschen\"],\"rNIto7\":[\"Der Ressourcenname ist erforderlich\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook erfolgreich exportiert\"],\"rY4sEV\":[\"FK löschen\"],\"rbu0nO\":[\"SSH-Verbindungen verwalten\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Verbindung(en)\"],\"other\":[\"#\",\" Verbindung(en)\"]}]],\"rn2_2V\":[\"Filter entfernen\"],\"roABNH\":[\"Kein Abfrageverlauf\"],\"rtir7c\":[\"unbekannt\"],\"ru0-2W\":[\"Keine aktiven Verbindungen\"],\"rvDPWO\":[\"Größte Schätzabweichung\"],\"rwWjWg\":[\"Release Notes\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Verbindung testen\"],\"sBOaim\":[\"Die Konfigurationsdatei wurde gespeichert. Jetzt neu starten, um die Änderungen anzuwenden?\"],\"sCyv9B\":[\"Modelle aktualisieren\"],\"sSUqe4\":[\"Löschen\"],\"sUBkgN\":[\"SQL wird generiert...\"],\"sZZG3d\":[\"Möchtest du \\\"\",[\"0\"],\"\\\" wirklich importieren?\\nDadurch können vorhandene Daten überschrieben werden.\"],\"sbK5ck\":[\"Verlauf durchsuchen...\"],\"sq_bS6\":[\"Bei Löschen\"],\"suW7-E\":[\"Verbindungs-Timeout in Millisekunden.\"],\"t-R8-P\":[\"Ausführung\"],\"t1OfVY\":[[\"totalLibraries\"],\" Bibliotheken\"],\"t2TMzs\":[\"Tab schließen\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Tabelle auswählen...\"],\"t7KRl1\":[\"Protokoll aller MCP-Aufrufe und ausstehender Freigaben. Lokal gespeichert.\"],\"t9NJIk\":[\"Scan-lastige Operationen erkannt\"],\"tB7xof\":[\"Temporäre oder Sortier-Operationen\"],\"tBBXTO\":[\"Ping-Intervall\"],\"tFrT3w\":[\"Füge dies manuell zur Konfigurationsdatei deines Clients hinzu, falls die automatische Installation fehlschlägt.\"],\"tJ7UbA\":[\"fokussierte erklären\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Horizontal teilen\"],\"tQhW-D\":[\"Log-Einstellungen\"],\"tXFGEx\":[\"Keine Kubernetes-Verbindungen gespeichert. Klicke auf „Hinzufügen“, um eine zu erstellen.\"],\"tXLz_8\":[\"Löschen\"],\"tXpRby\":[\"Datenraster\"],\"tbysEk\":[\"Aktionen\"],\"tdta9X\":[\"Seite \",[\"0\"]],\"tfDRzk\":[\"Speichern\"],\"tfEioV\":[\"Alle SQL-Zellen von oben nach unten ausführen\"],\"tiAIaJ\":[\"SSH-Passwort fehlt. Bitte erneut eingeben.\"],\"tk22BR\":[\"Strukturierte Daten einfügen und Schema vor dem Import prüfen\"],\"tst44n\":[\"Ereignisse\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL-Datei erfolgreich ausgeführt\"],\"u6QeR6\":[\"Jetzt neu starten\"],\"uAQUqI\":[\"Status\"],\"uBAxNB\":[\"Editor\"],\"uFViPK\":[\"Keine SSH-Verbindungen verfügbar\"],\"uHUuhp\":[\"Diese Abfrage erklären\"],\"uHfFzS\":[\"Editor-Schriftgröße\"],\"uJ_3K5\":[\"Notebook \\\"\",[\"0\"],\"\\\" löschen? Dies kann nicht rückgängig gemacht werden.\"],\"uKaNJ3\":[\"Im JSON-Editor öffnen\"],\"uQBwTo\":[\"Schemata\"],\"ub54ff\":[\"Plugin-Center\"],\"ufFyBs\":[\"Datenbank erfolgreich exportiert\"],\"upNmR2\":[\"Seitenleisten-Editor öffnen\"],\"utMia3\":[\"Alle abwählen\"],\"uyNaJg\":[\"1 Element\"],\"v61dnS\":[\"Gib den exakten Modellnamen für deinen OpenAI-kompatiblen Anbieter ein.\"],\"v6oeyr\":[\"Installiert\"],\"v75DGg\":[\"Datei auswählen\"],\"v99dO4\":[\"Primärschlüssel\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Abfragen gefunden\"],\"other\":[\"#\",\" Abfragen gefunden\"]}]],\"vCSBPD\":[\"Filter hinzufügen\"],\"vH7uJj\":[\"Sortieren nach…\"],\"vUOA1-\":[\"Modelle suchen...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE enthält tatsächliche Zeilen, Laufzeit, Schleifen und Buffer-Zähler, sofern verfügbar.\"],\"vXIe7J\":[\"Sprache\"],\"vYf4Jm\":[\"Gib eine vollständige SQL-Funktion ein (z. B. ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Bevorzugen\"],\"vditm4\":[\"Plan erklären\"],\"vks_ls\":[\"Andere Tabs schließen\"],\"vnAnIp\":[\"Modell \",[\"0\"],\" wurde in \",[\"1\"],\" nicht gefunden. Es funktioniert möglicherweise nicht korrekt.\"],\"vqoN5u\":[\"Struktur\"],\"vrAvbP\":[\"Möchtest du die Gruppe \\\"\",[\"0\"],\"\\\" wirklich löschen? Verbindungen in dieser Gruppe werden in Ungruppiert verschoben.\"],\"vtJ2yO\":[\"Explorer\"],\"vujQJ5\":[\"Lokalisierung\"],\"vvJPVL\":[\"Übersicht anzeigen\"],\"vwI5S4\":[\"Erfolg\"],\"vzH-7Z\":[\"Erklären\"],\"w7QmD_\":[\"System-Prompt eingeben...\"],\"w9eMXw\":[\"Trigger\"],\"wCJFlW\":[\"Verstrichene Zeit\"],\"wCfv2R\":[\"Verbindung hinzufügen\"],\"wGfc86\":[\"Gesamten Verlauf löschen\"],\"wGwNv4\":[\"Aktive Datenbank\"],\"wJJ-Wy\":[\"Wird installiert...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffer-Treffer\"],\"wQn-RM\":[\"Spalte hinzufügen\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Angewendet\"],\"wTmVhm\":[\"Löschen\"],\"wZeIWq\":[\"Aus Zwischenablage importieren\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"Ausstehend\"],\"wckWOP\":[\"Verwalten\"],\"wdYcKH\":[\"Geöffnete Tabs\"],\"wja8aL\":[\"Ohne Titel\"],\"wkOAzk\":[\"Keine Notebooks entsprechen der Suche.\"],\"wp49Ao\":[\"Verarbeitung von Einfügungen fehlgeschlagen: \"],\"wqG2hQ\":[\"Überspringen (nicht importieren)\"],\"wwrAsK\":[\"Bitte fülle alle erforderlichen Felder aus\"],\"wwu18a\":[\"Symbol\"],\"x2fr_j\":[\"Graph\"],\"xANKBj\":[\"Funktionen\"],\"xBwjck\":[\"Ein Neustart ist erforderlich, um Änderungen anzuwenden.\"],\"xDAtGP\":[\"Nachricht\"],\"xECY01\":[\"Prozeduren\"],\"xGPNgZ\":[\"Prompt-Anpassung\"],\"xNgtS-\":[\"Keine Ansichten gefunden\"],\"xOPa1b\":[\"Der Port muss zwischen 1 und 65535 liegen\"],\"xY9s5E\":[\"Zeitüberschreitung\"],\"xaVUr1\":[\"Franz jagt im komplett verwahrlosten Taxi quer durch Bayern\"],\"xbvTzL\":[\"Dateipfad\"],\"xlew5F\":[\"Leeren\"],\"xmNyKz\":[\"Wird getestet...\"],\"xtuh6D\":[\"Explorer ausklappen\"],\"y-Zdqj\":[\"Kontext auswählen...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"JSON-Viewer öffnen\"],\"yQXjG5\":[\"Alle abwählen\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Gestern\"],\"ygCKqB\":[\"Stopp\"],\"ykCc6r\":[\"Datenbank geändert (Zelle \",[\"n\"],\")\"],\"ynVMSc\":[\"Alle auswählen\"],\"ytdz1d\":[\"KI möchte in die Datenbank schreiben\"],\"yyhzur\":[\"Tabelle erstellen\"],\"yz7wBu\":[\"Schließen\"],\"z0VdfR\":[\"Routine\"],\"z407wX\":[\"SSH-Passwort\"],\"z5kV0h\":[\"Verbindungen\"],\"zBTMzx\":[\"Vorschau\"],\"zCaAKs\":[\"Update-Fehler\"],\"zDAakK\":[\"Diagramm kann ohne Verbindungs-ID nicht angezeigt werden.\"],\"zGe21h\":[\"Dieser Schlüssel wird aus einer Umgebungsvariable geladen\"],\"zGfL5t\":[\"wert\"],\"zL6-4A\":[\"Es laufen keine Plugin-Prozesse\"],\"zLZhCi\":[\"Neue Discord-Community!\"],\"zLlCou\":[\"Spaltennamen kopieren\"],\"zNEL34\":[\"Der Community beitreten\"],\"zNgTlV\":[\"Tabs rechts schließen\"],\"zQz55p\":[\"Struktur anzeigen\"],\"zR0FfH\":[\"Exportiert nach \",[\"target\"]],\"zRZeOc\":[\"Tabellen, Views, Routinen, Trigger suchen...\"],\"zUNMsr\":[\"SSH-Schlüssel\"],\"zXMRzb\":[\"SSH-Port\"],\"zZgoXr\":[\"Keine passende Tabelle\"],\"zaWbms\":[\"Änderungen zurückrollen\"],\"zgClmU\":[\"Konfiguration installieren\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Wert eingeben...\"],\"zvzN4C\":[\"Als aktiv festlegen\"],\"zzDlyQ\":[\"Erfolg\"],\"zzMxrp\":[\"config.json bearbeiten\"],\"zz_Wd_\":[\"Modus\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po index 1ab81e5b..2422c6a8 100644 --- a/src/locales/en/messages.po +++ b/src/locales/en/messages.po @@ -6,39 +6,5287 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: @lingui/cli\n" "Language: en\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" +#: src/components/modals/NewRowModal.tsx +msgid "(Auto-generated)" +msgstr "(Auto-generated)" + +#. placeholder {0}: stats.blocked +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# blocked} other {# blocked}}" +msgstr "{0, plural, one {# blocked} other {# blocked}}" + +#. placeholder {0}: proc.children.length +#. placeholder {0}: stats.child_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# child process} other {# child processes}}" +msgstr "{0, plural, one {# child process} other {# child processes}}" + +#. placeholder {0}: connections.length +#: src/pages/Connections.tsx +msgid "{0, plural, one {# connection} other {# connections}}" +msgstr "{0, plural, one {# connection} other {# connections}}" + +#. placeholder {0}: stats.errors +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# error} other {# errors}}" +msgstr "{0, plural, one {# error} other {# errors}}" + +#. placeholder {0}: stats.total +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# event} other {# events}}" +msgstr "{0, plural, one {# event} other {# events}}" + +#. placeholder {0}: queries.length +#: src/components/modals/ExplainSelectionModal.tsx +msgid "{0, plural, one {# explainable query found} other {# explainable queries found}}" +msgstr "{0, plural, one {# explainable query found} other {# explainable queries found}}" + +#. placeholder {0}: parsed.warnings.length +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# parsing warning} other {# parsing warnings}}" +msgstr "{0, plural, one {# parsing warning} other {# parsing warnings}}" + +#. placeholder {0}: queries.length +#: src/components/modals/QuerySelectionModal.tsx +msgid "{0, plural, one {# query found} other {# queries found}}" +msgstr "{0, plural, one {# query found} other {# queries found}}" + +#. placeholder {0}: result.rows.length +#. placeholder {1}: executionTime != null ? Math.round(executionTime) : "—" +#. placeholder {2}: executionTime != null ? Math.round(executionTime) : "—" +#: src/components/notebook/ResultToolbar.tsx +msgid "{0, plural, one {# row · {1}ms} other {# rows · {2}ms}}" +msgstr "{0, plural, one {# row · {1}ms} other {# rows · {2}ms}}" + +#. placeholder {0}: result.rows_inserted +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row imported into \"{tableName}\"} other {# rows imported into \"{tableName}\"}}" +msgstr "{0, plural, one {# row imported into \"{tableName}\"} other {# rows imported into \"{tableName}\"}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row} other {# rows}}" +msgstr "{0, plural, one {# row} other {# rows}}" + +#. placeholder {0}: visibleSessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "{0, plural, one {# session} other {# sessions}}" +msgstr "{0, plural, one {# session} other {# sessions}}" + +#. placeholder {0}: systemStats.process_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# system process running} other {# system processes running}}" +msgstr "{0, plural, one {# system process running} other {# system processes running}}" + +#. placeholder {0}: tabs.length +#: src/components/modals/TabSwitcherModal.tsx +msgid "{0, plural, one {# tab} other {# tabs}}" +msgstr "{0, plural, one {# tab} other {# tabs}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {Import # row} other {Import # rows}}" +msgstr "{0, plural, one {Import # row} other {Import # rows}}" + +#. placeholder {0}: progress.statements_executed +#. placeholder {1}: progress.total_statements +#: src/components/modals/ImportDatabaseModal.tsx +msgid "{0} / {1} statements" +msgstr "{0} / {1} statements" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "{0} API Key" +msgstr "{0} API Key" + +#. placeholder {0}: selectedDatabasesState.length +#: src/components/modals/NewConnectionModal.tsx +msgid "{0} database(s) selected" +msgstr "{0} database(s) selected" + +#. placeholder {0}: filteredItems.length +#: src/components/modals/QuickNavigatorModal.tsx +msgid "{0} elements" +msgstr "{0} elements" + +#. placeholder {0}: approval.clientHint +#. placeholder {1}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "{0} on {1} — review and decide before it executes." +msgstr "{0} on {1} — review and decide before it executes." + +#. placeholder {0}: activeTab.result.rows.length +#. placeholder {0}: entry.result!.rows.length +#. placeholder {0}: entry.result.rows.length +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "{0} rows retrieved" +msgstr "{0} rows retrieved" + +#. placeholder {0}: selected.size +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "{0} selected" +msgstr "{0} selected" + +#. placeholder {0}: structuredFilters.length +#: src/components/ui/TableToolbar.tsx +msgid "{activeFilterCount} of {0} active" +msgstr "{activeFilterCount} of {0} active" + +#: src/components/ui/DataGrid.tsx +msgid "{deleteRowCount, plural, one {Delete # row} other {Delete # rows}}" +msgstr "{deleteRowCount, plural, one {Delete # row} other {Delete # rows}}" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "{label} is required" +msgstr "{label} is required" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "{rowCount, plural, one {# row} other {# rows}}" +msgstr "{rowCount, plural, one {# row} other {# rows}}" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "{totalLibraries} libraries" +msgstr "{totalLibraries} libraries" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/db.sqlite" +msgstr "/absolute/path/to/db.sqlite" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/folder" +msgstr "/absolute/path/to/folder" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "/path/to/id_rsa" +msgstr "/path/to/id_rsa" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "↑↓ to navigate, Enter to open" +msgstr "↑↓ to navigate, Enter to open" + +#. placeholder {0}: previewResult.rows.length - 5 +#: src/components/modals/ViewEditorModal.tsx +msgid "+{0} more rows" +msgstr "+{0} more rows" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "1 element" +msgstr "1 element" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "A database connection was lost" +msgstr "A database connection was lost" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "A new table will be created" +msgstr "A new table will be created" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "A restart is required to apply changes." +msgstr "A restart is required to apply changes." + +#: src/components/modals/CommunityModal.tsx +msgid "A star helps others discover the project" +msgstr "A star helps others discover the project" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Accent color" +msgstr "Accent color" + +#: src/components/settings/AppearanceTab.tsx +msgid "Accept Suggestion with Enter" +msgstr "Accept Suggestion with Enter" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Actions" +msgstr "Actions" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Actions" +msgstr "Actions" + +#: src/pages/TaskManagerPage.tsx +msgctxt "taskManager" +msgid "Actions" +msgstr "Actions" + +#: src/components/connections/StatusBadge.tsx +msgid "Active" +msgstr "Active" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/pages/Editor.tsx +msgid "Active database" +msgstr "Active database" + +#: src/pages/TaskManagerPage.tsx +msgid "Active queries and connections through this plugin will be interrupted." +msgstr "Active queries and connections through this plugin will be interrupted." + +#: src/pages/McpPage.tsx +msgid "Activity" +msgstr "Activity" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual Rows" +msgstr "Actual Rows" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual rows exceed estimate" +msgstr "Actual rows exceed estimate" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Add" +msgstr "Add" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Add Column" +msgstr "Add Column" + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Add Column" +msgstr "Add Column" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Add Column" +msgstr "Add Column" + +#: src/pages/Connections.tsx +msgid "Add Connection" +msgstr "Add Connection" + +#: src/components/ui/TableToolbar.tsx +msgid "Add filter" +msgstr "Add filter" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Foreign Key" +msgstr "Add Foreign Key" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Index" +msgstr "Add Index" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add Markdown Cell" +msgstr "Add Markdown Cell" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add SQL Cell" +msgstr "Add SQL Cell" + +#: src/components/ui/TableToolbar.tsx +msgid "add the first filter" +msgstr "add the first filter" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Add this to your client config file manually if automatic install fails." +msgstr "Add this to your client config file manually if automatic install fails." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add to Favorites" +msgstr "Add to Favorites" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added Markdown cell {n}" +msgstr "Added Markdown cell {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added SQL cell {n}" +msgstr "Added SQL cell {n}" + +#: src/components/settings/AppearanceTab.tsx +msgid "Adjust the base font size used throughout the application (10-20px)." +msgstr "Adjust the base font size used throughout the application (10-20px)." + +#: src/pages/Settings.tsx +msgid "AI" +msgstr "AI" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "AI" +msgstr "AI" + +#: src/components/settings/AiActivityPanel.tsx +#: src/pages/Settings.tsx +msgid "AI Activity" +msgstr "AI Activity" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "AI Analysis" +msgstr "AI Analysis" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "AI CLIENTS" +msgstr "AI CLIENTS" + +#: src/components/settings/AiTab.tsx +msgid "AI models refreshed from providers" +msgstr "AI models refreshed from providers" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Provider not configured. Please go to Settings > AI." +msgstr "AI Provider not configured. Please go to Settings > AI." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Query Plan Analysis" +msgstr "AI Query Plan Analysis" + +#: src/components/modals/AiApprovalModal.tsx +msgid "AI requested a database write" +msgstr "AI requested a database write" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "AI Suggest" +msgstr "AI Suggest" + +#: src/components/settings/PluginsTab.tsx +msgid "All" +msgstr "All" + +#: src/components/settings/LogsTab.tsx +msgid "All levels" +msgstr "All levels" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All other connections stay read-only. Only the connections checked here may execute writes." +msgstr "All other connections stay read-only. Only the connections checked here may execute writes." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All queries" +msgstr "All queries" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All statuses" +msgstr "All statuses" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All tools" +msgstr "All tools" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Allow" +msgstr "Allow" + +#: src/components/settings/AppearanceTab.tsx +msgid "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline." +msgstr "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Allow writes from MCP" +msgstr "Allow writes from MCP" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Already exists" +msgstr "Already exists" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Alter View" +msgstr "Alter View" + +#: src/components/settings/AiTab.tsx +msgid "An environment variable is present, but you can override it by setting a key above." +msgstr "An environment variable is present, but you can override it by setting a key above." + +#: src/components/modals/PluginInstallErrorModal.tsx +msgid "An error occurred while installing the plugin. See the details below." +msgstr "An error occurred while installing the plugin. See the details below." + +#: src/components/modals/VisualExplainModal.tsx +msgid "Analyze" +msgstr "Analyze" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Analyze Data" +msgstr "Analyze Data" + +#: src/components/modals/VisualExplainModal.tsx +msgid "ANALYZE executes the query. Use with caution on data-modifying statements." +msgstr "ANALYZE executes the query. Use with caution on data-modifying statements." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "Analyzing query plan with AI..." +msgstr "Analyzing query plan with AI..." + +#: src/components/settings/AiTab.tsx +msgid "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable." +msgstr "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable." + +#: src/pages/Settings.tsx +msgid "Appearance" +msgstr "Appearance" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Appearance" +msgstr "Appearance" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Appearance" +msgstr "Appearance" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Append rows" +msgstr "Append rows" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Append to existing" +msgstr "Append to existing" + +#: src/components/ui/FilterRow.tsx +msgid "Applied" +msgstr "Applied" + +#: src/components/ui/FilterRow.tsx +msgid "Apply" +msgstr "Apply" + +#: src/components/ui/TableToolbar.tsx +msgid "Apply All" +msgstr "Apply All" + +#: src/pages/Editor.tsx +msgid "Apply to all" +msgstr "Apply to all" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval gate" +msgstr "Approval gate" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Approval ID" +msgstr "Approval ID" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval required" +msgstr "Approval required" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Approve" +msgstr "Approve" + +#: src/components/settings/LogsTab.tsx +msgid "Are you sure you want to clear all logs?" +msgstr "Are you sure you want to clear all logs?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to clear all query history for this connection?" +msgstr "Are you sure you want to clear all query history for this connection?" + +#. placeholder {0}: column.name +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +"\n" +"WARNING: This will permanently delete all data in this column. This action cannot be undone." +msgstr "Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +"\n" +"WARNING: This will permanently delete all data in this column. This action cannot be undone." + +#. placeholder {0}: group?.name +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete group \"{0}\"? Connections in this group will be moved to ungrouped." +msgstr "Are you sure you want to delete group \"{0}\"? Connections in this group will be moved to ungrouped." + +#. placeholder {0}: queries.find((q) => q.id === favoriteDeleteConfirm)?.name ?? "" +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete query \"{0}\"?" +msgstr "Are you sure you want to delete query \"{0}\"?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete table \"{0}\"?" +msgstr "Are you sure you want to delete table \"{0}\"?" + +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete this connection?" +msgstr "Are you sure you want to delete this connection?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete this query from history?" +msgstr "Are you sure you want to delete this query from history?" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Are you sure you want to delete this SSH connection?" +msgstr "Are you sure you want to delete this SSH connection?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop trigger \"{0}\"?" +msgstr "Are you sure you want to drop trigger \"{0}\"?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop view \"{0}\"?" +msgstr "Are you sure you want to drop view \"{0}\"?" + +#. placeholder {0}: file.split(/[\\/]/).pop() +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to import \"{0}\"?\n" +"This may overwrite existing data." +msgstr "Are you sure you want to import \"{0}\"?\n" +"This may overwrite existing data." + +#: src/components/modals/ViewEditorModal.tsx +msgid "Are you sure you want to modify view \"{name}\"?" +msgstr "Are you sure you want to modify view \"{name}\"?" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Are you sure you want to remove \"{pluginName}\"? This will delete the plugin files." +msgstr "Are you sure you want to remove \"{pluginName}\"? This will delete the plugin files." + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Asc" +msgstr "Asc" + +#: src/components/modals/CreateTableModal.tsx +msgid "At least one column is required" +msgstr "At least one column is required" + +#: src/components/modals/CreateIndexModal.tsx +msgid "At least one column must be selected" +msgstr "At least one column must be selected" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere." +msgstr "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Authentication Type" +msgstr "Authentication Type" + +#: src/components/modals/NewRowModal.tsx +msgid "Auto" +msgstr "Auto" + +#: src/components/settings/LocalizationTab.tsx +msgid "Auto (System)" +msgstr "Auto (System)" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Auto Increment" +msgstr "Auto Increment" + +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Auto paginated" +msgstr "Auto paginated" + +#: src/components/settings/InfoTab.tsx +msgid "Automatically check for new versions when the app launches" +msgstr "Automatically check for new versions when the app launches" + +#: src/components/settings/PluginsTab.tsx +msgid "Available Plugins" +msgstr "Available Plugins" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below." +msgstr "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Blocked (read-only)" +msgstr "Blocked (read-only)" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Brand-new Discord community!" +msgstr "Brand-new Discord community!" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Breaking Changes" +msgstr "Breaking Changes" + +#: src/components/settings/PluginsTab.tsx +msgid "Browse and install plugins from the registry." +msgstr "Browse and install plugins from the registry." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse file" +msgstr "Browse file" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse folder" +msgstr "Browse folder" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Browse the direct open source dependencies used across the app, backend, and tooling." +msgstr "Browse the direct open source dependencies used across the app, backend, and tooling." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Browse..." +msgstr "Browse..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Hit" +msgstr "Buffers Hit" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Read" +msgstr "Buffers Read" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Bug Fixes" +msgstr "Bug Fixes" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Built-in, not customizable" +msgstr "Built-in, not customizable" + +#: src/components/settings/PluginsTab.tsx +msgid "by" +msgstr "by" + +#: src/components/modals/NewConnectionModal.tsx +msgid "CA Certificate" +msgstr "CA Certificate" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "cancel" +msgstr "cancel" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/ConfirmModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/JsonViewerPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Cancel" +msgstr "Cancel" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Cannot display diagram without a connection ID." +msgstr "Cannot display diagram without a connection ID." + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "Cargo ecosystem" +msgstr "Cargo ecosystem" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Certificate paths are optional. Leave empty to use system defaults." +msgstr "Certificate paths are optional. Leave empty to use system defaults." + +#: src/components/settings/AiTab.tsx +msgid "Change" +msgstr "Change" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed chart (cell {n})" +msgstr "Changed chart (cell {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed database (cell {n})" +msgstr "Changed database (cell {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed parameters" +msgstr "Changed parameters" + +#: src/components/notebook/CellChart.tsx +msgid "Chart" +msgstr "Chart" + +#: src/components/modals/CommunityModal.tsx +msgid "Chat with the community, get help, suggest features" +msgstr "Chat with the community, get help, suggest features" + +#: src/components/settings/InfoTab.tsx +msgid "Check for Updates Now" +msgstr "Check for Updates Now" + +#: src/components/settings/InfoTab.tsx +msgid "Check for updates on startup" +msgstr "Check for updates on startup" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Checking configuration..." +msgstr "Checking configuration..." + +#: src/components/settings/InfoTab.tsx +msgid "Checking..." +msgstr "Checking..." + +#: src/pages/TaskManagerPage.tsx +msgid "child process" +msgstr "child process" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a connection..." +msgstr "Choose a connection..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a context..." +msgstr "Choose a context..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a namespace..." +msgstr "Choose a namespace..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a resource..." +msgstr "Choose a resource..." + +#: src/components/settings/AppearanceTab.tsx +msgid "Choose an independent theme for the SQL editor, or keep it in sync with the app theme." +msgstr "Choose an independent theme for the SQL editor, or keep it in sync with the app theme." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Choose image…" +msgstr "Choose image…" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Choose target..." +msgstr "Choose target..." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default delimiter character used when copying or exporting rows as CSV." +msgstr "Choose the default delimiter character used when copying or exporting rows as CSV." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default format when copying rows with Ctrl+C / Cmd+C." +msgstr "Choose the default format when copying rows with Ctrl+C / Cmd+C." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default layout direction for ER diagrams" +msgstr "Choose the default layout direction for ER diagrams" + +#: src/components/settings/LocalizationTab.tsx +msgid "Choose your preferred language. 'Auto' will use your system language." +msgstr "Choose your preferred language. 'Auto' will use your system language." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Clear" +msgstr "Clear" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "common" +msgid "Clear" +msgstr "Clear" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Clear" +msgstr "Clear" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Clear All History" +msgstr "Clear All History" + +#: src/components/settings/LogsTab.tsx +msgid "Clear Logs" +msgstr "Clear Logs" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Clear Query History" +msgstr "Clear Query History" + +#: src/components/ui/DataGrid.tsx +msgid "Clear sort" +msgstr "Clear sort" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Click 'Run Preview' to see results" +msgstr "Click 'Run Preview' to see results" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Click another emoji below to change." +msgstr "Click another emoji below to change." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Click Load Databases to fetch available databases." +msgstr "Click Load Databases to fetch available databases." + +#: src/pages/Editor.tsx +msgid "Click to jump to page" +msgstr "Click to jump to page" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Client" +msgstr "Client" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Certificate" +msgstr "Client Certificate" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Key" +msgstr "Client Key" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Clipboard column" +msgstr "Clipboard column" + +#: src/components/connections/ActionButtons.tsx +msgid "Clone" +msgstr "Clone" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/McpModal.tsx +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx #: src/components/modals/SchemaModal.tsx +#: src/components/modals/VisualExplainModal.tsx +#: src/pages/JsonViewerPage.tsx msgid "Close" msgstr "Close" -#: src/components/modals/SchemaModal.tsx -msgid "Key" -msgstr "Key" +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close All Tabs" +msgstr "Close All Tabs" + +#: src/components/ui/TableToolbar.tsx +msgid "Close filter panel (ESC)" +msgstr "Close filter panel (ESC)" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Other Tabs" +msgstr "Close Other Tabs" + +#: src/components/layout/SplitPaneLayout.tsx +msgid "Close panel" +msgstr "Close panel" + +#: src/components/ui/StackedResultItem.tsx +#: src/i18n/registries/shortcutLabels.ts +msgid "Close tab" +msgstr "Close tab" + +#: src/components/modals/TabSwitcherModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tab" +msgstr "Close Tab" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Left" +msgstr "Close Tabs to Left" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Right" +msgstr "Close Tabs to Right" + +#: src/components/ui/JsonInput.tsx +msgid "Code" +msgstr "Code" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Collapse" +msgstr "Collapse" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Collapse all" +msgstr "Collapse all" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Collapse All" +msgstr "Collapse All" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Collapse Cell" +msgstr "Collapse Cell" + +#: src/pages/TaskManagerPage.tsx +msgid "Collapse child processes" +msgstr "Collapse child processes" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Collapsed/expanded cells" +msgstr "Collapsed/expanded cells" + +#: src/components/settings/LogsTab.tsx +msgid "Collect application logs in memory for debugging" +msgstr "Collect application logs in memory for debugging" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Column name is required" +msgstr "Column name is required" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Column Schema" +msgstr "Column Schema" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "columns" +msgstr "columns" + +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +msgid "Columns" +msgstr "Columns" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Comma (,)" +msgstr "Comma (,)" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Config file not found (create manually)" +msgstr "Config file not found (create manually)" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "config.json" +msgstr "config.json" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Configuration installed successfully for {clientName}! Restart the app to apply." +msgstr "Configuration installed successfully for {clientName}! Restart the app to apply." + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Configure destination" +msgstr "Configure destination" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Configure Interpreter" +msgstr "Configure Interpreter" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSH Inline" +msgstr "Configure SSH Inline" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSL/TLS for secure database connections (optional)." +msgstr "Configure SSL/TLS for secure database connections (optional)." + +#: src/components/settings/AiTab.tsx +msgid "Configured" +msgstr "Configured" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Confirm" +msgstr "Confirm" + +#: src/pages/Connections.tsx +msgid "Confirm Delete" +msgstr "Confirm Delete" + +#: src/components/connections/ActionButtons.tsx +msgid "Connect" +msgstr "Connect" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Connect Tabularis to Claude Desktop, Cursor, and more" +msgstr "Connect Tabularis to Claude Desktop, Cursor, and more" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connect Timeout" +msgstr "Connect Timeout" + +#: src/pages/Editor.tsx +msgid "Connected" +msgstr "Connected" + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connection" +msgstr "connection" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Connection" +msgstr "Connection" + +#: src/components/settings/GeneralTab.tsx +msgid "Connection Health Check" +msgstr "Connection Health Check" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "Connection Lost" +msgstr "Connection Lost" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection Name" +msgstr "Connection Name" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Connection name is required" +msgstr "Connection name is required" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Connection name is required" +msgstr "Connection name is required" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Connection String" +msgstr "Connection String" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection test failed" +msgstr "Connection test failed" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connection timeout in milliseconds." +msgstr "Connection timeout in milliseconds." + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connections" +msgstr "connections" + +#: src/components/layout/Sidebar.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/Connections.tsx +msgid "Connections" +msgstr "Connections" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Container Port" +msgstr "Container Port" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Context" +msgstr "Context" + +#: src/pages/Editor.tsx +msgid "Convert to Console" +msgstr "Convert to Console" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Copied to clipboard" +msgstr "Copied to clipboard" + +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copied!" +msgstr "Copied!" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copy" +msgstr "Copy" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as `column`" +msgstr "Copy as `column`" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as table.column" +msgstr "Copy as table.column" + +#: src/components/ui/DataGrid.tsx +msgid "Copy Cell" +msgstr "Copy Cell" + +#: src/components/ui/DataGrid.tsx +msgid "Copy column name" +msgstr "Copy column name" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy error message" +msgstr "Copy error message" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Copy name" +msgstr "Copy name" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Copy Name" +msgstr "Copy Name" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Copy query" +msgstr "Copy query" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy Query" +msgstr "Copy Query" + +#: src/components/ui/DataGrid.tsx +msgid "Copy selected row(s)" +msgstr "Copy selected row(s)" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Copy selection" +msgstr "Copy selection" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Copy SQL" +msgstr "Copy SQL" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Cost" +msgstr "Cost" + +#: src/utils/explainPlan.ts +msgid "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL." +msgstr "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Count rows" +msgstr "Count rows" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Count Rows" +msgstr "Count Rows" + +#: src/pages/TaskManagerPage.tsx +msgid "CPU" +msgstr "CPU" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create a new database trigger" +msgstr "Create a new database trigger" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Create a new database view" +msgstr "Create a new database view" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk" +msgid "Create Foreign Key" +msgstr "Create Foreign Key" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex" +msgid "Create Index" +msgstr "Create Index" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Create new column" +msgstr "Create new column" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Create New SSH Connection" +msgstr "Create New SSH Connection" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Create new table" +msgstr "Create new table" + +#: src/components/modals/CreateTableModal.tsx +msgid "Create New Table" +msgstr "Create New Table" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New Trigger" +msgstr "Create New Trigger" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New View" +msgstr "Create New View" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Create Table" +msgstr "Create Table" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Create Table" +msgstr "Create Table" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create Trigger" +msgstr "Create Trigger" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Create View" +msgstr "Create View" + +#: src/pages/Connections.tsx +msgid "Create your first connection" +msgstr "Create your first connection" + +#: src/pages/Connections.tsx +msgid "Create your first connection to get started." +msgstr "Create your first connection to get started." + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "CSV Delimiter" +msgstr "CSV Delimiter" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Ctrl+Tab" +msgstr "Ctrl+Tab" + +#: src/components/settings/LogsTab.tsx +msgid "Current Logs" +msgstr "Current Logs" + +#: src/components/settings/InfoTab.tsx +msgid "Current Version" +msgstr "Current Version" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Custom" +msgstr "Custom" + +#: src/components/settings/FontPicker.tsx +msgid "Custom Font" +msgstr "Custom Font" + +#: src/components/settings/AiTab.tsx +msgid "Custom key deleted successfully" +msgstr "Custom key deleted successfully" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language." +msgstr "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message." +msgstr "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message." +msgstr "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message." + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Data (INSERT)" +msgstr "Data (INSERT)" + +#: src/components/settings/GeneralTab.tsx +msgid "Data Editor" +msgstr "Data Editor" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Data Grid" +msgstr "Data Grid" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "Data Preview" +msgstr "Data Preview" + +#: src/components/modals/QueryModal.tsx +msgid "Database" +msgstr "Database" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Database exported successfully" +msgstr "Database exported successfully" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name" +msgstr "Database name" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Name" +msgstr "Database Name" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name is required" +msgstr "Database name is required" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Type" +msgstr "Database Type" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Databases" +msgstr "Databases" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "DDL" +msgstr "DDL" + +#: src/components/settings/LogsTab.tsx +msgid "Debug" +msgstr "Debug" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Default" +msgstr "Default" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Default" +msgstr "Default" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Default Copy Format" +msgstr "Default Copy Format" + +#: src/components/settings/GeneralTab.tsx +msgid "Default Layout" +msgstr "Default Layout" + +#: src/components/settings/AiTab.tsx +msgid "Default Model" +msgstr "Default Model" + +#: src/components/settings/AiTab.tsx +msgid "Default Provider" +msgstr "Default Provider" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Default Value" +msgstr "Default Value" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Delete" +msgstr "Delete" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Delete" +msgstr "Delete" + +#: src/components/modals/ConfirmModal.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Delete" +msgstr "Delete" + +#: src/components/connections/ActionButtons.tsx +msgctxt "connections" +msgid "Delete" +msgstr "Delete" + +#: src/pages/Connections.tsx +msgctxt "groups" +msgid "Delete" +msgstr "Delete" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +msgctxt "sidebar" +msgid "Delete" +msgstr "Delete" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Delete" +msgstr "Delete" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Delete Cell" +msgstr "Delete Cell" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete column" +msgstr "Delete column" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Delete Column" +msgstr "Delete Column" + +#: src/components/settings/AiTab.tsx +msgid "Delete custom key and revert to environment variable (if present)" +msgstr "Delete custom key and revert to environment variable (if present)" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete FK" +msgstr "Delete FK" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete foreign key \"{name}\"?" +msgstr "Delete foreign key \"{name}\"?" + +#: src/pages/Connections.tsx +msgid "Delete Group" +msgstr "Delete Group" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Index" +msgstr "Delete Index" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete index \"{name}\"?" +msgstr "Delete index \"{name}\"?" + +#. placeholder {0}: pendingDelete?.title ?? "" +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Delete notebook \"{0}\"? This cannot be undone." +msgstr "Delete notebook \"{0}\"? This cannot be undone." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Query" +msgstr "Delete Query" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Delete Row" +msgstr "Delete Row" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete selected" +msgstr "Delete selected" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Table" +msgstr "Delete Table" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Delete the entire AI activity history? This cannot be undone." +msgstr "Delete the entire AI activity history? This cannot be undone." + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Deleted cell {n}" +msgstr "Deleted cell {n}" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Denied" +msgstr "Denied" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Deny" +msgstr "Deny" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Desc" +msgstr "Desc" + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Deselect All" +msgstr "Deselect All" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Deselect All" +msgstr "Deselect All" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Deselect All" +msgstr "Deselect All" + +#: src/components/ui/FilterRow.tsx +msgid "Deselect from Apply All" +msgstr "Deselect from Apply All" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Details" +msgstr "Details" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Detect JSON in text columns" +msgstr "Detect JSON in text columns" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Diff" +msgstr "Diff" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Direct dependencies declared in package.json and src-tauri/Cargo.toml." +msgstr "Direct dependencies declared in package.json and src-tauri/Cargo.toml." + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Directly edit the raw configuration file. A restart is required to apply changes." +msgstr "Directly edit the raw configuration file. A restart is required to apply changes." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disable" +msgstr "Disable" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disabled" +msgstr "Disabled" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Disconnect" +msgstr "Disconnect" + +#: src/pages/Editor.tsx +msgid "Disconnected" +msgstr "Disconnected" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk R/W" +msgstr "Disk R/W" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Read/s" +msgstr "Disk Read/s" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Write/s" +msgstr "Disk Write/s" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgctxt "discordCallout" +msgid "Dismiss" +msgstr "Dismiss" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgctxt "sidebar" +msgid "Dismiss" +msgstr "Dismiss" + +#: src/components/settings/AppearanceTab.tsx +msgid "Display line numbers in the editor gutter." +msgstr "Display line numbers in the editor gutter." + +#: src/components/settings/GeneralTab.tsx +msgid "Display the welcome screen when the application starts." +msgstr "Display the welcome screen when the application starts." + +#: src/components/settings/PluginsTab.tsx +msgid "Downgrade to" +msgstr "Downgrade to" + +#: src/components/ui/BlobInput.tsx +msgid "Download" +msgstr "Download" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Download & Install" +msgstr "Download & Install" + +#: src/components/ui/BlobInput.tsx +msgid "Download unavailable - only preview loaded" +msgstr "Download unavailable - only preview loaded" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Downloading..." +msgstr "Downloading..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgctxt "update" +msgid "Downloading..." +msgstr "Downloading..." + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Driver Notes" +msgstr "Driver Notes" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop Trigger" +msgstr "Drop Trigger" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop View" +msgstr "Drop View" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Dump Database" +msgstr "Dump Database" + +#: src/components/ui/FilterRow.tsx +msgid "Duplicate filter" +msgstr "Duplicate filter" + +#: src/components/ui/DataGrid.tsx +msgid "Duplicate Row" +msgstr "Duplicate Row" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Duration" +msgstr "Duration" + +#: src/components/modals/ViewEditorModal.tsx +msgid "e.g. active_users, order_summary" +msgstr "e.g. active_users, order_summary" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. before_insert_user" +msgstr "e.g. before_insert_user" + +#: src/components/modals/AiApprovalModal.tsx +msgid "e.g. Looks risky on prod, please confirm…" +msgstr "e.g. Looks risky on prod, please confirm…" + +#: src/components/modals/NewConnectionModal.tsx +msgid "e.g. mysql://user:pass@localhost:3306/db" +msgstr "e.g. mysql://user:pass@localhost:3306/db" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "e.g. python3" +msgstr "e.g. python3" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "e.g. sales_data" +msgstr "e.g. sales_data" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. users" +msgstr "e.g. users" + +#: src/components/modals/CreateTableModal.tsx +msgid "e.g. users, orders, products" +msgstr "e.g. users, orders, products" + +#: src/components/settings/FontPicker.tsx +msgid "e.g., Comic Sans MS" +msgstr "e.g., Comic Sans MS" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Edit" +msgstr "Edit" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Edit before approving" +msgstr "Edit before approving" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Edit cell name" +msgstr "Edit cell name" + +#: src/pages/Settings.tsx +msgid "Edit config.json" +msgstr "Edit config.json" + +#: src/components/notebook/NotebookHistoryPanel.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Edit history" +msgstr "Edit history" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Edit Row" +msgstr "Edit Row" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Edit Schemas" +msgstr "Edit Schemas" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Edit Trigger" +msgstr "Edit Trigger" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Edit View" +msgstr "Edit View" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited cell {n}" +msgstr "Edited cell {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited notebook" +msgstr "Edited notebook" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing a trigger requires dropping and recreating it. Continue modifying \"{name}\"?" +msgstr "Editing a trigger requires dropping and recreating it. Continue modifying \"{name}\"?" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing trigger: {name}" +msgstr "Editing trigger: {name}" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Editing view: {name}" +msgstr "Editing view: {name}" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Editor" +msgstr "Editor" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Family" +msgstr "Editor Font Family" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Size" +msgstr "Editor Font Size" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Theme" +msgstr "Editor Theme" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Elapsed time" +msgstr "Elapsed time" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Emoji" +msgstr "Emoji" + +#: src/utils/explainPlan.ts +msgid "Enable ANALYZE to inspect actual rows, timing, loops, and buffers." +msgstr "Enable ANALYZE to inspect actual rows, timing, loops, and buffers." + +#: src/components/settings/LogsTab.tsx +msgid "Enable Logging" +msgstr "Enable Logging" + +#: src/components/settings/PluginsTab.tsx +msgid "Enabled" +msgstr "Enabled" + +#: src/components/settings/AiTab.tsx +msgid "Endpoint URL" +msgstr "Endpoint URL" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Enter {0} Key" +msgstr "Enter {0} Key" + +#: src/components/ui/GeometryInput.tsx +msgid "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))" +msgstr "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain plan analysis prompt..." +msgstr "Enter explain plan analysis prompt..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain prompt..." +msgstr "Enter explain prompt..." + +#: src/components/settings/FontPicker.tsx +msgid "Enter font name above" +msgstr "Enter font name above" + +#: src/components/ui/JsonInput.tsx +msgid "Enter JSON..." +msgstr "Enter JSON..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter key passphrase if encrypted" +msgstr "Enter key passphrase if encrypted" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter notebook cell name prompt..." +msgstr "Enter notebook cell name prompt..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter password" +msgstr "Enter password" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter query tab name prompt..." +msgstr "Enter query tab name prompt..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter SSH password" +msgstr "Enter SSH password" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter system prompt..." +msgstr "Enter system prompt..." + +#: src/components/settings/AiTab.tsx +msgid "Enter the exact model name for your OpenAI-compatible provider." +msgstr "Enter the exact model name for your OpenAI-compatible provider." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter username" +msgstr "Enter username" + +#: src/components/ui/FieldEditor.tsx +#: src/components/ui/RowEditorSidebar.tsx +msgid "Enter value..." +msgstr "Enter value..." + +#: src/components/settings/GeneralTab.tsx +msgid "entries" +msgstr "entries" + +#: src/components/settings/AiTab.tsx +msgid "Environment" +msgstr "Environment" + +#: src/components/settings/GeneralTab.tsx +msgid "ER Diagram" +msgstr "ER Diagram" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Error" +msgstr "Error" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Error" +msgstr "Error" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgctxt "common" +msgid "Error" +msgstr "Error" + +#: src/components/settings/LogsTab.tsx +msgctxt "settings" +msgid "Error" +msgstr "Error" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgctxt "settings" +msgid "Error Details" +msgstr "Error Details" + +#: src/components/modals/QuickNavigatorModal.tsx +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor" +msgid "Esc to close" +msgstr "Esc to close" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Est. Rows" +msgstr "Est. Rows" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate exceeds actual rows" +msgstr "Estimate exceeds actual rows" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate Gap" +msgstr "Estimate Gap" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Event details" +msgstr "Event details" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Events" +msgstr "Events" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity" +msgid "Events" +msgstr "Events" + +#: src/components/modals/TriggerEditorModal.tsx +msgctxt "triggers" +msgid "Events" +msgstr "Events" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Execute" +msgstr "Execute" + +#: src/components/ui/ResultEntryContent.tsx +#: src/pages/Editor.tsx +msgid "Execute a query to see results" +msgstr "Execute a query to see results" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Execute all SQL cells top to bottom" +msgstr "Execute all SQL cells top to bottom" + +#: src/components/notebook/SqlCellResult.tsx +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Executing query..." +msgstr "Executing query..." + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Execution" +msgstr "Execution" + +#: src/components/notebook/CellHistoryPanel.tsx +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Execution History" +msgstr "Execution History" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Exit Fullscreen" +msgstr "Exit Fullscreen" + +#: src/components/modals/AiApprovalModal.tsx +msgctxt "aiApproval" +msgid "Expand" +msgstr "Expand" + +#: src/components/ui/JsonInput.tsx +msgctxt "jsonInput" +msgid "Expand" +msgstr "Expand" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Expand all" +msgstr "Expand all" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Expand All" +msgstr "Expand All" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Expand Cell" +msgstr "Expand Cell" + +#: src/components/layout/Sidebar.tsx +msgid "Expand Explorer" +msgstr "Expand Explorer" + +#: src/components/ui/AiDropdownButton.tsx +msgid "Explain" +msgstr "Explain" + +#. placeholder {0}: approval.explainError +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN failed: {0}" +msgstr "EXPLAIN failed: {0}" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain focused" +msgstr "explain focused" + +#: src/components/modals/VisualExplainModal.tsx +msgid "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained." +msgstr "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained." + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain Nth" +msgstr "explain Nth" + +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +msgid "Explain Plan" +msgstr "Explain Plan" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Explain Plan Analysis Prompt" +msgstr "Explain Plan Analysis Prompt" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Explain this query" +msgstr "Explain this query" + +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN unavailable for this query." +msgstr "EXPLAIN unavailable for this query." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Explorer" +msgstr "Explorer" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Export" +msgstr "Export" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as CSV" +msgstr "Export as CSV" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export as HTML" +msgstr "Export as HTML" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as JSON" +msgstr "Export as JSON" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Export as Notebook" +msgstr "Export as Notebook" + +#: src/pages/Connections.tsx +msgctxt "connections" +msgid "Export Connections" +msgstr "Export Connections" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export CSV" +msgstr "Export CSV" + +#: src/components/notebook/NotebookView.tsx +msgid "Export failed" +msgstr "Export failed" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Export failed: " +msgstr "Export failed: " + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export JSON" +msgstr "Export JSON" + +#: src/components/settings/LogsTab.tsx +msgid "Export Logs" +msgstr "Export Logs" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export Notebook" +msgstr "Export Notebook" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Exported to {target}" +msgstr "Exported to {target}" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Exporting..." +msgstr "Exporting..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Extra" +msgstr "Extra" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Fail with error" +msgstr "Fail with error" + +#: src/components/notebook/RunAllSummary.tsx +msgid "failed" +msgstr "failed" + +#. placeholder {0}: conn.name +#: src/pages/Connections.tsx +msgid "Failed to connect to {0}. Please check your settings or ensuring the database is running." +msgstr "Failed to connect to {0}. Please check your settings or ensuring the database is running." + +#: src/pages/Connections.tsx +msgid "Failed to create group" +msgstr "Failed to create group" + +#: src/pages/Editor.tsx +msgid "Failed to create new row: " +msgstr "Failed to create new row: " + +#: src/components/modals/CreateTableModal.tsx +msgid "Failed to create table: " +msgstr "Failed to create table: " + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Failed to delete column: " +msgstr "Failed to delete column: " + +#: src/pages/Connections.tsx +msgid "Failed to delete group" +msgstr "Failed to delete group" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete index: " +msgstr "Failed to delete index: " + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to delete SSH connection" +msgstr "Failed to delete SSH connection" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete table: " +msgstr "Failed to delete table: " + +#: src/pages/Connections.tsx +msgid "Failed to disconnect from database" +msgstr "Failed to disconnect from database" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to drop existing trigger: " +msgstr "Failed to drop existing trigger: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop trigger: " +msgstr "Failed to drop trigger: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop view: " +msgstr "Failed to drop view: " + +#: src/pages/Connections.tsx +msgid "Failed to duplicate connection" +msgstr "Failed to duplicate connection" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get routine definition: " +msgstr "Failed to get routine definition: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get trigger definition: " +msgstr "Failed to get trigger definition: " + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to insert row: " +msgstr "Failed to insert row: " + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to load databases. Check your credentials." +msgstr "Failed to load databases. Check your credentials." + +#: src/components/settings/PluginsTab.tsx +msgid "Failed to load registry" +msgstr "Failed to load registry" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to load schema: " +msgstr "Failed to load schema: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to load schemas" +msgstr "Failed to load schemas" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to load trigger definition: " +msgstr "Failed to load trigger definition: " + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to load view definition: " +msgstr "Failed to load view definition: " + +#: src/pages/Connections.tsx +msgid "Failed to move connection" +msgstr "Failed to move connection" + +#: src/pages/Editor.tsx +msgid "Failed to process insertions: " +msgstr "Failed to process insertions: " + +#: src/components/settings/AiTab.tsx +msgid "Failed to refresh models" +msgstr "Failed to refresh models" + +#: src/pages/Connections.tsx +msgid "Failed to rename group" +msgstr "Failed to rename group" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to save connection" +msgstr "Failed to save connection" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to save SSH connection" +msgstr "Failed to save SSH connection" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to save trigger: " +msgstr "Failed to save trigger: " + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to save view: " +msgstr "Failed to save view: " + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Failed: " +msgstr "Failed: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Favorites" +msgstr "Favorites" + +#: src/components/modals/NewConnectionModal.tsx +msgid "File Path" +msgstr "File Path" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Filter" +msgstr "Filter" + +#: src/components/settings/LogsTab.tsx +msgid "Filter by level" +msgstr "Filter by level" + +#: src/components/ui/TableToolbar.tsx +msgid "Filter conditions" +msgstr "Filter conditions" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Filter databases..." +msgstr "Filter databases..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter tables..." +msgstr "Filter tables..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter triggers..." +msgstr "Filter triggers..." + +#: src/components/ui/TableToolbar.tsx +msgid "Filters" +msgstr "Filters" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +msgid "First row as header" +msgstr "First row as header" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "FK Name (Optional)" +msgstr "FK Name (Optional)" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focus on Table" +msgstr "Focus on Table" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focused on" +msgstr "Focused on" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Folder Path" +msgstr "Folder Path" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Family" +msgstr "Font Family" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Size" +msgstr "Font Size" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill" +msgstr "Force Kill" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill Plugin Process" +msgstr "Force Kill Plugin Process" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "foreign keys" +msgstr "foreign keys" + +#: src/components/ui/JsonInput.tsx +msgid "Format" +msgstr "Format" + +#: src/components/ui/FilterRow.tsx +msgid "from" +msgstr "from" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dependencies" +msgstr "Frontend Dependencies" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dev Dependencies" +msgstr "Frontend Dev Dependencies" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Fullscreen" +msgstr "Fullscreen" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Functions" +msgstr "Functions" + +#: src/pages/Settings.tsx +msgid "General" +msgstr "General" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgctxt "editor" +msgid "General" +msgstr "General" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "General" +msgstr "General" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "General" +msgstr "General" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generate name with AI" +msgstr "Generate name with AI" + +#: src/components/notebook/NotebookOutline.tsx +msgid "Generate names for unnamed cells with AI" +msgstr "Generate names for unnamed cells with AI" + +#: src/components/ui/AiDropdownButton.tsx +msgctxt "ai" +msgid "Generate SQL" +msgstr "Generate SQL" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Generate SQL" +msgstr "Generate SQL" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Generate SQL templates" +msgstr "Generate SQL templates" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Generated SQL Preview" +msgstr "Generated SQL Preview" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generated SQL: {tableName}" +msgstr "Generated SQL: {tableName}" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generating name..." +msgstr "Generating name..." + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generating SQL..." +msgstr "Generating SQL..." + +#: src/components/modals/WhatsNewModal.tsx +msgid "Got it" +msgstr "Got it" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Graph" +msgstr "Graph" + +#: src/pages/Connections.tsx +msgid "Grid view" +msgstr "Grid view" + +#: src/pages/Connections.tsx +msgid "Group name" +msgstr "Group name" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Guided" +msgstr "Guided" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Hash Cond." +msgstr "Hash Cond." + +#: src/components/modals/CommunityModal.tsx +msgid "Help tabularis grow" +msgstr "Help tabularis grow" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Hide overview" +msgstr "Hide overview" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Highest Cost" +msgstr "Highest Cost" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "History" +msgstr "History" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Horizontal" +msgstr "Horizontal" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Host" +msgstr "Host" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "How long the MCP subprocess will wait for the user's decision before failing the request." +msgstr "How long the MCP subprocess will wait for the user's decision before failing the request." + +#: src/components/settings/LogsTab.tsx +msgid "How many logs to keep in memory (1-10000)" +msgstr "How many logs to keep in memory (1-10000)" + +#: src/components/settings/GeneralTab.tsx +msgid "How often to check if active connections are still alive. Set to 0 to disable." +msgstr "How often to check if active connections are still alive. Set to 0 to disable." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Icon" +msgstr "Icon" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "If exists" +msgstr "If exists" + +#: src/utils/explainPlan.ts +msgid "If timing is missing, the server likely returned an estimate-only plan." +msgstr "If timing is missing, the server likely returned an estimate-only plan." + +#: src/components/settings/InfoTab.tsx +msgid "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo." +msgstr "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo." + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Image" +msgstr "Image" + +#: src/components/ui/BlobInput.tsx +msgid "Image preview" +msgstr "Image preview" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import cancelled" +msgstr "Import cancelled" + +#: src/pages/Connections.tsx +msgid "Import Connections" +msgstr "Import Connections" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import Database" +msgstr "Import Database" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed" +msgstr "Import failed" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed: " +msgstr "Import failed: " + +#: src/i18n/registries/shortcutLabels.ts +msgid "Import from Clipboard" +msgstr "Import from Clipboard" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Import from Clipboard" +msgstr "Import from Clipboard" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Import from Clipboard..." +msgstr "Import from Clipboard..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Import Notebook" +msgstr "Import Notebook" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Importing from" +msgstr "Importing from" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Importing..." +msgstr "Importing..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Index Cond." +msgstr "Index Cond." + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index Name" +msgstr "Index Name" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index name is required" +msgstr "Index name is required" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "indexes" +msgstr "indexes" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Info" +msgstr "Info" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Initial version" +msgstr "Initial version" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Inline" +msgstr "Inline" + +#: src/components/modals/NewRowModal.tsx +msgid "Insert" +msgstr "Insert" + +#: src/components/ui/DataGrid.tsx +msgid "Insert Current Timestamp" +msgstr "Insert Current Timestamp" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Insert to Editor" +msgstr "Insert to Editor" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Inspect structure" +msgstr "Inspect structure" + +#: src/components/settings/PluginsTab.tsx +msgid "Install" +msgstr "Install" + +#: src/pages/TaskManagerPage.tsx +msgid "Install and enable plugins to see them here" +msgstr "Install and enable plugins to see them here" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Install Config" +msgstr "Install Config" + +#: src/components/settings/PluginsTab.tsx +msgid "Install extensions, manage plugin drivers, and keep runtime settings under control." +msgstr "Install extensions, manage plugin drivers, and keep runtime settings under control." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installation Failed" +msgstr "Installation Failed" + +#: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings" +msgid "Installation Failed" +msgstr "Installation Failed" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installed" +msgstr "Installed" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Installed" +msgstr "Installed" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Installing..." +msgstr "Installing..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language." +msgstr "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure." +msgstr "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Interpreter" +msgstr "Interpreter" + +#: src/components/ui/JsonInput.tsx +msgid "Invalid JSON" +msgstr "Invalid JSON" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Invalid notebook file format" +msgstr "Invalid notebook file format" + +#: src/components/notebook/ParamsPanel.tsx +msgid "Invalid parameter name" +msgstr "Invalid parameter name" + +#: src/components/modals/CommunityModal.tsx +msgid "Join Discord" +msgstr "Join Discord" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Join now" +msgstr "Join now" + +#: src/components/modals/CommunityModal.tsx +msgid "Join the Community" +msgstr "Join the Community" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Join Type" +msgstr "Join Type" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "Key" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Key file" +msgstr "Key file" + +#: src/components/settings/ShortcutsTab.tsx +#: src/pages/Settings.tsx +msgid "Keyboard Shortcuts" +msgstr "Keyboard Shortcuts" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "keys" +msgstr "keys" + +#: src/pages/TaskManagerPage.tsx +msgid "Kill" +msgstr "Kill" + +#: src/pages/TaskManagerPage.tsx +msgid "Killing" +msgstr "Killing" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Kind" +msgstr "Kind" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Kubernetes Connections" +msgstr "Kubernetes Connections" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Kubernetes context is required" +msgstr "Kubernetes context is required" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Kubernetes is not available for this driver." +msgstr "Kubernetes is not available for this driver." + +#: src/components/notebook/CellChart.tsx +msgid "Label" +msgstr "Label" + +#: src/components/settings/LocalizationTab.tsx +msgid "Language" +msgstr "Language" + +#: src/utils/explainPlan.ts +msgid "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well." +msgstr "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well." + +#: src/components/modals/CreateTableModal.tsx +msgid "Len" +msgstr "Len" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Length" +msgstr "Length" + +#: src/components/settings/LogsTab.tsx +msgid "Level" +msgstr "Level" + +#: src/components/settings/GeneralTab.tsx +msgid "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended)." +msgstr "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended)." + +#: src/components/settings/AppearanceTab.tsx +msgid "Line Height" +msgstr "Line Height" + +#: src/pages/Connections.tsx +msgid "List view" +msgstr "List view" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Load Databases" +msgstr "Load Databases" + +#: src/pages/Editor.tsx +msgid "Load row count" +msgstr "Load row count" + +#: src/pages/VisualExplainPage.tsx +msgid "Loading explain plan…" +msgstr "Loading explain plan…" + +#: src/components/settings/PluginsTab.tsx +msgid "Loading plugin registry..." +msgstr "Loading plugin registry..." + +#: src/pages/TaskManagerPage.tsx +msgid "Loading processes…" +msgstr "Loading processes…" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarRoutineItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "Loading schema..." + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Loading trigger definition..." +msgstr "Loading trigger definition..." + +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Loading..." +msgstr "Loading..." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Local Column" +msgstr "Local Column" + +#: src/components/settings/LocalizationTab.tsx +#: src/pages/Settings.tsx +msgid "Localization" +msgstr "Localization" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Lock query" +msgstr "Lock query" + +#: src/components/settings/LogsTab.tsx +msgid "Log Settings" +msgstr "Log Settings" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Logs" +msgstr "Logs" + +#: src/components/settings/LogsTab.tsx +msgid "Logs exported to clipboard" +msgstr "Logs exported to clipboard" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Loops" +msgstr "Loops" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Make all MCP queries read-only" +msgstr "Make all MCP queries read-only" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage" +msgstr "Manage" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Manage Databases" +msgstr "Manage Databases" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage SSH Connections" +msgstr "Manage SSH Connections" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL COMMAND" +msgstr "MANUAL COMMAND" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL CONFIGURATION" +msgstr "MANUAL CONFIGURATION" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Markdown" +msgstr "Markdown" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Max Allowed Packet" +msgstr "Max Allowed Packet" + +#: src/components/settings/GeneralTab.tsx +msgid "Max History Entries" +msgstr "Max History Entries" + +#: src/components/settings/LogsTab.tsx +msgid "Max Log Entries" +msgstr "Max Log Entries" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Maximize" +msgstr "Maximize" + +#: src/components/settings/GeneralTab.tsx +msgid "Maximum number of query history entries stored per connection." +msgstr "Maximum number of query history entries stored per connection." + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Maximum packet size used by the MySQL connector." +msgstr "Maximum packet size used by the MySQL connector." + +#: src/components/modals/CommunityModal.tsx +msgid "Maybe later" +msgstr "Maybe later" + +#: src/components/layout/Sidebar.tsx +msgid "MCP Server" +msgstr "MCP Server" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MCP Server Integration" +msgstr "MCP Server Integration" + +#: src/components/settings/LogsTab.tsx +msgid "Message" +msgstr "Message" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Minimize" +msgstr "Minimize" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Mixed types detected, defaulted to TEXT" +msgstr "Mixed types detected, defaulted to TEXT" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Mode" +msgstr "Mode" + +#. placeholder {0}: settings.aiModel +#. placeholder {1}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Model <0>{0} not found in <1>{1}. It may not work correctly." +msgstr "Model <0>{0} not found in <1>{1}. It may not work correctly." + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Modify Column" +msgstr "Modify Column" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgctxt "sidebar" +msgid "Modify Column" +msgstr "Modify Column" + +#: src/components/settings/InfoTab.tsx +msgid "Monitor plugin processes, CPU, RAM and disk usage in real time" +msgstr "Monitor plugin processes, CPU, RAM and disk usage in real time" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Down" +msgstr "Move Down" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Up" +msgstr "Move Up" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "My K8s cluster" +msgstr "My K8s cluster" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "My SSH Server" +msgstr "My SSH Server" + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants." +msgstr "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants." + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version." +msgstr "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version." + +#: src/components/notebook/ParamsPanel.tsx +msgid "name" +msgstr "name" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/SchemaModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Name" +msgstr "Name" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Name is required" +msgstr "Name is required" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Namespace" +msgstr "Namespace" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Namespace is required" +msgstr "Namespace is required" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Navigation" +msgstr "Navigation" + +#: src/components/ui/DataGrid.tsx +msgid "NEW" +msgstr "NEW" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New connection" +msgstr "New connection" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "New console" +msgstr "New console" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/pages/Editor.tsx +msgid "New Console" +msgstr "New Console" + +#: src/components/modals/WhatsNewModal.tsx +msgid "New Features" +msgstr "New Features" + +#: src/pages/Connections.tsx +msgid "New Group" +msgstr "New Group" + +#: src/pages/Editor.tsx +msgid "New Notebook" +msgstr "New Notebook" + +#: src/components/modals/NewRowModal.tsx +#: src/pages/Editor.tsx +msgid "New Row" +msgstr "New Row" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New tab" +msgstr "New tab" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "New table created" +msgstr "New table created" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "New Version Available" +msgstr "New Version Available" + +#: src/pages/Editor.tsx +msgid "New Visual Query" +msgstr "New Visual Query" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Next page" +msgstr "Next page" + +#: src/components/modals/CreateTableModal.tsx +msgid "NN" +msgstr "NN" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "NO" + +#: src/pages/Connections.tsx +msgid "No active connections" +msgstr "No active connections" + +#: src/components/ui/TableToolbar.tsx +msgid "no active filters" +msgstr "no active filters" + +#: src/pages/Editor.tsx +msgid "No active session. Please select a connection." +msgstr "No active session. Please select a connection." + +#: src/components/ui/BlobInput.tsx +msgid "No BLOB data" +msgstr "No BLOB data" + +#: src/pages/TaskManagerPage.tsx +msgid "No child processes" +msgstr "No child processes" + +#: src/pages/SchemaDiagramPage.tsx +msgid "No Connection ID" +msgstr "No Connection ID" + +#: src/pages/Connections.tsx +msgid "No connections match \"{search}\"" +msgstr "No connections match \"{search}\"" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No contexts found (is kubectl installed?)" +msgstr "No contexts found (is kubectl installed?)" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "No data found in clipboard" +msgstr "No data found in clipboard" + +#: src/components/ui/DataGrid.tsx +msgid "No data to display" +msgstr "No data to display" + +#: src/components/modals/QueryModal.tsx +msgid "No database" +msgstr "No database" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No databases found" +msgstr "No databases found" + +#: src/components/notebook/CellHistoryPanel.tsx +msgid "No execution history yet" +msgstr "No execution history yet" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No favorites match your search" +msgstr "No favorites match your search" + +#: src/pages/VisualExplainPage.tsx +msgid "No file loaded" +msgstr "No file loaded" + +#: src/components/ui/TableToolbar.tsx +msgid "No filters —" +msgstr "No filters —" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No general settings available for this driver." +msgstr "No general settings available for this driver." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No icons match." +msgstr "No icons match." + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "No Kubernetes connections saved. Click \"Add\" to create one." +msgstr "No Kubernetes connections saved. Click \"Add\" to create one." + +#: src/components/settings/LogsTab.tsx +msgid "No logs available" +msgstr "No logs available" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "No major issues detected in the current plan summary." +msgstr "No major issues detected in the current plan summary." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "No matching elements found" +msgstr "No matching elements found" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No MCP activity yet." +msgstr "No MCP activity yet." + +#: src/components/settings/AiTab.tsx +msgid "No models found" +msgstr "No models found" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No notebooks match your search." +msgstr "No notebooks match your search." + +#: src/pages/Editor.tsx +msgid "No open tabs for this connection." +msgstr "No open tabs for this connection." + +#: src/components/modals/NewRowModal.tsx +msgid "No options found" +msgstr "No options found" + +#: src/pages/TaskManagerPage.tsx +msgid "No plugin processes are running" +msgstr "No plugin processes are running" + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins available in the registry." +msgstr "No plugins available in the registry." + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins match your search." +msgstr "No plugins match your search." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No preview" +msgstr "No preview" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No queries match your search" +msgstr "No queries match your search" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No query history" +msgstr "No query history" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "No results found" +msgstr "No results found" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No routines found" +msgstr "No routines found" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No saved connections — create one below" +msgstr "No saved connections — create one below" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No saved notebooks yet." +msgstr "No saved notebooks yet." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No saved queries" +msgstr "No saved queries" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No sessions match the current filters." +msgstr "No sessions match the current filters." + +#: src/components/modals/NewConnectionModal.tsx +msgid "No SSH connections available" +msgstr "No SSH connections available" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "No SSH connections configured yet" +msgstr "No SSH connections configured yet" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables found" +msgstr "No tables found" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables match" +msgstr "No tables match" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers found" +msgstr "No triggers found" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers match your filter" +msgstr "No triggers match your filter" + +#: src/pages/Editor.tsx +msgid "No valid queries found" +msgstr "No valid queries found" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No views found" +msgstr "No views found" + +#: src/components/settings/PluginsTab.tsx +msgid "Not available for your platform" +msgstr "Not available for your platform" + +#: src/components/settings/AiTab.tsx +msgid "Not configured" +msgstr "Not configured" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Not Null" +msgstr "Not Null" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Notebook Cell Name Prompt" +msgstr "Notebook Cell Name Prompt" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook exported successfully" +msgstr "Notebook exported successfully" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook imported successfully" +msgstr "Notebook imported successfully" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Notebook name" +msgstr "Notebook name" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Notebooks" +msgstr "Notebooks" + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "npm ecosystem" +msgstr "npm ecosystem" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "Nullable" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Objects" +msgstr "Objects" + +#. placeholder {0}: sessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "of {0}" +msgstr "of {0}" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Off" +msgstr "Off" + +#: src/components/modals/AlertModal.tsx +#: src/components/modals/ConfirmModal.tsx +msgid "OK" +msgstr "OK" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Older" +msgstr "Older" + +#: src/utils/explainPlan.ts +msgid "Older servers may fall back to estimated plans with fewer metrics." +msgstr "Older servers may fall back to estimated plans with fewer metrics." + +#: src/components/settings/PluginsTab.tsx +msgid "Older versions" +msgstr "Older versions" + +#. placeholder {0}: ( settings.aiCustomModels?.["ollama"] || availableModels["ollama"] || [] ).length +#: src/components/settings/AiTab.tsx +msgid "Ollama connected ({0} models found)" +msgstr "Ollama connected ({0} models found)" + +#. placeholder {0}: settings.aiOllamaPort || 11434 +#: src/components/settings/AiTab.tsx +msgid "Ollama not detected on port {0}. Is it running?" +msgstr "Ollama not detected on port {0}. Is it running?" + +#: src/components/settings/AiTab.tsx +msgid "Ollama Port" +msgstr "Ollama Port" + +#. placeholder {0}: trigger.table_name +#: src/components/layout/sidebar/SidebarTriggerItem.tsx +msgid "on {0}" +msgstr "on {0}" + +#. placeholder {0}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "On {0} — review and decide before it executes." +msgstr "On {0} — review and decide before it executes." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Delete" +msgstr "On Delete" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Update" +msgstr "On Update" + +#: src/components/connections/StatusBadge.tsx +msgctxt "connections" +msgid "Open" +msgstr "Open" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Open connections" +msgstr "Open connections" + +#: src/pages/VisualExplainPage.tsx +msgid "Open file" +msgstr "Open file" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Open in Editor" +msgstr "Open in Editor" + +#: src/components/ui/DataGrid.tsx +msgid "Open in JSON Editor" +msgstr "Open in JSON Editor" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Open in New Tab" +msgstr "Open in New Tab" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Open in Visual Explain" +msgstr "Open in Visual Explain" + +#: src/components/ui/JsonCell.tsx +msgid "Open JSON viewer" +msgstr "Open JSON viewer" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Open package page" +msgstr "Open package page" + +#. placeholder {0}: fkForContextPreview.ref_table +#: src/components/ui/DataGrid.tsx +msgid "Open referenced row in {0}" +msgstr "Open referenced row in {0}" + +#: src/components/ui/DataGrid.tsx +msgid "Open Sidebar Editor" +msgstr "Open Sidebar Editor" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Open Source Libraries" +msgstr "Open Source Libraries" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Open Tabs" +msgstr "Open Tabs" + +#: src/components/settings/InfoTab.tsx +msgid "Open Task Manager" +msgstr "Open Task Manager" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +msgid "Operation" +msgstr "Operation" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default." +msgstr "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default." + +#: src/components/notebook/NotebookOutline.tsx +msgid "Outline" +msgstr "Outline" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Overview" +msgstr "Overview" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +#: src/pages/Editor.tsx +msgid "Page {0}" +msgstr "Page {0}" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {1}: Math.ceil( activeTab.result.pagination.total_rows / activeTab.result.pagination.page_size, ) +#: src/pages/Editor.tsx +msgid "Page {0} of {1}" +msgstr "Page {0} of {1}" + +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +msgid "Page {0} of {totalPages}" +msgstr "Page {0} of {totalPages}" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Parallel Execution (Run All)" +msgstr "Parallel Execution (Run All)" + +#: src/components/notebook/ParamsPanel.tsx +#: src/pages/Editor.tsx +msgid "Parameters" +msgstr "Parameters" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password" +msgstr "Password" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password saved in system keychain" +msgstr "Password saved in system keychain" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Paste structured data and preview the schema before importing" +msgstr "Paste structured data and preview the schema before importing" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database." +msgstr "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database." + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Pending approval" +msgstr "Pending approval" + +#: src/pages/TaskManagerPage.tsx +msgid "PID" +msgstr "PID" + +#: src/components/settings/GeneralTab.tsx +msgid "Ping Interval" +msgstr "Ping Interval" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Pipe (|)" +msgstr "Pipe (|)" + +#: src/components/modals/CreateTableModal.tsx +msgid "PK" +msgstr "PK" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Planning" +msgstr "Planning" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Please fill in all required fields" +msgstr "Please fill in all required fields" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least one table" +msgstr "Please select at least one table" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least Structure or Data" +msgstr "Please select at least Structure or Data" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin" +msgstr "Plugin" + +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Center" +msgstr "Plugin Center" + +#: src/components/connections/ActionButtons.tsx +#: src/components/connections/ConnectionCard.tsx +#: src/components/connections/ConnectionListItem.tsx +msgid "Plugin disabled" +msgstr "Plugin disabled" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Plugin Failed to Start" +msgstr "Plugin Failed to Start" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin Processes" +msgstr "Plugin Processes" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin processes & system resources" +msgstr "Plugin processes & system resources" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Settings" +msgstr "Plugin Settings" + +#: src/pages/Settings.tsx +msgid "Plugins" +msgstr "Plugins" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "PNG, JPG, WebP or SVG · max 512 KB" +msgstr "PNG, JPG, WebP or SVG · max 512 KB" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Pod" +msgstr "Pod" + +#: src/components/ui/GeometryInput.tsx +msgid "POINT(30 40)" +msgstr "POINT(30 40)" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Port" +msgstr "Port" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Port must be between 1 and 65535" +msgstr "Port must be between 1 and 65535" + +#: src/utils/explainPlan.ts +msgid "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available." +msgstr "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available." + +#: src/utils/explainPlan.ts +msgid "PostgreSQL without ANALYZE shows planner estimates only." +msgstr "PostgreSQL without ANALYZE shows planner estimates only." + +#: src/components/modals/AiApprovalModal.tsx +msgid "Pre-flight execution plan" +msgstr "Pre-flight execution plan" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pre-flight EXPLAIN" +msgstr "Pre-flight EXPLAIN" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Prefer" +msgstr "Prefer" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Preferred" +msgstr "Preferred" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Press key combination..." +msgstr "Press key combination..." + +#: src/pages/Editor.tsx +msgid "Press Run (Ctrl/Command+F5) to load table data" +msgstr "Press Run (Ctrl/Command+F5) to load table data" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Preview" +msgstr "Preview" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "Preview" +msgstr "Preview" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Preview" +msgstr "Preview" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Preview failed: " +msgstr "Preview failed: " + +#: src/components/ui/BlobInput.tsx +msgid "Preview only - full data not loaded" +msgstr "Preview only - full data not loaded" + +#: src/components/ui/DataGrid.tsx +msgid "Preview related record" +msgstr "Preview related record" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Previous page" +msgstr "Previous page" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Primary Key" +msgstr "Primary Key" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Procedures" +msgstr "Procedures" + +#: src/components/settings/InfoTab.tsx +msgid "Project Status" +msgstr "Project Status" + +#: src/components/settings/AiTab.tsx +msgid "Prompt Customization" +msgstr "Prompt Customization" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Provide your connection name" +msgstr "Provide your connection name" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Queries" +msgstr "Queries" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Query" +msgstr "Query" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Explanation" +msgstr "Query Explanation" + +#: src/pages/Editor.tsx +msgid "Query failed." +msgstr "Query failed." + +#: src/components/settings/GeneralTab.tsx +msgid "Query History" +msgstr "Query History" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Query history was reset" +msgstr "Query history was reset" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Query Parameters" +msgstr "Query Parameters" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Tab Name Prompt" +msgstr "Query Tab Name Prompt" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Quick connection test" +msgstr "Quick connection test" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Quick Navigator" +msgstr "Quick Navigator" + +#: src/pages/TaskManagerPage.tsx +msgid "RAM" +msgstr "RAM" + +#: src/components/ui/JsonInput.tsx +msgid "Raw" +msgstr "Raw" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Raw Output" +msgstr "Raw Output" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Raw SQL" +msgstr "Raw SQL" + +#: src/components/modals/VisualExplainModal.tsx +msgid "Re-run" +msgstr "Re-run" + +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Re-run query" +msgstr "Re-run query" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Read more" +msgstr "Read more" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only connections" +msgstr "Read-only connections" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only mode" +msgstr "Read-only mode" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Reason (optional)" +msgstr "Reason (optional)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Recreate Trigger" +msgstr "Recreate Trigger" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Redo" +msgstr "Redo" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Column" +msgstr "Referenced Column" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Table" +msgstr "Referenced Table" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/LogsTab.tsx +#: src/components/settings/PluginsTab.tsx +#: src/pages/SchemaDiagramPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Refresh" +msgstr "Refresh" + +#: src/components/settings/AiTab.tsx +msgid "Refresh Models" +msgstr "Refresh Models" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Routines" +msgstr "Refresh Routines" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Refresh Tables" +msgstr "Refresh Tables" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Triggers" +msgstr "Refresh Triggers" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Views" +msgstr "Refresh Views" + +#: src/components/settings/PluginsTab.tsx +msgid "Registry" +msgstr "Registry" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Release Notes" +msgstr "Release Notes" + +#: src/pages/VisualExplainPage.tsx +msgid "Reload" +msgstr "Reload" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Remind Me Later" +msgstr "Remind Me Later" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Remove" +msgstr "Remove" + +#: src/components/modals/PluginRemoveModal.tsx +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Remove" +msgstr "Remove" + +#: src/components/ui/FilterRow.tsx +msgid "Remove filter" +msgstr "Remove filter" + +#: src/pages/Connections.tsx +msgid "Remove from Group" +msgstr "Remove from Group" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Remove Plugin" +msgstr "Remove Plugin" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Connections.tsx +#: src/pages/Editor.tsx +msgid "Rename" +msgstr "Rename" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Renamed cell {n}" +msgstr "Renamed cell {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Reordered cells" +msgstr "Reordered cells" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Replace table" +msgstr "Replace table" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Require" +msgstr "Require" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Required" +msgstr "Required" + +#. placeholder {0}: availableTypes.find((t) => t.name === form.type)?.requires_extension +#. placeholder {0}: exts.join(', ') +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "Requires extension: {0}" +msgstr "Requires extension: {0}" + +#: src/components/settings/PluginsTab.tsx +msgid "Requires Tabularis ≥ {minVersion}" +msgstr "Requires Tabularis ≥ {minVersion}" + +#: src/components/settings/AiTab.tsx +msgid "Reset" +msgstr "Reset" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Reset to default" +msgstr "Reset to default" + +#: src/components/settings/AiTab.tsx +msgid "Reset to Default" +msgstr "Reset to Default" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Reset to driver default" +msgstr "Reset to driver default" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Resize sidebar" +msgstr "Resize sidebar" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Name" +msgstr "Resource Name" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource name is required" +msgstr "Resource name is required" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Type" +msgstr "Resource Type" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource type must be \"service\" or \"pod\"" +msgstr "Resource type must be \"service\" or \"pod\"" + +#: src/pages/TaskManagerPage.tsx +msgid "Restart" +msgstr "Restart" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Restart Now" +msgstr "Restart Now" + +#: src/components/settings/GeneralTab.tsx +msgid "Result Page Size (Limit)" +msgstr "Result Page Size (Limit)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Results" +msgstr "Results" + +#: src/components/ui/DataGrid.tsx +msgid "Revert Selected" +msgstr "Revert Selected" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Review & adjust" +msgstr "Review & adjust" + +#: src/pages/Editor.tsx +msgid "Rollback Changes" +msgstr "Rollback Changes" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "routine" +msgstr "routine" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Routines" +msgstr "Routines" + +#. placeholder {0}: rowIndex + 1 +#: src/components/ui/RowEditorSidebar.tsx +msgid "Row #{0}" +msgstr "Row #{0}" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "rows" +msgstr "rows" + +#: src/components/settings/GeneralTab.tsx +msgctxt "settings" +msgid "rows" +msgstr "rows" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Rows Processed" +msgstr "Rows Processed" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Rows returned" +msgstr "Rows returned" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Rows will be added to an existing table" +msgstr "Rows will be added to an existing table" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Run" +msgstr "Run" + +#: src/components/modals/QuerySelectionModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgctxt "editor" +msgid "Run All" +msgstr "Run All" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run All Cells" +msgstr "Run All Cells" + +#: src/components/notebook/RunAllSummary.tsx +msgid "Run All Complete" +msgstr "Run All Complete" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan." +msgstr "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan." + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Run Cell" +msgstr "Run Cell" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Run in console" +msgstr "Run in console" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Run Preview" +msgstr "Run Preview" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Run queries" +msgstr "Run queries" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query" +msgstr "Run query" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Run Query" +msgstr "Run Query" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query (in editor)" +msgstr "Run query (in editor)" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Run SELECT query" +msgstr "Run SELECT query" + +#. placeholder {0}: selectedIndices.size +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run Selected ({0})" +msgstr "Run Selected ({0})" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "Run SQL File..." +msgstr "Run SQL File..." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Run this command in your terminal, then restart Claude Code." +msgstr "Run this command in your terminal, then restart Claude Code." + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run this query" +msgstr "Run this query" + +#: src/i18n/registries/taskManagerProcessStatus.ts +#: src/pages/TaskManagerPage.tsx +msgid "running" +msgstr "running" + +#: src/components/explain/VisualExplainView.tsx +msgid "Running EXPLAIN..." +msgstr "Running EXPLAIN..." + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Build and Test" +msgstr "Rust Build and Test" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Dependencies" +msgstr "Rust Dependencies" + +#: src/pages/McpPage.tsx +msgid "Safety" +msgstr "Safety" + +#: src/components/settings/ThemePicker.tsx +msgid "Same as App" +msgstr "Same as App" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Sample values" +msgstr "Sample values" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/Connections.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Save" +msgstr "Save" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Save & Restart" +msgstr "Save & Restart" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Save Changes" +msgstr "Save Changes" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Save passwords in Keychain" +msgstr "Save passwords in Keychain" + +#: src/components/settings/AiTab.tsx +msgid "Save Prompt" +msgstr "Save Prompt" + +#: src/pages/Editor.tsx +msgid "Save Query" +msgstr "Save Query" + +#: src/pages/Editor.tsx +msgid "Save this query" +msgstr "Save this query" + +#: src/components/settings/PluginSettingsPage.tsx +msgid "Saved" +msgstr "Saved" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Saved Connection" +msgstr "Saved Connection" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Scan-heavy operations detected" +msgstr "Scan-heavy operations detected" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "Schema: {tableName}" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Schemas" +msgstr "Schemas" + +#: src/components/ui/JsonTreeView.tsx +msgid "Search" +msgstr "Search" + +#: src/pages/Connections.tsx +msgid "Search connections..." +msgstr "Search connections..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search emoji…" +msgstr "Search emoji…" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Search favorites..." +msgstr "Search favorites..." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Search history..." +msgstr "Search history..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search icons…" +msgstr "Search icons…" + +#: src/components/settings/AiTab.tsx +msgid "Search models..." +msgstr "Search models..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Search notebooks" +msgstr "Search notebooks" + +#: src/components/settings/PluginsTab.tsx +msgid "Search plugins…" +msgstr "Search plugins…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Search query…" +msgstr "Search query…" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Search session, client, connection…" +msgstr "Search session, client, connection…" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Search tables, views, routines, triggers..." +msgstr "Search tables, views, routines, triggers..." + +#: src/components/settings/LocalizationTab.tsx +msgid "Search timezones..." +msgstr "Search timezones..." + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Search..." +msgstr "Search..." -#: src/components/modals/SchemaModal.tsx -msgid "Loading schema..." -msgstr "Loading schema..." +#: src/components/modals/mcp/McpSafetySection.tsx +#: src/components/settings/GeneralTab.tsx +msgid "seconds" +msgstr "seconds" -#: src/components/modals/SchemaModal.tsx -msgid "Name" -msgstr "Name" +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Select" +msgstr "Select" -#: src/components/modals/SchemaModal.tsx -msgid "NO" -msgstr "NO" +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select [fields]" +msgstr "Select [fields]" -#: src/components/modals/SchemaModal.tsx -msgid "Nullable" -msgstr "Nullable" +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select *" +msgstr "Select *" -#: src/components/modals/SchemaModal.tsx -msgid "Schema: {tableName}" -msgstr "Schema: {tableName}" +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a context first" +msgstr "Select a context first" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a database" +msgstr "Select a database" + +#: src/pages/VisualExplainPage.tsx +msgid "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it." +msgstr "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it." + +#: src/components/settings/AiTab.tsx +msgid "Select a model" +msgstr "Select a model" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Select a node to view details" +msgstr "Select a node to view details" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Select a table..." +msgstr "Select a table..." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Select All" +msgstr "Select All" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Select All" +msgstr "Select All" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Select All" +msgstr "Select All" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select at least one database" +msgstr "Select at least one database" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select context/namespace/type first" +msgstr "Select context/namespace/type first" + +#: src/components/ui/FilterRow.tsx +msgid "Select for Apply All" +msgstr "Select for Apply All" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select K8s Connection" +msgstr "Select K8s Connection" + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Select Query to Execute" +msgstr "Select Query to Execute" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Select Query to Explain" +msgstr "Select Query to Explain" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Select schemas to load:" +msgstr "Select schemas to load:" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select SSH Connection" +msgstr "Select SSH Connection" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Select Tables" +msgstr "Select Tables" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select the databases to include in this connection." +msgstr "Select the databases to include in this connection." + +#: src/components/settings/AiTab.tsx +msgid "Select the model to be used for generation and explanation." +msgstr "Select the model to be used for generation and explanation." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select type..." +msgstr "Select type..." + +#: src/components/modals/NewRowModal.tsx +msgid "Select Value..." +msgstr "Select Value..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Selected emoji" +msgstr "Selected emoji" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Semicolon (;)" +msgstr "Semicolon (;)" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Separate Connections" +msgstr "Separate Connections" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sequential Scans" +msgstr "Sequential Scans" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Service" +msgstr "Service" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Session timezone sent to MySQL after connect." +msgstr "Session timezone sent to MySQL after connect." + +#: src/components/settings/AiActivityPanel.tsx +msgid "Sessions" +msgstr "Sessions" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Set as Active" +msgstr "Set as Active" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set DEFAULT" +msgstr "Set DEFAULT" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set EMPTY" +msgstr "Set EMPTY" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set GENERATED" +msgstr "Set GENERATED" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set NULL" +msgstr "Set NULL" + +#: src/components/layout/Sidebar.tsx +msgid "Settings" +msgstr "Settings" + +#: src/pages/McpPage.tsx +msgid "Setup" +msgstr "Setup" + +#: src/components/settings/AiTab.tsx +msgid "Show AI Assist and Explain buttons in the editor" +msgstr "Show AI Assist and Explain buttons in the editor" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All" +msgstr "Show All" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All Tables" +msgstr "Show All Tables" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Show Data" +msgstr "Show Data" + +#: src/components/settings/AppearanceTab.tsx +msgid "Show Line Numbers" +msgstr "Show Line Numbers" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Show overview" +msgstr "Show overview" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost." +msgstr "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost." + +#: src/components/settings/GeneralTab.tsx +msgid "Show Welcome Screen" +msgstr "Show Welcome Screen" + +#. placeholder {0}: all.length +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Showing {RESULT_LIMIT} of {0} — refine search to narrow down." +msgstr "Showing {RESULT_LIMIT} of {0} — refine search to narrow down." + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "showing first {MAX_PREVIEW_ROWS}" +msgstr "showing first {MAX_PREVIEW_ROWS}" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Side by side" +msgstr "Side by side" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Skip (do not import)" +msgstr "Skip (do not import)" + +#: src/components/notebook/RunAllSummary.tsx +msgid "skipped" +msgstr "skipped" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Slowest Step" +msgstr "Slowest Step" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket Timeout" +msgstr "Socket Timeout" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket timeout in milliseconds." +msgstr "Socket timeout in milliseconds." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort ascending" +msgstr "Sort ascending" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} ASC" +msgstr "Sort by {colName} ASC" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} DESC" +msgstr "Sort by {colName} DESC" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Sort by {field}" +msgstr "Sort by {field}" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort by…" +msgstr "Sort by…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort descending" +msgstr "Sort descending" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sort or temp work detected" +msgstr "Sort or temp work detected" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Split Group" +msgstr "Split Group" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Horizontal" +msgstr "Split Horizontal" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Vertical" +msgstr "Split Vertical" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +#: src/components/ui/TableToolbar.tsx +msgid "SQL" +msgstr "SQL" + +#: src/components/settings/AppearanceTab.tsx +msgid "SQL Editor" +msgstr "SQL Editor" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "SQL file executed successfully" +msgstr "SQL file executed successfully" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Functions" +msgstr "SQL Functions" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "SQL Generation" +msgstr "SQL Generation" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Mode" +msgstr "SQL Mode" + +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQL Preview" +msgstr "SQL Preview" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "SQLite does not support dropping FKs via ALTER TABLE." +msgstr "SQLite does not support dropping FKs via ALTER TABLE." + +#: src/utils/explainPlan.ts +msgid "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural." +msgstr "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural." + +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQLite only supports renaming columns. Other modifications require recreating the table manually." +msgstr "SQLite only supports renaming columns. Other modifications require recreating the table manually." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Connections" +msgstr "SSH Connections" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Host" +msgstr "SSH Host" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH is not available for this driver." +msgstr "SSH is not available for this driver." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key" +msgstr "SSH Key" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key File (Optional)" +msgstr "SSH Key File (Optional)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key Passphrase (Optional)" +msgstr "SSH Key Passphrase (Optional)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Password" +msgstr "SSH Password" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH Password missing. Please re-enter." +msgstr "SSH Password missing. Please re-enter." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Port" +msgstr "SSH Port" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH User" +msgstr "SSH User" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSL Mode" +msgstr "SSL Mode" + +#: src/components/ui/GeometryInput.tsx +msgid "ST_GeomFromText('POINT(30 40)', 4326)" +msgstr "ST_GeomFromText('POINT(30 40)', 4326)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Stacked view" +msgstr "Stacked view" + +#: src/components/modals/CommunityModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Star on GitHub" +msgstr "Star on GitHub" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Started" +msgstr "Started" + +#: src/components/settings/GeneralTab.tsx +msgid "Startup" +msgstr "Startup" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Status" +msgstr "Status" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Stop" +msgstr "Stop" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop execution when a cell fails" +msgstr "Stop execution when a cell fails" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop on Error" +msgstr "Stop on Error" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "stopped" +msgstr "stopped" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Structure" +msgstr "Structure" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Structure (DDL)" +msgstr "Structure (DDL)" + +#: src/pages/Editor.tsx +msgid "Submit Changes" +msgstr "Submit Changes" + +#: src/components/notebook/RunAllSummary.tsx +msgid "succeeded" +msgstr "succeeded" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Success" +msgstr "Success" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Success" +msgstr "Success" + +#: src/components/modals/ExportProgressModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Success" +msgstr "Success" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Success" +msgstr "Success" + +#: src/pages/TaskManagerPage.tsx +msgid "Sum of RSS across the process tree — may overcount shared memory" +msgstr "Sum of RSS across the process tree — may overcount shared memory" + +#: src/components/settings/InfoTab.tsx +msgid "Support the Development" +msgstr "Support the Development" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch tab" +msgstr "Switch tab" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch to connection 1–9" +msgstr "Switch to connection 1–9" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Horizontal Layout" +msgstr "Switch to Horizontal Layout" + +#: src/components/ui/TableToolbar.tsx +msgid "Switch to SQL WHERE input" +msgstr "Switch to SQL WHERE input" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Vertical Layout" +msgstr "Switch to Vertical Layout" + +#: src/pages/TaskManagerPage.tsx +msgid "System Resources" +msgstr "System Resources" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Tab" +msgstr "Tab" + +#: src/components/settings/AppearanceTab.tsx +msgid "Tab Size" +msgstr "Tab Size" +#: src/components/ui/MultiResultPanel.tsx +msgid "Tab view" +msgstr "Tab view" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "table" +msgstr "table" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Table" +msgstr "Table" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Table name" +msgstr "Table name" + +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Table Name" +msgstr "Table Name" + +#: src/components/modals/CreateTableModal.tsx +msgid "Table name is required" +msgstr "Table name is required" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Tables" +msgstr "Tables" + +#: src/components/modals/CommunityModal.tsx +msgid "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community." +msgstr "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community." + +#: src/pages/TaskManagerPage.tsx +msgid "Tabularis Process" +msgstr "Tabularis Process" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Target column" +msgstr "Target column" + +#: src/components/settings/InfoTab.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Task Manager" +msgstr "Task Manager" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Temp or Sort Ops" +msgstr "Temp or Sort Ops" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Test" +msgstr "Test" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Test Connection" +msgstr "Test Connection" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Testing..." +msgstr "Testing..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "The app will restart automatically after installation" +msgstr "The app will restart automatically after installation" + +#: src/components/settings/AiTab.tsx +msgid "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1" +msgstr "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "The configuration file has been saved. Restart now to apply the changes?" +msgstr "The configuration file has been saved. Restart now to apply the changes?" + +#: src/pages/Connections.tsx +msgid "The exported file will contain your database and SSH passwords in plaintext. Please store it securely." +msgstr "The exported file will contain your database and SSH passwords in plaintext. Please store it securely." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:" +msgstr "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely." +msgstr "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "The plugin process could not be launched. Check the error details below." +msgstr "The plugin process could not be launched. Check the error details below." + +#: src/components/settings/AppearanceTab.tsx +msgid "The quick brown fox jumps over the lazy dog" +msgstr "The quick brown fox jumps over the lazy dog" + +#: src/components/settings/AppearanceTab.tsx +msgid "Theme Selection" +msgstr "Theme Selection" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "These connections will reject writes from MCP. Other connections behave normally." +msgstr "These connections will reject writes from MCP. Other connections behave normally." + +#: src/pages/TaskManagerPage.tsx +msgid "This action cannot be undone immediately" +msgstr "This action cannot be undone immediately" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "This driver only supports primary keys at table creation time" +msgstr "This driver only supports primary keys at table creation time" + +#: src/components/settings/AiTab.tsx +msgid "This key is loaded from an environment variable" +msgstr "This key is loaded from an environment variable" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Month" +msgstr "This Month" + +#: src/components/notebook/NotebookView.tsx +msgid "This notebook is empty. Add a cell to get started." +msgstr "This notebook is empty. Add a cell to get started." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path." +msgstr "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path." + +#: src/components/settings/InfoTab.tsx +msgid "This project is a Work In Progress (WIP). Core features are stable, but we have big plans." +msgstr "This project is a Work In Progress (WIP). Core features are stable, but we have big plans." + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Week" +msgstr "This Week" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgctxt "aiActivity" +msgid "Time" +msgstr "Time" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Time" +msgstr "Time" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Timeout" +msgstr "Timeout" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Timeout" +msgstr "Timeout" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgctxt "mcp" +msgid "Timeout" +msgstr "Timeout" + +#: src/components/settings/LogsTab.tsx +msgid "Timestamp" +msgstr "Timestamp" + +#: src/components/settings/LocalizationTab.tsx +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Timezone" +msgstr "Timezone" + +#: src/components/settings/LocalizationTab.tsx +msgid "Timezone used to display timestamps and exports. 'Auto' follows your system timezone." +msgstr "Timezone used to display timestamps and exports. 'Auto' follows your system timezone." + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Timing" +msgstr "Timing" + +#: src/components/ui/FilterRow.tsx +msgid "to" +msgstr "to" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Today" +msgstr "Today" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Toggle Chart" +msgstr "Toggle Chart" + +#: src/components/ui/JsonCell.tsx +msgid "Toggle inline JSON tree" +msgstr "Toggle inline JSON tree" + +#: src/components/ui/TextCell.tsx +msgid "Toggle inline text editor" +msgstr "Toggle inline text editor" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Toggle Preview" +msgstr "Toggle Preview" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Toggle sidebar" +msgstr "Toggle sidebar" + +#: src/components/ui/TableToolbar.tsx +msgid "Toggle structured filter panel" +msgstr "Toggle structured filter panel" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled parallel (cell {n})" +msgstr "Toggled parallel (cell {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled stop on error" +msgstr "Toggled stop on error" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Tool" +msgstr "Tool" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Top Issues" +msgstr "Top Issues" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Total Cost" +msgstr "Total Cost" + +#: src/components/ui/JsonInput.tsx +msgid "Tree" +msgstr "Tree" + +#. placeholder {0}: formatBytes(stats.total_memory_bytes) +#: src/pages/TaskManagerPage.tsx +msgid "Tree total: {0}" +msgstr "Tree total: {0}" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "trigger" +msgstr "trigger" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Body (SQL)" +msgstr "Trigger Body (SQL)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger created successfully" +msgstr "Trigger created successfully" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Name" +msgstr "Trigger Name" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger SQL is required" +msgstr "Trigger SQL is required" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger updated successfully" +msgstr "Trigger updated successfully" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Triggers" +msgstr "Triggers" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Try again" +msgstr "Try again" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Try again" +msgstr "Try again" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx #: src/components/modals/SchemaModal.tsx msgid "Type" msgstr "Type" +#: src/components/notebook/NotebookToolbar.tsx +msgid "Undo" +msgstr "Undo" + +#: src/pages/Connections.tsx +msgid "Ungrouped" +msgstr "Ungrouped" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Unique Index" +msgstr "Unique Index" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "unknown" +msgstr "unknown" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Unknown" +msgstr "Unknown" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Unnamed connection" +msgstr "Unnamed connection" + +#: src/components/ui/TableToolbar.tsx +msgid "Unset" +msgstr "Unset" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Untitled" +msgstr "Untitled" + +#: src/components/settings/PluginsTab.tsx +msgid "Up to date" +msgstr "Up to date" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Update" +msgstr "Update" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Update" +msgstr "Update" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Update" +msgstr "Update" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Update Error" +msgstr "Update Error" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Update failed: " +msgstr "Update failed: " + +#: src/components/settings/InfoTab.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Updates" +msgstr "Updates" + +#. placeholder {0}: ({ aur: "AUR", snap: "Snap Store", flatpak: "Flathub" } as Record)[ installationSource ] ?? installationSource +#: src/components/settings/InfoTab.tsx +msgid "Updates managed by {0}" +msgstr "Updates managed by {0}" + +#: src/components/ui/BlobInput.tsx +msgid "Upload File" +msgstr "Upload File" + +#: src/components/ui/BlobInput.tsx +msgid "Uploading..." +msgstr "Uploading..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Existing SSH Connection" +msgstr "Use Existing SSH Connection" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Kubernetes Port-Forward" +msgstr "Use Kubernetes Port-Forward" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use SSH Tunnel" +msgstr "Use SSH Tunnel" + +#: src/components/settings/InfoTab.tsx +msgid "Use your package manager to update Tabularis." +msgstr "Use your package manager to update Tabularis." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Username" +msgstr "Username" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Using the driver's default icon." +msgstr "Using the driver's default icon." + +#: src/components/ui/JsonInput.tsx +msgid "Valid JSON" +msgstr "Valid JSON" + +#: src/components/notebook/ParamsPanel.tsx +msgctxt "editor" +msgid "value" +msgstr "value" + +#: src/components/ui/FilterRow.tsx +msgctxt "toolbar" +msgid "value" +msgstr "value" + +#: src/components/modals/QueryParamsModal.tsx +msgid "Value (e.g. 'text' or 123)" +msgstr "Value (e.g. 'text' or 123)" + +#: src/components/notebook/CellChart.tsx +msgid "Values" +msgstr "Values" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify CA" +msgstr "Verify CA" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Full" +msgstr "Verify Full" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Identity" +msgstr "Verify Identity" + +#: src/components/modals/UpdateNotificationModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Version" +msgstr "Version" + +#. placeholder {0}: entries[0].version +#: src/components/modals/WhatsNewModal.tsx +msgid "Version {0}" +msgstr "Version {0}" + +#. placeholder {0}: updateInfo.latestVersion +#: src/components/settings/InfoTab.tsx +msgid "Version {0} is available" +msgstr "Version {0} is available" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Vertical" +msgstr "Vertical" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "view" +msgstr "view" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View created successfully" +msgstr "View created successfully" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "View Definition" +msgstr "View Definition" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Definition (SQL)" +msgstr "View Definition (SQL)" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View definition is required" +msgstr "View definition is required" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "View details" +msgstr "View details" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "View ER Diagram" +msgstr "View ER Diagram" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Name" +msgstr "View Name" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View name is required" +msgstr "View name is required" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "View on GitHub" +msgstr "View on GitHub" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "View Schema" +msgstr "View Schema" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View updated successfully" +msgstr "View updated successfully" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Views" +msgstr "Views" + +#: src/components/modals/VisualExplainModal.tsx +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +#: src/pages/VisualExplainPage.tsx +msgid "Visual Explain" +msgstr "Visual Explain" + +#: src/components/settings/LogsTab.tsx +msgid "Warn" +msgstr "Warn" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap." +msgstr "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap." + +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "What's New" +msgstr "What's New" + +#: src/pages/TaskManagerPage.tsx +msgid "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted." +msgstr "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted." + +#: src/components/ui/GeometryInput.tsx +msgid "WKT Mode" +msgstr "WKT Mode" + +#: src/components/settings/AppearanceTab.tsx +msgid "Word Wrap" +msgstr "Word Wrap" + +#: src/components/settings/AppearanceTab.tsx +msgid "Wrap long lines in the editor instead of scrolling horizontally." +msgstr "Wrap long lines in the editor instead of scrolling horizontally." + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Write" +msgstr "Write" + +#: src/components/notebook/MarkdownCell.tsx +msgid "Write Markdown here..." +msgstr "Write Markdown here..." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Writes only" +msgstr "Writes only" + #: src/components/modals/SchemaModal.tsx msgid "YES" msgstr "YES" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Yesterday" +msgstr "Yesterday" + +#: src/components/settings/InfoTab.tsx +msgid "You're up to date" +msgstr "You're up to date" diff --git a/src/locales/en/messages.ts b/src/locales/en/messages.ts index 39f11cf5..8821dc96 100644 --- a/src/locales/en/messages.ts +++ b/src/locales/en/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Max History Entries\"],\"-6AWa-\":[\"Import Connections\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Disconnect\"],\"-PLZfh\":[\"Failed to refresh models\"],\"-T5W2e\":[\"Driver Notes\"],\"-ZgeeE\":[\"Edit history\"],\"-aYrdc\":[\"Version \",[\"0\"],\" is available\"],\"-fBGXl\":[\"Highest Cost\"],\"-jIQDz\":[\"Collapse Cell\"],\"-u1eRo\":[\"No database\"],\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"Approval ID\"],\"0E5-gF\":[\"Are you sure you want to delete this connection?\"],\"0HCubq\":[\"Expand\"],\"0Kmdvy\":[\"Custom Font\"],\"0Nj13E\":[\"Generate SQL\"],\"0ROgz5\":[\"Enter JSON...\"],\"0SY9sU\":[\"Failed to disconnect from database\"],\"0b3kL9\":[\"Select a database\"],\"0caMy7\":[\"History\"],\"0mx5ow\":[\"Query\"],\"0n9BtL\":[\"Preview\"],\"0pHB9N\":[\"Copy as table.column\"],\"0sQzZK\":[\"Filter databases...\"],\"0uPP9X\":[\"FK Name (Optional)\"],\"0wxuek\":[\"Current Version\"],\"0x09Aw\":[\"Toggled stop on error\"],\"0yBP6v\":[\"Support the Development\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"0yVAoD\":[\"Count rows\"],\"0zxJ87\":[\"No logs available\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Edit View\"],\"11fGJ6\":[\"Queries\"],\"13hIUA\":[[\"0\"],\" API Key\"],\"14qNWF\":[\"Select SSH Connection\"],\"17qHRP\":[\"New connection\"],\"1Dn6bg\":[\"Import from Clipboard\"],\"1Dnd0I\":[\"Load row count\"],\"1FjTLW\":[\"e.g. python3\"],\"1GOvbo\":[\"Ollama connected (\",[\"0\"],\" models found)\"],\"1I6UoR\":[\"Views\"],\"1U7hS5\":[\"Len\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Editor Font Family\"],\"1ekzlY\":[\"Plugin Processes\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Theme Selection\"],\"1xVZkL\":[\"No models found\"],\"26Joci\":[[\"0\"],\" rows retrieved\"],\"2Bf-Qe\":[\"New console\"],\"2CrSmP\":[\"Help tabularis grow\"],\"2D9F8_\":[\"Failed to duplicate connection\"],\"2Eoi_a\":[\"View details\"],\"2F4pE5\":[\"Rust Build and Test\"],\"2Fsd9r\":[\"This Month\"],\"2JzKXI\":[\"Set GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Select All\"],\"2SO5RM\":[\"Kubernetes is not available for this driver.\"],\"2Uh5GA\":[\"Cargo ecosystem\"],\"2YylFp\":[\"New Visual Query\"],\"2luuSG\":[\"Try again\"],\"2wxgft\":[\"Rename\"],\"2yG2GC\":[\"Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database.\"],\"30-b5r\":[\"Delete\"],\"31kwdN\":[\"Duplicate filter\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"All tools\"],\"3Am5DS\":[\"Tab view\"],\"3BhBCj\":[\"Events\"],\"3FVg9_\":[\"Local Column\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Run\"],\"3L0HCz\":[\"No plugins match your search.\"],\"3Nv3JV\":[\"Executing query...\"],\"3TSz9S\":[\"Minimize\"],\"3UW8fG\":[\"Updates managed by \",[\"0\"]],\"3YvS-c\":[\"New tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook Cell Name Prompt\"],\"3qkggm\":[\"Fullscreen\"],\"3rBJ1T\":[\"View Schema\"],\"3xZ-xV\":[\"Insert Current Timestamp\"],\"40Gx0U\":[\"Timezone\"],\"41GP4f\":[\"Choose the default delimiter character used when copying or exporting rows as CSV.\"],\"42iaEi\":[\"PostgreSQL without ANALYZE shows planner estimates only.\"],\"44cXI8\":[\"Sort by \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Manage Databases\"],\"4CK17g\":[\"Are you sure you want to modify view \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Select at least one database\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Export as HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" child process\"],\"other\":[\"#\",\" child processes\"]}]],\"4VyuY3\":[\"Are you sure you want to clear all logs?\"],\"4WWqS3\":[\"Toggle inline JSON tree\"],\"4cEClj\":[\"Sessions\"],\"4cmfYp\":[\"Duplicate Row\"],\"4lIZTB\":[\"Frontend Dev Dependencies\"],\"4oYjvJ\":[\"Search query…\"],\"4tMxW4\":[\"Preview related record\"],\"4yJcjm\":[\"Select type...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Close filter panel (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Semicolon (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" event\"],\"other\":[\"#\",\" events\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"List view\"],\"5To6Z6\":[\"Copy query\"],\"5gqNQl\":[\"Grid view\"],\"5igIzr\":[\"Import cancelled\"],\"5nTIup\":[\"Editing view: \",[\"name\"]],\"66bEht\":[\"Project Status\"],\"6PIJVc\":[\"Startup\"],\"6QvP0l\":[\"Export as JSON\"],\"6W41Xq\":[\"Task Manager\"],\"6WngBH\":[\"Set NULL\"],\"6YtxFj\":[\"Name\"],\"6_dCYd\":[\"Overview\"],\"6gvoHP\":[\"Copy error message\"],\"6oCVzX\":[\"Kubernetes context is required\"],\"6wQO0f\":[\"Show Data\"],\"6z9W13\":[\"Restart\"],\"71agNy\":[\"Generate names for unnamed cells with AI\"],\"74J3FG\":[\"Initial version\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Got it\"],\"77nSMU\":[\"Delete the entire AI activity history? This cannot be undone.\"],\"79UVYW\":[\"Esc to close\"],\"7ABmyQ\":[\"Try again\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" of \",[\"0\"],\" active\"],\"7E864M\":[\"Database Type\"],\"7FqaG1\":[\"Customize instructions for AI analysis of EXPLAIN query plans. Use {\",[\"LANGUAGE\"],\"} for the output language.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Mixed types detected, defaulted to TEXT\"],\"7RSQQd\":[\"Save passwords in Keychain\"],\"7VpPHA\":[\"Confirm\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"failed\"],\"7sMeHQ\":[\"Key\"],\"7sNhEz\":[\"Username\"],\"7tATh2\":[\"Run Query\"],\"7yb4gk\":[\"Failed: \"],\"8-4V8D\":[\"Tables\"],\"82G-l5\":[\"The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely.\"],\"83VjWE\":[\"New Notebook\"],\"86IgoU\":[\"Run query (in editor)\"],\"86fCgf\":[\"Customize instructions for AI query result tab name generation. The SQL query is sent as the user message.\"],\"87a_t_\":[\"Label\"],\"8CWirf\":[\"MCP Server\"],\"8S8aIX\":[\"Connection Health Check\"],\"8TMaZI\":[\"Timestamp\"],\"8Tg_JR\":[\"Custom\"],\"8UFKYr\":[\"Select Query to Execute\"],\"8VKSGV\":[\"Generate SQL\"],\"8Wjy6z\":[\"Close Tabs to Left\"],\"8ZsakT\":[\"Password\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL Editor\"],\"8bRgTe\":[\"AI Provider not configured. Please go to Settings > AI.\"],\"8c_W0h\":[\"Older versions\"],\"8guEQP\":[\"Refresh Views\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.\"],\"8q_sOc\":[\"Remove\"],\"8t-akp\":[\"showing first \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Connection Name\"],\"91gnWY\":[\"Export Logs\"],\"91rtHL\":[\"Create New View\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"View updated successfully\"],\"9NzDFn\":[\"Display the welcome screen when the application starts.\"],\"9OoUS3\":[\"Create New SSH Connection\"],\"9QGRD5\":[\"Target column\"],\"9QTny9\":[\"Query failed.\"],\"9S-fyV\":[\"Pre-flight execution plan\"],\"9SJ_Sx\":[\"System Resources\"],\"9UQ730\":[\"Clone\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"No data found in clipboard\"],\"9mMU1R\":[\"Time\"],\"9mvFo_\":[\"Time\"],\"9npOH9\":[\"Open file\"],\"9uI_rE\":[\"Undo\"],\"9xUjzm\":[\"Select All\"],\"9y_02p\":[\"Chat with the community, get help, suggest features\"],\"A1pPcI\":[\"SSH Host\"],\"A1taO8\":[\"Search\"],\"A6C0pv\":[\"Total Cost\"],\"A7WG0p\":[\"Plugin disabled\"],\"A7yRz3\":[\"View definition is required\"],\"A9Uyp6\":[\"Import failed: \"],\"ABEd-z\":[\"Use your package manager to update Tabularis.\"],\"AMdgKV\":[\"Explain Plan Analysis Prompt\"],\"ANSTMe\":[\"No major issues detected in the current plan summary.\"],\"ANzIr7\":[\"Query History\"],\"AOnaU7\":[\"skipped\"],\"AVlZoM\":[\"Environment\"],\"AXTVsE\":[\"Verify Full\"],\"AXdRYR\":[\"Current Logs\"],\"Aa-YkQ\":[\"Export Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filter by level\"],\"AlPiMN\":[\"Click to jump to page\"],\"An-1rA\":[\"Rows returned\"],\"AnV8j-\":[\"Modify Column\"],\"AvEr_L\":[\"New Console\"],\"AvYbUL\":[\"Star on GitHub\"],\"Aw_eOs\":[\"Requires Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No results found\"],\"B0mJGb\":[\"Raw Output\"],\"B1c58n\":[\"Modify Column\"],\"B3toQF\":[\"Objects\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"Connection name is required\"],\"BAVvWJ\":[\"ER Diagram\"],\"BBtVak\":[\"Collapse All\"],\"BEVzjL\":[\"Import failed\"],\"BFxXo5\":[\"Run All\"],\"BJe2lZ\":[\"Toggle sidebar\"],\"BK3WCj\":[\"Failed to load registry\"],\"BKbO3i\":[\"Edited notebook\"],\"BMB51y\":[\"Run in console\"],\"BNW_Z4\":[\"e.g. active_users, order_summary\"],\"BUO_JN\":[\"Copy Query\"],\"BYkhHY\":[\"Check for updates on startup\"],\"BbHofF\":[\"Export Connections\"],\"BeSg6-\":[\"Collect application logs in memory for debugging\"],\"BgAyQH\":[\"Clear sort\"],\"BinTJI\":[\"npm ecosystem\"],\"BkFson\":[\"Auto paginated\"],\"Bpglf1\":[\"Move Up\"],\"BrGo6h\":[\"Search notebooks\"],\"BxiAN_\":[\"Delete Query\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Frontend Dependencies\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"No filters —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Downloading...\"],\"CUxwxn\":[\"Show All Tables\"],\"CWMXbw\":[\"will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted.\"],\"CZt6BX\":[\"MANUAL CONFIGURATION\"],\"Ca8ixZ\":[\"Delete\"],\"CbJBQS\":[\"Update failed: \"],\"Cdz-YU\":[\"Stacked view\"],\"CpeQf9\":[\"Loops\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Select the model to be used for generation and explanation.\"],\"DB8zMK\":[\"Apply\"],\"DDXf5E\":[\"SQL Functions\"],\"DEwnwi\":[\"Delete\"],\"DNTvdl\":[\"Open in Editor\"],\"DPc2P9\":[\"Delete Cell\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Line Height\"],\"Dd7YLj\":[\"Maybe later\"],\"Deej3j\":[\"Invalid JSON\"],\"DfKhk_\":[\"Update\"],\"DiRiTz\":[\"Open package page\"],\"DlRHAD\":[\"Running EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" error\"],\"other\":[\"#\",\" errors\"]}]],\"Dvdihe\":[\"On \",[\"0\"],\" — review and decide before it executes.\"],\"DzFLzw\":[\"YES\"],\"E-JUtQ\":[\"Approval gate\"],\"E0kcnZ\":[\"General\"],\"E2mje_\":[\"Select Query to Explain\"],\"EDieyg\":[\"Are you sure you want to delete this SSH connection?\"],\"EHZxPj\":[\"Expand\"],\"EL4oDO\":[\"New Version Available\"],\"EPi4gT\":[\"Sort by \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Unknown\"],\"EhADgB\":[\"Delete Column\"],\"EkH9pt\":[\"Update\"],\"Ekblrc\":[\"You're up to date\"],\"Em6JFd\":[\"Count Rows\"],\"EnGiqG\":[[\"0\"],\" elements\"],\"Ew1n5z\":[\"Search plugins…\"],\"F18WP3\":[\"Parameters\"],\"F3uc1x\":[\"The exported file will contain your database and SSH passwords in plaintext. Please store it securely.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"F6pfE9\":[\"Active\"],\"F8tXg7\":[\"Data Preview\"],\"F9-6yK\":[\"Default Copy Format\"],\"F9lxfG\":[\"Remove\"],\"F9nsa2\":[\"The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:\"],\"FF_oap\":[\"Default\"],\"FK8rlP\":[\"No SSH connections configured yet\"],\"FMRcH8\":[\"First row as header\"],\"FNvDMc\":[\"This Week\"],\"FQe1FI\":[\"Est. Rows\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operation\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Choose an independent theme for the SQL editor, or keep it in sync with the app theme.\"],\"FsvZQL\":[\"Edited cell \",[\"n\"]],\"FtwKL9\":[\"Switch tab\"],\"FznI3z\":[\"Delete foreign key \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Preview failed: \"],\"G8Q5Zq\":[\"Namespace is required\"],\"GAohqx\":[\"Delete column\"],\"GJR99u\":[\"Failed to delete column: \"],\"GKfzzM\":[\"Choose a connection...\"],\"GS-Mus\":[\"Export\"],\"GUaLUq\":[\"Failed to load schema: \"],\"GXP-Iw\":[\"Add SQL Cell\"],\"Gj1mLb\":[\"Reordered cells\"],\"GlbqG2\":[\"Reset to driver default\"],\"Gs5AlY\":[\"Open\"],\"GtmO8_\":[\"from\"],\"GxkJXS\":[\"Uploading...\"],\"H-o4D2\":[\"Create new column\"],\"H2B-KW\":[\"Choose the default format when copying rows with Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Redo\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"Collapse\"],\"H9P8CD\":[\"add the first filter\"],\"HAQlGl\":[\"AI Activity\"],\"HKNZrs\":[\"Index Cond.\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Delete \",\"#\",\" row\"],\"other\":[\"Delete \",\"#\",\" rows\"]}]],\"HPuCiP\":[\"Folder Path\"],\"HUs1R3\":[\"No open tabs for this connection.\"],\"HV4Isp\":[\"Enter SSH password\"],\"HVC8Hh\":[\"Copied to clipboard\"],\"HWEpq8\":[\"Disk Write/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Failed to save view: \"],\"He8v1Y\":[\"Deselect from Apply All\"],\"HehHP1\":[\"Default Layout\"],\"HilYn4\":[\"This notebook is empty. Add a cell to get started.\"],\"HjxVK_\":[\"Quick connection test\"],\"HmMnRx\":[\"WKT Mode\"],\"HoKCiI\":[\"The app will restart automatically after installation\"],\"HpK_8d\":[\"Reload\"],\"Hpi4Jm\":[\"Join now\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configure SSH Inline\"],\"I5VBsr\":[\"Same as App\"],\"I8yrPb\":[\"Replace table\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Remind Me Later\"],\"I99Miw\":[\"Cost\"],\"IETZIR\":[\"Edit cell name\"],\"IG9wzA\":[\"Failed to insert row: \"],\"ILleOG\":[\"Resource type must be \\\"service\\\" or \\\"pod\\\"\"],\"IQ3gAw\":[\"Upload File\"],\"IUwGEM\":[\"Save Changes\"],\"IUwmLq\":[\"Direct dependencies declared in package.json and src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Open Source Libraries\"],\"I_43p6\":[\"Safety\"],\"Iaizf4\":[\"Appearance\"],\"Il3FBB\":[\"Toggle structured filter panel\"],\"IniZRK\":[\"Download unavailable - only preview loaded\"],\"Isaozb\":[\"Review & adjust\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Active queries and connections through this plugin will be interrupted.\"],\"J6v1s_\":[\"Default Model\"],\"JE-DVk\":[\"Interpreter\"],\"JEGlfK\":[\"Started\"],\"JKDPqP\":[\"Select a context first\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Use SSH Tunnel\"],\"JRz8tw\":[\"MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants.\"],\"JUICth\":[\"PNG, JPG, WebP or SVG · max 512 KB\"],\"JY5Oyv\":[\"Database\"],\"JlFRIB\":[\"Session timezone sent to MySQL after connect.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Denied\"],\"K3H9p5\":[\"Unset\"],\"K5Dgu_\":[\"Databases\"],\"K8IGKf\":[\"Authentication Type\"],\"KAYNSW\":[\"How many logs to keep in memory (1-10000)\"],\"KHTGbr\":[\"Pre-flight EXPLAIN\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copy as `column`\"],\"KM5Kc8\":[\"At least one column must be selected\"],\"KSCnVQ\":[\"Kind\"],\"KUjOb9\":[\"running\"],\"KXBdwy\":[\"Refresh Routines\"],\"KXNyX7\":[\"Set DEFAULT\"],\"Kd70-v\":[\"Import from Clipboard...\"],\"KhI4oS\":[\"Open referenced row in \",[\"0\"]],\"KhgrNu\":[\"MCP Server Integration\"],\"KirERL\":[\"Timeout\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Failed to delete index: \"],\"KzeARD\":[\"Failed to delete table: \"],\"L-rMC9\":[\"Reset to default\"],\"L3HXkQ\":[\"Bug Fixes\"],\"LCZ7Dy\":[\"Copy Name\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"indexes\"],\"LMeAoR\":[\"rows\"],\"LPCdc-\":[\"Query Tab Name Prompt\"],\"LPFmga\":[\"Select for Apply All\"],\"LYzbQ2\":[\"Tool\"],\"Lbis_V\":[\"Quick Navigator\"],\"Lcpbe2\":[\"The plugin process could not be launched. Check the error details below.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained.\"],\"LnT0hQ\":[\"Add Column\"],\"LvutiO\":[\"AI Suggest\"],\"M-rHQO\":[\"Exit Fullscreen\"],\"M0XJba\":[\"Are you sure you want to clear all query history for this connection?\"],\"M1co_O\":[\"Configured\"],\"M73whl\":[\"Context\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Show All\"],\"MXdOwj\":[\"Separate Connections\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Select K8s Connection\"],\"Mc1tjS\":[\"Enable ANALYZE to inspect actual rows, timing, loops, and buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" more rows\"],\"Mp0jQ_\":[\"This driver only supports primary keys at table creation time\"],\"MqpZwN\":[\"Tabularis Process\"],\"MxIx43\":[\"↑↓ to navigate, Enter to open\"],\"MygtgQ\":[\"Add Markdown Cell\"],\"N40H-G\":[\"All\"],\"N5UQxq\":[\"Ollama not detected on port \",[\"0\"],\". Is it running?\"],\"N6GBcC\":[\"Confirm Delete\"],\"N6aqHp\":[\"Run queries\"],\"N9_S15\":[\"A new table will be created\"],\"NBdMa1\":[\"Slowest Step\"],\"NC2AI2\":[\"Length\"],\"NCzNnx\":[\"Sort ascending\"],\"NT4Ubs\":[\"Delete custom key and revert to environment variable (if present)\"],\"NUjrCO\":[\"No favorites match your search\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Tree total: \",[\"0\"]],\"Nc2VQn\":[\"Append to existing\"],\"NgFERn\":[\"Add to Favorites\"],\"NktMHG\":[\"Database name\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Test\"],\"Nq5QTk\":[\"explain Nth\"],\"O2STgu\":[\"Export failed: \"],\"O8SV8O\":[\"Downloading...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Run All Cells\"],\"OGWdBg\":[\"View Name\"],\"OHqT6w\":[\"Press key combination...\"],\"OXJsaG\":[\"Invalid parameter name\"],\"OfhWJH\":[\"Reset\"],\"OlAl5i\":[\"Expand all\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Join Discord\"],\"P1YGsb\":[\"SQL Generation\"],\"P2m1xb\":[\"Stop on Error\"],\"P3Qlys\":[\"No Connection ID\"],\"P6Y3Yf\":[\"Run this command in your terminal, then restart Claude Code.\"],\"PCdj-c\":[\"Deselect All\"],\"PMnFt9\":[\"Disk Read/s\"],\"PQU2Va\":[\"Accept Suggestion with Enter\"],\"PRnH8G\":[\"of \",[\"0\"]],\"PY8UF3\":[\"Toggled parallel (cell \",[\"n\"],\")\"],\"PiH3UR\":[\"Copied!\"],\"Pia95d\":[\"Column name is required\"],\"PrElXQ\":[\"Update\"],\"PrixCC\":[\"Rows will be added to an existing table\"],\"Pujgbb\":[\"Configure destination\"],\"Pw_eQV\":[\"Plugin Failed to Start\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"No saved queries\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"No child processes\"],\"QCxMC0\":[\"Automatically check for new versions when the app launches\"],\"QEazml\":[\"Delete selected\"],\"QHcLEN\":[\"Connected\"],\"QLHHFO\":[\"Read-only mode\"],\"QOvAW3\":[\"New Features\"],\"QULGRi\":[\"No valid queries found\"],\"QZwllF\":[\"Browse...\"],\"QbkSr_\":[\"EXPLAIN unavailable for this query.\"],\"QeHFYZ\":[\"EXPLAIN failed: \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"Read more\"],\"Qu4Hog\":[\"Notebook imported successfully\"],\"R-A2Vd\":[\"No data to display\"],\"R0Hkb2\":[[\"0\"],\" database(s) selected\"],\"R1nHhB\":[\"Already exists\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convert to Console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Setup\"],\"RF-HyV\":[\"Choose your preferred language. 'Auto' will use your system language.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copy name\"],\"RI-HZc\":[\"Enter \",[\"0\"],\" Key\"],\"RJrE17\":[\"Are you sure you want to drop view \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"A star helps others discover the project\"],\"Rb3Tdm\":[\"Notebook name\"],\"RcbKJ3\":[\"On Update\"],\"RkefFq\":[\"Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan.\"],\"RnF_hl\":[\"Loading plugin registry...\"],\"Rns7_C\":[\"This action cannot be undone immediately\"],\"RoKRqW\":[\"Available Plugins\"],\"RphpKk\":[\"Appearance\"],\"Rt8sHM\":[\"Sort or temp work detected\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Enabled\"],\"S1veKH\":[\"Revert Selected\"],\"S5zeZU\":[\"Toggle Preview\"],\"S8Yqbl\":[\"Insert\"],\"SDND4q\":[\"Not configured\"],\"SJRy3D\":[\"(Auto-generated)\"],\"SSwIjo\":[\"Set EMPTY\"],\"SgvA_r\":[\"Press Run (Ctrl/Command+F5) to load table data\"],\"SlfejT\":[\"Error\"],\"SoATkx\":[\"Copy Cell\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"Endpoint URL\"],\"T7w5CQ\":[\"Failed to create new row: \"],\"T9947j\":[\"Value (e.g. 'text' or 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Switch to Vertical Layout\"],\"TK5oex\":[\"Save Prompt\"],\"TKQ7K-\":[\"Install\"],\"TKZreP\":[\"Require\"],\"TMLAx2\":[\"Required\"],\"TO08JI\":[\"foreign keys\"],\"TQloo1\":[\"Create Foreign Key\"],\"TVKqvO\":[\"Edit Row\"],\"TYSdQ3\":[\"Run SELECT query\"],\"TfDFHS\":[\"Wrap long lines in the editor instead of scrolling horizontally.\"],\"Tibfjs\":[\"No saved connections — create one below\"],\"Tj36Dr\":[\"Reset to Default\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Lock query\"],\"TpwXyg\":[\"If timing is missing, the server likely returned an estimate-only plan.\"],\"Tw2M1h\":[\"Installation Failed\"],\"Ty-rm9\":[\"SSH Connections\"],\"Tz0i8g\":[\"Settings\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes Connections\"],\"U4uzyV\":[\"What's New\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Stop execution when a cell fails\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" on \",[\"1\"],\" — review and decide before it executes.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configuration installed successfully for \",[\"clientName\"],\"! Restart the app to apply.\"],\"URmyfc\":[\"Details\"],\"UWQBvp\":[\"Generate SQL templates\"],\"UawTKZ\":[\"Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default.\"],\"Ub8sf5\":[\"SQLite does not support dropping FKs via ALTER TABLE.\"],\"UbbJ8j\":[\"No options found\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"These connections will reject writes from MCP. Other connections behave normally.\"],\"UnQNah\":[\"Are you sure you want to delete column \\\"\",[\"0\"],\"\\\" from table \\\"\",[\"tableName\"],\"\\\"?\\n\\nWARNING: This will permanently delete all data in this column. This action cannot be undone.\"],\"UncTTh\":[\"Sum of RSS across the process tree — may overcount shared memory\"],\"UpjgFm\":[\"Changed parameters\"],\"UsAnu1\":[\"ANALYZE executes the query. Use with caution on data-modifying statements.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tab Size\"],\"UzWGWO\":[\"Switch to SQL WHERE input\"],\"V-chk5\":[\"How often to check if active connections are still alive. Set to 0 to disable.\"],\"V-pw1j\":[\"Table name\"],\"V2T0Uw\":[\"No saved notebooks yet.\"],\"V3aNwx\":[\"Data Editor\"],\"VGYp2r\":[\"Apply to all\"],\"VH8S7x\":[\"Clipboard column\"],\"VIAEcS\":[\"Failed to load databases. Check your credentials.\"],\"VKdztF\":[\"Append rows\"],\"VLiHXI\":[\"Analyze Data\"],\"VMbmXc\":[\"Are you sure you want to remove \\\"\",[\"pluginName\"],\"\\\"? This will delete the plugin files.\"],\"VO3weF\":[\"No file loaded\"],\"VOZlKc\":[\"Import Database\"],\"VPzsIz\":[\"Generating name...\"],\"VUul0v\":[\"Killing\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"All queries\"],\"Vi2Pqx\":[\"by\"],\"Vl2zn2\":[\"stopped\"],\"Vo4uBA\":[\"An error occurred while installing the plugin. See the details below.\"],\"VqqyOs\":[\"Execute a query to see results\"],\"VzhDFh\":[\"Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below.\"],\"W3uwpT\":[\"Close All Tabs\"],\"W4MKLh\":[\"e.g. Looks risky on prod, please confirm…\"],\"WA8RND\":[\"Are you sure you want to delete table \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Delete Table\"],\"WLnvCZ\":[\"Enter username\"],\"WM-__8\":[\"Search connections...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row imported into \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" rows imported into \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Are you sure you want to delete query \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"succeeded\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"General\"],\"WmPpB1\":[\"Loading explain plan…\"],\"Wu7cK0\":[\"No databases found\"],\"WvoUQF\":[\"Deleted cell \",[\"n\"]],\"Ww3pDD\":[\"MANUAL COMMAND\"],\"X-20AU\":[\"Enter query tab name prompt...\"],\"X-U6_w\":[\"Font Family\"],\"X5fs0g\":[\"Create your first connection to get started.\"],\"X7Ayjp\":[\"Password saved in system keychain\"],\"X9kySA\":[\"Favorites\"],\"XJOV1Y\":[\"Activity\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Query Explanation\"],\"XVF2Pf\":[\"Edit Schemas\"],\"XW6OYF\":[\"This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path.\"],\"XZB6Xr\":[\"Max Log Entries\"],\"Xcffv2\":[\"Show AI Assist and Explain buttons in the editor\"],\"XeqTSh\":[\"Join Type\"],\"XmJfZT\":[\"name\"],\"XoQfG1\":[\"SSH User\"],\"XwI0Vw\":[\"Auto (System)\"],\"XyDlLX\":[\"Index Name\"],\"Y2P2aK\":[\"Select schemas to load:\"],\"Y8HYw2\":[\"value\"],\"Y8zX3R\":[\"Insert to Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Search...\"],\"YWlnMZ\":[\"Ollama Port\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Browse and install plugins from the registry.\"],\"Y_3yKT\":[\"Open in New Tab\"],\"YiAQ_Q\":[\"Refresh Tables\"],\"Ysjr9Y\":[\"SQL Preview\"],\"YswNf7\":[\"All levels\"],\"YtNwr6\":[\"Maximum number of query history entries stored per connection.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Loading...\"],\"Z7ZXbT\":[\"Approve\"],\"Z8JpBH\":[\"Export as Notebook\"],\"Z8fBIc\":[\"Actual rows exceed estimate\"],\"ZC2VJP\":[\"Execute\"],\"ZCIS4k\":[\"no active filters\"],\"ZF1_UT\":[\"SSL Mode\"],\"ZGjBPa\":[\"Clear Logs\"],\"ZHQTlM\":[\"Importing from\"],\"ZIFDoJ\":[\"Please select at least Structure or Data\"],\"ZIZA6o\":[\"Edit before approving\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" parsing warning\"],\"other\":[\"#\",\" parsing warnings\"]}]],\"ZVn8p2\":[\"Display line numbers in the editor gutter.\"],\"ZYnwzF\":[\"Disconnected\"],\"Za3_fO\":[\"Error\"],\"Zf7LHg\":[\"No contexts found (is kubectl installed?)\"],\"Zfotp5\":[\"Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well.\"],\"ZiFjhs\":[\"Select *\"],\"ZpzHz0\":[\"Failed to load schemas\"],\"ZqXGPF\":[\"Failed to drop view: \"],\"ZuL73E\":[\"Create a new database view\"],\"_-bi4r\":[\"Referenced Table\"],\"_AEYGI\":[\"No execution history yet\"],\"_FdpZc\":[\"Failed to load view definition: \"],\"_FxSdi\":[\"Browse the direct open source dependencies used across the app, backend, and tooling.\"],\"_JyTG8\":[\"Enter explain prompt...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"rows\"],\"_TK1zF\":[\"Saved Connection\"],\"_bJFBE\":[\"Connect Timeout\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Tree\"],\"_dqduX\":[\"Next page\"],\"_fwE6J\":[\"Older\"],\"_n04sB\":[\"Kill\"],\"_otxbQ\":[\"Key file\"],\"_pezIT\":[\"Failed to connect to \",[\"0\"],\". Please check your settings or ensuring the database is running.\"],\"_srfkj\":[\"Custom key deleted successfully\"],\"_t6aFo\":[\"MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version.\"],\"_xTbaM\":[\"columns\"],\"_yxaaL\":[\"Unique Index\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.\"],\"a9CASo\":[\"SQLite only supports renaming columns. Other modifications require recreating the table manually.\"],\"aAIQg2\":[\"Appearance\"],\"aC_vCa\":[\"Generate name with AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Select a node to view details\"],\"aHKcKc\":[\"Previous page\"],\"aI-5wG\":[\"Verify CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Default Value\"],\"aScJP1\":[\"Run this query\"],\"aVNbN8\":[\"Filter conditions\"],\"aWhdMQ\":[\"Use Existing SSH Connection\"],\"aXYd8V\":[\"Timeout\"],\"aX_S_r\":[\"Page \",[\"0\"],\" of \",[\"totalPages\"]],\"agZcf8\":[\"Generated SQL: \",[\"tableName\"]],\"ajqPzi\":[\"Select [fields]\"],\"alplHn\":[\"Analyzing query plan with AI...\"],\"anBcU3\":[\"If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo.\"],\"arHmj2\":[\"Are you sure you want to delete this query from history?\"],\"arKcqW\":[\"Older servers may fall back to estimated plans with fewer metrics.\"],\"arcpYe\":[\"Approval required\"],\"aurEkh\":[\"Loading processes…\"],\"avtdsd\":[\"SQL Mode\"],\"az8lvo\":[\"Off\"],\"b1Ah3z\":[\"Focused on\"],\"b392Dr\":[\"Expand All\"],\"b5S_PU\":[\"Database Name\"],\"bAvovP\":[\"Move Down\"],\"bH3JqY\":[\"No tables found\"],\"bP5JOn\":[\"Word Wrap\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Make all MCP queries read-only\"],\"bmca5u\":[\"Writes only\"],\"bpCiBU\":[\"Allow writes from MCP\"],\"bqnhqW\":[\"Estimate exceeds actual rows\"],\"bqpcP7\":[\"Dump Database\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Fail with error\"],\"bw22Gk\":[\"Column Schema\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Top Issues\"],\"cFCKYZ\":[\"Deny\"],\"cFGrCP\":[\"table\"],\"cGeFup\":[\"Font Size\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focus on Table\"],\"cM9NHc\":[\"Downgrade to\"],\"cO9-2L\":[\"Disable\"],\"cSev-j\":[\"Filters\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Import \",\"#\",\" row\"],\"other\":[\"Import \",\"#\",\" rows\"]}]],\"c_xoSn\":[\"Renamed cell \",[\"n\"]],\"cd0XEW\":[\"Save Query\"],\"cnGeoo\":[\"Delete\"],\"cwfPLH\":[\"Split Group\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" statements\"],\"d34vwG\":[\"Load Databases\"],\"d6ynQ7\":[\"Sort descending\"],\"d8_6_v\":[\"cancel\"],\"d8wc1_\":[\"Sample values\"],\"dBXoCS\":[\"An environment variable is present, but you can override it by setting a key above.\"],\"dD7NPy\":[\"Outline\"],\"dEgA5A\":[\"Cancel\"],\"dMtLDE\":[\"to\"],\"dPJVhW\":[\"Installation Failed\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" session\"],\"other\":[\"#\",\" sessions\"]}]],\"dTUzKm\":[\"Run Selected (\",[\"0\"],\")\"],\"dU_iQN\":[\"No sessions match the current filters.\"],\"dUh9QW\":[\"Planning\"],\"dVoir2\":[\"Added Markdown cell \",[\"n\"]],\"dZ0d2O\":[\"Please select at least one table\"],\"dhi13U\":[\"Choose image…\"],\"dli1JX\":[\"Submit Changes\"],\"dmYV6f\":[\"Routines\"],\"dohZCo\":[\"Instructions for AI-powered SQL generation. Use {\",[\"SCHEMA\"],\"} as a placeholder for the database structure.\"],\"dtxpK2\":[\"Analyze\"],\"dwW9nJ\":[\"Show Line Numbers\"],\"dwWVw_\":[\"Show Welcome Screen\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"If exists\"],\"dyN4j9\":[\"Click 'Run Preview' to see results\"],\"e07Iz5\":[\"Open Task Manager\"],\"e0NzXu\":[\"This project is a Work In Progress (WIP). Core features are stable, but we have big plans.\"],\"e1UKxf\":[\"Save this query\"],\"e34gdU\":[\"How long the MCP subprocess will wait for the user's decision before failing the request.\"],\"e62LQd\":[\"Force Kill\"],\"e6QZsM\":[\"Editor Theme\"],\"e8CirT\":[\"Run query\"],\"eD2kUP\":[\"Buffers Read\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Enter explain plan analysis prompt...\"],\"eIVolo\":[\"Disk R/W\"],\"eJOEBy\":[\"Exporting...\"],\"eKHY3W\":[\"Plugin Settings\"],\"eMb6Ub\":[\"Choose a resource...\"],\"ePK91l\":[\"Edit\"],\"eXweu6\":[\"Expand Cell\"],\"ecNsTE\":[\"No queries match your search\"],\"ecUA8p\":[\"Today\"],\"ecpIZP\":[\"Enter key passphrase if encrypted\"],\"esl-Tv\":[\"Resource Type\"],\"exyUec\":[\"Connection\"],\"f2AJjl\":[\"Delete Row\"],\"f4pD-j\":[\"Connection test failed\"],\"f7sXvi\":[\"Enter password\"],\"fAsxc0\":[\"Sequential Scans\"],\"fIeFs0\":[\"Select Value...\"],\"fJm92A\":[\"Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Values\"],\"f_b1TA\":[\"Execution History\"],\"fghnqP\":[\"Switch to connection 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Comma (,)\"],\"fp711N\":[\"Blocked (read-only)\"],\"fpzyLj\":[\"Page \",[\"0\"],\" of \",[\"1\"]],\"fuA6oy\":[\"Socket Timeout\"],\"fvImQM\":[[\"0\"],\" selected\"],\"fwr_nh\":[\"Install extensions, manage plugin drivers, and keep runtime settings under control.\"],\"g0ZzK4\":[\"Valid JSON\"],\"g11hAR\":[\"New Row\"],\"g8VcMm\":[\"My K8s cluster\"],\"gCFR_O\":[\"Parallel Execution (Run All)\"],\"gEjU98\":[\"Open connections\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"At least one column is required\"],\"gSuQrG\":[\"No connections match \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Re-run query\"],\"gZWMnn\":[\"AI Analysis\"],\"ghYd73\":[\"Choose target...\"],\"giAqEC\":[\"Create New Table\"],\"gnQS8X\":[\"Maximum packet size used by the MySQL connector.\"],\"gqV5VL\":[\"Built-in, not customizable\"],\"gww_XE\":[\"Referenced Column\"],\"gxXPJ9\":[\"Configure Interpreter\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximize\"],\"h-XNc9\":[\"CSV Delimiter\"],\"h-kNAk\":[\"e.g. sales_data\"],\"h3Z_aK\":[\"Write Markdown here...\"],\"h7MgpO\":[\"Keyboard Shortcuts\"],\"h7peZQ\":[\"Allow\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" system process running\"],\"other\":[\"#\",\" system processes running\"]}]],\"hEZrFh\":[\"Run SQL File...\"],\"hEipgW\":[\"Check for Updates Now\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Export as CSV\"],\"hItdtk\":[\"Browse folder\"],\"hXFVjo\":[\"Table name is required\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Re-run\"],\"hbz1rh\":[\"keys\"],\"hdsaJo\":[\"Importing...\"],\"he3ygx\":[\"Copy\"],\"hfGimp\":[\"Choose a namespace...\"],\"hjjSEi\":[\"Read-only connections\"],\"hjwN_s\":[\"Resource Name\"],\"hlF1mD\":[\"Copy selection\"],\"hnboBb\":[\"AI Query Plan Analysis\"],\"hq4-D2\":[\"API Key is stored securely in your system keychain. Setting a key here overrides the environment variable.\"],\"hqjXdn\":[\"Failed to delete SSH connection\"],\"hqofAK\":[\"Copy SQL\"],\"hy6L14\":[\"View on GitHub\"],\"hyjACX\":[\"Collapsed/expanded cells\"],\"hz1b5W\":[\"No matching elements found\"],\"i1vAVM\":[\"Create new table\"],\"i3S5T3\":[\"Search favorites...\"],\"i4_LY_\":[\"Write\"],\"i5HBWh\":[\"Query history was reset\"],\"iAVlge\":[\"Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message.\"],\"iE1yAB\":[\"Filter tables...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connect\"],\"iSryJ2\":[\"My SSH Server\"],\"iT7UeX\":[\"Add Index\"],\"iUWwuR\":[\"Download & Install\"],\"ia7i08\":[\"Select context/namespace/type first\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Saved\"],\"igcsfY\":[\"No plugins available in the registry.\"],\"ij-Elv\":[\"Image preview\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" explainable query found\"],\"other\":[\"#\",\" explainable queries found\"]}]],\"ioL38P\":[\"Monitor plugin processes, CPU, RAM and disk usage in real time\"],\"ixlL_e\":[\"SSH Key File (Optional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Select a model\"],\"j3gyYH\":[\"Apply All\"],\"j5CWO4\":[\"Up to date\"],\"j9HPuI\":[\"Row #\",[\"0\"]],\"jBtpMP\":[\"All statuses\"],\"jEu4bB\":[\"Columns\"],\"jEyQIs\":[\"No routines found\"],\"jHc1By\":[\"Drop View\"],\"jI6sj4\":[\"Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL.\"],\"jIxQCZ\":[\"Not available for your platform\"],\"jKIncn\":[\"Database name is required\"],\"jPSk57\":[\"Reason (optional)\"],\"jUNY_d\":[\"view\"],\"jVqjDo\":[\"Invalid notebook file format\"],\"jWSZ-A\":[\"Preview only - full data not loaded\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket timeout in milliseconds.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Connection name is required\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"child process\"],\"jx0t66\":[\"Collapse child processes\"],\"jxShEf\":[\"Create View\"],\"jz5PKx\":[\"View Definition\"],\"k-0mL-\":[\"Add Column\"],\"k-XiMX\":[\"Raw\"],\"k2UnVy\":[\"Hash Cond.\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"seconds\"],\"kBiBq7\":[\"Delete index \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Toggle Chart\"],\"kI1qVD\":[\"Format\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" rows · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Event details\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registry\"],\"kY-q3P\":[[\"label\"],\" is required\"],\"kexIdC\":[\"Use Kubernetes Port-Forward\"],\"kj2-CR\":[\"Error Details\"],\"krksx_\":[\"Success\"],\"kwY6nh\":[\"Dismiss\"],\"kx0s-n\":[\"Results\"],\"kxUEfE\":[\"Failed to get routine definition: \"],\"l2Op2p\":[\"Query Parameters\"],\"l9Ivba\":[\"Plugin processes & system resources\"],\"lBdPxu\":[\"Accent color\"],\"lCF0wC\":[\"Refresh\"],\"lEQRwq\":[\"Data (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"New table created\"],\"lOekZ3\":[\"Switch to Horizontal Layout\"],\"lUA1C1\":[\"SSH Key Passphrase (Optional)\"],\"lVeG20\":[\"Rust Dependencies\"],\"lXAG6D\":[\"Instructions for AI-powered query explanation. Use {\",[\"LANGUAGE\"],\"} as a placeholder for the output language.\"],\"lbbYjy\":[\"Directly edit the raw configuration file. A restart is required to apply changes.\"],\"lhKW0m\":[\"Added SQL cell \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Result Page Size (Limit)\"],\"lkz6PL\":[\"Duration\"],\"lmVGeo\":[\"Add Foreign Key\"],\"lnnx3E\":[\"Connect Tabularis to Claude Desktop, Cursor, and more\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Add\"],\"m2Q_r8\":[\"Detect JSON in text columns\"],\"m2tskz\":[\"Success\"],\"mA-qpe\":[\"Run All Complete\"],\"mBhhbA\":[\"Logs exported to clipboard\"],\"mCNdzH\":[\"Run Cell\"],\"mO95sp\":[\"Close panel\"],\"mP7dLi\":[\"Enter font name above\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" blocked\"],\"other\":[\"#\",\" blocked\"]}]],\"mS74ir\":[\"Failed to save SSH connection\"],\"mSqtw8\":[\"Run Preview\"],\"mURmfQ\":[\"View Definition (SQL)\"],\"mX_isJ\":[\"Vertical\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Structure (DDL)\"],\"mrk4Cf\":[\"Sort by \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap.\"],\"mtvVdV\":[\"Rows Processed\"],\"mx4evv\":[\"Create Table\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Download\"],\"n7JDTx\":[\"Install and enable plugins to see them here\"],\"nDDJir\":[\"Search session, client, connection…\"],\"nHP-Kr\":[\"No active session. Please select a connection.\"],\"nKhCjW\":[\"Select Tables\"],\"nNmhuY\":[\"Create Index\"],\"nNwvm4\":[\"Error\"],\"nOVim5\":[\"Failed to save connection\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Requires extension: \",[\"0\"]],\"ngO6Pv\":[\"Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Create your first connection\"],\"nohy4m\":[\"No MCP activity yet.\"],\"nr-axf\":[\"Remove Plugin\"],\"nsPFX9\":[\"Open in Visual Explain\"],\"nuBbBr\":[\"Chart\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Change\"],\"o21Y-P\":[\"entries\"],\"o3tP_A\":[\"Delete Index\"],\"o45L8r\":[\"Provide your connection name\"],\"o53XGh\":[\"Copy selected row(s)\"],\"o7J4JM\":[\"Filter\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Level\"],\"oGiIL7\":[\"Default Provider\"],\"oJ4rAm\":[\"Connection Lost\"],\"oJlXF2\":[\"Import Notebook\"],\"oMFv82\":[\"Split Vertical\"],\"oOFiQg\":[\"Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended).\"],\"oT9ZD3\":[\"Hide overview\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Changed chart (cell \",[\"n\"],\")\"],\"oWfclW\":[\"Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.\"],\"obpbdz\":[\"Config file not found (create manually)\"],\"odZgfC\":[\"AI CLIENTS\"],\"ogZhXn\":[\"Choose the default layout direction for ER diagrams\"],\"ohUJJM\":[\"Plugins\"],\"ok3hJJ\":[\"Installed\"],\"olAdaI\":[\"Actual Rows\"],\"olWzar\":[\"Force Kill Plugin Process\"],\"ovBPCi\":[\"Default\"],\"owzTWN\":[\"AI models refreshed from providers\"],\"oxYi6j\":[\"Adjust the base font size used throughout the application (10-20px).\"],\"p--hsQ\":[\"A database connection was lost\"],\"p6NueD\":[\"NEW\"],\"pOYHox\":[\"Actions\"],\"pR9bTR\":[\"No BLOB data\"],\"pRDT0m\":[\"Table\"],\"pS8S5q\":[\"e.g. users, orders, products\"],\"pSws_M\":[\"Table Name\"],\"pVLbKZ\":[\"View created successfully\"],\"pWT04I\":[\"Checking...\"],\"pZJ_6D\":[\"Index name is required\"],\"pddYFG\":[\"Enter notebook cell name prompt...\"],\"pnpyuD\":[\"Enable Logging\"],\"pqKMPv\":[\"Failed to create table: \"],\"pqaP1h\":[\"Dismiss\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"e.g., Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"All other connections stay read-only. Only the connections checked here may execute writes.\"],\"qIrtcK\":[\"Updates\"],\"qOqy8G\":[\"Checking configuration...\"],\"qWaVNs\":[\"Save & Restart\"],\"qb3LPX\":[\"View ER Diagram\"],\"qkK0vq\":[\"View name is required\"],\"qki9tG\":[\"Error\"],\"qoIir-\":[\"The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Collapse all\"],\"r6ncaO\":[\"Close tab\"],\"rAJlpP\":[\"Container Port\"],\"rG3WVm\":[\"Select\"],\"rGRCeK\":[\"Clear Query History\"],\"rNIto7\":[\"Resource name is required\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exported successfully\"],\"rY4sEV\":[\"Delete FK\"],\"rbu0nO\":[\"Manage SSH Connections\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connection\"],\"other\":[\"#\",\" connections\"]}]],\"rn2_2V\":[\"Remove filter\"],\"roABNH\":[\"No query history\"],\"rtir7c\":[\"unknown\"],\"ru0-2W\":[\"No active connections\"],\"rvDPWO\":[\"Estimate Gap\"],\"rwWjWg\":[\"Release Notes\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Test Connection\"],\"sBOaim\":[\"The configuration file has been saved. Restart now to apply the changes?\"],\"sCyv9B\":[\"Refresh Models\"],\"sSUqe4\":[\"Delete\"],\"sUBkgN\":[\"Generating SQL...\"],\"sZZG3d\":[\"Are you sure you want to import \\\"\",[\"0\"],\"\\\"?\\nThis may overwrite existing data.\"],\"sbK5ck\":[\"Search history...\"],\"sq_bS6\":[\"On Delete\"],\"suW7-E\":[\"Connection timeout in milliseconds.\"],\"t-R8-P\":[\"Execution\"],\"t1OfVY\":[[\"totalLibraries\"],\" libraries\"],\"t2TMzs\":[\"Close Tab\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Select a table...\"],\"t7KRl1\":[\"Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere.\"],\"t9NJIk\":[\"Scan-heavy operations detected\"],\"tB7xof\":[\"Temp or Sort Ops\"],\"tBBXTO\":[\"Ping Interval\"],\"tFrT3w\":[\"Add this to your client config file manually if automatic install fails.\"],\"tJ7UbA\":[\"explain focused\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Split Horizontal\"],\"tQhW-D\":[\"Log Settings\"],\"tXFGEx\":[\"No Kubernetes connections saved. Click \\\"Add\\\" to create one.\"],\"tXLz_8\":[\"Delete\"],\"tXpRby\":[\"Data Grid\"],\"tbysEk\":[\"Actions\"],\"tdta9X\":[\"Page \",[\"0\"]],\"tfDRzk\":[\"Save\"],\"tfEioV\":[\"Execute all SQL cells top to bottom\"],\"tiAIaJ\":[\"SSH Password missing. Please re-enter.\"],\"tk22BR\":[\"Paste structured data and preview the schema before importing\"],\"tst44n\":[\"Events\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL file executed successfully\"],\"u6QeR6\":[\"Restart Now\"],\"uAQUqI\":[\"Status\"],\"uBAxNB\":[\"Editor\"],\"uFViPK\":[\"No SSH connections available\"],\"uHUuhp\":[\"Explain this query\"],\"uHfFzS\":[\"Editor Font Size\"],\"uJ_3K5\":[\"Delete notebook \\\"\",[\"0\"],\"\\\"? This cannot be undone.\"],\"uKaNJ3\":[\"Open in JSON Editor\"],\"uQBwTo\":[\"Schemas\"],\"ub54ff\":[\"Plugin Center\"],\"ufFyBs\":[\"Database exported successfully\"],\"upNmR2\":[\"Open Sidebar Editor\"],\"utMia3\":[\"Deselect All\"],\"uyNaJg\":[\"1 element\"],\"v61dnS\":[\"Enter the exact model name for your OpenAI-compatible provider.\"],\"v6oeyr\":[\"Installed\"],\"v75DGg\":[\"Browse file\"],\"v99dO4\":[\"Primary Key\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query found\"],\"other\":[\"#\",\" queries found\"]}]],\"vCSBPD\":[\"Add filter\"],\"vH7uJj\":[\"Sort by…\"],\"vUOA1-\":[\"Search models...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.\"],\"vXIe7J\":[\"Language\"],\"vYf4Jm\":[\"Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Prefer\"],\"vditm4\":[\"Explain Plan\"],\"vks_ls\":[\"Close Other Tabs\"],\"vnAnIp\":[\"Model <0>\",[\"0\"],\" not found in <1>\",[\"1\"],\". It may not work correctly.\"],\"vqoN5u\":[\"Structure\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Explorer\"],\"vujQJ5\":[\"Localization\"],\"vvJPVL\":[\"Show overview\"],\"vwI5S4\":[\"Success\"],\"vzH-7Z\":[\"Explain\"],\"w7QmD_\":[\"Enter system prompt...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Elapsed time\"],\"wCfv2R\":[\"Add Connection\"],\"wGfc86\":[\"Clear All History\"],\"wGwNv4\":[\"Active database\"],\"wJJ-Wy\":[\"Installing...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers Hit\"],\"wQn-RM\":[\"Add Column\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Applied\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Import from Clipboard\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"Pending approval\"],\"wckWOP\":[\"Manage\"],\"wdYcKH\":[\"Open Tabs\"],\"wja8aL\":[\"Untitled\"],\"wkOAzk\":[\"No notebooks match your search.\"],\"wp49Ao\":[\"Failed to process insertions: \"],\"wqG2hQ\":[\"Skip (do not import)\"],\"wwrAsK\":[\"Please fill in all required fields\"],\"wwu18a\":[\"Icon\"],\"x2fr_j\":[\"Graph\"],\"xANKBj\":[\"Functions\"],\"xBwjck\":[\"A restart is required to apply changes.\"],\"xDAtGP\":[\"Message\"],\"xECY01\":[\"Procedures\"],\"xGPNgZ\":[\"Prompt Customization\"],\"xNgtS-\":[\"No views found\"],\"xOPa1b\":[\"Port must be between 1 and 65535\"],\"xY9s5E\":[\"Timeout\"],\"xaVUr1\":[\"The quick brown fox jumps over the lazy dog\"],\"xbvTzL\":[\"File Path\"],\"xlew5F\":[\"Clear\"],\"xmNyKz\":[\"Testing...\"],\"xtuh6D\":[\"Expand Explorer\"],\"y-Zdqj\":[\"Choose a context...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Open JSON viewer\"],\"yQXjG5\":[\"Deselect All\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Yesterday\"],\"ygCKqB\":[\"Stop\"],\"ykCc6r\":[\"Changed database (cell \",[\"n\"],\")\"],\"ynVMSc\":[\"Select All\"],\"ytdz1d\":[\"AI requested a database write\"],\"yyhzur\":[\"Create Table\"],\"yz7wBu\":[\"Close\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"SSH Password\"],\"z5kV0h\":[\"Connections\"],\"zBTMzx\":[\"Preview\"],\"zCaAKs\":[\"Update Error\"],\"zDAakK\":[\"Cannot display diagram without a connection ID.\"],\"zGe21h\":[\"This key is loaded from an environment variable\"],\"zGfL5t\":[\"value\"],\"zL6-4A\":[\"No plugin processes are running\"],\"zLZhCi\":[\"Brand-new Discord community!\"],\"zLlCou\":[\"Copy column name\"],\"zNEL34\":[\"Join the Community\"],\"zNgTlV\":[\"Close Tabs to Right\"],\"zQz55p\":[\"Inspect structure\"],\"zR0FfH\":[\"Exported to \",[\"target\"]],\"zRZeOc\":[\"Search tables, views, routines, triggers...\"],\"zUNMsr\":[\"SSH Key\"],\"zXMRzb\":[\"SSH Port\"],\"zZgoXr\":[\"No tables match\"],\"zaWbms\":[\"Rollback Changes\"],\"zgClmU\":[\"Install Config\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Enter value...\"],\"zvzN4C\":[\"Set as Active\"],\"zzDlyQ\":[\"Success\"],\"zzMxrp\":[\"Edit config.json\"],\"zz_Wd_\":[\"Mode\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/es/messages.po b/src/locales/es/messages.po index 5c846591..40dd54d9 100644 --- a/src/locales/es/messages.po +++ b/src/locales/es/messages.po @@ -6,39 +6,5291 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: @lingui/cli\n" "Language: es\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" +#: src/components/modals/NewRowModal.tsx +msgid "(Auto-generated)" +msgstr "(Auto-generado)" + +#. placeholder {0}: stats.blocked +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# blocked} other {# blocked}}" +msgstr "{0, plural, one {# bloqueado} other {# bloqueados}}" + +#. placeholder {0}: proc.children.length +#. placeholder {0}: stats.child_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# child process} other {# child processes}}" +msgstr "{0, plural, one {# proceso hijo} other {# procesos hijos}}" + +#. placeholder {0}: connections.length +#: src/pages/Connections.tsx +msgid "{0, plural, one {# connection} other {# connections}}" +msgstr "{0, plural, one {# conexión/es} other {# conexión/es}}" + +#. placeholder {0}: stats.errors +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# error} other {# errors}}" +msgstr "{0, plural, one {# error} other {# errores}}" + +#. placeholder {0}: stats.total +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# event} other {# events}}" +msgstr "{0, plural, one {# evento} other {# eventos}}" + +#. placeholder {0}: queries.length +#: src/components/modals/ExplainSelectionModal.tsx +msgid "{0, plural, one {# explainable query found} other {# explainable queries found}}" +msgstr "{0, plural, one {# consultas analizables encontradas} other {# consultas analizables encontradas}}" + +#. placeholder {0}: parsed.warnings.length +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# parsing warning} other {# parsing warnings}}" +msgstr "{0, plural, one {# avisos de análisis} other {# avisos de análisis}}" + +#. placeholder {0}: queries.length +#: src/components/modals/QuerySelectionModal.tsx +msgid "{0, plural, one {# query found} other {# queries found}}" +msgstr "{0, plural, one {# consultas encontradas} other {# consultas encontradas}}" + +#. placeholder {0}: result.rows.length +#. placeholder {1}: executionTime != null ? Math.round(executionTime) : "—" +#. placeholder {2}: executionTime != null ? Math.round(executionTime) : "—" +#: src/components/notebook/ResultToolbar.tsx +msgid "{0, plural, one {# row · {1}ms} other {# rows · {2}ms}}" +msgstr "{0, plural, one {# filas · {1}ms} other {# filas · {2}ms}}" + +#. placeholder {0}: result.rows_inserted +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row imported into \"{tableName}\"} other {# rows imported into \"{tableName}\"}}" +msgstr "{0, plural, one {# filas importadas en \"{tableName}\"} other {# filas importadas en \"{tableName}\"}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row} other {# rows}}" +msgstr "{0, plural, one {# filas} other {# filas}}" + +#. placeholder {0}: visibleSessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "{0, plural, one {# session} other {# sessions}}" +msgstr "{0, plural, one {# sesión} other {# sesiones}}" + +#. placeholder {0}: systemStats.process_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# system process running} other {# system processes running}}" +msgstr "{0, plural, one {# proceso del sistema en ejecución} other {# procesos del sistema en ejecución}}" + +#. placeholder {0}: tabs.length +#: src/components/modals/TabSwitcherModal.tsx +msgid "{0, plural, one {# tab} other {# tabs}}" +msgstr "{0, plural, one {# pestaña} other {# pestañas}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {Import # row} other {Import # rows}}" +msgstr "{0, plural, one {Importar # filas} other {Importar # filas}}" + +#. placeholder {0}: progress.statements_executed +#. placeholder {1}: progress.total_statements +#: src/components/modals/ImportDatabaseModal.tsx +msgid "{0} / {1} statements" +msgstr "{0} / {1} sentencias" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "{0} API Key" +msgstr "Clave API de {0}" + +#. placeholder {0}: selectedDatabasesState.length +#: src/components/modals/NewConnectionModal.tsx +msgid "{0} database(s) selected" +msgstr "{0} base(s) de datos seleccionada(s)" + +#. placeholder {0}: filteredItems.length +#: src/components/modals/QuickNavigatorModal.tsx +msgid "{0} elements" +msgstr "{0} elementos" + +#. placeholder {0}: approval.clientHint +#. placeholder {1}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "{0} on {1} — review and decide before it executes." +msgstr "{0} en {1} — revisa y decide antes de ejecutar." + +#. placeholder {0}: activeTab.result.rows.length +#. placeholder {0}: entry.result!.rows.length +#. placeholder {0}: entry.result.rows.length +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "{0} rows retrieved" +msgstr "{0} filas obtenidas" + +#. placeholder {0}: selected.size +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "{0} selected" +msgstr "{0} seleccionadas" + +#. placeholder {0}: structuredFilters.length +#: src/components/ui/TableToolbar.tsx +msgid "{activeFilterCount} of {0} active" +msgstr "{activeFilterCount} de {0} activos" + +#: src/components/ui/DataGrid.tsx +msgid "{deleteRowCount, plural, one {Delete # row} other {Delete # rows}}" +msgstr "{deleteRowCount, plural, one {Eliminar # filas} other {Eliminar # filas}}" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "{label} is required" +msgstr "{label} es obligatorio" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "{rowCount, plural, one {# row} other {# rows}}" +msgstr "{rowCount, plural, one {# filas} other {# filas}}" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "{totalLibraries} libraries" +msgstr "{totalLibraries} librerías" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/db.sqlite" +msgstr "/ruta/absoluta/db.sqlite" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/folder" +msgstr "/ruta/absoluta/carpeta" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "/path/to/id_rsa" +msgstr "/ruta/a/id_rsa" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "↑↓ to navigate, Enter to open" +msgstr "↑↓ para navegar, Enter para abrir" + +#. placeholder {0}: previewResult.rows.length - 5 +#: src/components/modals/ViewEditorModal.tsx +msgid "+{0} more rows" +msgstr "+{0} filas más" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "1 element" +msgstr "1 elemento" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "A database connection was lost" +msgstr "Se ha perdido una conexión a la base de datos" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "A new table will be created" +msgstr "Se creará una nueva tabla" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "A restart is required to apply changes." +msgstr "Se requiere reinicio para aplicar los cambios." + +#: src/components/modals/CommunityModal.tsx +msgid "A star helps others discover the project" +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Accent color" +msgstr "Color de acento" + +#: src/components/settings/AppearanceTab.tsx +msgid "Accept Suggestion with Enter" +msgstr "Aceptar Sugerencia con Intro" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Actions" +msgstr "" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Actions" +msgstr "Acciones" + +#: src/pages/TaskManagerPage.tsx +msgctxt "taskManager" +msgid "Actions" +msgstr "Acciones" + +#: src/components/connections/StatusBadge.tsx +msgid "Active" +msgstr "Activa" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/pages/Editor.tsx +msgid "Active database" +msgstr "Base de datos activa" + +#: src/pages/TaskManagerPage.tsx +msgid "Active queries and connections through this plugin will be interrupted." +msgstr "Las consultas activas y las conexiones a través de este complemento serán interrumpidas." + +#: src/pages/McpPage.tsx +msgid "Activity" +msgstr "Actividad" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual Rows" +msgstr "Filas Reales" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual rows exceed estimate" +msgstr "Las filas reales superan la estimacion" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Add" +msgstr "Añadir" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Add Column" +msgstr "Agregar Columna" + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Add Column" +msgstr "Agregar Columna" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Add Column" +msgstr "Agregar Columna" + +#: src/pages/Connections.tsx +msgid "Add Connection" +msgstr "Agregar Conexión" + +#: src/components/ui/TableToolbar.tsx +msgid "Add filter" +msgstr "Agregar filtro" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Foreign Key" +msgstr "Agregar Clave Foránea" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Index" +msgstr "Agregar Índice" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add Markdown Cell" +msgstr "Agregar Celda Markdown" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add SQL Cell" +msgstr "Agregar Celda SQL" + +#: src/components/ui/TableToolbar.tsx +msgid "add the first filter" +msgstr "agregar el primer filtro" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Add this to your client config file manually if automatic install fails." +msgstr "Agrega esto al archivo de configuración del cliente manualmente si la instalación automática falla." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add to Favorites" +msgstr "Agregar a Favoritos" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added Markdown cell {n}" +msgstr "Celda Markdown {n} añadida" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added SQL cell {n}" +msgstr "Celda SQL {n} añadida" + +#: src/components/settings/AppearanceTab.tsx +msgid "Adjust the base font size used throughout the application (10-20px)." +msgstr "Ajusta el tamaño base de fuente usado en la aplicación (10-20px)." + +#: src/pages/Settings.tsx +msgid "AI" +msgstr "IA" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "AI" +msgstr "AI" + +#: src/components/settings/AiActivityPanel.tsx +#: src/pages/Settings.tsx +msgid "AI Activity" +msgstr "Actividad IA" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "AI Analysis" +msgstr "Analisis IA" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "AI CLIENTS" +msgstr "CLIENTES IA" + +#: src/components/settings/AiTab.tsx +msgid "AI models refreshed from providers" +msgstr "Modelos de IA actualizados desde los proveedores" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Provider not configured. Please go to Settings > AI." +msgstr "Proveedor de IA no configurado. Ve a Configuracion > IA." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Query Plan Analysis" +msgstr "Analisis IA del Plan de Ejecucion" + +#: src/components/modals/AiApprovalModal.tsx +msgid "AI requested a database write" +msgstr "La IA quiere ejecutar una escritura en la base de datos" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "AI Suggest" +msgstr "Sugerir con IA" + +#: src/components/settings/PluginsTab.tsx +msgid "All" +msgstr "Todos" + +#: src/components/settings/LogsTab.tsx +msgid "All levels" +msgstr "Todos los niveles" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All other connections stay read-only. Only the connections checked here may execute writes." +msgstr "El resto sigue en solo lectura. Solo las marcadas pueden ejecutar escrituras." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All queries" +msgstr "Todas las consultas" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All statuses" +msgstr "Todos los estados" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All tools" +msgstr "Todas las herramientas" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Allow" +msgstr "Permitir" + +#: src/components/settings/AppearanceTab.tsx +msgid "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline." +msgstr "Permite que Intro (además de Tab) acepte la sugerencia de autocompletado activa. Cuando está desactivado, Intro siempre inserta una nueva línea." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Allow writes from MCP" +msgstr "Permitir escrituras desde MCP" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Already exists" +msgstr "Ya existe" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Alter View" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "An environment variable is present, but you can override it by setting a key above." +msgstr "Se detectó una variable de entorno, pero puedes sobrescribirla estableciendo una clave arriba." + +#: src/components/modals/PluginInstallErrorModal.tsx +msgid "An error occurred while installing the plugin. See the details below." +msgstr "Ocurrió un error al instalar el plugin. Consulta los detalles a continuación." + +#: src/components/modals/VisualExplainModal.tsx +msgid "Analyze" +msgstr "Analizar" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Analyze Data" +msgstr "Datos Analyze" + +#: src/components/modals/VisualExplainModal.tsx +msgid "ANALYZE executes the query. Use with caution on data-modifying statements." +msgstr "ANALYZE ejecuta la consulta. Usar con precaucion en instrucciones que modifican datos." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "Analyzing query plan with AI..." +msgstr "Analizando plan de ejecucion con IA..." + +#: src/components/settings/AiTab.tsx +msgid "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable." +msgstr "La clave API se almacena de forma segura en el llavero del sistema. Establecer una clave aquí sobrescribe la variable de entorno." + +#: src/pages/Settings.tsx +msgid "Appearance" +msgstr "Apariencia" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Appearance" +msgstr "Apariencia" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Appearance" +msgstr "Apariencia" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Append rows" +msgstr "Agregar filas" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Append to existing" +msgstr "Agregar a existente" + +#: src/components/ui/FilterRow.tsx +msgid "Applied" +msgstr "Aplicado" + +#: src/components/ui/FilterRow.tsx +msgid "Apply" +msgstr "Aplicar" + +#: src/components/ui/TableToolbar.tsx +msgid "Apply All" +msgstr "Aplicar todos" + +#: src/pages/Editor.tsx +msgid "Apply to all" +msgstr "Aplicar a todo" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval gate" +msgstr "Puerta de aprobación" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Approval ID" +msgstr "ID aprobación" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval required" +msgstr "Aprobación requerida" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Approve" +msgstr "Aprobar" + +#: src/components/settings/LogsTab.tsx +msgid "Are you sure you want to clear all logs?" +msgstr "¿Estás seguro de que deseas borrar todos los registros?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to clear all query history for this connection?" +msgstr "¿Estás seguro de que quieres borrar todo el historial de consultas para esta conexión?" + +#. placeholder {0}: column.name +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "" +"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +"\n" +"WARNING: This will permanently delete all data in this column. This action cannot be undone." +msgstr "" +"¿Estás seguro de que deseas eliminar la columna \"{0}\" de la tabla \"{tableName}\"?\n" +"\n" +"ADVERTENCIA: Esto eliminará permanentemente todos los datos de esta columna. Esta acción no se puede deshacer." + +#. placeholder {0}: group?.name +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete group \"{0}\"? Connections in this group will be moved to ungrouped." +msgstr "" + +#. placeholder {0}: queries.find((q) => q.id === favoriteDeleteConfirm)?.name ?? "" +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete query \"{0}\"?" +msgstr "¿Estás seguro de que quieres eliminar la consulta \"{0}\"?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete table \"{0}\"?" +msgstr "¿Estás seguro de que deseas eliminar la tabla \"{0}\"?" + +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete this connection?" +msgstr "¿Estás seguro de que deseas eliminar esta conexión?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete this query from history?" +msgstr "¿Estás seguro de que quieres eliminar esta consulta del historial?" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Are you sure you want to delete this SSH connection?" +msgstr "¿Estás seguro de que deseas eliminar esta conexión SSH?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop trigger \"{0}\"?" +msgstr "" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop view \"{0}\"?" +msgstr "¿Estás seguro de que deseas eliminar la vista \"{0}\"?" + +#. placeholder {0}: file.split(/[\\/]/).pop() +#: src/components/layout/ExplorerSidebar.tsx +msgid "" +"Are you sure you want to import \"{0}\"?\n" +"This may overwrite existing data." +msgstr "" +"¿Estás seguro de que deseas importar \"{0}\"?\n" +"Esto podría sobrescribir los datos existentes." + +#: src/components/modals/ViewEditorModal.tsx +msgid "Are you sure you want to modify view \"{name}\"?" +msgstr "¿Estás seguro de que deseas modificar la vista \"{name}\"?" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Are you sure you want to remove \"{pluginName}\"? This will delete the plugin files." +msgstr "¿Estás seguro de que deseas eliminar \"{pluginName}\"? Los archivos del plugin serán eliminados." + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Asc" +msgstr "Asc" + +#: src/components/modals/CreateTableModal.tsx +msgid "At least one column is required" +msgstr "Se requiere al menos una columna" + +#: src/components/modals/CreateIndexModal.tsx +msgid "At least one column must be selected" +msgstr "Se debe seleccionar al menos una columna" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere." +msgstr "Registro de cada llamada MCP y de las consultas pendientes de aprobación. Almacenado localmente." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Authentication Type" +msgstr "Tipo de Autenticación" + +#: src/components/modals/NewRowModal.tsx +msgid "Auto" +msgstr "Auto" + +#: src/components/settings/LocalizationTab.tsx +msgid "Auto (System)" +msgstr "Auto (Sistema)" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Auto Increment" +msgstr "Auto Incremento" + +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Auto paginated" +msgstr "Paginación automática" + +#: src/components/settings/InfoTab.tsx +msgid "Automatically check for new versions when the app launches" +msgstr "Buscar automáticamente nuevas versiones al iniciar la aplicación" + +#: src/components/settings/PluginsTab.tsx +msgid "Available Plugins" +msgstr "Plugins Disponibles" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below." +msgstr "Bloquea cualquier sentencia que no sea SELECT vía MCP, salvo las conexiones autorizadas abajo." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Blocked (read-only)" +msgstr "Bloqueada (solo lectura)" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Brand-new Discord community!" +msgstr "¡Nueva comunidad Discord!" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Breaking Changes" +msgstr "" + +#: src/components/settings/PluginsTab.tsx +msgid "Browse and install plugins from the registry." +msgstr "Explora e instala plugins del registro." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse file" +msgstr "Explorar archivo" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse folder" +msgstr "Explorar carpeta" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Browse the direct open source dependencies used across the app, backend, and tooling." +msgstr "Consulta las dependencias open source directas usadas por la app, el backend y la toolchain." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Browse..." +msgstr "Explorar..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Hit" +msgstr "Buffers Hit" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Read" +msgstr "Buffers Leidos" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Bug Fixes" +msgstr "" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Built-in, not customizable" +msgstr "Integrado, no personalizable" + +#: src/components/settings/PluginsTab.tsx +msgid "by" +msgstr "por" + +#: src/components/modals/NewConnectionModal.tsx +msgid "CA Certificate" +msgstr "" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "cancel" +msgstr "cancelar" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/ConfirmModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/JsonViewerPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Cancel" +msgstr "Cancelar" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Cannot display diagram without a connection ID." +msgstr "No se puede mostrar el diagrama sin un ID de conexión." + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "Cargo ecosystem" +msgstr "ecosistema Cargo" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Certificate paths are optional. Leave empty to use system defaults." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Change" +msgstr "Cambiar" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed chart (cell {n})" +msgstr "Gráfico cambiado (celda {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed database (cell {n})" +msgstr "Base de datos cambiada (celda {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed parameters" +msgstr "Parámetros cambiados" + +#: src/components/notebook/CellChart.tsx +msgid "Chart" +msgstr "Gráfico" + +#: src/components/modals/CommunityModal.tsx +msgid "Chat with the community, get help, suggest features" +msgstr "" + +#: src/components/settings/InfoTab.tsx +msgid "Check for Updates Now" +msgstr "Buscar Actualizaciones Ahora" + +#: src/components/settings/InfoTab.tsx +msgid "Check for updates on startup" +msgstr "Buscar actualizaciones al inicio" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Checking configuration..." +msgstr "Verificando configuración..." + +#: src/components/settings/InfoTab.tsx +msgid "Checking..." +msgstr "Verificando..." + +#: src/pages/TaskManagerPage.tsx +msgid "child process" +msgstr "proceso hijo" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a connection..." +msgstr "Elige una conexión..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a context..." +msgstr "Elige un contexto..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a namespace..." +msgstr "Elige un namespace..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a resource..." +msgstr "Elige un recurso..." + +#: src/components/settings/AppearanceTab.tsx +msgid "Choose an independent theme for the SQL editor, or keep it in sync with the app theme." +msgstr "Elige un tema independiente para el editor SQL, o mantenlo sincronizado con el tema de la app." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Choose image…" +msgstr "Elegir imagen…" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Choose target..." +msgstr "Elegir destino..." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default delimiter character used when copying or exporting rows as CSV." +msgstr "Elige el delimitador predeterminado utilizado al copiar o exportar filas en formato CSV." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default format when copying rows with Ctrl+C / Cmd+C." +msgstr "Elige el formato predeterminado al copiar filas con Ctrl+C / Cmd+C." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default layout direction for ER diagrams" +msgstr "Elige la dirección de diseño predeterminada para los diagramas ER" + +#: src/components/settings/LocalizationTab.tsx +msgid "Choose your preferred language. 'Auto' will use your system language." +msgstr "Elige tu idioma preferido. 'Auto' usará el idioma del sistema." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Clear" +msgstr "Limpiar" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "common" +msgid "Clear" +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Clear" +msgstr "Quitar" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Clear All History" +msgstr "Borrar Todo el Historial" + +#: src/components/settings/LogsTab.tsx +msgid "Clear Logs" +msgstr "Limpiar Registros" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Clear Query History" +msgstr "Borrar Historial de Consultas" + +#: src/components/ui/DataGrid.tsx +msgid "Clear sort" +msgstr "Quitar ordenamiento" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Click 'Run Preview' to see results" +msgstr "Haz clic en 'Ejecutar Vista Previa' para ver resultados" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Click another emoji below to change." +msgstr "Haz clic en otro emoji abajo para cambiarlo." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Click Load Databases to fetch available databases." +msgstr "" + +#: src/pages/Editor.tsx +msgid "Click to jump to page" +msgstr "Clic para ir a la página" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Client" +msgstr "Cliente" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Certificate" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Key" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Clipboard column" +msgstr "Columna del portapapeles" + +#: src/components/connections/ActionButtons.tsx +msgid "Clone" +msgstr "Clonar" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/McpModal.tsx +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx #: src/components/modals/SchemaModal.tsx +#: src/components/modals/VisualExplainModal.tsx +#: src/pages/JsonViewerPage.tsx msgid "Close" +msgstr "Cerrar" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close All Tabs" +msgstr "Cerrar Todas las Pestañas" + +#: src/components/ui/TableToolbar.tsx +msgid "Close filter panel (ESC)" +msgstr "Cerrar panel de filtros (ESC)" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Other Tabs" +msgstr "Cerrar Otras Pestañas" + +#: src/components/layout/SplitPaneLayout.tsx +msgid "Close panel" +msgstr "Cerrar panel" + +#: src/components/ui/StackedResultItem.tsx +#: src/i18n/registries/shortcutLabels.ts +msgid "Close tab" +msgstr "Cerrar pestaña" + +#: src/components/modals/TabSwitcherModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tab" +msgstr "Cerrar Pestaña" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Left" +msgstr "Cerrar Pestañas a la Izquierda" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Right" +msgstr "Cerrar Pestañas a la Derecha" + +#: src/components/ui/JsonInput.tsx +msgid "Code" +msgstr "Código" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Collapse" +msgstr "Contraer" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Collapse all" +msgstr "Contraer todo" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Collapse All" +msgstr "Contraer Todo" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Collapse Cell" +msgstr "Contraer Celda" + +#: src/pages/TaskManagerPage.tsx +msgid "Collapse child processes" +msgstr "Contraer procesos hijos" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Collapsed/expanded cells" +msgstr "Celdas contraídas/expandidas" + +#: src/components/settings/LogsTab.tsx +msgid "Collect application logs in memory for debugging" +msgstr "Recopilar registros de la aplicación en memoria para depuración" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Column name is required" +msgstr "El nombre de la columna es requerido" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Column Schema" +msgstr "Esquema de Columnas" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "columns" +msgstr "columnas" + +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +msgid "Columns" +msgstr "Columnas" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Comma (,)" +msgstr "Coma (,)" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Config file not found (create manually)" +msgstr "Archivo de configuración no encontrado (crear manualmente)" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "config.json" +msgstr "config.json" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Configuration installed successfully for {clientName}! Restart the app to apply." +msgstr "¡Configuración instalada correctamente para {clientName}! Reinicia la app para aplicar." + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Configure destination" +msgstr "Configurar destino" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Configure Interpreter" +msgstr "Configurar Intérprete" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSH Inline" +msgstr "Configurar SSH en Línea" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSL/TLS for secure database connections (optional)." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Configured" +msgstr "Configurado" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Confirm" +msgstr "Confirmar" + +#: src/pages/Connections.tsx +msgid "Confirm Delete" +msgstr "Confirmar eliminación" + +#: src/components/connections/ActionButtons.tsx +msgid "Connect" +msgstr "Conectar" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Connect Tabularis to Claude Desktop, Cursor, and more" +msgstr "Conecta Tabularis a Claude Desktop, Cursor y más" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connect Timeout" +msgstr "Tiempo de Espera de Conexión" + +#: src/pages/Editor.tsx +msgid "Connected" +msgstr "Conectado" + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connection" +msgstr "" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Connection" +msgstr "Conexión" + +#: src/components/settings/GeneralTab.tsx +msgid "Connection Health Check" +msgstr "Verificación de Conexión" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "Connection Lost" +msgstr "Conexión Perdida" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection Name" +msgstr "Nombre de Conexión" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Connection name is required" +msgstr "El nombre de la conexión es obligatorio" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Connection name is required" +msgstr "El nombre de la conexión es requerido" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Connection String" +msgstr "" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection test failed" +msgstr "La prueba de conexión falló" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connection timeout in milliseconds." +msgstr "Tiempo de espera de conexión en milisegundos." + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connections" +msgstr "" + +#: src/components/layout/Sidebar.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/Connections.tsx +msgid "Connections" +msgstr "Conexiones" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Container Port" +msgstr "Puerto del contenedor" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Context" +msgstr "Contexto" + +#: src/pages/Editor.tsx +msgid "Convert to Console" +msgstr "Convertir a Consola" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Copied to clipboard" +msgstr "Copiado al portapapeles" + +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copied!" +msgstr "¡Copiado!" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copy" +msgstr "Copiar" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as `column`" +msgstr "Copiar como `columna`" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as table.column" +msgstr "Copiar como tabla.columna" + +#: src/components/ui/DataGrid.tsx +msgid "Copy Cell" +msgstr "Copiar Celda" + +#: src/components/ui/DataGrid.tsx +msgid "Copy column name" +msgstr "Copiar nombre de columna" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy error message" +msgstr "Copiar mensaje de error" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Copy name" +msgstr "Copiar nombre" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Copy Name" +msgstr "Copiar Nombre" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Copy query" +msgstr "Copiar consulta" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy Query" +msgstr "Copiar Consulta" + +#: src/components/ui/DataGrid.tsx +msgid "Copy selected row(s)" +msgstr "Copiar fila(s) seleccionada(s)" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Copy selection" +msgstr "Copiar selección" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Copy SQL" +msgstr "Copiar SQL" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Cost" +msgstr "Costo" + +#: src/utils/explainPlan.ts +msgid "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL." +msgstr "Costo, tiempo y estimaciones de filas suelen no estar disponibles como en PostgreSQL y MySQL." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Count rows" +msgstr "Contar filas" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Count Rows" +msgstr "Contar Filas" + +#: src/pages/TaskManagerPage.tsx +msgid "CPU" +msgstr "CPU" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create a new database trigger" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Create a new database view" +msgstr "Crear una nueva vista de base de datos" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk" +msgid "Create Foreign Key" +msgstr "Crear Clave Foránea" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex" +msgid "Create Index" +msgstr "Crear Índice" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Create new column" +msgstr "Crear nueva columna" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Create New SSH Connection" +msgstr "Crear Nueva Conexión SSH" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Create new table" +msgstr "Crear nueva tabla" + +#: src/components/modals/CreateTableModal.tsx +msgid "Create New Table" +msgstr "Crear Nueva Tabla" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New View" +msgstr "Crear Nueva Vista" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Create Table" +msgstr "Crear Tabla" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Create Table" +msgstr "Crear Tabla" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create Trigger" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Create View" +msgstr "Crear Vista" + +#: src/pages/Connections.tsx +msgid "Create your first connection" +msgstr "Crea tu primera conexión" + +#: src/pages/Connections.tsx +msgid "Create your first connection to get started." +msgstr "Crea tu primera conexión para empezar." + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "CSV Delimiter" +msgstr "Delimitador CSV" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Ctrl+Tab" +msgstr "Ctrl+Tab" + +#: src/components/settings/LogsTab.tsx +msgid "Current Logs" +msgstr "Registros Actuales" + +#: src/components/settings/InfoTab.tsx +msgid "Current Version" +msgstr "Versión Actual" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Custom" +msgstr "Personalizado" + +#: src/components/settings/FontPicker.tsx +msgid "Custom Font" +msgstr "Fuente Personalizada" + +#: src/components/settings/AiTab.tsx +msgid "Custom key deleted successfully" +msgstr "Clave personalizada eliminada correctamente" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language." +msgstr "Personaliza las instrucciones para el analisis IA de los planes EXPLAIN. Usa {LANGUAGE} para el idioma de salida." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message." +msgstr "Personaliza las instrucciones para la generación de nombres de celda en notebooks con IA. El contenido de la celda (SQL o Markdown) se envía como mensaje del usuario." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message." +msgstr "Personaliza las instrucciones para la generación de nombres de pestañas de resultados de consulta con IA. La consulta SQL se envía como mensaje del usuario." + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Data (INSERT)" +msgstr "Datos (INSERT)" + +#: src/components/settings/GeneralTab.tsx +msgid "Data Editor" +msgstr "Editor de Datos" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Data Grid" +msgstr "Cuadrícula de datos" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "Data Preview" +msgstr "Vista Previa de Datos" + +#: src/components/modals/QueryModal.tsx +msgid "Database" +msgstr "Base de datos" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Database exported successfully" +msgstr "Base de datos exportada correctamente" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name" +msgstr "Nombre de la base de datos" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Name" +msgstr "Nombre de la Base de Datos" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name is required" +msgstr "El nombre de la base de datos es requerido" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Type" +msgstr "Tipo de Base de Datos" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Databases" +msgstr "Bases de Datos" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "DDL" +msgstr "DDL" + +#: src/components/settings/LogsTab.tsx +msgid "Debug" +msgstr "Debug" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Default" +msgstr "Predeterminado" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Default" +msgstr "Predeterminado" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Default Copy Format" +msgstr "Formato de copia predeterminado" + +#: src/components/settings/GeneralTab.tsx +msgid "Default Layout" +msgstr "Diseño Predeterminado" + +#: src/components/settings/AiTab.tsx +msgid "Default Model" +msgstr "Modelo Predeterminado" + +#: src/components/settings/AiTab.tsx +msgid "Default Provider" +msgstr "Proveedor Predeterminado" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Default Value" +msgstr "Valor Predeterminado" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Delete" +msgstr "Delete" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Delete" +msgstr "Eliminar" + +#: src/components/modals/ConfirmModal.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Delete" +msgstr "Eliminar" + +#: src/components/connections/ActionButtons.tsx +msgctxt "connections" +msgid "Delete" +msgstr "Eliminar" + +#: src/pages/Connections.tsx +msgctxt "groups" +msgid "Delete" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +msgctxt "sidebar" +msgid "Delete" +msgstr "Eliminar" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Delete" +msgstr "Eliminar" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Delete Cell" +msgstr "Eliminar Celda" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete column" +msgstr "Eliminar columna" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Delete Column" +msgstr "Eliminar Columna" + +#: src/components/settings/AiTab.tsx +msgid "Delete custom key and revert to environment variable (if present)" +msgstr "Eliminar clave personalizada y volver a la variable de entorno (si existe)" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete FK" +msgstr "Eliminar FK" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete foreign key \"{name}\"?" +msgstr "¿Eliminar la clave foránea \"{name}\"?" + +#: src/pages/Connections.tsx +msgid "Delete Group" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Index" +msgstr "Eliminar Índice" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete index \"{name}\"?" +msgstr "¿Eliminar el índice \"{name}\"?" + +#. placeholder {0}: pendingDelete?.title ?? "" +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Delete notebook \"{0}\"? This cannot be undone." +msgstr "¿Eliminar el notebook \"{0}\"? Esta acción no se puede deshacer." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Query" +msgstr "Eliminar Consulta" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Delete Row" +msgstr "Eliminar Fila" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete selected" +msgstr "Eliminar seleccionadas" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Table" +msgstr "Eliminar Tabla" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Delete the entire AI activity history? This cannot be undone." +msgstr "¿Borrar todo el historial de actividad IA? Esta acción es irreversible." + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Deleted cell {n}" +msgstr "Celda {n} eliminada" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Denied" +msgstr "Denegada" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Deny" +msgstr "Denegar" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Desc" +msgstr "Desc" + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Deselect All" +msgstr "Deseleccionar Todo" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Deselect All" +msgstr "Deseleccionar todas" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Deselect All" +msgstr "Deseleccionar Todo" + +#: src/components/ui/FilterRow.tsx +msgid "Deselect from Apply All" +msgstr "Deseleccionar de Aplicar todos" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Details" +msgstr "Detalles" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Detect JSON in text columns" +msgstr "Detectar JSON en columnas de texto" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Diff" +msgstr "" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Direct dependencies declared in package.json and src-tauri/Cargo.toml." +msgstr "Dependencias directas declaradas en package.json y src-tauri/Cargo.toml." + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Directly edit the raw configuration file. A restart is required to apply changes." +msgstr "Edita directamente el archivo de configuración en bruto. Se requiere reinicio para aplicar los cambios." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disable" +msgstr "Desactivado" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disabled" +msgstr "" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Disconnect" +msgstr "Desconectar" + +#: src/pages/Editor.tsx +msgid "Disconnected" +msgstr "Desconectado" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk R/W" +msgstr "Disco L/E" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Read/s" +msgstr "Lectura Disco/s" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Write/s" +msgstr "Escritura Disco/s" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgctxt "discordCallout" +msgid "Dismiss" +msgstr "Cerrar" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgctxt "sidebar" +msgid "Dismiss" +msgstr "Descartar" + +#: src/components/settings/AppearanceTab.tsx +msgid "Display line numbers in the editor gutter." +msgstr "Muestra los números de línea en el margen del editor." + +#: src/components/settings/GeneralTab.tsx +msgid "Display the welcome screen when the application starts." +msgstr "Mostrar la pantalla de bienvenida al iniciar la aplicación." + +#: src/components/settings/PluginsTab.tsx +msgid "Downgrade to" +msgstr "Degradar a" + +#: src/components/ui/BlobInput.tsx +msgid "Download" +msgstr "Descargar" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Download & Install" +msgstr "Descargar e Instalar" + +#: src/components/ui/BlobInput.tsx +msgid "Download unavailable - only preview loaded" +msgstr "Descarga no disponible - solo vista previa cargada" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Downloading..." +msgstr "Descargando..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgctxt "update" +msgid "Downloading..." +msgstr "Descargando..." + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Driver Notes" +msgstr "Notas del Driver" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop View" +msgstr "Eliminar Vista" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Dump Database" +msgstr "Exportar Base de Datos" + +#: src/components/ui/FilterRow.tsx +msgid "Duplicate filter" +msgstr "Duplicar filtro" + +#: src/components/ui/DataGrid.tsx +msgid "Duplicate Row" +msgstr "Duplicar Fila" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Duration" +msgstr "Duración" + +#: src/components/modals/ViewEditorModal.tsx +msgid "e.g. active_users, order_summary" +msgstr "ej. usuarios_activos, resumen_pedidos" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. before_insert_user" +msgstr "" + +#: src/components/modals/AiApprovalModal.tsx +msgid "e.g. Looks risky on prod, please confirm…" +msgstr "ej. Parece arriesgada en prod, confirma…" + +#: src/components/modals/NewConnectionModal.tsx +msgid "e.g. mysql://user:pass@localhost:3306/db" +msgstr "" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "e.g. python3" +msgstr "p.ej. python3" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "e.g. sales_data" +msgstr "ej. datos_ventas" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. users" +msgstr "" + +#: src/components/modals/CreateTableModal.tsx +msgid "e.g. users, orders, products" +msgstr "ej. usuarios, pedidos, productos" + +#: src/components/settings/FontPicker.tsx +msgid "e.g., Comic Sans MS" +msgstr "ej. Comic Sans MS" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Edit" +msgstr "Editar" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Edit before approving" +msgstr "Editar antes de aprobar" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Edit cell name" +msgstr "Editar nombre de celda" + +#: src/pages/Settings.tsx +msgid "Edit config.json" +msgstr "Editar config.json" + +#: src/components/notebook/NotebookHistoryPanel.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Edit history" +msgstr "Historial de ediciones" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Edit Row" +msgstr "Editar Fila" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Edit Schemas" +msgstr "Editar Esquemas" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Edit Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Edit View" +msgstr "Editar Vista" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited cell {n}" +msgstr "Celda {n} editada" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited notebook" +msgstr "Notebook editado" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing a trigger requires dropping and recreating it. Continue modifying \"{name}\"?" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing trigger: {name}" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Editing view: {name}" +msgstr "Editando vista: {name}" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Editor" +msgstr "Editor" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Family" +msgstr "Fuente del Editor" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Size" +msgstr "Tamaño de Fuente del Editor" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Theme" +msgstr "Tema del Editor" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Elapsed time" +msgstr "Tiempo transcurrido" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Emoji" +msgstr "Emoji" + +#: src/utils/explainPlan.ts +msgid "Enable ANALYZE to inspect actual rows, timing, loops, and buffers." +msgstr "Activa ANALYZE para inspeccionar filas reales, tiempos, bucles y buffers." + +#: src/components/settings/LogsTab.tsx +msgid "Enable Logging" +msgstr "Habilitar Registros" + +#: src/components/settings/PluginsTab.tsx +msgid "Enabled" +msgstr "Habilitados" + +#: src/components/settings/AiTab.tsx +msgid "Endpoint URL" +msgstr "URL del Endpoint" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Enter {0} Key" +msgstr "Ingresa la Clave de {0}" + +#: src/components/ui/GeometryInput.tsx +msgid "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))" +msgstr "Ingrese una función SQL completa (ej: ST_GeomFromText('POINT(30 40)', 4326))" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain plan analysis prompt..." +msgstr "Ingresa el prompt de analisis del plan de ejecucion..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain prompt..." +msgstr "Ingresa el prompt de explicación..." + +#: src/components/settings/FontPicker.tsx +msgid "Enter font name above" +msgstr "Ingresa el nombre de la fuente arriba" + +#: src/components/ui/JsonInput.tsx +msgid "Enter JSON..." +msgstr "Ingrese JSON..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter key passphrase if encrypted" +msgstr "Ingresa la frase de paso si la clave está cifrada" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter notebook cell name prompt..." +msgstr "Ingresa el prompt de nombre de celda..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter password" +msgstr "Ingresa la contraseña" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter query tab name prompt..." +msgstr "Ingresa el prompt de nombre de pestaña..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter SSH password" +msgstr "Ingresa la contraseña SSH" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter system prompt..." +msgstr "Ingresa el prompt del sistema..." + +#: src/components/settings/AiTab.tsx +msgid "Enter the exact model name for your OpenAI-compatible provider." +msgstr "Ingresa el nombre exacto del modelo para tu proveedor compatible con OpenAI." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter username" +msgstr "Ingresa el nombre de usuario" + +#: src/components/ui/FieldEditor.tsx +#: src/components/ui/RowEditorSidebar.tsx +msgid "Enter value..." +msgstr "Ingresar valor..." + +#: src/components/settings/GeneralTab.tsx +msgid "entries" +msgstr "entradas" + +#: src/components/settings/AiTab.tsx +msgid "Environment" +msgstr "Variable de Entorno" + +#: src/components/settings/GeneralTab.tsx +msgid "ER Diagram" +msgstr "Diagrama ER" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Error" +msgstr "Error" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Error" +msgstr "Error" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgctxt "common" +msgid "Error" +msgstr "Error" + +#: src/components/settings/LogsTab.tsx +msgctxt "settings" +msgid "Error" +msgstr "Error" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgctxt "settings" +msgid "Error Details" +msgstr "Detalles del error" + +#: src/components/modals/QuickNavigatorModal.tsx +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor" +msgid "Esc to close" +msgstr "Esc para cerrar" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Est. Rows" +msgstr "Filas Est." + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate exceeds actual rows" +msgstr "La estimacion supera las filas reales" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate Gap" +msgstr "Desviacion de Estimacion" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Event details" +msgstr "Detalles del evento" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Events" +msgstr "Eventos" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity" +msgid "Events" +msgstr "Eventos" + +#: src/components/modals/TriggerEditorModal.tsx +msgctxt "triggers" +msgid "Events" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Execute" +msgstr "Ejecutar" + +#: src/components/ui/ResultEntryContent.tsx +#: src/pages/Editor.tsx +msgid "Execute a query to see results" +msgstr "Ejecuta una consulta para ver resultados" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Execute all SQL cells top to bottom" +msgstr "Ejecutar todas las celdas SQL de arriba a abajo" + +#: src/components/notebook/SqlCellResult.tsx +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Executing query..." +msgstr "Ejecutando consulta..." + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Execution" +msgstr "Ejecucion" + +#: src/components/notebook/CellHistoryPanel.tsx +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Execution History" +msgstr "Historial de Ejecución" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Exit Fullscreen" +msgstr "Salir de Pantalla Completa" + +#: src/components/modals/AiApprovalModal.tsx +msgctxt "aiApproval" +msgid "Expand" +msgstr "Expandir" + +#: src/components/ui/JsonInput.tsx +msgctxt "jsonInput" +msgid "Expand" +msgstr "Expandir" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Expand all" +msgstr "Expandir todo" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Expand All" +msgstr "Expandir Todo" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Expand Cell" +msgstr "Expandir Celda" + +#: src/components/layout/Sidebar.tsx +msgid "Expand Explorer" +msgstr "Expandir Explorador" + +#: src/components/ui/AiDropdownButton.tsx +msgid "Explain" +msgstr "Explicar" + +#. placeholder {0}: approval.explainError +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN failed: {0}" +msgstr "EXPLAIN falló: {0}" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain focused" +msgstr "analizar seleccionada" + +#: src/components/modals/VisualExplainModal.tsx +msgid "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained." +msgstr "EXPLAIN solo es compatible con instrucciones DML (SELECT, INSERT, UPDATE, DELETE). Las instrucciones DDL como CREATE, DROP o ALTER no se pueden analizar." + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain Nth" +msgstr "analizar N-esima" + +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +msgid "Explain Plan" +msgstr "Plan de Query" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Explain Plan Analysis Prompt" +msgstr "Prompt Analisis del Plan de Ejecucion" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Explain this query" +msgstr "Analizar esta consulta" + +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN unavailable for this query." +msgstr "EXPLAIN no disponible para esta consulta." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Explorer" +msgstr "Explorador" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Export" +msgstr "Exportar" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as CSV" +msgstr "Exportar como CSV" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export as HTML" +msgstr "Exportar como HTML" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as JSON" +msgstr "Exportar como JSON" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Export as Notebook" +msgstr "Exportar como Notebook" + +#: src/pages/Connections.tsx +msgctxt "connections" +msgid "Export Connections" +msgstr "Exportar conexiones" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export CSV" +msgstr "" + +#: src/components/notebook/NotebookView.tsx +msgid "Export failed" +msgstr "" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Export failed: " +msgstr "Error en la exportación: " + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export JSON" +msgstr "" + +#: src/components/settings/LogsTab.tsx +msgid "Export Logs" +msgstr "Exportar Registros" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export Notebook" +msgstr "Exportar Notebook" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Exported to {target}" +msgstr "Exportado a {target}" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Exporting..." +msgstr "Exportando..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Extra" +msgstr "Extra" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Fail with error" +msgstr "Error" + +#: src/components/notebook/RunAllSummary.tsx +msgid "failed" +msgstr "fallidas" + +#. placeholder {0}: conn.name +#: src/pages/Connections.tsx +msgid "Failed to connect to {0}. Please check your settings or ensuring the database is running." +msgstr "Error al conectar a {0}. Verifica tu configuración o asegúrate de que la base de datos esté en ejecución." + +#: src/pages/Connections.tsx +msgid "Failed to create group" +msgstr "" + +#: src/pages/Editor.tsx +msgid "Failed to create new row: " +msgstr "" + +#: src/components/modals/CreateTableModal.tsx +msgid "Failed to create table: " +msgstr "Error al crear la tabla: " + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Failed to delete column: " +msgstr "Error al eliminar la columna: " + +#: src/pages/Connections.tsx +msgid "Failed to delete group" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete index: " +msgstr "Error al eliminar el índice: " + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to delete SSH connection" +msgstr "Error al eliminar la conexión SSH" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete table: " +msgstr "Error al eliminar la tabla: " + +#: src/pages/Connections.tsx +msgid "Failed to disconnect from database" +msgstr "No se pudo desconectar de la base de datos" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to drop existing trigger: " +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop trigger: " +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop view: " +msgstr "Error al eliminar la vista: " + +#: src/pages/Connections.tsx +msgid "Failed to duplicate connection" +msgstr "Error al duplicar la conexión" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get routine definition: " +msgstr "Error al obtener la definición de la rutina: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get trigger definition: " +msgstr "" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to insert row: " +msgstr "Error al insertar la fila: " + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to load databases. Check your credentials." +msgstr "Error al cargar las bases de datos. Verifica tus credenciales." + +#: src/components/settings/PluginsTab.tsx +msgid "Failed to load registry" +msgstr "Error al cargar el registro" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to load schema: " +msgstr "Error al cargar el esquema: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to load schemas" +msgstr "No se pudieron cargar los esquemas" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to load trigger definition: " +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to load view definition: " +msgstr "Error al cargar la definición de la vista: " + +#: src/pages/Connections.tsx +msgid "Failed to move connection" +msgstr "" + +#: src/pages/Editor.tsx +msgid "Failed to process insertions: " +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Failed to refresh models" +msgstr "Error al actualizar los modelos" + +#: src/pages/Connections.tsx +msgid "Failed to rename group" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to save connection" +msgstr "Error al guardar la conexión" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to save SSH connection" +msgstr "Error al guardar la conexión SSH" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to save trigger: " +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to save view: " +msgstr "Error al guardar la vista: " + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Failed: " +msgstr "Error: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Favorites" +msgstr "Favoritos" + +#: src/components/modals/NewConnectionModal.tsx +msgid "File Path" +msgstr "Ruta del Archivo" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Filter" +msgstr "Filtro" + +#: src/components/settings/LogsTab.tsx +msgid "Filter by level" +msgstr "Filtrar por nivel" + +#: src/components/ui/TableToolbar.tsx +msgid "Filter conditions" +msgstr "Condiciones de filtro" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Filter databases..." +msgstr "Filtrar bases de datos..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter tables..." +msgstr "Filtrar tablas..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter triggers..." +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Filters" +msgstr "Filtros" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +msgid "First row as header" +msgstr "Primera fila como encabezado" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "FK Name (Optional)" +msgstr "Nombre FK (Opcional)" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focus on Table" +msgstr "Enfocar en Tabla" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focused on" +msgstr "Enfocado en" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Folder Path" +msgstr "Ruta de la Carpeta" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Family" +msgstr "Familia de Fuente" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Size" +msgstr "Tamaño de Fuente" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill" +msgstr "Forzar Cierre" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill Plugin Process" +msgstr "Forzar Cierre del Proceso" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "foreign keys" +msgstr "claves foráneas" + +#: src/components/ui/JsonInput.tsx +msgid "Format" +msgstr "Formatear" + +#: src/components/ui/FilterRow.tsx +msgid "from" +msgstr "desde" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dependencies" +msgstr "Dependencias Frontend" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dev Dependencies" +msgstr "Dependencias Dev Frontend" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Fullscreen" +msgstr "Pantalla Completa" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Functions" +msgstr "Funciones" + +#: src/pages/Settings.tsx +msgid "General" +msgstr "General" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgctxt "editor" +msgid "General" +msgstr "General" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "General" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "General" +msgstr "General" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generate name with AI" +msgstr "Generar nombre con IA" + +#: src/components/notebook/NotebookOutline.tsx +msgid "Generate names for unnamed cells with AI" +msgstr "Generar nombres para celdas sin nombre con IA" + +#: src/components/ui/AiDropdownButton.tsx +msgctxt "ai" +msgid "Generate SQL" +msgstr "Generar SQL" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Generate SQL" +msgstr "Generar SQL" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Generate SQL templates" +msgstr "Generar plantillas SQL" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Generated SQL Preview" +msgstr "" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generated SQL: {tableName}" +msgstr "SQL Generado: {tableName}" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generating name..." +msgstr "Generando nombre..." + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generating SQL..." +msgstr "Generando SQL..." + +#: src/components/modals/WhatsNewModal.tsx +msgid "Got it" +msgstr "" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Graph" +msgstr "Grafo" + +#: src/pages/Connections.tsx +msgid "Grid view" +msgstr "Vista de cuadrícula" + +#: src/pages/Connections.tsx +msgid "Group name" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Guided" +msgstr "" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Hash Cond." +msgstr "Cond. Hash" + +#: src/components/modals/CommunityModal.tsx +msgid "Help tabularis grow" +msgstr "" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Hide overview" +msgstr "Ocultar resumen" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Highest Cost" +msgstr "Costo Mas Alto" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "History" +msgstr "Historial" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Horizontal" +msgstr "Horizontal" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Host" +msgstr "Host" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "How long the MCP subprocess will wait for the user's decision before failing the request." +msgstr "Cuánto espera el subproceso MCP la decisión del usuario antes de fallar." + +#: src/components/settings/LogsTab.tsx +msgid "How many logs to keep in memory (1-10000)" +msgstr "Cuántos registros mantener en memoria (1-10000)" + +#: src/components/settings/GeneralTab.tsx +msgid "How often to check if active connections are still alive. Set to 0 to disable." +msgstr "Frecuencia con la que se verifica si las conexiones activas siguen disponibles. Establece 0 para desactivar." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Icon" +msgstr "Icono" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "If exists" +msgstr "Si existe" + +#: src/utils/explainPlan.ts +msgid "If timing is missing, the server likely returned an estimate-only plan." +msgstr "Si falta el tiempo, es probable que el servidor devolviera un plan solo estimado." + +#: src/components/settings/InfoTab.tsx +msgid "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo." +msgstr "Si te gusta tabularis y quieres ver más funcionalidades, considera apoyar el proyecto contribuyendo código, reportando errores o dando una estrella en GitHub." + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Image" +msgstr "Imagen" + +#: src/components/ui/BlobInput.tsx +msgid "Image preview" +msgstr "Vista previa de imagen" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import cancelled" +msgstr "Importación cancelada" + +#: src/pages/Connections.tsx +msgid "Import Connections" +msgstr "Importar conexiones" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import Database" +msgstr "Importar Base de Datos" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed" +msgstr "Importación fallida" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed: " +msgstr "Error en la importación: " + +#: src/i18n/registries/shortcutLabels.ts +msgid "Import from Clipboard" +msgstr "Importar desde Portapapeles" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Import from Clipboard" +msgstr "Importar desde Portapapeles" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Import from Clipboard..." +msgstr "Importar desde Portapapeles..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Import Notebook" +msgstr "Importar Notebook" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Importing from" +msgstr "Importando desde" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Importing..." +msgstr "Importando..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Index Cond." +msgstr "Cond. Indice" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index Name" +msgstr "Nombre del Índice" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index name is required" +msgstr "El nombre del índice es requerido" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "indexes" +msgstr "índices" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Info" +msgstr "Info" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Initial version" +msgstr "Versión inicial" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Inline" +msgstr "En línea" + +#: src/components/modals/NewRowModal.tsx +msgid "Insert" +msgstr "Insertar" + +#: src/components/ui/DataGrid.tsx +msgid "Insert Current Timestamp" +msgstr "Insertar marca de tiempo actual" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Insert to Editor" +msgstr "Insertar en el Editor" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Inspect structure" +msgstr "Inspeccionar estructura" + +#: src/components/settings/PluginsTab.tsx +msgid "Install" +msgstr "Instalar" + +#: src/pages/TaskManagerPage.tsx +msgid "Install and enable plugins to see them here" +msgstr "Instala y activa complementos para verlos aquí" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Install Config" +msgstr "Instalar Configuración" + +#: src/components/settings/PluginsTab.tsx +msgid "Install extensions, manage plugin drivers, and keep runtime settings under control." +msgstr "Instala extensiones, gestiona drivers de plugins y mantén bajo control los ajustes de ejecución." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installation Failed" +msgstr "Instalación Fallida" + +#: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings" +msgid "Installation Failed" +msgstr "Instalación fallida" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installed" +msgstr "Instalado" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Installed" +msgstr "Instalados" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Installing..." +msgstr "Instalando..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language." +msgstr "Instrucciones para la explicación de consultas con IA. Usa {LANGUAGE} como marcador para el idioma de salida." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure." +msgstr "Instrucciones para la generación de SQL con IA. Usa {SCHEMA} como marcador para la estructura de la base de datos." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Interpreter" +msgstr "Intérprete" + +#: src/components/ui/JsonInput.tsx +msgid "Invalid JSON" +msgstr "JSON no válido" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Invalid notebook file format" +msgstr "Formato de archivo notebook no válido" + +#: src/components/notebook/ParamsPanel.tsx +msgid "Invalid parameter name" +msgstr "Nombre de parámetro no válido" + +#: src/components/modals/CommunityModal.tsx +msgid "Join Discord" +msgstr "" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Join now" +msgstr "Únete ahora" + +#: src/components/modals/CommunityModal.tsx +msgid "Join the Community" +msgstr "" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Join Type" +msgstr "Tipo Join" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "Clave" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Key file" +msgstr "Archivo de clave" + +#: src/components/settings/ShortcutsTab.tsx +#: src/pages/Settings.tsx +msgid "Keyboard Shortcuts" +msgstr "Atajos de teclado" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "keys" +msgstr "claves" + +#: src/pages/TaskManagerPage.tsx +msgid "Kill" +msgstr "Terminar" + +#: src/pages/TaskManagerPage.tsx +msgid "Killing" +msgstr "Cerrar" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Kind" +msgstr "Tipo" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Kubernetes Connections" +msgstr "Conexiones de Kubernetes" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Kubernetes context is required" +msgstr "El contexto de Kubernetes es obligatorio" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Kubernetes is not available for this driver." +msgstr "Kubernetes no está disponible para este controlador." + +#: src/components/notebook/CellChart.tsx +msgid "Label" +msgstr "Etiqueta" + +#: src/components/settings/LocalizationTab.tsx +msgid "Language" +msgstr "Idioma" + +#: src/utils/explainPlan.ts +msgid "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well." +msgstr "Las grandes diferencias entre estimacion y realidad suelen indicar estadisticas desactualizadas o predicados dificiles de modelar." + +#: src/components/modals/CreateTableModal.tsx +msgid "Len" +msgstr "Long" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Length" +msgstr "Longitud" + +#: src/components/settings/LogsTab.tsx +msgid "Level" +msgstr "Nivel" + +#: src/components/settings/GeneralTab.tsx +msgid "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended)." +msgstr "Limita el número de filas obtenidas por consulta para prevenir problemas de rendimiento. Establece en 0 para desactivar (no recomendado)." + +#: src/components/settings/AppearanceTab.tsx +msgid "Line Height" +msgstr "Altura de Línea" + +#: src/pages/Connections.tsx +msgid "List view" +msgstr "Vista de lista" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Load Databases" +msgstr "Cargar Bases de Datos" + +#: src/pages/Editor.tsx +msgid "Load row count" +msgstr "Cargar conteo de filas" + +#: src/pages/VisualExplainPage.tsx +msgid "Loading explain plan…" +msgstr "Cargando el plan de ejecución…" + +#: src/components/settings/PluginsTab.tsx +msgid "Loading plugin registry..." +msgstr "Cargando registro de plugins..." + +#: src/pages/TaskManagerPage.tsx +msgid "Loading processes…" +msgstr "Cargando procesos…" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarRoutineItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "Cargando esquema..." + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Loading trigger definition..." +msgstr "" + +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Loading..." +msgstr "Cargando..." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Local Column" +msgstr "Columna Local" + +#: src/components/settings/LocalizationTab.tsx +#: src/pages/Settings.tsx +msgid "Localization" +msgstr "Localización" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Lock query" +msgstr "Bloquear consulta" + +#: src/components/settings/LogsTab.tsx +msgid "Log Settings" +msgstr "Configuración de Registros" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Logs" +msgstr "Registros" + +#: src/components/settings/LogsTab.tsx +msgid "Logs exported to clipboard" +msgstr "Registros exportados al portapapeles" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Loops" +msgstr "Ciclos" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Make all MCP queries read-only" +msgstr "Hacer todas las consultas MCP de solo lectura" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage" +msgstr "Gestionar" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Manage Databases" +msgstr "Gestionar Bases de Datos" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage SSH Connections" +msgstr "Gestionar Conexiones SSH" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL COMMAND" +msgstr "COMANDO MANUAL" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL CONFIGURATION" +msgstr "CONFIGURACIÓN MANUAL" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Markdown" +msgstr "Markdown" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Max Allowed Packet" +msgstr "Paquete Máximo Permitido" + +#: src/components/settings/GeneralTab.tsx +msgid "Max History Entries" +msgstr "Máx. Entradas de Historial" + +#: src/components/settings/LogsTab.tsx +msgid "Max Log Entries" +msgstr "Máximo de Entradas de Registro" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Maximize" +msgstr "Maximizar" + +#: src/components/settings/GeneralTab.tsx +msgid "Maximum number of query history entries stored per connection." +msgstr "Número máximo de entradas del historial de consultas almacenadas por conexión." + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Maximum packet size used by the MySQL connector." +msgstr "Tamaño máximo de paquete usado por el conector MySQL." + +#: src/components/modals/CommunityModal.tsx +msgid "Maybe later" +msgstr "" + +#: src/components/layout/Sidebar.tsx +msgid "MCP Server" +msgstr "Servidor MCP" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MCP Server Integration" +msgstr "Integración del Servidor MCP" + +#: src/components/settings/LogsTab.tsx +msgid "Message" +msgstr "Mensaje" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Minimize" +msgstr "Minimizar" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Mixed types detected, defaulted to TEXT" +msgstr "Tipos mixtos detectados, por defecto TEXT" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Mode" +msgstr "Modo" + +#. placeholder {0}: settings.aiModel +#. placeholder {1}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Model <0>{0} not found in <1>{1}. It may not work correctly." +msgstr "Modelo {0} no encontrado en {1}. Puede que no funcione correctamente." + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Modify Column" +msgstr "Modificar Columna" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgctxt "sidebar" +msgid "Modify Column" +msgstr "Modificar Columna" + +#: src/components/settings/InfoTab.tsx +msgid "Monitor plugin processes, CPU, RAM and disk usage in real time" +msgstr "Monitoriza los procesos de complementos, CPU, RAM y uso de disco en tiempo real" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Down" +msgstr "Mover Abajo" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Up" +msgstr "Mover Arriba" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "My K8s cluster" +msgstr "Mi clúster de K8s" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "My SSH Server" +msgstr "Mi Servidor SSH" + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants." +msgstr "MySQL y MariaDB exponen metricas reales solo en variantes compatibles de EXPLAIN ANALYZE o ANALYZE FORMAT." + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version." +msgstr "MySQL y MariaDB pueden volver a EXPLAIN FORMAT=JSON o al EXPLAIN tabular segun la version del servidor." + +#: src/components/notebook/ParamsPanel.tsx +msgid "name" +msgstr "nombre" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/SchemaModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Name" +msgstr "Nombre" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Name is required" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Namespace" +msgstr "Namespace" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Namespace is required" +msgstr "El namespace es obligatorio" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Navigation" +msgstr "Navegación" + +#: src/components/ui/DataGrid.tsx +msgid "NEW" +msgstr "NUEVA" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New connection" +msgstr "Nueva conexión" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "New console" +msgstr "Nueva consola" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/pages/Editor.tsx +msgid "New Console" +msgstr "Nueva Consola" + +#: src/components/modals/WhatsNewModal.tsx +msgid "New Features" +msgstr "" + +#: src/pages/Connections.tsx +msgid "New Group" +msgstr "" + +#: src/pages/Editor.tsx +msgid "New Notebook" +msgstr "Nuevo Notebook" + +#: src/components/modals/NewRowModal.tsx +#: src/pages/Editor.tsx +msgid "New Row" +msgstr "Nueva Fila" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New tab" +msgstr "Nueva pestaña" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "New table created" +msgstr "Nueva tabla creada" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "New Version Available" +msgstr "Nueva Versión Disponible" + +#: src/pages/Editor.tsx +msgid "New Visual Query" +msgstr "Nueva Consulta Visual" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Next page" +msgstr "Página siguiente" + +#: src/components/modals/CreateTableModal.tsx +msgid "NN" +msgstr "NN" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "NO" + +#: src/pages/Connections.tsx +msgid "No active connections" +msgstr "No hay conexiones activas" + +#: src/components/ui/TableToolbar.tsx +msgid "no active filters" +msgstr "sin filtros activos" + +#: src/pages/Editor.tsx +msgid "No active session. Please select a connection." +msgstr "No hay sesión activa. Selecciona una conexión." + +#: src/components/ui/BlobInput.tsx +msgid "No BLOB data" +msgstr "Sin datos BLOB" + +#: src/pages/TaskManagerPage.tsx +msgid "No child processes" +msgstr "Sin procesos hijos" + +#: src/pages/SchemaDiagramPage.tsx +msgid "No Connection ID" +msgstr "Sin ID de Conexión" + +#: src/pages/Connections.tsx +msgid "No connections match \"{search}\"" +msgstr "Ninguna conexión coincide con \"{search}\"" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No contexts found (is kubectl installed?)" +msgstr "No se encontraron contextos (¿está kubectl instalado?)" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "No data found in clipboard" +msgstr "No hay datos en el portapapeles" + +#: src/components/ui/DataGrid.tsx +msgid "No data to display" +msgstr "No hay datos para mostrar" + +#: src/components/modals/QueryModal.tsx +msgid "No database" +msgstr "Sin base de datos" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No databases found" +msgstr "No se encontraron bases de datos" + +#: src/components/notebook/CellHistoryPanel.tsx +msgid "No execution history yet" +msgstr "Sin historial de ejecución" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No favorites match your search" +msgstr "Ningun favorito coincide con la busqueda" + +#: src/pages/VisualExplainPage.tsx +msgid "No file loaded" +msgstr "Ningún archivo cargado" + +#: src/components/ui/TableToolbar.tsx +msgid "No filters —" +msgstr "Sin filtros —" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No general settings available for this driver." +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No icons match." +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "No Kubernetes connections saved. Click \"Add\" to create one." +msgstr "No hay conexiones de Kubernetes guardadas. Haz clic en \"Añadir\" para crear una." + +#: src/components/settings/LogsTab.tsx +msgid "No logs available" +msgstr "No hay registros disponibles" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "No major issues detected in the current plan summary." +msgstr "No se detectaron problemas importantes en el resumen actual del plan." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "No matching elements found" +msgstr "No se encontraron elementos coincidentes" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No MCP activity yet." +msgstr "Sin actividad MCP registrada." + +#: src/components/settings/AiTab.tsx +msgid "No models found" +msgstr "No se encontraron modelos" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No notebooks match your search." +msgstr "Ningún notebook coincide con tu búsqueda." + +#: src/pages/Editor.tsx +msgid "No open tabs for this connection." +msgstr "No hay pestañas abiertas para esta conexión." + +#: src/components/modals/NewRowModal.tsx +msgid "No options found" +msgstr "No se encontraron opciones" + +#: src/pages/TaskManagerPage.tsx +msgid "No plugin processes are running" +msgstr "No hay procesos de complementos en ejecución" + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins available in the registry." +msgstr "No hay plugins disponibles en el registro." + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins match your search." +msgstr "Ningún plugin coincide con la búsqueda." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No preview" +msgstr "" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No queries match your search" +msgstr "Ninguna consulta coincide con la busqueda" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No query history" +msgstr "Sin historial de consultas" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "No results found" +msgstr "No se encontraron resultados" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No routines found" +msgstr "No se encontraron rutinas" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No saved connections — create one below" +msgstr "No hay conexiones guardadas — crea una abajo" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No saved notebooks yet." +msgstr "Aún no hay notebooks guardados." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No saved queries" +msgstr "No hay consultas guardadas" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No sessions match the current filters." +msgstr "Ninguna sesión coincide con los filtros." + +#: src/components/modals/NewConnectionModal.tsx +msgid "No SSH connections available" +msgstr "No hay conexiones SSH disponibles" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "No SSH connections configured yet" +msgstr "No hay conexiones SSH configuradas" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables found" +msgstr "No se encontraron tablas" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables match" +msgstr "No hay tablas que coincidan" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers found" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers match your filter" +msgstr "" + +#: src/pages/Editor.tsx +msgid "No valid queries found" +msgstr "No se encontraron consultas válidas" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No views found" +msgstr "No se encontraron vistas" + +#: src/components/settings/PluginsTab.tsx +msgid "Not available for your platform" +msgstr "No disponible para tu plataforma" + +#: src/components/settings/AiTab.tsx +msgid "Not configured" +msgstr "No configurado" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Not Null" +msgstr "Not Null" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Notebook Cell Name Prompt" +msgstr "Prompt Nombre de Celda Notebook" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook exported successfully" +msgstr "Notebook exportado exitosamente" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook imported successfully" +msgstr "Notebook importado exitosamente" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Notebook name" +msgstr "Nombre del notebook" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Notebooks" +msgstr "Notebooks" + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "npm ecosystem" +msgstr "ecosistema npm" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "Nullable" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Objects" +msgstr "Objetos" + +#. placeholder {0}: sessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "of {0}" +msgstr "de {0}" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Off" +msgstr "Desactivada" + +#: src/components/modals/AlertModal.tsx +#: src/components/modals/ConfirmModal.tsx +msgid "OK" +msgstr "OK" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Older" +msgstr "Anteriores" + +#: src/utils/explainPlan.ts +msgid "Older servers may fall back to estimated plans with fewer metrics." +msgstr "Los servidores mas antiguos pueden volver a planes estimados con menos metricas." + +#: src/components/settings/PluginsTab.tsx +msgid "Older versions" +msgstr "Versiones anteriores" + +#. placeholder {0}: ( settings.aiCustomModels?.["ollama"] || availableModels["ollama"] || [] ).length +#: src/components/settings/AiTab.tsx +msgid "Ollama connected ({0} models found)" +msgstr "Ollama conectado ({0} modelos encontrados)" + +#. placeholder {0}: settings.aiOllamaPort || 11434 +#: src/components/settings/AiTab.tsx +msgid "Ollama not detected on port {0}. Is it running?" +msgstr "Ollama no detectado en el puerto {0}. ¿Está en ejecución?" + +#: src/components/settings/AiTab.tsx +msgid "Ollama Port" +msgstr "Puerto de Ollama" + +#. placeholder {0}: trigger.table_name +#: src/components/layout/sidebar/SidebarTriggerItem.tsx +msgid "on {0}" +msgstr "" + +#. placeholder {0}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "On {0} — review and decide before it executes." +msgstr "En {0} — revisa y decide antes de ejecutar." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Delete" +msgstr "Al Eliminar" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Update" +msgstr "Al Actualizar" + +#: src/components/connections/StatusBadge.tsx +msgctxt "connections" +msgid "Open" +msgstr "Abierta" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Open connections" +msgstr "Abrir conexiones" + +#: src/pages/VisualExplainPage.tsx +msgid "Open file" +msgstr "Abrir archivo" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Open in Editor" +msgstr "Abrir en el Editor" + +#: src/components/ui/DataGrid.tsx +msgid "Open in JSON Editor" +msgstr "Abrir en el editor JSON" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Open in New Tab" +msgstr "Abrir en Nueva Pestaña" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Open in Visual Explain" +msgstr "Abrir en Visual Explain" + +#: src/components/ui/JsonCell.tsx +msgid "Open JSON viewer" +msgstr "Abrir visor JSON" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Open package page" +msgstr "Abrir página del paquete" + +#. placeholder {0}: fkForContextPreview.ref_table +#: src/components/ui/DataGrid.tsx +msgid "Open referenced row in {0}" +msgstr "Abrir fila referenciada en {0}" + +#: src/components/ui/DataGrid.tsx +msgid "Open Sidebar Editor" +msgstr "Abrir Barra Lateral" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Open Source Libraries" +msgstr "Librerías Open Source" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Open Tabs" +msgstr "Pestañas Abiertas" + +#: src/components/settings/InfoTab.tsx +msgid "Open Task Manager" +msgstr "Abrir Administrador de Tareas" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +msgid "Operation" +msgstr "Operacion" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default." +msgstr "Opcional. Especifica el ejecutable para iniciar este plugin (p.ej. python3 en macOS/Linux, python o ruta completa en Windows). Deja en blanco para usar el valor predeterminado." + +#: src/components/notebook/NotebookOutline.tsx +msgid "Outline" +msgstr "Esquema" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Overview" +msgstr "Resumen" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +#: src/pages/Editor.tsx +msgid "Page {0}" +msgstr "Página {0}" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {1}: Math.ceil( activeTab.result.pagination.total_rows / activeTab.result.pagination.page_size, ) +#: src/pages/Editor.tsx +msgid "Page {0} of {1}" +msgstr "Página {0} de {1}" + +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +msgid "Page {0} of {totalPages}" +msgstr "Página {0} de {totalPages}" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Parallel Execution (Run All)" +msgstr "Ejecución Paralela (Ejecutar Todo)" + +#: src/components/notebook/ParamsPanel.tsx +#: src/pages/Editor.tsx +msgid "Parameters" +msgstr "Parámetros" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password" +msgstr "Contraseña" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password saved in system keychain" +msgstr "Contraseña guardada en el llavero del sistema" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Paste structured data and preview the schema before importing" +msgstr "Pega datos estructurados y revisa el esquema antes de importar" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database." +msgstr "Pausa las escrituras (o todas las consultas) y pide al usuario que apruebe antes de ejecutar." + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Pending approval" +msgstr "Pendiente" + +#: src/pages/TaskManagerPage.tsx +msgid "PID" +msgstr "PID" + +#: src/components/settings/GeneralTab.tsx +msgid "Ping Interval" +msgstr "Intervalo de Ping" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Pipe (|)" +msgstr "Pipe (|)" + +#: src/components/modals/CreateTableModal.tsx +msgid "PK" +msgstr "PK" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Planning" +msgstr "Planificacion" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Please fill in all required fields" +msgstr "Por favor, completa todos los campos requeridos" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least one table" +msgstr "Selecciona al menos una tabla" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least Structure or Data" +msgstr "Selecciona al menos Estructura o Datos" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin" +msgstr "Complemento" + +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Center" +msgstr "Centro de plugins" + +#: src/components/connections/ActionButtons.tsx +#: src/components/connections/ConnectionCard.tsx +#: src/components/connections/ConnectionListItem.tsx +msgid "Plugin disabled" +msgstr "Plugin desactivado" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Plugin Failed to Start" +msgstr "El Plugin no se pudo iniciar" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin Processes" +msgstr "Procesos de Complementos" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin processes & system resources" +msgstr "Procesos de complementos y recursos del sistema" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Settings" +msgstr "Configuración del Plugin" + +#: src/pages/Settings.tsx +msgid "Plugins" +msgstr "Plugins" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "PNG, JPG, WebP or SVG · max 512 KB" +msgstr "PNG, JPG, WebP o SVG · máx. 512 KB" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Pod" +msgstr "Pod" + +#: src/components/ui/GeometryInput.tsx +msgid "POINT(30 40)" +msgstr "POINT(30 40)" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Port" +msgstr "Puerto" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Port must be between 1 and 65535" +msgstr "El puerto debe estar entre 1 y 65535" + +#: src/utils/explainPlan.ts +msgid "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available." +msgstr "PostgreSQL ANALYZE incluye filas reales, tiempos, bucles y contadores de buffer cuando estan disponibles." + +#: src/utils/explainPlan.ts +msgid "PostgreSQL without ANALYZE shows planner estimates only." +msgstr "PostgreSQL sin ANALYZE muestra solo estimaciones del planner." + +#: src/components/modals/AiApprovalModal.tsx +msgid "Pre-flight execution plan" +msgstr "Plan de ejecución previo" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pre-flight EXPLAIN" +msgstr "EXPLAIN previo" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Prefer" +msgstr "Preferido" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Preferred" +msgstr "" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Press key combination..." +msgstr "Pulsa la combinación de teclas..." + +#: src/pages/Editor.tsx +msgid "Press Run (Ctrl/Command+F5) to load table data" +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Preview" +msgstr "Vista previa" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "Preview" +msgstr "Vista Previa" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Preview" +msgstr "Vista Previa" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Preview failed: " +msgstr "Error en la vista previa: " + +#: src/components/ui/BlobInput.tsx +msgid "Preview only - full data not loaded" +msgstr "Solo vista previa - datos completos no cargados" + +#: src/components/ui/DataGrid.tsx +msgid "Preview related record" +msgstr "Vista previa del registro relacionado" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Previous page" +msgstr "Página anterior" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Primary Key" +msgstr "Clave Primaria" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Procedures" +msgstr "Procedimientos" + +#: src/components/settings/InfoTab.tsx +msgid "Project Status" +msgstr "Estado del Proyecto" + +#: src/components/settings/AiTab.tsx +msgid "Prompt Customization" +msgstr "Personalización de Prompts" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Provide your connection name" +msgstr "Ingresa el nombre de tu conexión" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Queries" +msgstr "Consultas" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Query" +msgstr "Consulta" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Explanation" +msgstr "Explicación de Consultas" + +#: src/pages/Editor.tsx +msgid "Query failed." +msgstr "La consulta falló." + +#: src/components/settings/GeneralTab.tsx +msgid "Query History" +msgstr "Historial de Consultas" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Query history was reset" +msgstr "Historial de consultas restablecido" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Query Parameters" +msgstr "Parámetros de Consulta" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Tab Name Prompt" +msgstr "Prompt Nombre de Pestaña de Consulta" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Quick connection test" +msgstr "Prueba rápida de conexión" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Quick Navigator" +msgstr "Navegador rápido" + +#: src/pages/TaskManagerPage.tsx +msgid "RAM" +msgstr "RAM" + +#: src/components/ui/JsonInput.tsx +msgid "Raw" +msgstr "Sin formato" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Raw Output" +msgstr "Salida Sin Procesar" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Raw SQL" +msgstr "" + +#: src/components/modals/VisualExplainModal.tsx +msgid "Re-run" +msgstr "Reejecutar" + +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Re-run query" +msgstr "Reejecutar consulta" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Read more" +msgstr "" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only connections" +msgstr "Conexiones de solo lectura" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only mode" +msgstr "Modo solo lectura" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Reason (optional)" +msgstr "Razón (opcional)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Recreate Trigger" +msgstr "" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Redo" +msgstr "Rehacer" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Column" +msgstr "Columna Referenciada" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Table" +msgstr "Tabla Referenciada" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/LogsTab.tsx +#: src/components/settings/PluginsTab.tsx +#: src/pages/SchemaDiagramPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Refresh" +msgstr "Actualizar" + +#: src/components/settings/AiTab.tsx +msgid "Refresh Models" +msgstr "Actualizar Modelos" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Routines" +msgstr "Actualizar Rutinas" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Refresh Tables" +msgstr "Actualizar Tablas" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Triggers" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Views" +msgstr "Actualizar Vistas" + +#: src/components/settings/PluginsTab.tsx +msgid "Registry" +msgstr "Registro" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Release Notes" +msgstr "Notas de la Versión" + +#: src/pages/VisualExplainPage.tsx +msgid "Reload" +msgstr "Recargar" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Remind Me Later" +msgstr "Recordar Después" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Remove" +msgstr "Quitar" + +#: src/components/modals/PluginRemoveModal.tsx +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Remove" +msgstr "Eliminar" + +#: src/components/ui/FilterRow.tsx +msgid "Remove filter" +msgstr "Eliminar filtro" + +#: src/pages/Connections.tsx +msgid "Remove from Group" +msgstr "" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Remove Plugin" +msgstr "Eliminar Plugin" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Connections.tsx +#: src/pages/Editor.tsx +msgid "Rename" +msgstr "Renombrar" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Renamed cell {n}" +msgstr "Celda {n} renombrada" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Reordered cells" +msgstr "Celdas reordenadas" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Replace table" +msgstr "Reemplazar tabla" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Require" +msgstr "Requerido" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Required" +msgstr "Requerido" + +#. placeholder {0}: availableTypes.find((t) => t.name === form.type)?.requires_extension +#. placeholder {0}: exts.join(', ') +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "Requires extension: {0}" +msgstr "Requiere extensión: {0}" + +#: src/components/settings/PluginsTab.tsx +msgid "Requires Tabularis ≥ {minVersion}" +msgstr "Requiere Tabularis ≥ {minVersion}" + +#: src/components/settings/AiTab.tsx +msgid "Reset" +msgstr "Restablecer" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Reset to default" +msgstr "Restablecer predeterminado" + +#: src/components/settings/AiTab.tsx +msgid "Reset to Default" +msgstr "Restablecer Predeterminado" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Reset to driver default" +msgstr "Restablecer al valor predeterminado" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Resize sidebar" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Name" +msgstr "Nombre del recurso" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource name is required" +msgstr "El nombre del recurso es obligatorio" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Type" +msgstr "Tipo de recurso" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource type must be \"service\" or \"pod\"" +msgstr "El tipo de recurso debe ser \"service\" o \"pod\"" + +#: src/pages/TaskManagerPage.tsx +msgid "Restart" +msgstr "Reiniciar" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Restart Now" +msgstr "Reiniciar Ahora" + +#: src/components/settings/GeneralTab.tsx +msgid "Result Page Size (Limit)" +msgstr "Tamaño de Página de Resultados (Límite)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Results" +msgstr "Resultados" + +#: src/components/ui/DataGrid.tsx +msgid "Revert Selected" +msgstr "" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Review & adjust" +msgstr "Revisar y ajustar" + +#: src/pages/Editor.tsx +msgid "Rollback Changes" +msgstr "Revertir Cambios" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "routine" +msgstr "rutina" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Routines" +msgstr "Rutinas" + +#. placeholder {0}: rowIndex + 1 +#: src/components/ui/RowEditorSidebar.tsx +msgid "Row #{0}" +msgstr "Fila #{0}" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "rows" +msgstr "filas" + +#: src/components/settings/GeneralTab.tsx +msgctxt "settings" +msgid "rows" +msgstr "filas" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Rows Processed" +msgstr "Filas Procesadas" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Rows returned" +msgstr "Filas devueltas" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Rows will be added to an existing table" +msgstr "Las filas se añadirán a una tabla existente" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Run" +msgstr "Ejecutar" + +#: src/components/modals/QuerySelectionModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgctxt "editor" +msgid "Run All" +msgstr "Ejecutar Todo" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run All Cells" +msgstr "Ejecutar Todas las Celdas" + +#: src/components/notebook/RunAllSummary.tsx +msgid "Run All Complete" +msgstr "Ejecución Completada" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan." +msgstr "Ejecuta un EXPLAIN antes de mostrar el modal para que el usuario vea el plan." + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Run Cell" +msgstr "Ejecutar Celda" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Run in console" +msgstr "Ejecutar en consola" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Run Preview" +msgstr "Ejecutar Vista Previa" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Run queries" +msgstr "Consultas ejecutadas" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query" +msgstr "Ejecutar consulta" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Run Query" +msgstr "Ejecutar Consulta" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query (in editor)" +msgstr "Ejecutar consulta (en el editor)" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Run SELECT query" +msgstr "Ejecutar consulta SELECT" + +#. placeholder {0}: selectedIndices.size +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run Selected ({0})" +msgstr "Ejecutar seleccionadas ({0})" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "Run SQL File..." +msgstr "Ejecutar Archivo SQL..." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Run this command in your terminal, then restart Claude Code." +msgstr "Ejecuta este comando en tu terminal y reinicia Claude Code." + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run this query" +msgstr "Ejecutar esta consulta" + +#: src/i18n/registries/taskManagerProcessStatus.ts +#: src/pages/TaskManagerPage.tsx +msgid "running" +msgstr "en ejecución" + +#: src/components/explain/VisualExplainView.tsx +msgid "Running EXPLAIN..." +msgstr "Ejecutando EXPLAIN..." + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Build and Test" +msgstr "Build y Test Rust" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Dependencies" +msgstr "Dependencias Rust" + +#: src/pages/McpPage.tsx +msgid "Safety" +msgstr "Seguridad" + +#: src/components/settings/ThemePicker.tsx +msgid "Same as App" +msgstr "Igual que la app" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Sample values" +msgstr "Valores de muestra" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/Connections.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Save" +msgstr "Guardar" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Save & Restart" +msgstr "Guardar y Reiniciar" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Save Changes" +msgstr "Guardar Cambios" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Save passwords in Keychain" +msgstr "Guardar contraseñas en el Llavero" + +#: src/components/settings/AiTab.tsx +msgid "Save Prompt" +msgstr "Guardar Prompt" + +#: src/pages/Editor.tsx +msgid "Save Query" +msgstr "Guardar Consulta" + +#: src/pages/Editor.tsx +msgid "Save this query" +msgstr "Guardar esta consulta" + +#: src/components/settings/PluginSettingsPage.tsx +msgid "Saved" +msgstr "Guardado" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Saved Connection" +msgstr "Conexión guardada" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Scan-heavy operations detected" +msgstr "Se detectaron operaciones con mucho escaneo" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "Esquema: {tableName}" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Schemas" +msgstr "Esquemas" + +#: src/components/ui/JsonTreeView.tsx +msgid "Search" +msgstr "Buscar" + +#: src/pages/Connections.tsx +msgid "Search connections..." +msgstr "Buscar conexiones..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search emoji…" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Search favorites..." +msgstr "Buscar en favoritos..." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Search history..." +msgstr "Buscar en el historial..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search icons…" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Search models..." +msgstr "Buscar modelos..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Search notebooks" +msgstr "Buscar notebooks" + +#: src/components/settings/PluginsTab.tsx +msgid "Search plugins…" +msgstr "Buscar plugins…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Search query…" +msgstr "Buscar en la consulta…" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Search session, client, connection…" +msgstr "Buscar sesión, cliente, conexión…" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Search tables, views, routines, triggers..." +msgstr "Buscar tablas, vistas, rutinas, triggers..." + +#: src/components/settings/LocalizationTab.tsx +msgid "Search timezones..." +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Search..." +msgstr "Buscar..." + +#: src/components/modals/mcp/McpSafetySection.tsx +#: src/components/settings/GeneralTab.tsx +msgid "seconds" +msgstr "segundos" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Select" +msgstr "Lectura" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select [fields]" +msgstr "Select [campos]" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select *" +msgstr "Select *" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a context first" +msgstr "Selecciona primero un contexto" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a database" +msgstr "Selecciona una base de datos" + +#: src/pages/VisualExplainPage.tsx +msgid "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it." +msgstr "Selecciona un archivo con un plan EXPLAIN (formato JSON o texto de PostgreSQL) para visualizarlo." + +#: src/components/settings/AiTab.tsx +msgid "Select a model" +msgstr "Selecciona un modelo" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Select a node to view details" +msgstr "Selecciona un nodo para ver detalles" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Select a table..." +msgstr "Seleccionar una tabla..." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Select All" +msgstr "Seleccionar Todo" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Select All" +msgstr "Seleccionar todas" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Select All" +msgstr "Seleccionar Todo" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select at least one database" +msgstr "Selecciona al menos una base de datos" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select context/namespace/type first" +msgstr "Selecciona primero contexto/namespace/tipo" + +#: src/components/ui/FilterRow.tsx +msgid "Select for Apply All" +msgstr "Seleccionar para Aplicar todos" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select K8s Connection" +msgstr "Selecciona conexión de K8s" + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Select Query to Execute" +msgstr "Seleccionar consulta a ejecutar" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Select Query to Explain" +msgstr "Seleccionar consulta a analizar" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Select schemas to load:" +msgstr "Selecciona los esquemas a cargar:" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select SSH Connection" +msgstr "Seleccionar Conexión SSH" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Select Tables" +msgstr "Seleccionar Tablas" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select the databases to include in this connection." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Key" +#: src/components/settings/AiTab.tsx +msgid "Select the model to be used for generation and explanation." +msgstr "Selecciona el modelo a utilizar para la generación y explicación." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select type..." +msgstr "Selecciona tipo..." + +#: src/components/modals/NewRowModal.tsx +msgid "Select Value..." +msgstr "Seleccionar Valor..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Selected emoji" +msgstr "Emoji seleccionado" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Semicolon (;)" +msgstr "Punto y coma (;)" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Separate Connections" +msgstr "Separar Conexiones" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sequential Scans" +msgstr "Escaneos Secuenciales" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Service" +msgstr "Service" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Session timezone sent to MySQL after connect." +msgstr "Zona horaria de sesión enviada a MySQL después de conectar." + +#: src/components/settings/AiActivityPanel.tsx +msgid "Sessions" +msgstr "Sesiones" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Set as Active" +msgstr "Establecer como Activa" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set DEFAULT" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Loading schema..." +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set EMPTY" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Name" +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set GENERATED" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "NO" +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set NULL" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Nullable" +#: src/components/layout/Sidebar.tsx +msgid "Settings" +msgstr "Configuración" + +#: src/pages/McpPage.tsx +msgid "Setup" +msgstr "Configuración" + +#: src/components/settings/AiTab.tsx +msgid "Show AI Assist and Explain buttons in the editor" +msgstr "Mostrar los botones de Asistente IA y Explicar en el editor" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All" +msgstr "Mostrar Todo" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All Tables" +msgstr "Mostrar Todas las Tablas" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Show Data" +msgstr "Mostrar Datos" + +#: src/components/settings/AppearanceTab.tsx +msgid "Show Line Numbers" +msgstr "Mostrar Números de Línea" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Show overview" +msgstr "Mostrar resumen" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost." +msgstr "Muestra el visor de JSON cuando una celda de texto sin tipar contiene un objeto o array JSON. Añade un pequeño coste de análisis por celda." + +#: src/components/settings/GeneralTab.tsx +msgid "Show Welcome Screen" +msgstr "Mostrar pantalla de bienvenida" + +#. placeholder {0}: all.length +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Showing {RESULT_LIMIT} of {0} — refine search to narrow down." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Schema: {tableName}" +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "showing first {MAX_PREVIEW_ROWS}" +msgstr "primeras {MAX_PREVIEW_ROWS}" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Side by side" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Skip (do not import)" +msgstr "Omitir (no importar)" + +#: src/components/notebook/RunAllSummary.tsx +msgid "skipped" +msgstr "omitidas" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Slowest Step" +msgstr "Paso Mas Lento" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket Timeout" +msgstr "Tiempo de Espera del Socket" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket timeout in milliseconds." +msgstr "Tiempo de espera del socket en milisegundos." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort ascending" +msgstr "Orden ascendente" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} ASC" +msgstr "Ordenar por {colName} ASC" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} DESC" +msgstr "Ordenar por {colName} DESC" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Sort by {field}" +msgstr "Ordenar por {field}" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort by…" +msgstr "Ordenar por…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort descending" +msgstr "Orden descendente" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sort or temp work detected" +msgstr "Se detecto trabajo temporal o de ordenacion" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Split Group" +msgstr "Grupo Dividido" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Horizontal" +msgstr "Dividir Horizontal" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Vertical" +msgstr "Dividir Vertical" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +#: src/components/ui/TableToolbar.tsx +msgid "SQL" +msgstr "SQL" + +#: src/components/settings/AppearanceTab.tsx +msgid "SQL Editor" +msgstr "Editor SQL" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "SQL file executed successfully" +msgstr "Archivo SQL ejecutado correctamente" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Functions" +msgstr "Funciones SQL" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "SQL Generation" +msgstr "Generación SQL" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Mode" +msgstr "Modo SQL" + +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQL Preview" +msgstr "Vista Previa SQL" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "SQLite does not support dropping FKs via ALTER TABLE." +msgstr "SQLite no soporta la eliminación de FKs mediante ALTER TABLE." + +#: src/utils/explainPlan.ts +msgid "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural." +msgstr "SQLite EXPLAIN QUERY PLAN es ligero y principalmente estructural." + +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQLite only supports renaming columns. Other modifications require recreating the table manually." +msgstr "SQLite solo soporta renombrar columnas. Otras modificaciones requieren recrear la tabla manualmente." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Connections" +msgstr "Conexiones SSH" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Host" +msgstr "Host SSH" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH is not available for this driver." +msgstr "" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key" +msgstr "Clave SSH" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key File (Optional)" +msgstr "Archivo de Clave SSH (Opcional)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key Passphrase (Optional)" +msgstr "Frase de Paso de Clave SSH (Opcional)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Password" +msgstr "Contraseña SSH" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH Password missing. Please re-enter." +msgstr "Contraseña SSH faltante. Por favor, ingrésala de nuevo." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Port" +msgstr "Puerto SSH" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH User" +msgstr "Usuario SSH" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSL Mode" +msgstr "Modo SSL" + +#: src/components/ui/GeometryInput.tsx +msgid "ST_GeomFromText('POINT(30 40)', 4326)" +msgstr "ST_GeomFromText('POINT(30 40)', 4326)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Stacked view" +msgstr "Vista apilada" + +#: src/components/modals/CommunityModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Star on GitHub" +msgstr "Estrella en GitHub" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Started" +msgstr "Inicio" + +#: src/components/settings/GeneralTab.tsx +msgid "Startup" +msgstr "Inicio" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Status" +msgstr "Estado" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Stop" +msgstr "Detener" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop execution when a cell fails" +msgstr "Detener la ejecución cuando una celda falla" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop on Error" +msgstr "Detener en Error" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "stopped" +msgstr "detenido" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Structure" +msgstr "Estructura" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Structure (DDL)" +msgstr "Estructura (DDL)" + +#: src/pages/Editor.tsx +msgid "Submit Changes" +msgstr "Enviar Cambios" + +#: src/components/notebook/RunAllSummary.tsx +msgid "succeeded" +msgstr "exitosas" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Success" +msgstr "Éxito" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Success" +msgstr "Éxito" + +#: src/components/modals/ExportProgressModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Success" +msgstr "Éxito" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Success" +msgstr "Éxito" + +#: src/pages/TaskManagerPage.tsx +msgid "Sum of RSS across the process tree — may overcount shared memory" +msgstr "Suma de RSS del árbol de procesos — puede sobreestimar la memoria compartida" + +#: src/components/settings/InfoTab.tsx +msgid "Support the Development" +msgstr "Apoya el Desarrollo" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch tab" +msgstr "Cambiar pestaña" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch to connection 1–9" +msgstr "Cambiar a conexión 1–9" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Horizontal Layout" +msgstr "Cambiar a Diseño Horizontal" + +#: src/components/ui/TableToolbar.tsx +msgid "Switch to SQL WHERE input" +msgstr "Cambiar a entrada SQL WHERE" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Vertical Layout" +msgstr "Cambiar a Diseño Vertical" + +#: src/pages/TaskManagerPage.tsx +msgid "System Resources" +msgstr "Recursos del Sistema" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Tab" +msgstr "Tab" + +#: src/components/settings/AppearanceTab.tsx +msgid "Tab Size" +msgstr "Tamaño de Tab" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Tab view" +msgstr "Vista en pestañas" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "table" +msgstr "tabla" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Table" +msgstr "Tabla" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Table name" +msgstr "Nombre de tabla" + +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Table Name" +msgstr "Nombre de Tabla" + +#: src/components/modals/CreateTableModal.tsx +msgid "Table name is required" +msgstr "El nombre de la tabla es requerido" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Tables" +msgstr "Tablas" + +#: src/components/modals/CommunityModal.tsx +msgid "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community." +msgstr "" + +#: src/pages/TaskManagerPage.tsx +msgid "Tabularis Process" +msgstr "Proceso Tabularis" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Target column" +msgstr "Columna destino" + +#: src/components/settings/InfoTab.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Task Manager" +msgstr "Administrador de Tareas" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Temp or Sort Ops" +msgstr "Operaciones Temp o Sort" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Test" +msgstr "Probar" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Test Connection" +msgstr "Probar Conexión" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Testing..." +msgstr "Probando..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "The app will restart automatically after installation" +msgstr "La aplicación se reiniciará automáticamente después de la instalación" + +#: src/components/settings/AiTab.tsx +msgid "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1" +msgstr "La URL base de tu API compatible con OpenAI. Ejemplos: https://api.groq.com/openai/v1, http://localhost:8000/v1" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "The configuration file has been saved. Restart now to apply the changes?" +msgstr "El archivo de configuración ha sido guardado. ¿Reiniciar ahora para aplicar los cambios?" + +#: src/pages/Connections.tsx +msgid "The exported file will contain your database and SSH passwords in plaintext. Please store it securely." +msgstr "El archivo exportado contendrá tus contraseñas de base de datos y SSH en texto plano. Guárdalo de forma segura." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:" +msgstr "El archivo de historial estaba corrupto y se ha movido a un respaldo. Las nuevas consultas se registrarán con normalidad. Archivo de respaldo:" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely." +msgstr "El Model Context Protocol (MCP) permite a los asistentes de IA (como Claude) conectarse a tus herramientas locales. Tabularis expone un servidor MCP que permite a la IA leer el esquema de tu base de datos y ejecutar consultas de forma segura." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "The plugin process could not be launched. Check the error details below." +msgstr "No se pudo lanzar el proceso del plugin. Revisa los detalles del error." + +#: src/components/settings/AppearanceTab.tsx +msgid "The quick brown fox jumps over the lazy dog" +msgstr "El veloz zorro marrón salta sobre el perro perezoso" + +#: src/components/settings/AppearanceTab.tsx +msgid "Theme Selection" +msgstr "Selección de Tema" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "These connections will reject writes from MCP. Other connections behave normally." +msgstr "Estas conexiones rechazarán escrituras desde MCP. Las otras se comportan normalmente." + +#: src/pages/TaskManagerPage.tsx +msgid "This action cannot be undone immediately" +msgstr "Esta acción no se puede deshacer inmediatamente" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "This driver only supports primary keys at table creation time" +msgstr "Este driver solo soporta claves primarias en la creación de la tabla" + +#: src/components/settings/AiTab.tsx +msgid "This key is loaded from an environment variable" +msgstr "Esta clave se carga desde una variable de entorno" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Month" +msgstr "Este Mes" + +#: src/components/notebook/NotebookView.tsx +msgid "This notebook is empty. Add a cell to get started." +msgstr "Este notebook está vacío. Agrega una celda para comenzar." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path." +msgstr "Este plugin puede requerir un intérprete (p.ej. Python). Usa Configuración del Plugin para establecer la ruta del intérprete." + +#: src/components/settings/InfoTab.tsx +msgid "This project is a Work In Progress (WIP). Core features are stable, but we have big plans." +msgstr "Este proyecto es un Work In Progress (WIP). Las funciones principales son estables, pero tenemos grandes planes." + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Week" +msgstr "Esta Semana" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgctxt "aiActivity" +msgid "Time" +msgstr "Hora" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Time" +msgstr "Tiempo" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Timeout" +msgstr "Tiempo agotado" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Timeout" +msgstr "Tiempo agotado" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgctxt "mcp" +msgid "Timeout" +msgstr "Tiempo de espera" + +#: src/components/settings/LogsTab.tsx +msgid "Timestamp" +msgstr "Marca de Tiempo" + +#: src/components/settings/LocalizationTab.tsx +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Timezone" +msgstr "Zona Horaria" + +#: src/components/settings/LocalizationTab.tsx +msgid "Timezone used to display timestamps and exports. 'Auto' follows your system timezone." +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Timing" +msgstr "" + +#: src/components/ui/FilterRow.tsx +msgid "to" +msgstr "hasta" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Today" +msgstr "Hoy" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Toggle Chart" +msgstr "Mostrar/Ocultar Gráfico" + +#: src/components/ui/JsonCell.tsx +msgid "Toggle inline JSON tree" +msgstr "Expandir/contraer árbol JSON" + +#: src/components/ui/TextCell.tsx +msgid "Toggle inline text editor" +msgstr "" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Toggle Preview" +msgstr "Vista Previa" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Toggle sidebar" +msgstr "Mostrar/ocultar barra lateral" + +#: src/components/ui/TableToolbar.tsx +msgid "Toggle structured filter panel" +msgstr "Panel de filtros estructurados" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled parallel (cell {n})" +msgstr "Paralelo alternado (celda {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled stop on error" +msgstr "Detener en error alternado" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Tool" +msgstr "Herramienta" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Top Issues" +msgstr "Puntos Criticos" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Total Cost" +msgstr "Costo Total" + +#: src/components/ui/JsonInput.tsx +msgid "Tree" +msgstr "Árbol" + +#. placeholder {0}: formatBytes(stats.total_memory_bytes) +#: src/pages/TaskManagerPage.tsx +msgid "Tree total: {0}" +msgstr "Total árbol: {0}" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "trigger" +msgstr "trigger" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Body (SQL)" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger created successfully" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Name" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger SQL is required" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger updated successfully" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Triggers" msgstr "" +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Try again" +msgstr "Reintentar" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Try again" +msgstr "Reintentar" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx #: src/components/modals/SchemaModal.tsx msgid "Type" +msgstr "Tipo" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Undo" +msgstr "Deshacer" + +#: src/pages/Connections.tsx +msgid "Ungrouped" +msgstr "" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Unique Index" +msgstr "Índice Único" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "unknown" +msgstr "desconocido" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Unknown" +msgstr "Desconocido" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Unnamed connection" +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Unset" +msgstr "Limpiar" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Untitled" +msgstr "Sin nombre" + +#: src/components/settings/PluginsTab.tsx +msgid "Up to date" +msgstr "Actualizado" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Update" +msgstr "Update" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Update" +msgstr "Actualizar" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Update" +msgstr "Actualizar" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Update Error" +msgstr "Error de Actualización" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Update failed: " +msgstr "Error en la actualización: " + +#: src/components/settings/InfoTab.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Updates" +msgstr "Actualizaciones" + +#. placeholder {0}: ({ aur: "AUR", snap: "Snap Store", flatpak: "Flathub" } as Record)[ installationSource ] ?? installationSource +#: src/components/settings/InfoTab.tsx +msgid "Updates managed by {0}" +msgstr "Actualizaciones gestionadas por {0}" + +#: src/components/ui/BlobInput.tsx +msgid "Upload File" +msgstr "Subir Archivo" + +#: src/components/ui/BlobInput.tsx +msgid "Uploading..." +msgstr "Subiendo..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Existing SSH Connection" +msgstr "Usar Conexión SSH Existente" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Kubernetes Port-Forward" +msgstr "Usar Port-Forward de Kubernetes" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use SSH Tunnel" +msgstr "Usar Túnel SSH" + +#: src/components/settings/InfoTab.tsx +msgid "Use your package manager to update Tabularis." +msgstr "Usa tu gestor de paquetes para actualizar Tabularis." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Username" +msgstr "Usuario" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Using the driver's default icon." +msgstr "Usando el icono predeterminado del driver." + +#: src/components/ui/JsonInput.tsx +msgid "Valid JSON" +msgstr "JSON válido" + +#: src/components/notebook/ParamsPanel.tsx +msgctxt "editor" +msgid "value" +msgstr "valor" + +#: src/components/ui/FilterRow.tsx +msgctxt "toolbar" +msgid "value" +msgstr "valor" + +#: src/components/modals/QueryParamsModal.tsx +msgid "Value (e.g. 'text' or 123)" +msgstr "Valor (ej. 'texto' o 123)" + +#: src/components/notebook/CellChart.tsx +msgid "Values" +msgstr "Valores" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify CA" +msgstr "Verificar CA" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Full" +msgstr "Verificación completa" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Identity" +msgstr "" + +#: src/components/modals/UpdateNotificationModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Version" +msgstr "Versión" + +#. placeholder {0}: entries[0].version +#: src/components/modals/WhatsNewModal.tsx +msgid "Version {0}" +msgstr "" + +#. placeholder {0}: updateInfo.latestVersion +#: src/components/settings/InfoTab.tsx +msgid "Version {0} is available" +msgstr "La versión {0} está disponible" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Vertical" +msgstr "Vertical" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "view" +msgstr "vista" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View created successfully" +msgstr "Vista creada correctamente" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "View Definition" +msgstr "Definición de Vista" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Definition (SQL)" +msgstr "Definición de Vista (SQL)" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View definition is required" +msgstr "La definición de la vista es requerida" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "View details" +msgstr "Ver detalles" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "View ER Diagram" +msgstr "Ver Diagrama ER" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Name" +msgstr "Nombre de Vista" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View name is required" +msgstr "El nombre de la vista es requerido" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "View on GitHub" +msgstr "Ver en GitHub" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "View Schema" +msgstr "Ver Esquema" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View updated successfully" +msgstr "Vista actualizada correctamente" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Views" +msgstr "Vistas" + +#: src/components/modals/VisualExplainModal.tsx +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +#: src/pages/VisualExplainPage.tsx +msgid "Visual Explain" +msgstr "Visual Explain" + +#: src/components/settings/LogsTab.tsx +msgid "Warn" +msgstr "Warn" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap." +msgstr "Acabamos de abrir una comunidad dedicada a Tabularis: pide ayuda, comparte trucos y da forma al roadmap." + +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "What's New" msgstr "" +#: src/pages/TaskManagerPage.tsx +msgid "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted." +msgstr "detendrá forzosamente su proceso. Todas las conexiones de base de datos activas que usen este complemento dejarán de funcionar hasta que se reinicie el complemento." + +#: src/components/ui/GeometryInput.tsx +msgid "WKT Mode" +msgstr "Modo WKT" + +#: src/components/settings/AppearanceTab.tsx +msgid "Word Wrap" +msgstr "Ajuste de Línea" + +#: src/components/settings/AppearanceTab.tsx +msgid "Wrap long lines in the editor instead of scrolling horizontally." +msgstr "Ajusta las líneas largas en el editor en vez de desplazarse horizontalmente." + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Write" +msgstr "Escritura" + +#: src/components/notebook/MarkdownCell.tsx +msgid "Write Markdown here..." +msgstr "Escribe Markdown aquí..." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Writes only" +msgstr "Solo escrituras" + #: src/components/modals/SchemaModal.tsx msgid "YES" -msgstr "" +msgstr "SÍ" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Yesterday" +msgstr "Ayer" + +#: src/components/settings/InfoTab.tsx +msgid "You're up to date" +msgstr "Estás actualizado" diff --git a/src/locales/es/messages.ts b/src/locales/es/messages.ts index 39f11cf5..54aa9239 100644 --- a/src/locales/es/messages.ts +++ b/src/locales/es/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Máx. Entradas de Historial\"],\"-6AWa-\":[\"Importar conexiones\"],\"-6NyRG\":[\"Cliente\"],\"-K0AvT\":[\"Desconectar\"],\"-PLZfh\":[\"Error al actualizar los modelos\"],\"-T5W2e\":[\"Notas del Driver\"],\"-ZgeeE\":[\"Historial de ediciones\"],\"-aYrdc\":[\"La versión \",[\"0\"],\" está disponible\"],\"-fBGXl\":[\"Costo Mas Alto\"],\"-jIQDz\":[\"Contraer Celda\"],\"-u1eRo\":[\"Sin base de datos\"],\"-yoeVU\":[\"Cargando esquema...\"],\"-zy2Nq\":[\"Tipo\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID aprobación\"],\"0E5-gF\":[\"¿Estás seguro de que deseas eliminar esta conexión?\"],\"0HCubq\":[\"Expandir\"],\"0Kmdvy\":[\"Fuente Personalizada\"],\"0Nj13E\":[\"Generar SQL\"],\"0ROgz5\":[\"Ingrese JSON...\"],\"0SY9sU\":[\"No se pudo desconectar de la base de datos\"],\"0b3kL9\":[\"Selecciona una base de datos\"],\"0caMy7\":[\"Historial\"],\"0mx5ow\":[\"Consulta\"],\"0n9BtL\":[\"Vista Previa\"],\"0pHB9N\":[\"Copiar como tabla.columna\"],\"0sQzZK\":[\"Filtrar bases de datos...\"],\"0uPP9X\":[\"Nombre FK (Opcional)\"],\"0wxuek\":[\"Versión Actual\"],\"0x09Aw\":[\"Detener en error alternado\"],\"0yBP6v\":[\"Apoya el Desarrollo\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas\"],\"other\":[\"#\",\" filas\"]}]],\"0yVAoD\":[\"Contar filas\"],\"0zxJ87\":[\"No hay registros disponibles\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Editar Vista\"],\"11fGJ6\":[\"Consultas\"],\"13hIUA\":[\"Clave API de \",[\"0\"]],\"14qNWF\":[\"Seleccionar Conexión SSH\"],\"17qHRP\":[\"Nueva conexión\"],\"1Dn6bg\":[\"Importar desde Portapapeles\"],\"1Dnd0I\":[\"Cargar conteo de filas\"],\"1FjTLW\":[\"p.ej. python3\"],\"1GOvbo\":[\"Ollama conectado (\",[\"0\"],\" modelos encontrados)\"],\"1I6UoR\":[\"Vistas\"],\"1U7hS5\":[\"Long\"],\"1UTmg5\":[\"Paquete Máximo Permitido\"],\"1b7aSU\":[\"Fuente del Editor\"],\"1ekzlY\":[\"Procesos de Complementos\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Selección de Tema\"],\"1xVZkL\":[\"No se encontraron modelos\"],\"26Joci\":[[\"0\"],\" filas obtenidas\"],\"2Bf-Qe\":[\"Nueva consola\"],\"2CrSmP\":[\"Help tabularis grow\"],\"2D9F8_\":[\"Error al duplicar la conexión\"],\"2Eoi_a\":[\"Ver detalles\"],\"2F4pE5\":[\"Build y Test Rust\"],\"2Fsd9r\":[\"Este Mes\"],\"2JzKXI\":[\"Set GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Seleccionar Todo\"],\"2SO5RM\":[\"Kubernetes no está disponible para este controlador.\"],\"2Uh5GA\":[\"ecosistema Cargo\"],\"2YylFp\":[\"Nueva Consulta Visual\"],\"2luuSG\":[\"Reintentar\"],\"2wxgft\":[\"Renombrar\"],\"2yG2GC\":[\"Pausa las escrituras (o todas las consultas) y pide al usuario que apruebe antes de ejecutar.\"],\"30-b5r\":[\"Eliminar\"],\"31kwdN\":[\"Duplicar filtro\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Todas las herramientas\"],\"3Am5DS\":[\"Vista en pestañas\"],\"3BhBCj\":[\"Eventos\"],\"3FVg9_\":[\"Columna Local\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Ejecutar\"],\"3L0HCz\":[\"Ningún plugin coincide con la búsqueda.\"],\"3Nv3JV\":[\"Ejecutando consulta...\"],\"3TSz9S\":[\"Minimizar\"],\"3UW8fG\":[\"Actualizaciones gestionadas por \",[\"0\"]],\"3YvS-c\":[\"Nueva pestaña\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt Nombre de Celda Notebook\"],\"3qkggm\":[\"Pantalla Completa\"],\"3rBJ1T\":[\"Ver Esquema\"],\"3xZ-xV\":[\"Insertar marca de tiempo actual\"],\"40Gx0U\":[\"Zona Horaria\"],\"41GP4f\":[\"Elige el delimitador predeterminado utilizado al copiar o exportar filas en formato CSV.\"],\"42iaEi\":[\"PostgreSQL sin ANALYZE muestra solo estimaciones del planner.\"],\"44cXI8\":[\"Ordenar por \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gestionar Bases de Datos\"],\"4CK17g\":[\"¿Estás seguro de que deseas modificar la vista \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Selecciona al menos una base de datos\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Exportar como HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" proceso hijo\"],\"other\":[\"#\",\" procesos hijos\"]}]],\"4VyuY3\":[\"¿Estás seguro de que deseas borrar todos los registros?\"],\"4WWqS3\":[\"Expandir/contraer árbol JSON\"],\"4cEClj\":[\"Sesiones\"],\"4cmfYp\":[\"Duplicar Fila\"],\"4lIZTB\":[\"Dependencias Dev Frontend\"],\"4oYjvJ\":[\"Buscar en la consulta…\"],\"4tMxW4\":[\"Vista previa del registro relacionado\"],\"4yJcjm\":[\"Selecciona tipo...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Cerrar panel de filtros (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Punto y coma (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" evento\"],\"other\":[\"#\",\" eventos\"]}]],\"5I2fxu\":[\"/ruta/a/id_rsa\"],\"5NZpX8\":[\"Vista de lista\"],\"5To6Z6\":[\"Copiar consulta\"],\"5gqNQl\":[\"Vista de cuadrícula\"],\"5igIzr\":[\"Importación cancelada\"],\"5nTIup\":[\"Editando vista: \",[\"name\"]],\"66bEht\":[\"Estado del Proyecto\"],\"6PIJVc\":[\"Inicio\"],\"6QvP0l\":[\"Exportar como JSON\"],\"6W41Xq\":[\"Administrador de Tareas\"],\"6WngBH\":[\"Set NULL\"],\"6YtxFj\":[\"Nombre\"],\"6_dCYd\":[\"Resumen\"],\"6gvoHP\":[\"Copiar mensaje de error\"],\"6oCVzX\":[\"El contexto de Kubernetes es obligatorio\"],\"6wQO0f\":[\"Mostrar Datos\"],\"6z9W13\":[\"Reiniciar\"],\"71agNy\":[\"Generar nombres para celdas sin nombre con IA\"],\"74J3FG\":[\"Versión inicial\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Got it\"],\"77nSMU\":[\"¿Borrar todo el historial de actividad IA? Esta acción es irreversible.\"],\"79UVYW\":[\"Esc para cerrar\"],\"7ABmyQ\":[\"Reintentar\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" de \",[\"0\"],\" activos\"],\"7E864M\":[\"Tipo de Base de Datos\"],\"7FqaG1\":[\"Personaliza las instrucciones para el analisis IA de los planes EXPLAIN. Usa \",[\"LANGUAGE\"],\" para el idioma de salida.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Tipos mixtos detectados, por defecto TEXT\"],\"7RSQQd\":[\"Guardar contraseñas en el Llavero\"],\"7VpPHA\":[\"Confirmar\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fallidas\"],\"7sMeHQ\":[\"Clave\"],\"7sNhEz\":[\"Usuario\"],\"7tATh2\":[\"Ejecutar Consulta\"],\"7yb4gk\":[\"Error: \"],\"8-4V8D\":[\"Tablas\"],\"82G-l5\":[\"El Model Context Protocol (MCP) permite a los asistentes de IA (como Claude) conectarse a tus herramientas locales. Tabularis expone un servidor MCP que permite a la IA leer el esquema de tu base de datos y ejecutar consultas de forma segura.\"],\"83VjWE\":[\"Nuevo Notebook\"],\"86IgoU\":[\"Ejecutar consulta (en el editor)\"],\"86fCgf\":[\"Personaliza las instrucciones para la generación de nombres de pestañas de resultados de consulta con IA. La consulta SQL se envía como mensaje del usuario.\"],\"87a_t_\":[\"Etiqueta\"],\"8CWirf\":[\"Servidor MCP\"],\"8S8aIX\":[\"Verificación de Conexión\"],\"8TMaZI\":[\"Marca de Tiempo\"],\"8Tg_JR\":[\"Personalizado\"],\"8UFKYr\":[\"Seleccionar consulta a ejecutar\"],\"8VKSGV\":[\"Generar SQL\"],\"8Wjy6z\":[\"Cerrar Pestañas a la Izquierda\"],\"8ZsakT\":[\"Contraseña\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Editor SQL\"],\"8bRgTe\":[\"Proveedor de IA no configurado. Ve a Configuracion > IA.\"],\"8c_W0h\":[\"Versiones anteriores\"],\"8guEQP\":[\"Actualizar Vistas\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN es ligero y principalmente estructural.\"],\"8q_sOc\":[\"Quitar\"],\"8t-akp\":[\"primeras \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nombre de Conexión\"],\"91gnWY\":[\"Exportar Registros\"],\"91rtHL\":[\"Crear Nueva Vista\"],\"92hf9a\":[\"Quitar\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vista actualizada correctamente\"],\"9NzDFn\":[\"Mostrar la pantalla de bienvenida al iniciar la aplicación.\"],\"9OoUS3\":[\"Crear Nueva Conexión SSH\"],\"9QGRD5\":[\"Columna destino\"],\"9QTny9\":[\"La consulta falló.\"],\"9S-fyV\":[\"Plan de ejecución previo\"],\"9SJ_Sx\":[\"Recursos del Sistema\"],\"9UQ730\":[\"Clonar\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"No hay datos en el portapapeles\"],\"9mMU1R\":[\"Tiempo\"],\"9mvFo_\":[\"Hora\"],\"9npOH9\":[\"Abrir archivo\"],\"9uI_rE\":[\"Deshacer\"],\"9xUjzm\":[\"Seleccionar Todo\"],\"9y_02p\":[\"Chat with the community, get help, suggest features\"],\"A1pPcI\":[\"Host SSH\"],\"A1taO8\":[\"Buscar\"],\"A6C0pv\":[\"Costo Total\"],\"A7WG0p\":[\"Plugin desactivado\"],\"A7yRz3\":[\"La definición de la vista es requerida\"],\"A9Uyp6\":[\"Error en la importación: \"],\"ABEd-z\":[\"Usa tu gestor de paquetes para actualizar Tabularis.\"],\"AMdgKV\":[\"Prompt Analisis del Plan de Ejecucion\"],\"ANSTMe\":[\"No se detectaron problemas importantes en el resumen actual del plan.\"],\"ANzIr7\":[\"Historial de Consultas\"],\"AOnaU7\":[\"omitidas\"],\"AVlZoM\":[\"Variable de Entorno\"],\"AXTVsE\":[\"Verificación completa\"],\"AXdRYR\":[\"Registros Actuales\"],\"Aa-YkQ\":[\"Exportar Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filtrar por nivel\"],\"AlPiMN\":[\"Clic para ir a la página\"],\"An-1rA\":[\"Filas devueltas\"],\"AnV8j-\":[\"Modificar Columna\"],\"AvEr_L\":[\"Nueva Consola\"],\"AvYbUL\":[\"Estrella en GitHub\"],\"Aw_eOs\":[\"Requiere Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No se encontraron resultados\"],\"B0mJGb\":[\"Salida Sin Procesar\"],\"B1c58n\":[\"Modificar Columna\"],\"B3toQF\":[\"Objetos\"],\"B5nKny\":[\"/ruta/absoluta/carpeta\"],\"B5xevr\":[\"El nombre de la conexión es obligatorio\"],\"BAVvWJ\":[\"Diagrama ER\"],\"BBtVak\":[\"Contraer Todo\"],\"BEVzjL\":[\"Importación fallida\"],\"BFxXo5\":[\"Ejecutar Todo\"],\"BJe2lZ\":[\"Mostrar/ocultar barra lateral\"],\"BK3WCj\":[\"Error al cargar el registro\"],\"BKbO3i\":[\"Notebook editado\"],\"BMB51y\":[\"Ejecutar en consola\"],\"BNW_Z4\":[\"ej. usuarios_activos, resumen_pedidos\"],\"BUO_JN\":[\"Copiar Consulta\"],\"BYkhHY\":[\"Buscar actualizaciones al inicio\"],\"BbHofF\":[\"Exportar conexiones\"],\"BeSg6-\":[\"Recopilar registros de la aplicación en memoria para depuración\"],\"BgAyQH\":[\"Quitar ordenamiento\"],\"BinTJI\":[\"ecosistema npm\"],\"BkFson\":[\"Paginación automática\"],\"Bpglf1\":[\"Mover Arriba\"],\"BrGo6h\":[\"Buscar notebooks\"],\"BxiAN_\":[\"Eliminar Consulta\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dependencias Frontend\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Sin filtros —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Descargando...\"],\"CUxwxn\":[\"Mostrar Todas las Tablas\"],\"CWMXbw\":[\"detendrá forzosamente su proceso. Todas las conexiones de base de datos activas que usen este complemento dejarán de funcionar hasta que se reinicie el complemento.\"],\"CZt6BX\":[\"CONFIGURACIÓN MANUAL\"],\"Ca8ixZ\":[\"Eliminar\"],\"CbJBQS\":[\"Error en la actualización: \"],\"Cdz-YU\":[\"Vista apilada\"],\"CpeQf9\":[\"Ciclos\"],\"D2wXBw\":[\"Auto Incremento\"],\"D6Ql0c\":[\"Selecciona el modelo a utilizar para la generación y explicación.\"],\"DB8zMK\":[\"Aplicar\"],\"DDXf5E\":[\"Funciones SQL\"],\"DEwnwi\":[\"Eliminar\"],\"DNTvdl\":[\"Abrir en el Editor\"],\"DPc2P9\":[\"Eliminar Celda\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Altura de Línea\"],\"Dd7YLj\":[\"Maybe later\"],\"Deej3j\":[\"JSON no válido\"],\"DfKhk_\":[\"Actualizar\"],\"DiRiTz\":[\"Abrir página del paquete\"],\"DlRHAD\":[\"Ejecutando EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" error\"],\"other\":[\"#\",\" errores\"]}]],\"Dvdihe\":[\"En \",[\"0\"],\" — revisa y decide antes de ejecutar.\"],\"DzFLzw\":[\"SÍ\"],\"E-JUtQ\":[\"Puerta de aprobación\"],\"E0kcnZ\":[\"General\"],\"E2mje_\":[\"Seleccionar consulta a analizar\"],\"EDieyg\":[\"¿Estás seguro de que deseas eliminar esta conexión SSH?\"],\"EHZxPj\":[\"Expandir\"],\"EL4oDO\":[\"Nueva Versión Disponible\"],\"EPi4gT\":[\"Ordenar por \",[\"field\"]],\"EWPtMO\":[\"Código\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Desconocido\"],\"EhADgB\":[\"Eliminar Columna\"],\"EkH9pt\":[\"Update\"],\"Ekblrc\":[\"Estás actualizado\"],\"Em6JFd\":[\"Contar Filas\"],\"EnGiqG\":[[\"0\"],\" elementos\"],\"Ew1n5z\":[\"Buscar plugins…\"],\"F18WP3\":[\"Parámetros\"],\"F3uc1x\":[\"El archivo exportado contendrá tus contraseñas de base de datos y SSH en texto plano. Guárdalo de forma segura.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" filas\"],\"other\":[\"#\",\" filas\"]}]],\"F6pfE9\":[\"Activa\"],\"F8tXg7\":[\"Vista Previa de Datos\"],\"F9-6yK\":[\"Formato de copia predeterminado\"],\"F9lxfG\":[\"Eliminar\"],\"F9nsa2\":[\"El archivo de historial estaba corrupto y se ha movido a un respaldo. Las nuevas consultas se registrarán con normalidad. Archivo de respaldo:\"],\"FF_oap\":[\"Predeterminado\"],\"FK8rlP\":[\"No hay conexiones SSH configuradas\"],\"FMRcH8\":[\"Primera fila como encabezado\"],\"FNvDMc\":[\"Esta Semana\"],\"FQe1FI\":[\"Filas Est.\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operacion\"],\"Fa_cky\":[\"Esquema: \",[\"tableName\"]],\"FpEL5o\":[\"Elige un tema independiente para el editor SQL, o mantenlo sincronizado con el tema de la app.\"],\"FsvZQL\":[\"Celda \",[\"n\"],\" editada\"],\"FtwKL9\":[\"Cambiar pestaña\"],\"FznI3z\":[\"¿Eliminar la clave foránea \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Error en la vista previa: \"],\"G8Q5Zq\":[\"El namespace es obligatorio\"],\"GAohqx\":[\"Eliminar columna\"],\"GJR99u\":[\"Error al eliminar la columna: \"],\"GKfzzM\":[\"Elige una conexión...\"],\"GS-Mus\":[\"Exportar\"],\"GUaLUq\":[\"Error al cargar el esquema: \"],\"GXP-Iw\":[\"Agregar Celda SQL\"],\"Gj1mLb\":[\"Celdas reordenadas\"],\"GlbqG2\":[\"Restablecer al valor predeterminado\"],\"Gs5AlY\":[\"Abierta\"],\"GtmO8_\":[\"desde\"],\"GxkJXS\":[\"Subiendo...\"],\"H-o4D2\":[\"Crear nueva columna\"],\"H2B-KW\":[\"Elige el formato predeterminado al copiar filas con Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Rehacer\"],\"H7mlCc\":[\"/ruta/absoluta/db.sqlite\"],\"H86f9p\":[\"Contraer\"],\"H9P8CD\":[\"agregar el primer filtro\"],\"HAQlGl\":[\"Actividad IA\"],\"HKNZrs\":[\"Cond. Indice\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Eliminar \",\"#\",\" filas\"],\"other\":[\"Eliminar \",\"#\",\" filas\"]}]],\"HPuCiP\":[\"Ruta de la Carpeta\"],\"HUs1R3\":[\"No hay pestañas abiertas para esta conexión.\"],\"HV4Isp\":[\"Ingresa la contraseña SSH\"],\"HVC8Hh\":[\"Copiado al portapapeles\"],\"HWEpq8\":[\"Escritura Disco/s\"],\"HY4nP5\":[\"En línea\"],\"HcmoWv\":[\"Error al guardar la vista: \"],\"He8v1Y\":[\"Deseleccionar de Aplicar todos\"],\"HehHP1\":[\"Diseño Predeterminado\"],\"HilYn4\":[\"Este notebook está vacío. Agrega una celda para comenzar.\"],\"HjxVK_\":[\"Prueba rápida de conexión\"],\"HmMnRx\":[\"Modo WKT\"],\"HoKCiI\":[\"La aplicación se reiniciará automáticamente después de la instalación\"],\"HpK_8d\":[\"Recargar\"],\"Hpi4Jm\":[\"Únete ahora\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configurar SSH en Línea\"],\"I5VBsr\":[\"Igual que la app\"],\"I8yrPb\":[\"Reemplazar tabla\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Recordar Después\"],\"I99Miw\":[\"Costo\"],\"IETZIR\":[\"Editar nombre de celda\"],\"IG9wzA\":[\"Error al insertar la fila: \"],\"ILleOG\":[\"El tipo de recurso debe ser \\\"service\\\" o \\\"pod\\\"\"],\"IQ3gAw\":[\"Subir Archivo\"],\"IUwGEM\":[\"Guardar Cambios\"],\"IUwmLq\":[\"Dependencias directas declaradas en package.json y src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Librerías Open Source\"],\"I_43p6\":[\"Seguridad\"],\"Iaizf4\":[\"Apariencia\"],\"Il3FBB\":[\"Panel de filtros estructurados\"],\"IniZRK\":[\"Descarga no disponible - solo vista previa cargada\"],\"Isaozb\":[\"Revisar y ajustar\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Las consultas activas y las conexiones a través de este complemento serán interrumpidas.\"],\"J6v1s_\":[\"Modelo Predeterminado\"],\"JE-DVk\":[\"Intérprete\"],\"JEGlfK\":[\"Inicio\"],\"JKDPqP\":[\"Selecciona primero un contexto\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Usar Túnel SSH\"],\"JRz8tw\":[\"MySQL y MariaDB exponen metricas reales solo en variantes compatibles de EXPLAIN ANALYZE o ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP o SVG · máx. 512 KB\"],\"JY5Oyv\":[\"Base de datos\"],\"JlFRIB\":[\"Zona horaria de sesión enviada a MySQL después de conectar.\"],\"JrOEip\":[\"Vista previa\"],\"JsY1p5\":[\"Denegada\"],\"K3H9p5\":[\"Limpiar\"],\"K5Dgu_\":[\"Bases de Datos\"],\"K8IGKf\":[\"Tipo de Autenticación\"],\"KAYNSW\":[\"Cuántos registros mantener en memoria (1-10000)\"],\"KHTGbr\":[\"EXPLAIN previo\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copiar como `columna`\"],\"KM5Kc8\":[\"Se debe seleccionar al menos una columna\"],\"KSCnVQ\":[\"Tipo\"],\"KUjOb9\":[\"en ejecución\"],\"KXBdwy\":[\"Actualizar Rutinas\"],\"KXNyX7\":[\"Set DEFAULT\"],\"Kd70-v\":[\"Importar desde Portapapeles...\"],\"KhI4oS\":[\"Abrir fila referenciada en \",[\"0\"]],\"KhgrNu\":[\"Integración del Servidor MCP\"],\"KirERL\":[\"Tiempo agotado\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Error al eliminar el índice: \"],\"KzeARD\":[\"Error al eliminar la tabla: \"],\"L-rMC9\":[\"Restablecer predeterminado\"],\"L3HXkQ\":[\"Bug Fixes\"],\"LCZ7Dy\":[\"Copiar Nombre\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"índices\"],\"LMeAoR\":[\"filas\"],\"LPCdc-\":[\"Prompt Nombre de Pestaña de Consulta\"],\"LPFmga\":[\"Seleccionar para Aplicar todos\"],\"LYzbQ2\":[\"Herramienta\"],\"Lbis_V\":[\"Navegador rápido\"],\"Lcpbe2\":[\"No se pudo lanzar el proceso del plugin. Revisa los detalles del error.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN solo es compatible con instrucciones DML (SELECT, INSERT, UPDATE, DELETE). Las instrucciones DDL como CREATE, DROP o ALTER no se pueden analizar.\"],\"LnT0hQ\":[\"Agregar Columna\"],\"LvutiO\":[\"Sugerir con IA\"],\"M-rHQO\":[\"Salir de Pantalla Completa\"],\"M0XJba\":[\"¿Estás seguro de que quieres borrar todo el historial de consultas para esta conexión?\"],\"M1co_O\":[\"Configurado\"],\"M73whl\":[\"Contexto\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Emoji seleccionado\"],\"MWB7fV\":[\"Mostrar Todo\"],\"MXdOwj\":[\"Separar Conexiones\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Selecciona conexión de K8s\"],\"Mc1tjS\":[\"Activa ANALYZE para inspeccionar filas reales, tiempos, bucles y buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" filas más\"],\"Mp0jQ_\":[\"Este driver solo soporta claves primarias en la creación de la tabla\"],\"MqpZwN\":[\"Proceso Tabularis\"],\"MxIx43\":[\"↑↓ para navegar, Enter para abrir\"],\"MygtgQ\":[\"Agregar Celda Markdown\"],\"N40H-G\":[\"Todos\"],\"N5UQxq\":[\"Ollama no detectado en el puerto \",[\"0\"],\". ¿Está en ejecución?\"],\"N6GBcC\":[\"Confirmar eliminación\"],\"N6aqHp\":[\"Consultas ejecutadas\"],\"N9_S15\":[\"Se creará una nueva tabla\"],\"NBdMa1\":[\"Paso Mas Lento\"],\"NC2AI2\":[\"Longitud\"],\"NCzNnx\":[\"Orden ascendente\"],\"NT4Ubs\":[\"Eliminar clave personalizada y volver a la variable de entorno (si existe)\"],\"NUjrCO\":[\"Ningun favorito coincide con la busqueda\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Total árbol: \",[\"0\"]],\"Nc2VQn\":[\"Agregar a existente\"],\"NgFERn\":[\"Agregar a Favoritos\"],\"NktMHG\":[\"Nombre de la base de datos\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Probar\"],\"Nq5QTk\":[\"analizar N-esima\"],\"O2STgu\":[\"Error en la exportación: \"],\"O8SV8O\":[\"Descargando...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Ejecutar Todas las Celdas\"],\"OGWdBg\":[\"Nombre de Vista\"],\"OHqT6w\":[\"Pulsa la combinación de teclas...\"],\"OXJsaG\":[\"Nombre de parámetro no válido\"],\"OfhWJH\":[\"Restablecer\"],\"OlAl5i\":[\"Expandir todo\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Join Discord\"],\"P1YGsb\":[\"Generación SQL\"],\"P2m1xb\":[\"Detener en Error\"],\"P3Qlys\":[\"Sin ID de Conexión\"],\"P6Y3Yf\":[\"Ejecuta este comando en tu terminal y reinicia Claude Code.\"],\"PCdj-c\":[\"Deseleccionar todas\"],\"PMnFt9\":[\"Lectura Disco/s\"],\"PQU2Va\":[\"Aceptar Sugerencia con Intro\"],\"PRnH8G\":[\"de \",[\"0\"]],\"PY8UF3\":[\"Paralelo alternado (celda \",[\"n\"],\")\"],\"PiH3UR\":[\"¡Copiado!\"],\"Pia95d\":[\"El nombre de la columna es requerido\"],\"PrElXQ\":[\"Actualizar\"],\"PrixCC\":[\"Las filas se añadirán a una tabla existente\"],\"Pujgbb\":[\"Configurar destino\"],\"Pw_eQV\":[\"El Plugin no se pudo iniciar\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"No hay consultas guardadas\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Sin procesos hijos\"],\"QCxMC0\":[\"Buscar automáticamente nuevas versiones al iniciar la aplicación\"],\"QEazml\":[\"Eliminar seleccionadas\"],\"QHcLEN\":[\"Conectado\"],\"QLHHFO\":[\"Modo solo lectura\"],\"QOvAW3\":[\"New Features\"],\"QULGRi\":[\"No se encontraron consultas válidas\"],\"QZwllF\":[\"Explorar...\"],\"QbkSr_\":[\"EXPLAIN no disponible para esta consulta.\"],\"QeHFYZ\":[\"EXPLAIN falló: \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"Read more\"],\"Qu4Hog\":[\"Notebook importado exitosamente\"],\"R-A2Vd\":[\"No hay datos para mostrar\"],\"R0Hkb2\":[[\"0\"],\" base(s) de datos seleccionada(s)\"],\"R1nHhB\":[\"Ya existe\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convertir a Consola\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configuración\"],\"RF-HyV\":[\"Elige tu idioma preferido. 'Auto' usará el idioma del sistema.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copiar nombre\"],\"RI-HZc\":[\"Ingresa la Clave de \",[\"0\"]],\"RJrE17\":[\"¿Estás seguro de que deseas eliminar la vista \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"A star helps others discover the project\"],\"Rb3Tdm\":[\"Nombre del notebook\"],\"RcbKJ3\":[\"Al Actualizar\"],\"RkefFq\":[\"Ejecuta un EXPLAIN antes de mostrar el modal para que el usuario vea el plan.\"],\"RnF_hl\":[\"Cargando registro de plugins...\"],\"Rns7_C\":[\"Esta acción no se puede deshacer inmediatamente\"],\"RoKRqW\":[\"Plugins Disponibles\"],\"RphpKk\":[\"Apariencia\"],\"Rt8sHM\":[\"Se detecto trabajo temporal o de ordenacion\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Habilitados\"],\"S1veKH\":[\"Revert Selected\"],\"S5zeZU\":[\"Vista Previa\"],\"S8Yqbl\":[\"Insertar\"],\"SDND4q\":[\"No configurado\"],\"SJRy3D\":[\"(Auto-generado)\"],\"SSwIjo\":[\"Set EMPTY\"],\"SgvA_r\":[\"Press Run (Ctrl/Command+F5) to load table data\"],\"SlfejT\":[\"Error\"],\"SoATkx\":[\"Copiar Celda\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL del Endpoint\"],\"T7w5CQ\":[\"Failed to create new row: \"],\"T9947j\":[\"Valor (ej. 'texto' o 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Cambiar a Diseño Vertical\"],\"TK5oex\":[\"Guardar Prompt\"],\"TKQ7K-\":[\"Instalar\"],\"TKZreP\":[\"Requerido\"],\"TMLAx2\":[\"Requerido\"],\"TO08JI\":[\"claves foráneas\"],\"TQloo1\":[\"Crear Clave Foránea\"],\"TVKqvO\":[\"Editar Fila\"],\"TYSdQ3\":[\"Ejecutar consulta SELECT\"],\"TfDFHS\":[\"Ajusta las líneas largas en el editor en vez de desplazarse horizontalmente.\"],\"Tibfjs\":[\"No hay conexiones guardadas — crea una abajo\"],\"Tj36Dr\":[\"Restablecer Predeterminado\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Bloquear consulta\"],\"TpwXyg\":[\"Si falta el tiempo, es probable que el servidor devolviera un plan solo estimado.\"],\"Tw2M1h\":[\"Instalación fallida\"],\"Ty-rm9\":[\"Conexiones SSH\"],\"Tz0i8g\":[\"Configuración\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Conexiones de Kubernetes\"],\"U4uzyV\":[\"What's New\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Detener la ejecución cuando una celda falla\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" en \",[\"1\"],\" — revisa y decide antes de ejecutar.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"¡Configuración instalada correctamente para \",[\"clientName\"],\"! Reinicia la app para aplicar.\"],\"URmyfc\":[\"Detalles\"],\"UWQBvp\":[\"Generar plantillas SQL\"],\"UawTKZ\":[\"Opcional. Especifica el ejecutable para iniciar este plugin (p.ej. python3 en macOS/Linux, python o ruta completa en Windows). Deja en blanco para usar el valor predeterminado.\"],\"Ub8sf5\":[\"SQLite no soporta la eliminación de FKs mediante ALTER TABLE.\"],\"UbbJ8j\":[\"No se encontraron opciones\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"Estas conexiones rechazarán escrituras desde MCP. Las otras se comportan normalmente.\"],\"UnQNah\":[\"¿Estás seguro de que deseas eliminar la columna \\\"\",[\"0\"],\"\\\" de la tabla \\\"\",[\"tableName\"],\"\\\"?\\n\\nADVERTENCIA: Esto eliminará permanentemente todos los datos de esta columna. Esta acción no se puede deshacer.\"],\"UncTTh\":[\"Suma de RSS del árbol de procesos — puede sobreestimar la memoria compartida\"],\"UpjgFm\":[\"Parámetros cambiados\"],\"UsAnu1\":[\"ANALYZE ejecuta la consulta. Usar con precaucion en instrucciones que modifican datos.\"],\"UxKoFf\":[\"Navegación\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tamaño de Tab\"],\"UzWGWO\":[\"Cambiar a entrada SQL WHERE\"],\"V-chk5\":[\"Frecuencia con la que se verifica si las conexiones activas siguen disponibles. Establece 0 para desactivar.\"],\"V-pw1j\":[\"Nombre de tabla\"],\"V2T0Uw\":[\"Aún no hay notebooks guardados.\"],\"V3aNwx\":[\"Editor de Datos\"],\"VGYp2r\":[\"Aplicar a todo\"],\"VH8S7x\":[\"Columna del portapapeles\"],\"VIAEcS\":[\"Error al cargar las bases de datos. Verifica tus credenciales.\"],\"VKdztF\":[\"Agregar filas\"],\"VLiHXI\":[\"Datos Analyze\"],\"VMbmXc\":[\"¿Estás seguro de que deseas eliminar \\\"\",[\"pluginName\"],\"\\\"? Los archivos del plugin serán eliminados.\"],\"VO3weF\":[\"Ningún archivo cargado\"],\"VOZlKc\":[\"Importar Base de Datos\"],\"VPzsIz\":[\"Generando nombre...\"],\"VUul0v\":[\"Cerrar\"],\"VW0GVQ\":[\"Haz clic en otro emoji abajo para cambiarlo.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Todas las consultas\"],\"Vi2Pqx\":[\"por\"],\"Vl2zn2\":[\"detenido\"],\"Vo4uBA\":[\"Ocurrió un error al instalar el plugin. Consulta los detalles a continuación.\"],\"VqqyOs\":[\"Ejecuta una consulta para ver resultados\"],\"VzhDFh\":[\"Bloquea cualquier sentencia que no sea SELECT vía MCP, salvo las conexiones autorizadas abajo.\"],\"W3uwpT\":[\"Cerrar Todas las Pestañas\"],\"W4MKLh\":[\"ej. Parece arriesgada en prod, confirma…\"],\"WA8RND\":[\"¿Estás seguro de que deseas eliminar la tabla \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Eliminar Tabla\"],\"WLnvCZ\":[\"Ingresa el nombre de usuario\"],\"WM-__8\":[\"Buscar conexiones...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas importadas en \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" filas importadas en \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"¿Estás seguro de que quieres eliminar la consulta \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"exitosas\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"General\"],\"WmPpB1\":[\"Cargando el plan de ejecución…\"],\"Wu7cK0\":[\"No se encontraron bases de datos\"],\"WvoUQF\":[\"Celda \",[\"n\"],\" eliminada\"],\"Ww3pDD\":[\"COMANDO MANUAL\"],\"X-20AU\":[\"Ingresa el prompt de nombre de pestaña...\"],\"X-U6_w\":[\"Familia de Fuente\"],\"X5fs0g\":[\"Crea tu primera conexión para empezar.\"],\"X7Ayjp\":[\"Contraseña guardada en el llavero del sistema\"],\"X9kySA\":[\"Favoritos\"],\"XJOV1Y\":[\"Actividad\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Explicación de Consultas\"],\"XVF2Pf\":[\"Editar Esquemas\"],\"XW6OYF\":[\"Este plugin puede requerir un intérprete (p.ej. Python). Usa Configuración del Plugin para establecer la ruta del intérprete.\"],\"XZB6Xr\":[\"Máximo de Entradas de Registro\"],\"Xcffv2\":[\"Mostrar los botones de Asistente IA y Explicar en el editor\"],\"XeqTSh\":[\"Tipo Join\"],\"XmJfZT\":[\"nombre\"],\"XoQfG1\":[\"Usuario SSH\"],\"XwI0Vw\":[\"Auto (Sistema)\"],\"XyDlLX\":[\"Nombre del Índice\"],\"Y2P2aK\":[\"Selecciona los esquemas a cargar:\"],\"Y8HYw2\":[\"valor\"],\"Y8zX3R\":[\"Insertar en el Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Buscar...\"],\"YWlnMZ\":[\"Puerto de Ollama\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Explora e instala plugins del registro.\"],\"Y_3yKT\":[\"Abrir en Nueva Pestaña\"],\"YiAQ_Q\":[\"Actualizar Tablas\"],\"Ysjr9Y\":[\"Vista Previa SQL\"],\"YswNf7\":[\"Todos los niveles\"],\"YtNwr6\":[\"Número máximo de entradas del historial de consultas almacenadas por conexión.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Cargando...\"],\"Z7ZXbT\":[\"Aprobar\"],\"Z8JpBH\":[\"Exportar como Notebook\"],\"Z8fBIc\":[\"Las filas reales superan la estimacion\"],\"ZC2VJP\":[\"Ejecutar\"],\"ZCIS4k\":[\"sin filtros activos\"],\"ZF1_UT\":[\"Modo SSL\"],\"ZGjBPa\":[\"Limpiar Registros\"],\"ZHQTlM\":[\"Importando desde\"],\"ZIFDoJ\":[\"Selecciona al menos Estructura o Datos\"],\"ZIZA6o\":[\"Editar antes de aprobar\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avisos de análisis\"],\"other\":[\"#\",\" avisos de análisis\"]}]],\"ZVn8p2\":[\"Muestra los números de línea en el margen del editor.\"],\"ZYnwzF\":[\"Desconectado\"],\"Za3_fO\":[\"Error\"],\"Zf7LHg\":[\"No se encontraron contextos (¿está kubectl instalado?)\"],\"Zfotp5\":[\"Las grandes diferencias entre estimacion y realidad suelen indicar estadisticas desactualizadas o predicados dificiles de modelar.\"],\"ZiFjhs\":[\"Select *\"],\"ZpzHz0\":[\"No se pudieron cargar los esquemas\"],\"ZqXGPF\":[\"Error al eliminar la vista: \"],\"ZuL73E\":[\"Crear una nueva vista de base de datos\"],\"_-bi4r\":[\"Tabla Referenciada\"],\"_AEYGI\":[\"Sin historial de ejecución\"],\"_FdpZc\":[\"Error al cargar la definición de la vista: \"],\"_FxSdi\":[\"Consulta las dependencias open source directas usadas por la app, el backend y la toolchain.\"],\"_JyTG8\":[\"Ingresa el prompt de explicación...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"filas\"],\"_TK1zF\":[\"Conexión guardada\"],\"_bJFBE\":[\"Tiempo de Espera de Conexión\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Árbol\"],\"_dqduX\":[\"Página siguiente\"],\"_fwE6J\":[\"Anteriores\"],\"_n04sB\":[\"Terminar\"],\"_otxbQ\":[\"Archivo de clave\"],\"_pezIT\":[\"Error al conectar a \",[\"0\"],\". Verifica tu configuración o asegúrate de que la base de datos esté en ejecución.\"],\"_srfkj\":[\"Clave personalizada eliminada correctamente\"],\"_t6aFo\":[\"MySQL y MariaDB pueden volver a EXPLAIN FORMAT=JSON o al EXPLAIN tabular segun la version del servidor.\"],\"_xTbaM\":[\"columnas\"],\"_yxaaL\":[\"Índice Único\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.\"],\"a9CASo\":[\"SQLite solo soporta renombrar columnas. Otras modificaciones requieren recrear la tabla manualmente.\"],\"aAIQg2\":[\"Apariencia\"],\"aC_vCa\":[\"Generar nombre con IA\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Selecciona un nodo para ver detalles\"],\"aHKcKc\":[\"Página anterior\"],\"aI-5wG\":[\"Verificar CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valor Predeterminado\"],\"aScJP1\":[\"Ejecutar esta consulta\"],\"aVNbN8\":[\"Condiciones de filtro\"],\"aWhdMQ\":[\"Usar Conexión SSH Existente\"],\"aXYd8V\":[\"Tiempo de espera\"],\"aX_S_r\":[\"Página \",[\"0\"],\" de \",[\"totalPages\"]],\"agZcf8\":[\"SQL Generado: \",[\"tableName\"]],\"ajqPzi\":[\"Select [campos]\"],\"alplHn\":[\"Analizando plan de ejecucion con IA...\"],\"anBcU3\":[\"Si te gusta tabularis y quieres ver más funcionalidades, considera apoyar el proyecto contribuyendo código, reportando errores o dando una estrella en GitHub.\"],\"arHmj2\":[\"¿Estás seguro de que quieres eliminar esta consulta del historial?\"],\"arKcqW\":[\"Los servidores mas antiguos pueden volver a planes estimados con menos metricas.\"],\"arcpYe\":[\"Aprobación requerida\"],\"aurEkh\":[\"Cargando procesos…\"],\"avtdsd\":[\"Modo SQL\"],\"az8lvo\":[\"Desactivada\"],\"b1Ah3z\":[\"Enfocado en\"],\"b392Dr\":[\"Expandir Todo\"],\"b5S_PU\":[\"Nombre de la Base de Datos\"],\"bAvovP\":[\"Mover Abajo\"],\"bH3JqY\":[\"No se encontraron tablas\"],\"bP5JOn\":[\"Ajuste de Línea\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Hacer todas las consultas MCP de solo lectura\"],\"bmca5u\":[\"Solo escrituras\"],\"bpCiBU\":[\"Permitir escrituras desde MCP\"],\"bqnhqW\":[\"La estimacion supera las filas reales\"],\"bqpcP7\":[\"Exportar Base de Datos\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Error\"],\"bw22Gk\":[\"Esquema de Columnas\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Puntos Criticos\"],\"cFCKYZ\":[\"Denegar\"],\"cFGrCP\":[\"tabla\"],\"cGeFup\":[\"Tamaño de Fuente\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Enfocar en Tabla\"],\"cM9NHc\":[\"Degradar a\"],\"cO9-2L\":[\"Desactivado\"],\"cSev-j\":[\"Filtros\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importar \",\"#\",\" filas\"],\"other\":[\"Importar \",\"#\",\" filas\"]}]],\"c_xoSn\":[\"Celda \",[\"n\"],\" renombrada\"],\"cd0XEW\":[\"Guardar Consulta\"],\"cnGeoo\":[\"Delete\"],\"cwfPLH\":[\"Grupo Dividido\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" sentencias\"],\"d34vwG\":[\"Cargar Bases de Datos\"],\"d6ynQ7\":[\"Orden descendente\"],\"d8_6_v\":[\"cancelar\"],\"d8wc1_\":[\"Valores de muestra\"],\"dBXoCS\":[\"Se detectó una variable de entorno, pero puedes sobrescribirla estableciendo una clave arriba.\"],\"dD7NPy\":[\"Esquema\"],\"dEgA5A\":[\"Cancelar\"],\"dMtLDE\":[\"hasta\"],\"dPJVhW\":[\"Instalación Fallida\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" sesión\"],\"other\":[\"#\",\" sesiones\"]}]],\"dTUzKm\":[\"Ejecutar seleccionadas (\",[\"0\"],\")\"],\"dU_iQN\":[\"Ninguna sesión coincide con los filtros.\"],\"dUh9QW\":[\"Planificacion\"],\"dVoir2\":[\"Celda Markdown \",[\"n\"],\" añadida\"],\"dZ0d2O\":[\"Selecciona al menos una tabla\"],\"dhi13U\":[\"Elegir imagen…\"],\"dli1JX\":[\"Enviar Cambios\"],\"dmYV6f\":[\"Rutinas\"],\"dohZCo\":[\"Instrucciones para la generación de SQL con IA. Usa \",[\"SCHEMA\"],\" como marcador para la estructura de la base de datos.\"],\"dtxpK2\":[\"Analizar\"],\"dwW9nJ\":[\"Mostrar Números de Línea\"],\"dwWVw_\":[\"Mostrar pantalla de bienvenida\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" pestaña\"],\"other\":[\"#\",\" pestañas\"]}]],\"dxxY9r\":[\"Si existe\"],\"dyN4j9\":[\"Haz clic en 'Ejecutar Vista Previa' para ver resultados\"],\"e07Iz5\":[\"Abrir Administrador de Tareas\"],\"e0NzXu\":[\"Este proyecto es un Work In Progress (WIP). Las funciones principales son estables, pero tenemos grandes planes.\"],\"e1UKxf\":[\"Guardar esta consulta\"],\"e34gdU\":[\"Cuánto espera el subproceso MCP la decisión del usuario antes de fallar.\"],\"e62LQd\":[\"Forzar Cierre\"],\"e6QZsM\":[\"Tema del Editor\"],\"e8CirT\":[\"Ejecutar consulta\"],\"eD2kUP\":[\"Buffers Leidos\"],\"eE0JZ4\":[\"Versión\"],\"eIDch7\":[\"Ingresa el prompt de analisis del plan de ejecucion...\"],\"eIVolo\":[\"Disco L/E\"],\"eJOEBy\":[\"Exportando...\"],\"eKHY3W\":[\"Configuración del Plugin\"],\"eMb6Ub\":[\"Elige un recurso...\"],\"ePK91l\":[\"Editar\"],\"eXweu6\":[\"Expandir Celda\"],\"ecNsTE\":[\"Ninguna consulta coincide con la busqueda\"],\"ecUA8p\":[\"Hoy\"],\"ecpIZP\":[\"Ingresa la frase de paso si la clave está cifrada\"],\"esl-Tv\":[\"Tipo de recurso\"],\"exyUec\":[\"Conexión\"],\"f2AJjl\":[\"Eliminar Fila\"],\"f4pD-j\":[\"La prueba de conexión falló\"],\"f7sXvi\":[\"Ingresa la contraseña\"],\"fAsxc0\":[\"Escaneos Secuenciales\"],\"fIeFs0\":[\"Seleccionar Valor...\"],\"fJm92A\":[\"Selecciona un archivo con un plan EXPLAIN (formato JSON o texto de PostgreSQL) para visualizarlo.\"],\"fOuPPd\":[\"Complemento\"],\"fXVIZq\":[\"Valores\"],\"f_b1TA\":[\"Historial de Ejecución\"],\"fghnqP\":[\"Cambiar a conexión 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Coma (,)\"],\"fp711N\":[\"Bloqueada (solo lectura)\"],\"fpzyLj\":[\"Página \",[\"0\"],\" de \",[\"1\"]],\"fuA6oy\":[\"Tiempo de Espera del Socket\"],\"fvImQM\":[[\"0\"],\" seleccionadas\"],\"fwr_nh\":[\"Instala extensiones, gestiona drivers de plugins y mantén bajo control los ajustes de ejecución.\"],\"g0ZzK4\":[\"JSON válido\"],\"g11hAR\":[\"Nueva Fila\"],\"g8VcMm\":[\"Mi clúster de K8s\"],\"gCFR_O\":[\"Ejecución Paralela (Ejecutar Todo)\"],\"gEjU98\":[\"Abrir conexiones\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Se requiere al menos una columna\"],\"gSuQrG\":[\"Ninguna conexión coincide con \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Reejecutar consulta\"],\"gZWMnn\":[\"Analisis IA\"],\"ghYd73\":[\"Elegir destino...\"],\"giAqEC\":[\"Crear Nueva Tabla\"],\"gnQS8X\":[\"Tamaño máximo de paquete usado por el conector MySQL.\"],\"gqV5VL\":[\"Integrado, no personalizable\"],\"gww_XE\":[\"Columna Referenciada\"],\"gxXPJ9\":[\"Configurar Intérprete\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximizar\"],\"h-XNc9\":[\"Delimitador CSV\"],\"h-kNAk\":[\"ej. datos_ventas\"],\"h3Z_aK\":[\"Escribe Markdown aquí...\"],\"h7MgpO\":[\"Atajos de teclado\"],\"h7peZQ\":[\"Permitir\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" proceso del sistema en ejecución\"],\"other\":[\"#\",\" procesos del sistema en ejecución\"]}]],\"hEZrFh\":[\"Ejecutar Archivo SQL...\"],\"hEipgW\":[\"Buscar Actualizaciones Ahora\"],\"hG89Ed\":[\"Imagen\"],\"hIHcBE\":[\"Exportar como CSV\"],\"hItdtk\":[\"Explorar carpeta\"],\"hXFVjo\":[\"El nombre de la tabla es requerido\"],\"hZ6znB\":[\"Puerto\"],\"h_huI6\":[\"Reejecutar\"],\"hbz1rh\":[\"claves\"],\"hdsaJo\":[\"Importando...\"],\"he3ygx\":[\"Copiar\"],\"hfGimp\":[\"Elige un namespace...\"],\"hjjSEi\":[\"Conexiones de solo lectura\"],\"hjwN_s\":[\"Nombre del recurso\"],\"hlF1mD\":[\"Copiar selección\"],\"hnboBb\":[\"Analisis IA del Plan de Ejecucion\"],\"hq4-D2\":[\"La clave API se almacena de forma segura en el llavero del sistema. Establecer una clave aquí sobrescribe la variable de entorno.\"],\"hqjXdn\":[\"Error al eliminar la conexión SSH\"],\"hqofAK\":[\"Copiar SQL\"],\"hy6L14\":[\"Ver en GitHub\"],\"hyjACX\":[\"Celdas contraídas/expandidas\"],\"hz1b5W\":[\"No se encontraron elementos coincidentes\"],\"i1vAVM\":[\"Crear nueva tabla\"],\"i3S5T3\":[\"Buscar en favoritos...\"],\"i4_LY_\":[\"Escritura\"],\"i5HBWh\":[\"Historial de consultas restablecido\"],\"iAVlge\":[\"Personaliza las instrucciones para la generación de nombres de celda en notebooks con IA. El contenido de la celda (SQL o Markdown) se envía como mensaje del usuario.\"],\"iE1yAB\":[\"Filtrar tablas...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Conectar\"],\"iSryJ2\":[\"Mi Servidor SSH\"],\"iT7UeX\":[\"Agregar Índice\"],\"iUWwuR\":[\"Descargar e Instalar\"],\"ia7i08\":[\"Selecciona primero contexto/namespace/tipo\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Guardado\"],\"igcsfY\":[\"No hay plugins disponibles en el registro.\"],\"ij-Elv\":[\"Vista previa de imagen\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" consultas analizables encontradas\"],\"other\":[\"#\",\" consultas analizables encontradas\"]}]],\"ioL38P\":[\"Monitoriza los procesos de complementos, CPU, RAM y uso de disco en tiempo real\"],\"ixlL_e\":[\"Archivo de Clave SSH (Opcional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Selecciona un modelo\"],\"j3gyYH\":[\"Aplicar todos\"],\"j5CWO4\":[\"Actualizado\"],\"j9HPuI\":[\"Fila #\",[\"0\"]],\"jBtpMP\":[\"Todos los estados\"],\"jEu4bB\":[\"Columnas\"],\"jEyQIs\":[\"No se encontraron rutinas\"],\"jHc1By\":[\"Eliminar Vista\"],\"jI6sj4\":[\"Costo, tiempo y estimaciones de filas suelen no estar disponibles como en PostgreSQL y MySQL.\"],\"jIxQCZ\":[\"No disponible para tu plataforma\"],\"jKIncn\":[\"El nombre de la base de datos es requerido\"],\"jPSk57\":[\"Razón (opcional)\"],\"jUNY_d\":[\"vista\"],\"jVqjDo\":[\"Formato de archivo notebook no válido\"],\"jWSZ-A\":[\"Solo vista previa - datos completos no cargados\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Tiempo de espera del socket en milisegundos.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"El nombre de la conexión es requerido\"],\"jsQZMk\":[\"IA\"],\"juO8wz\":[\"proceso hijo\"],\"jx0t66\":[\"Contraer procesos hijos\"],\"jxShEf\":[\"Crear Vista\"],\"jz5PKx\":[\"Definición de Vista\"],\"k-0mL-\":[\"Agregar Columna\"],\"k-XiMX\":[\"Sin formato\"],\"k2UnVy\":[\"Cond. Hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"segundos\"],\"kBiBq7\":[\"¿Eliminar el índice \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Mostrar/Ocultar Gráfico\"],\"kI1qVD\":[\"Formatear\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" filas · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Detalles del evento\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registro\"],\"kY-q3P\":[[\"label\"],\" es obligatorio\"],\"kexIdC\":[\"Usar Port-Forward de Kubernetes\"],\"kj2-CR\":[\"Detalles del error\"],\"krksx_\":[\"Éxito\"],\"kwY6nh\":[\"Cerrar\"],\"kx0s-n\":[\"Resultados\"],\"kxUEfE\":[\"Error al obtener la definición de la rutina: \"],\"l2Op2p\":[\"Parámetros de Consulta\"],\"l9Ivba\":[\"Procesos de complementos y recursos del sistema\"],\"lBdPxu\":[\"Color de acento\"],\"lCF0wC\":[\"Actualizar\"],\"lEQRwq\":[\"Datos (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nueva tabla creada\"],\"lOekZ3\":[\"Cambiar a Diseño Horizontal\"],\"lUA1C1\":[\"Frase de Paso de Clave SSH (Opcional)\"],\"lVeG20\":[\"Dependencias Rust\"],\"lXAG6D\":[\"Instrucciones para la explicación de consultas con IA. Usa \",[\"LANGUAGE\"],\" como marcador para el idioma de salida.\"],\"lbbYjy\":[\"Edita directamente el archivo de configuración en bruto. Se requiere reinicio para aplicar los cambios.\"],\"lhKW0m\":[\"Celda SQL \",[\"n\"],\" añadida\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Tamaño de Página de Resultados (Límite)\"],\"lkz6PL\":[\"Duración\"],\"lmVGeo\":[\"Agregar Clave Foránea\"],\"lnnx3E\":[\"Conecta Tabularis a Claude Desktop, Cursor y más\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Añadir\"],\"m2Q_r8\":[\"Detectar JSON en columnas de texto\"],\"m2tskz\":[\"Éxito\"],\"mA-qpe\":[\"Ejecución Completada\"],\"mBhhbA\":[\"Registros exportados al portapapeles\"],\"mCNdzH\":[\"Ejecutar Celda\"],\"mO95sp\":[\"Cerrar panel\"],\"mP7dLi\":[\"Ingresa el nombre de la fuente arriba\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloqueado\"],\"other\":[\"#\",\" bloqueados\"]}]],\"mS74ir\":[\"Error al guardar la conexión SSH\"],\"mSqtw8\":[\"Ejecutar Vista Previa\"],\"mURmfQ\":[\"Definición de Vista (SQL)\"],\"mX_isJ\":[\"Vertical\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Estructura (DDL)\"],\"mrk4Cf\":[\"Ordenar por \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Acabamos de abrir una comunidad dedicada a Tabularis: pide ayuda, comparte trucos y da forma al roadmap.\"],\"mtvVdV\":[\"Filas Procesadas\"],\"mx4evv\":[\"Crear Tabla\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Descargar\"],\"n7JDTx\":[\"Instala y activa complementos para verlos aquí\"],\"nDDJir\":[\"Buscar sesión, cliente, conexión…\"],\"nHP-Kr\":[\"No hay sesión activa. Selecciona una conexión.\"],\"nKhCjW\":[\"Seleccionar Tablas\"],\"nNmhuY\":[\"Crear Índice\"],\"nNwvm4\":[\"Error\"],\"nOVim5\":[\"Error al guardar la conexión\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Requiere extensión: \",[\"0\"]],\"ngO6Pv\":[\"Permite que Intro (además de Tab) acepte la sugerencia de autocompletado activa. Cuando está desactivado, Intro siempre inserta una nueva línea.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Crea tu primera conexión\"],\"nohy4m\":[\"Sin actividad MCP registrada.\"],\"nr-axf\":[\"Eliminar Plugin\"],\"nsPFX9\":[\"Abrir en Visual Explain\"],\"nuBbBr\":[\"Gráfico\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Cambiar\"],\"o21Y-P\":[\"entradas\"],\"o3tP_A\":[\"Eliminar Índice\"],\"o45L8r\":[\"Ingresa el nombre de tu conexión\"],\"o53XGh\":[\"Copiar fila(s) seleccionada(s)\"],\"o7J4JM\":[\"Filtro\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Nivel\"],\"oGiIL7\":[\"Proveedor Predeterminado\"],\"oJ4rAm\":[\"Conexión Perdida\"],\"oJlXF2\":[\"Importar Notebook\"],\"oMFv82\":[\"Dividir Vertical\"],\"oOFiQg\":[\"Limita el número de filas obtenidas por consulta para prevenir problemas de rendimiento. Establece en 0 para desactivar (no recomendado).\"],\"oT9ZD3\":[\"Ocultar resumen\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Gráfico cambiado (celda \",[\"n\"],\")\"],\"oWfclW\":[\"Muestra el visor de JSON cuando una celda de texto sin tipar contiene un objeto o array JSON. Añade un pequeño coste de análisis por celda.\"],\"obpbdz\":[\"Archivo de configuración no encontrado (crear manualmente)\"],\"odZgfC\":[\"CLIENTES IA\"],\"ogZhXn\":[\"Elige la dirección de diseño predeterminada para los diagramas ER\"],\"ohUJJM\":[\"Plugins\"],\"ok3hJJ\":[\"Instalados\"],\"olAdaI\":[\"Filas Reales\"],\"olWzar\":[\"Forzar Cierre del Proceso\"],\"ovBPCi\":[\"Predeterminado\"],\"owzTWN\":[\"Modelos de IA actualizados desde los proveedores\"],\"oxYi6j\":[\"Ajusta el tamaño base de fuente usado en la aplicación (10-20px).\"],\"p--hsQ\":[\"Se ha perdido una conexión a la base de datos\"],\"p6NueD\":[\"NUEVA\"],\"pOYHox\":[\"Acciones\"],\"pR9bTR\":[\"Sin datos BLOB\"],\"pRDT0m\":[\"Tabla\"],\"pS8S5q\":[\"ej. usuarios, pedidos, productos\"],\"pSws_M\":[\"Nombre de Tabla\"],\"pVLbKZ\":[\"Vista creada correctamente\"],\"pWT04I\":[\"Verificando...\"],\"pZJ_6D\":[\"El nombre del índice es requerido\"],\"pddYFG\":[\"Ingresa el prompt de nombre de celda...\"],\"pnpyuD\":[\"Habilitar Registros\"],\"pqKMPv\":[\"Error al crear la tabla: \"],\"pqaP1h\":[\"Descartar\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"ej. Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"El resto sigue en solo lectura. Solo las marcadas pueden ejecutar escrituras.\"],\"qIrtcK\":[\"Actualizaciones\"],\"qOqy8G\":[\"Verificando configuración...\"],\"qWaVNs\":[\"Guardar y Reiniciar\"],\"qb3LPX\":[\"Ver Diagrama ER\"],\"qkK0vq\":[\"El nombre de la vista es requerido\"],\"qki9tG\":[\"Error\"],\"qoIir-\":[\"La URL base de tu API compatible con OpenAI. Ejemplos: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Contraer todo\"],\"r6ncaO\":[\"Cerrar pestaña\"],\"rAJlpP\":[\"Puerto del contenedor\"],\"rG3WVm\":[\"Lectura\"],\"rGRCeK\":[\"Borrar Historial de Consultas\"],\"rNIto7\":[\"El nombre del recurso es obligatorio\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exportado exitosamente\"],\"rY4sEV\":[\"Eliminar FK\"],\"rbu0nO\":[\"Gestionar Conexiones SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" conexión/es\"],\"other\":[\"#\",\" conexión/es\"]}]],\"rn2_2V\":[\"Eliminar filtro\"],\"roABNH\":[\"Sin historial de consultas\"],\"rtir7c\":[\"desconocido\"],\"ru0-2W\":[\"No hay conexiones activas\"],\"rvDPWO\":[\"Desviacion de Estimacion\"],\"rwWjWg\":[\"Notas de la Versión\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Probar Conexión\"],\"sBOaim\":[\"El archivo de configuración ha sido guardado. ¿Reiniciar ahora para aplicar los cambios?\"],\"sCyv9B\":[\"Actualizar Modelos\"],\"sSUqe4\":[\"Eliminar\"],\"sUBkgN\":[\"Generando SQL...\"],\"sZZG3d\":[\"¿Estás seguro de que deseas importar \\\"\",[\"0\"],\"\\\"?\\nEsto podría sobrescribir los datos existentes.\"],\"sbK5ck\":[\"Buscar en el historial...\"],\"sq_bS6\":[\"Al Eliminar\"],\"suW7-E\":[\"Tiempo de espera de conexión en milisegundos.\"],\"t-R8-P\":[\"Ejecucion\"],\"t1OfVY\":[[\"totalLibraries\"],\" librerías\"],\"t2TMzs\":[\"Cerrar Pestaña\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Seleccionar una tabla...\"],\"t7KRl1\":[\"Registro de cada llamada MCP y de las consultas pendientes de aprobación. Almacenado localmente.\"],\"t9NJIk\":[\"Se detectaron operaciones con mucho escaneo\"],\"tB7xof\":[\"Operaciones Temp o Sort\"],\"tBBXTO\":[\"Intervalo de Ping\"],\"tFrT3w\":[\"Agrega esto al archivo de configuración del cliente manualmente si la instalación automática falla.\"],\"tJ7UbA\":[\"analizar seleccionada\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Dividir Horizontal\"],\"tQhW-D\":[\"Configuración de Registros\"],\"tXFGEx\":[\"No hay conexiones de Kubernetes guardadas. Haz clic en \\\"Añadir\\\" para crear una.\"],\"tXLz_8\":[\"Eliminar\"],\"tXpRby\":[\"Cuadrícula de datos\"],\"tbysEk\":[\"Acciones\"],\"tdta9X\":[\"Página \",[\"0\"]],\"tfDRzk\":[\"Guardar\"],\"tfEioV\":[\"Ejecutar todas las celdas SQL de arriba a abajo\"],\"tiAIaJ\":[\"Contraseña SSH faltante. Por favor, ingrésala de nuevo.\"],\"tk22BR\":[\"Pega datos estructurados y revisa el esquema antes de importar\"],\"tst44n\":[\"Eventos\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"Archivo SQL ejecutado correctamente\"],\"u6QeR6\":[\"Reiniciar Ahora\"],\"uAQUqI\":[\"Estado\"],\"uBAxNB\":[\"Editor\"],\"uFViPK\":[\"No hay conexiones SSH disponibles\"],\"uHUuhp\":[\"Analizar esta consulta\"],\"uHfFzS\":[\"Tamaño de Fuente del Editor\"],\"uJ_3K5\":[\"¿Eliminar el notebook \\\"\",[\"0\"],\"\\\"? Esta acción no se puede deshacer.\"],\"uKaNJ3\":[\"Abrir en el editor JSON\"],\"uQBwTo\":[\"Esquemas\"],\"ub54ff\":[\"Centro de plugins\"],\"ufFyBs\":[\"Base de datos exportada correctamente\"],\"upNmR2\":[\"Abrir Barra Lateral\"],\"utMia3\":[\"Deseleccionar Todo\"],\"uyNaJg\":[\"1 elemento\"],\"v61dnS\":[\"Ingresa el nombre exacto del modelo para tu proveedor compatible con OpenAI.\"],\"v6oeyr\":[\"Instalado\"],\"v75DGg\":[\"Explorar archivo\"],\"v99dO4\":[\"Clave Primaria\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" consultas encontradas\"],\"other\":[\"#\",\" consultas encontradas\"]}]],\"vCSBPD\":[\"Agregar filtro\"],\"vH7uJj\":[\"Ordenar por…\"],\"vUOA1-\":[\"Buscar modelos...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE incluye filas reales, tiempos, bucles y contadores de buffer cuando estan disponibles.\"],\"vXIe7J\":[\"Idioma\"],\"vYf4Jm\":[\"Ingrese una función SQL completa (ej: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Preferido\"],\"vditm4\":[\"Plan de Query\"],\"vks_ls\":[\"Cerrar Otras Pestañas\"],\"vnAnIp\":[\"Modelo \",[\"0\"],\" no encontrado en \",[\"1\"],\". Puede que no funcione correctamente.\"],\"vqoN5u\":[\"Estructura\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Explorador\"],\"vujQJ5\":[\"Localización\"],\"vvJPVL\":[\"Mostrar resumen\"],\"vwI5S4\":[\"Éxito\"],\"vzH-7Z\":[\"Explicar\"],\"w7QmD_\":[\"Ingresa el prompt del sistema...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Tiempo transcurrido\"],\"wCfv2R\":[\"Agregar Conexión\"],\"wGfc86\":[\"Borrar Todo el Historial\"],\"wGwNv4\":[\"Base de datos activa\"],\"wJJ-Wy\":[\"Instalando...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers Hit\"],\"wQn-RM\":[\"Agregar Columna\"],\"wRXcR2\":[\"Usando el icono predeterminado del driver.\"],\"wTOwz-\":[\"Aplicado\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Importar desde Portapapeles\"],\"w_bY7R\":[\"Registros\"],\"wc_8bA\":[\"Pendiente\"],\"wckWOP\":[\"Gestionar\"],\"wdYcKH\":[\"Pestañas Abiertas\"],\"wja8aL\":[\"Sin nombre\"],\"wkOAzk\":[\"Ningún notebook coincide con tu búsqueda.\"],\"wp49Ao\":[\"Failed to process insertions: \"],\"wqG2hQ\":[\"Omitir (no importar)\"],\"wwrAsK\":[\"Por favor, completa todos los campos requeridos\"],\"wwu18a\":[\"Icono\"],\"x2fr_j\":[\"Grafo\"],\"xANKBj\":[\"Funciones\"],\"xBwjck\":[\"Se requiere reinicio para aplicar los cambios.\"],\"xDAtGP\":[\"Mensaje\"],\"xECY01\":[\"Procedimientos\"],\"xGPNgZ\":[\"Personalización de Prompts\"],\"xNgtS-\":[\"No se encontraron vistas\"],\"xOPa1b\":[\"El puerto debe estar entre 1 y 65535\"],\"xY9s5E\":[\"Tiempo agotado\"],\"xaVUr1\":[\"El veloz zorro marrón salta sobre el perro perezoso\"],\"xbvTzL\":[\"Ruta del Archivo\"],\"xlew5F\":[\"Limpiar\"],\"xmNyKz\":[\"Probando...\"],\"xtuh6D\":[\"Expandir Explorador\"],\"y-Zdqj\":[\"Elige un contexto...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Abrir visor JSON\"],\"yQXjG5\":[\"Deseleccionar Todo\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Ayer\"],\"ygCKqB\":[\"Detener\"],\"ykCc6r\":[\"Base de datos cambiada (celda \",[\"n\"],\")\"],\"ynVMSc\":[\"Seleccionar todas\"],\"ytdz1d\":[\"La IA quiere ejecutar una escritura en la base de datos\"],\"yyhzur\":[\"Crear Tabla\"],\"yz7wBu\":[\"Cerrar\"],\"z0VdfR\":[\"rutina\"],\"z407wX\":[\"Contraseña SSH\"],\"z5kV0h\":[\"Conexiones\"],\"zBTMzx\":[\"Vista Previa\"],\"zCaAKs\":[\"Error de Actualización\"],\"zDAakK\":[\"No se puede mostrar el diagrama sin un ID de conexión.\"],\"zGe21h\":[\"Esta clave se carga desde una variable de entorno\"],\"zGfL5t\":[\"valor\"],\"zL6-4A\":[\"No hay procesos de complementos en ejecución\"],\"zLZhCi\":[\"¡Nueva comunidad Discord!\"],\"zLlCou\":[\"Copiar nombre de columna\"],\"zNEL34\":[\"Join the Community\"],\"zNgTlV\":[\"Cerrar Pestañas a la Derecha\"],\"zQz55p\":[\"Inspeccionar estructura\"],\"zR0FfH\":[\"Exportado a \",[\"target\"]],\"zRZeOc\":[\"Buscar tablas, vistas, rutinas, triggers...\"],\"zUNMsr\":[\"Clave SSH\"],\"zXMRzb\":[\"Puerto SSH\"],\"zZgoXr\":[\"No hay tablas que coincidan\"],\"zaWbms\":[\"Revertir Cambios\"],\"zgClmU\":[\"Instalar Configuración\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Ingresar valor...\"],\"zvzN4C\":[\"Establecer como Activa\"],\"zzDlyQ\":[\"Éxito\"],\"zzMxrp\":[\"Editar config.json\"],\"zz_Wd_\":[\"Modo\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/fr/messages.po b/src/locales/fr/messages.po index eba73c35..2a0fcf5a 100644 --- a/src/locales/fr/messages.po +++ b/src/locales/fr/messages.po @@ -6,39 +6,5291 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: @lingui/cli\n" "Language: fr\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" +#: src/components/modals/NewRowModal.tsx +msgid "(Auto-generated)" +msgstr "(Généré automatiquement)" + +#. placeholder {0}: stats.blocked +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# blocked} other {# blocked}}" +msgstr "{0, plural, one {# bloqué} other {# bloqués}}" + +#. placeholder {0}: proc.children.length +#. placeholder {0}: stats.child_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# child process} other {# child processes}}" +msgstr "{0, plural, one {# processus enfant} other {# processus enfants}}" + +#. placeholder {0}: connections.length +#: src/pages/Connections.tsx +msgid "{0, plural, one {# connection} other {# connections}}" +msgstr "{0, plural, one {# connexion(s)} other {# connexion(s)}}" + +#. placeholder {0}: stats.errors +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# error} other {# errors}}" +msgstr "{0, plural, one {# erreur} other {# erreurs}}" + +#. placeholder {0}: stats.total +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# event} other {# events}}" +msgstr "{0, plural, one {# événement} other {# événements}}" + +#. placeholder {0}: queries.length +#: src/components/modals/ExplainSelectionModal.tsx +msgid "{0, plural, one {# explainable query found} other {# explainable queries found}}" +msgstr "{0, plural, one {# requêtes explicables trouvées} other {# requêtes explicables trouvées}}" + +#. placeholder {0}: parsed.warnings.length +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# parsing warning} other {# parsing warnings}}" +msgstr "{0, plural, one {# avertissements d'analyse} other {# avertissements d'analyse}}" + +#. placeholder {0}: queries.length +#: src/components/modals/QuerySelectionModal.tsx +msgid "{0, plural, one {# query found} other {# queries found}}" +msgstr "{0, plural, one {# requêtes trouvées} other {# requêtes trouvées}}" + +#. placeholder {0}: result.rows.length +#. placeholder {1}: executionTime != null ? Math.round(executionTime) : "—" +#. placeholder {2}: executionTime != null ? Math.round(executionTime) : "—" +#: src/components/notebook/ResultToolbar.tsx +msgid "{0, plural, one {# row · {1}ms} other {# rows · {2}ms}}" +msgstr "{0, plural, one {# lignes · {1} ms} other {# lignes · {2} ms}}" + +#. placeholder {0}: result.rows_inserted +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row imported into \"{tableName}\"} other {# rows imported into \"{tableName}\"}}" +msgstr "{0, plural, one {# lignes importées dans \"{tableName}\"} other {# lignes importées dans \"{tableName}\"}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row} other {# rows}}" +msgstr "{0, plural, one {# lignes} other {# lignes}}" + +#. placeholder {0}: visibleSessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "{0, plural, one {# session} other {# sessions}}" +msgstr "{0, plural, one {# session} other {# sessions}}" + +#. placeholder {0}: systemStats.process_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# system process running} other {# system processes running}}" +msgstr "{0, plural, one {# processus système en cours} other {# processus système en cours}}" + +#. placeholder {0}: tabs.length +#: src/components/modals/TabSwitcherModal.tsx +msgid "{0, plural, one {# tab} other {# tabs}}" +msgstr "{0, plural, one {# onglet} other {# onglets}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {Import # row} other {Import # rows}}" +msgstr "{0, plural, one {Importer # lignes} other {Importer # lignes}}" + +#. placeholder {0}: progress.statements_executed +#. placeholder {1}: progress.total_statements +#: src/components/modals/ImportDatabaseModal.tsx +msgid "{0} / {1} statements" +msgstr "{0} / {1} instructions" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "{0} API Key" +msgstr "Clé API {0}" + +#. placeholder {0}: selectedDatabasesState.length +#: src/components/modals/NewConnectionModal.tsx +msgid "{0} database(s) selected" +msgstr "{0} base(s) de données sélectionnée(s)" + +#. placeholder {0}: filteredItems.length +#: src/components/modals/QuickNavigatorModal.tsx +msgid "{0} elements" +msgstr "{0} éléments" + +#. placeholder {0}: approval.clientHint +#. placeholder {1}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "{0} on {1} — review and decide before it executes." +msgstr "{0} sur {1} — examinez avant exécution." + +#. placeholder {0}: activeTab.result.rows.length +#. placeholder {0}: entry.result!.rows.length +#. placeholder {0}: entry.result.rows.length +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "{0} rows retrieved" +msgstr "{0} lignes récupérées" + +#. placeholder {0}: selected.size +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "{0} selected" +msgstr "{0} sélectionnées" + +#. placeholder {0}: structuredFilters.length +#: src/components/ui/TableToolbar.tsx +msgid "{activeFilterCount} of {0} active" +msgstr "{activeFilterCount} sur {0} actifs" + +#: src/components/ui/DataGrid.tsx +msgid "{deleteRowCount, plural, one {Delete # row} other {Delete # rows}}" +msgstr "{deleteRowCount, plural, one {Supprimer # lignes} other {Supprimer # lignes}}" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "{label} is required" +msgstr "{label} est requis" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "{rowCount, plural, one {# row} other {# rows}}" +msgstr "{rowCount, plural, one {# lignes} other {# lignes}}" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "{totalLibraries} libraries" +msgstr "{totalLibraries} bibliothèques" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/db.sqlite" +msgstr "/chemin/absolu/vers/db.sqlite" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/folder" +msgstr "/chemin/absolu/vers/dossier" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "/path/to/id_rsa" +msgstr "/chemin/vers/id_rsa" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "↑↓ to navigate, Enter to open" +msgstr "↑↓ pour naviguer, Entrée pour ouvrir" + +#. placeholder {0}: previewResult.rows.length - 5 +#: src/components/modals/ViewEditorModal.tsx +msgid "+{0} more rows" +msgstr "+{0} lignes supplémentaires" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "1 element" +msgstr "1 élément" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "A database connection was lost" +msgstr "Une connexion à la base de données a été perdue" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "A new table will be created" +msgstr "Une nouvelle table sera créée" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "A restart is required to apply changes." +msgstr "Un redémarrage est nécessaire pour appliquer les changements." + +#: src/components/modals/CommunityModal.tsx +msgid "A star helps others discover the project" +msgstr "Une étoile aide d’autres personnes à découvrir le projet" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Accent color" +msgstr "Couleur d'accent" + +#: src/components/settings/AppearanceTab.tsx +msgid "Accept Suggestion with Enter" +msgstr "Accepter la suggestion avec Entrée" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Actions" +msgstr "" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Actions" +msgstr "Actions" + +#: src/pages/TaskManagerPage.tsx +msgctxt "taskManager" +msgid "Actions" +msgstr "Actions" + +#: src/components/connections/StatusBadge.tsx +msgid "Active" +msgstr "Active" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/pages/Editor.tsx +msgid "Active database" +msgstr "Base de données active" + +#: src/pages/TaskManagerPage.tsx +msgid "Active queries and connections through this plugin will be interrupted." +msgstr "Les requêtes et connexions actives via ce plugin seront interrompues." + +#: src/pages/McpPage.tsx +msgid "Activity" +msgstr "Activité" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual Rows" +msgstr "Lignes réelles" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual rows exceed estimate" +msgstr "Les lignes réelles dépassent l’estimation" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Add" +msgstr "Ajouter" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Add Column" +msgstr "Ajouter une colonne" + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Add Column" +msgstr "Ajouter une colonne" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Add Column" +msgstr "Ajouter une colonne" + +#: src/pages/Connections.tsx +msgid "Add Connection" +msgstr "Ajouter une connexion" + +#: src/components/ui/TableToolbar.tsx +msgid "Add filter" +msgstr "Ajouter un filtre" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Foreign Key" +msgstr "Ajouter une clé étrangère" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Index" +msgstr "Ajouter un index" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add Markdown Cell" +msgstr "Ajouter une cellule Markdown" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add SQL Cell" +msgstr "Ajouter une cellule SQL" + +#: src/components/ui/TableToolbar.tsx +msgid "add the first filter" +msgstr "ajouter le premier filtre" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Add this to your client config file manually if automatic install fails." +msgstr "Ajoutez ceci manuellement au fichier de configuration de votre client si l’installation automatique échoue." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add to Favorites" +msgstr "Ajouter aux favoris" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added Markdown cell {n}" +msgstr "Cellule Markdown {n} ajoutée" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added SQL cell {n}" +msgstr "Cellule SQL {n} ajoutée" + +#: src/components/settings/AppearanceTab.tsx +msgid "Adjust the base font size used throughout the application (10-20px)." +msgstr "Ajustez la taille de police de base utilisée dans toute l’application (10-20 px)." + +#: src/pages/Settings.tsx +msgid "AI" +msgstr "IA" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "AI" +msgstr "AI" + +#: src/components/settings/AiActivityPanel.tsx +#: src/pages/Settings.tsx +msgid "AI Activity" +msgstr "Activité IA" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "AI Analysis" +msgstr "Analyse IA" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "AI CLIENTS" +msgstr "CLIENTS IA" + +#: src/components/settings/AiTab.tsx +msgid "AI models refreshed from providers" +msgstr "Modèles IA actualisés depuis les fournisseurs" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Provider not configured. Please go to Settings > AI." +msgstr "Fournisseur IA non configuré. Veuillez aller dans Paramètres > IA." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Query Plan Analysis" +msgstr "Analyse IA du plan de requête" + +#: src/components/modals/AiApprovalModal.tsx +msgid "AI requested a database write" +msgstr "L'IA veut exécuter une écriture" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "AI Suggest" +msgstr "Suggérer avec IA" + +#: src/components/settings/PluginsTab.tsx +msgid "All" +msgstr "Tous" + +#: src/components/settings/LogsTab.tsx +msgid "All levels" +msgstr "Tous les niveaux" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All other connections stay read-only. Only the connections checked here may execute writes." +msgstr "Les autres restent en lecture seule. Seules celles cochées peuvent écrire." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All queries" +msgstr "Toutes les requêtes" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All statuses" +msgstr "Tous les statuts" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All tools" +msgstr "Tous les outils" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Allow" +msgstr "Autoriser" + +#: src/components/settings/AppearanceTab.tsx +msgid "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline." +msgstr "Autorise la touche Entrée (en plus de Tab) à accepter la suggestion d’autocomplétion active. Lorsqu’elle est désactivée, Entrée insère toujours un saut de ligne." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Allow writes from MCP" +msgstr "Autoriser les écritures via MCP" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Already exists" +msgstr "Existe déjà" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Alter View" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "An environment variable is present, but you can override it by setting a key above." +msgstr "Une variable d’environnement est présente, mais vous pouvez la remplacer en définissant une clé ci-dessus." + +#: src/components/modals/PluginInstallErrorModal.tsx +msgid "An error occurred while installing the plugin. See the details below." +msgstr "Une erreur s’est produite lors de l’installation du plugin. Voir les détails ci-dessous." + +#: src/components/modals/VisualExplainModal.tsx +msgid "Analyze" +msgstr "Analyser" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Analyze Data" +msgstr "Analyser les données" + +#: src/components/modals/VisualExplainModal.tsx +msgid "ANALYZE executes the query. Use with caution on data-modifying statements." +msgstr "ANALYZE exécute la requête. Utilisez-le avec prudence pour les instructions modifiant les données." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "Analyzing query plan with AI..." +msgstr "Analyse du plan de requête avec l’IA..." + +#: src/components/settings/AiTab.tsx +msgid "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable." +msgstr "La clé API est stockée en toute sécurité dans le trousseau système. Définir une clé ici remplace la variable d’environnement." + +#: src/pages/Settings.tsx +msgid "Appearance" +msgstr "Apparence" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Appearance" +msgstr "Apparence" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Appearance" +msgstr "Apparence" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Append rows" +msgstr "Ajouter des lignes" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Append to existing" +msgstr "Ajouter à existante" + +#: src/components/ui/FilterRow.tsx +msgid "Applied" +msgstr "Appliqué" + +#: src/components/ui/FilterRow.tsx +msgid "Apply" +msgstr "Appliquer" + +#: src/components/ui/TableToolbar.tsx +msgid "Apply All" +msgstr "Tout appliquer" + +#: src/pages/Editor.tsx +msgid "Apply to all" +msgstr "Appliquer à tout" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval gate" +msgstr "Validation manuelle" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Approval ID" +msgstr "ID validation" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval required" +msgstr "Validation requise" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Approve" +msgstr "Approuver" + +#: src/components/settings/LogsTab.tsx +msgid "Are you sure you want to clear all logs?" +msgstr "Voulez-vous vraiment effacer tous les logs ?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to clear all query history for this connection?" +msgstr "Voulez-vous vraiment effacer tout l’historique des requêtes pour cette connexion ?" + +#. placeholder {0}: column.name +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "" +"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +"\n" +"WARNING: This will permanently delete all data in this column. This action cannot be undone." +msgstr "" +"Voulez-vous vraiment supprimer la colonne \"{0}\" de la table \"{tableName}\" ?\n" +"\n" +"ATTENTION : toutes les données de cette colonne seront définitivement supprimées. Cette action est irréversible." + +#. placeholder {0}: group?.name +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete group \"{0}\"? Connections in this group will be moved to ungrouped." +msgstr "Voulez-vous vraiment supprimer le groupe \"{0}\" ? Les connexions de ce groupe seront déplacées vers Non groupées." + +#. placeholder {0}: queries.find((q) => q.id === favoriteDeleteConfirm)?.name ?? "" +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete query \"{0}\"?" +msgstr "Voulez-vous vraiment supprimer la requête \"{0}\" ?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete table \"{0}\"?" +msgstr "Voulez-vous vraiment supprimer la table \"{0}\" ?" + +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete this connection?" +msgstr "Voulez-vous vraiment supprimer cette connexion ?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete this query from history?" +msgstr "Voulez-vous vraiment supprimer cette requête de l’historique ?" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Are you sure you want to delete this SSH connection?" +msgstr "Voulez-vous vraiment supprimer cette connexion SSH ?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop trigger \"{0}\"?" +msgstr "" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop view \"{0}\"?" +msgstr "Voulez-vous vraiment supprimer la vue \"{0}\" ?" + +#. placeholder {0}: file.split(/[\\/]/).pop() +#: src/components/layout/ExplorerSidebar.tsx +msgid "" +"Are you sure you want to import \"{0}\"?\n" +"This may overwrite existing data." +msgstr "" +"Voulez-vous vraiment importer \"{0}\" ?\n" +"Cela peut écraser des données existantes." + +#: src/components/modals/ViewEditorModal.tsx +msgid "Are you sure you want to modify view \"{name}\"?" +msgstr "Voulez-vous vraiment modifier la vue \"{name}\" ?" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Are you sure you want to remove \"{pluginName}\"? This will delete the plugin files." +msgstr "Voulez-vous vraiment supprimer \"{pluginName}\" ? Cela supprimera les fichiers du plugin." + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Asc" +msgstr "Asc" + +#: src/components/modals/CreateTableModal.tsx +msgid "At least one column is required" +msgstr "Au moins une colonne est requise" + +#: src/components/modals/CreateIndexModal.tsx +msgid "At least one column must be selected" +msgstr "Au moins une colonne doit être sélectionnée" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere." +msgstr "Journal de chaque appel MCP et des requêtes en attente de validation. Stockage local." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Authentication Type" +msgstr "Type d’authentification" + +#: src/components/modals/NewRowModal.tsx +msgid "Auto" +msgstr "Auto" + +#: src/components/settings/LocalizationTab.tsx +msgid "Auto (System)" +msgstr "Auto (Système)" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Auto Increment" +msgstr "Auto Increment" + +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Auto paginated" +msgstr "Pagination automatique" + +#: src/components/settings/InfoTab.tsx +msgid "Automatically check for new versions when the app launches" +msgstr "Vérifier automatiquement les nouvelles versions au lancement de l’application" + +#: src/components/settings/PluginsTab.tsx +msgid "Available Plugins" +msgstr "Plugins disponibles" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below." +msgstr "Bloquer tout statement non-SELECT via MCP, sauf pour les connexions autorisées ci-dessous." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Blocked (read-only)" +msgstr "Bloquée (lecture seule)" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Brand-new Discord community!" +msgstr "Nouvelle communauté Discord !" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Breaking Changes" +msgstr "Changements incompatibles" + +#: src/components/settings/PluginsTab.tsx +msgid "Browse and install plugins from the registry." +msgstr "Parcourez et installez des plugins depuis le registre." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse file" +msgstr "Parcourir le fichier" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse folder" +msgstr "Parcourir le dossier" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Browse the direct open source dependencies used across the app, backend, and tooling." +msgstr "Parcourez les dépendances open source directes utilisées par l’application, le backend et l’outillage." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Browse..." +msgstr "Parcourir..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Hit" +msgstr "Buffers touchés" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Read" +msgstr "Buffers lus" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Bug Fixes" +msgstr "Corrections de bugs" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Built-in, not customizable" +msgstr "Intégré, non personnalisable" + +#: src/components/settings/PluginsTab.tsx +msgid "by" +msgstr "par" + +#: src/components/modals/NewConnectionModal.tsx +msgid "CA Certificate" +msgstr "" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "cancel" +msgstr "annuler" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/ConfirmModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/JsonViewerPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Cancel" +msgstr "Annuler" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Cannot display diagram without a connection ID." +msgstr "Impossible d’afficher le diagramme sans ID de connexion." + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "Cargo ecosystem" +msgstr "écosystème Cargo" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Certificate paths are optional. Leave empty to use system defaults." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Change" +msgstr "Modifier" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed chart (cell {n})" +msgstr "Graphique modifié (cellule {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed database (cell {n})" +msgstr "Base de données modifiée (cellule {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed parameters" +msgstr "Paramètres modifiés" + +#: src/components/notebook/CellChart.tsx +msgid "Chart" +msgstr "Graphique" + +#: src/components/modals/CommunityModal.tsx +msgid "Chat with the community, get help, suggest features" +msgstr "Discutez avec la communauté, obtenez de l’aide, proposez des fonctionnalités" + +#: src/components/settings/InfoTab.tsx +msgid "Check for Updates Now" +msgstr "Vérifier les mises à jour maintenant" + +#: src/components/settings/InfoTab.tsx +msgid "Check for updates on startup" +msgstr "Vérifier les mises à jour au démarrage" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Checking configuration..." +msgstr "Vérification de la configuration..." + +#: src/components/settings/InfoTab.tsx +msgid "Checking..." +msgstr "Vérification..." + +#: src/pages/TaskManagerPage.tsx +msgid "child process" +msgstr "processus enfant" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a connection..." +msgstr "Choisir une connexion..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a context..." +msgstr "Choisir un contexte..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a namespace..." +msgstr "Choisir un namespace..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a resource..." +msgstr "Choisir une ressource..." + +#: src/components/settings/AppearanceTab.tsx +msgid "Choose an independent theme for the SQL editor, or keep it in sync with the app theme." +msgstr "Choisissez un thème indépendant pour l’éditeur SQL ou gardez-le synchronisé avec le thème de l’application." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Choose image…" +msgstr "Choisir une image…" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Choose target..." +msgstr "Choisir la cible..." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default delimiter character used when copying or exporting rows as CSV." +msgstr "Choisissez le caractère séparateur par défaut utilisé lors de la copie ou de l’export des lignes en CSV." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default format when copying rows with Ctrl+C / Cmd+C." +msgstr "Choisissez le format par défaut lors de la copie des lignes avec Ctrl+C / Cmd+C." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default layout direction for ER diagrams" +msgstr "Choisissez la direction de disposition par défaut pour les diagrammes ER" + +#: src/components/settings/LocalizationTab.tsx +msgid "Choose your preferred language. 'Auto' will use your system language." +msgstr "Choisissez votre langue préférée. \"Auto\" utilisera la langue de votre système." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Clear" +msgstr "Effacer" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "common" +msgid "Clear" +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Clear" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Clear All History" +msgstr "Effacer tout l’historique" + +#: src/components/settings/LogsTab.tsx +msgid "Clear Logs" +msgstr "Effacer les logs" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Clear Query History" +msgstr "Effacer l’historique des requêtes" + +#: src/components/ui/DataGrid.tsx +msgid "Clear sort" +msgstr "Effacer le tri" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Click 'Run Preview' to see results" +msgstr "Cliquez sur \"Exécuter l’aperçu\" pour voir les résultats" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Click another emoji below to change." +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Click Load Databases to fetch available databases." +msgstr "" + +#: src/pages/Editor.tsx +msgid "Click to jump to page" +msgstr "Cliquer pour aller à la page" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Client" +msgstr "Client" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Certificate" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Key" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Clipboard column" +msgstr "Colonne du presse-papiers" + +#: src/components/connections/ActionButtons.tsx +msgid "Clone" +msgstr "Cloner" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/McpModal.tsx +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx #: src/components/modals/SchemaModal.tsx +#: src/components/modals/VisualExplainModal.tsx +#: src/pages/JsonViewerPage.tsx msgid "Close" +msgstr "Fermer" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close All Tabs" +msgstr "Fermer tous les onglets" + +#: src/components/ui/TableToolbar.tsx +msgid "Close filter panel (ESC)" +msgstr "Fermer le panneau de filtres (ESC)" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Other Tabs" +msgstr "Fermer les autres onglets" + +#: src/components/layout/SplitPaneLayout.tsx +msgid "Close panel" +msgstr "Fermer le panneau" + +#: src/components/ui/StackedResultItem.tsx +#: src/i18n/registries/shortcutLabels.ts +msgid "Close tab" +msgstr "Fermer l’onglet" + +#: src/components/modals/TabSwitcherModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tab" +msgstr "Fermer l’onglet" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Left" +msgstr "Fermer les onglets à gauche" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Right" +msgstr "Fermer les onglets à droite" + +#: src/components/ui/JsonInput.tsx +msgid "Code" +msgstr "Code" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Collapse" +msgstr "Réduire" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Collapse all" +msgstr "Tout réduire" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Collapse All" +msgstr "Tout réduire" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Collapse Cell" +msgstr "Réduire la cellule" + +#: src/pages/TaskManagerPage.tsx +msgid "Collapse child processes" +msgstr "Réduire les processus enfants" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Collapsed/expanded cells" +msgstr "Cellules réduites/développées" + +#: src/components/settings/LogsTab.tsx +msgid "Collect application logs in memory for debugging" +msgstr "Collecter les logs de l’application en mémoire pour le débogage" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Column name is required" +msgstr "Le nom de la colonne est requis" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Column Schema" +msgstr "Schéma des colonnes" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "columns" +msgstr "colonnes" + +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +msgid "Columns" +msgstr "Colonnes" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Comma (,)" +msgstr "Virgule (,)" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Config file not found (create manually)" +msgstr "Fichier de configuration introuvable (à créer manuellement)" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "config.json" +msgstr "config.json" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Configuration installed successfully for {clientName}! Restart the app to apply." +msgstr "Configuration installée avec succès pour {clientName} ! Redémarrez l’application pour l’appliquer." + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Configure destination" +msgstr "Configurer la destination" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Configure Interpreter" +msgstr "Configurer l’interpréteur" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSH Inline" +msgstr "Configurer SSH en ligne" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSL/TLS for secure database connections (optional)." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Configured" +msgstr "Configuré" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Confirm" +msgstr "Confirmer" + +#: src/pages/Connections.tsx +msgid "Confirm Delete" +msgstr "Confirmer la suppression" + +#: src/components/connections/ActionButtons.tsx +msgid "Connect" +msgstr "Connecter" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Connect Tabularis to Claude Desktop, Cursor, and more" +msgstr "Connectez Tabularis à Claude Desktop, Cursor et plus encore" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connect Timeout" +msgstr "Délai d’expiration de connexion" + +#: src/pages/Editor.tsx +msgid "Connected" +msgstr "Connecté" + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connection" +msgstr "connexion" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Connection" +msgstr "Connexion" + +#: src/components/settings/GeneralTab.tsx +msgid "Connection Health Check" +msgstr "Vérification de l’état des connexions" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "Connection Lost" +msgstr "Connexion perdue" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection Name" +msgstr "Nom de la connexion" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Connection name is required" +msgstr "Le nom de la connexion est requis" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Connection name is required" +msgstr "Le nom de la connexion est requis" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Connection String" +msgstr "" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection test failed" +msgstr "Échec du test de connexion" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connection timeout in milliseconds." +msgstr "Délai d’expiration de connexion en millisecondes." + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connections" +msgstr "connexions" + +#: src/components/layout/Sidebar.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/Connections.tsx +msgid "Connections" +msgstr "Connexions" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Container Port" +msgstr "Port du conteneur" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Context" +msgstr "Contexte" + +#: src/pages/Editor.tsx +msgid "Convert to Console" +msgstr "Convertir en console" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Copied to clipboard" +msgstr "Copié dans le presse-papier" + +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copied!" +msgstr "Copié !" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copy" +msgstr "Copier" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as `column`" +msgstr "Copier comme `column`" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as table.column" +msgstr "Copier comme table.column" + +#: src/components/ui/DataGrid.tsx +msgid "Copy Cell" +msgstr "Copier la cellule" + +#: src/components/ui/DataGrid.tsx +msgid "Copy column name" +msgstr "Copier le nom de colonne" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy error message" +msgstr "Copier le message d’erreur" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Copy name" +msgstr "Copier le nom" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Copy Name" +msgstr "Copier le nom" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Copy query" +msgstr "Copier la requête" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy Query" +msgstr "Copier la requête" + +#: src/components/ui/DataGrid.tsx +msgid "Copy selected row(s)" +msgstr "Copier la/les ligne(s) sélectionnée(s)" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Copy selection" +msgstr "Copier la sélection" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Copy SQL" +msgstr "Copier le SQL" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Cost" +msgstr "Coût" + +#: src/utils/explainPlan.ts +msgid "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL." +msgstr "Le coût, le temps et les estimations de lignes sont souvent indisponibles comparés à PostgreSQL et MySQL." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Count rows" +msgstr "Compter les lignes" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Count Rows" +msgstr "Compter les lignes" + +#: src/pages/TaskManagerPage.tsx +msgid "CPU" +msgstr "CPU" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create a new database trigger" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Create a new database view" +msgstr "Créer une nouvelle vue de base de données" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk" +msgid "Create Foreign Key" +msgstr "Créer une clé étrangère" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex" +msgid "Create Index" +msgstr "Créer un index" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Create new column" +msgstr "Créer une nouvelle colonne" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Create New SSH Connection" +msgstr "Créer une nouvelle connexion SSH" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Create new table" +msgstr "Créer nouvelle table" + +#: src/components/modals/CreateTableModal.tsx +msgid "Create New Table" +msgstr "Créer une nouvelle table" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New View" +msgstr "Créer une nouvelle vue" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Create Table" +msgstr "Créer une table" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Create Table" +msgstr "Créer la table" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create Trigger" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Create View" +msgstr "Créer une vue" + +#: src/pages/Connections.tsx +msgid "Create your first connection" +msgstr "Créez votre première connexion" + +#: src/pages/Connections.tsx +msgid "Create your first connection to get started." +msgstr "Créez votre première connexion pour commencer." + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "CSV Delimiter" +msgstr "Délimiteur CSV" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Ctrl+Tab" +msgstr "Ctrl+Tab" + +#: src/components/settings/LogsTab.tsx +msgid "Current Logs" +msgstr "Logs actuels" + +#: src/components/settings/InfoTab.tsx +msgid "Current Version" +msgstr "Version actuelle" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Custom" +msgstr "Personnalisé" + +#: src/components/settings/FontPicker.tsx +msgid "Custom Font" +msgstr "Police personnalisée" + +#: src/components/settings/AiTab.tsx +msgid "Custom key deleted successfully" +msgstr "Clé personnalisée supprimée avec succès" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language." +msgstr "Personnalisez les instructions pour l’analyse IA des plans EXPLAIN. Utilisez {LANGUAGE} pour la langue de sortie." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message." +msgstr "Personnalisez les instructions pour la génération IA des noms de cellules de notebook. Le contenu de la cellule (SQL ou Markdown) est envoyé comme message utilisateur." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message." +msgstr "Personnalisez les instructions pour la génération IA du nom des onglets de résultats. La requête SQL est envoyée comme message utilisateur." + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Data (INSERT)" +msgstr "Données (INSERT)" + +#: src/components/settings/GeneralTab.tsx +msgid "Data Editor" +msgstr "Éditeur de données" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Data Grid" +msgstr "Grille de données" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "Data Preview" +msgstr "Aperçu des données" + +#: src/components/modals/QueryModal.tsx +msgid "Database" +msgstr "Base de données" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Database exported successfully" +msgstr "Base de données exportée avec succès" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name" +msgstr "Nom de la base de données" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Name" +msgstr "Nom de la base de données" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name is required" +msgstr "Le nom de la base de données est requis" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Type" +msgstr "Type de base de données" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Databases" +msgstr "Bases de données" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "DDL" +msgstr "DDL" + +#: src/components/settings/LogsTab.tsx +msgid "Debug" +msgstr "Debug" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Default" +msgstr "Défaut" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Default" +msgstr "Valeur par défaut" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Default Copy Format" +msgstr "Format de copie par défaut" + +#: src/components/settings/GeneralTab.tsx +msgid "Default Layout" +msgstr "Disposition par défaut" + +#: src/components/settings/AiTab.tsx +msgid "Default Model" +msgstr "Modèle par défaut" + +#: src/components/settings/AiTab.tsx +msgid "Default Provider" +msgstr "Fournisseur par défaut" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Default Value" +msgstr "Valeur par défaut" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Delete" +msgstr "DELETE" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Delete" +msgstr "Supprimer" + +#: src/components/modals/ConfirmModal.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Delete" +msgstr "Supprimer" + +#: src/components/connections/ActionButtons.tsx +msgctxt "connections" +msgid "Delete" +msgstr "Supprimer" + +#: src/pages/Connections.tsx +msgctxt "groups" +msgid "Delete" +msgstr "Supprimer" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +msgctxt "sidebar" +msgid "Delete" +msgstr "Supprimer" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Delete" +msgstr "Supprimer" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Delete Cell" +msgstr "Supprimer la cellule" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete column" +msgstr "Supprimer la colonne" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Delete Column" +msgstr "Supprimer la colonne" + +#: src/components/settings/AiTab.tsx +msgid "Delete custom key and revert to environment variable (if present)" +msgstr "Supprimer la clé personnalisée et revenir à la variable d’environnement (si présente)" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete FK" +msgstr "Supprimer la clé étrangère" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete foreign key \"{name}\"?" +msgstr "Supprimer la clé étrangère \"{name}\" ?" + +#: src/pages/Connections.tsx +msgid "Delete Group" +msgstr "Supprimer le groupe" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Index" +msgstr "Supprimer l’index" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete index \"{name}\"?" +msgstr "Supprimer l’index \"{name}\" ?" + +#. placeholder {0}: pendingDelete?.title ?? "" +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Delete notebook \"{0}\"? This cannot be undone." +msgstr "Supprimer le notebook « {0} » ? Cette action est irréversible." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Query" +msgstr "Supprimer la requête" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Delete Row" +msgstr "Supprimer la ligne" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete selected" +msgstr "Supprimer la sélection" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Table" +msgstr "Supprimer la table" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Delete the entire AI activity history? This cannot be undone." +msgstr "Supprimer tout l'historique d'activité IA ? Action irréversible." + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Deleted cell {n}" +msgstr "Cellule {n} supprimée" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Denied" +msgstr "Refusée" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Deny" +msgstr "Refuser" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Desc" +msgstr "Desc" + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Deselect All" +msgstr "Tout désélectionner" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Deselect All" +msgstr "Tout désélectionner" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Deselect All" +msgstr "Tout désélectionner" + +#: src/components/ui/FilterRow.tsx +msgid "Deselect from Apply All" +msgstr "Désélectionner de Tout appliquer" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Details" +msgstr "Détails" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Detect JSON in text columns" +msgstr "Détecter le JSON dans les colonnes texte" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Diff" +msgstr "" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Direct dependencies declared in package.json and src-tauri/Cargo.toml." +msgstr "Dépendances directes déclarées dans package.json et src-tauri/Cargo.toml." + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Directly edit the raw configuration file. A restart is required to apply changes." +msgstr "Modifiez directement le fichier de configuration brut. Un redémarrage est nécessaire pour appliquer les changements." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disable" +msgstr "Désactiver" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disabled" +msgstr "" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Disconnect" +msgstr "Déconnecter" + +#: src/pages/Editor.tsx +msgid "Disconnected" +msgstr "Déconnecté" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk R/W" +msgstr "Lecture/écriture disque" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Read/s" +msgstr "Lecture disque/s" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Write/s" +msgstr "Écriture disque/s" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgctxt "discordCallout" +msgid "Dismiss" +msgstr "Fermer" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgctxt "sidebar" +msgid "Dismiss" +msgstr "Fermer" + +#: src/components/settings/AppearanceTab.tsx +msgid "Display line numbers in the editor gutter." +msgstr "Affiche les numéros de ligne dans la marge de l’éditeur." + +#: src/components/settings/GeneralTab.tsx +msgid "Display the welcome screen when the application starts." +msgstr "Afficher l’écran d’accueil au démarrage de l’application." + +#: src/components/settings/PluginsTab.tsx +msgid "Downgrade to" +msgstr "Rétrograder vers" + +#: src/components/ui/BlobInput.tsx +msgid "Download" +msgstr "Télécharger" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Download & Install" +msgstr "Télécharger et installer" + +#: src/components/ui/BlobInput.tsx +msgid "Download unavailable - only preview loaded" +msgstr "Téléchargement indisponible - seul l’aperçu est chargé" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Downloading..." +msgstr "Téléchargement..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgctxt "update" +msgid "Downloading..." +msgstr "Téléchargement..." + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Driver Notes" +msgstr "Notes du pilote" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop View" +msgstr "Supprimer la vue" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Dump Database" +msgstr "Exporter la base de données" + +#: src/components/ui/FilterRow.tsx +msgid "Duplicate filter" +msgstr "Dupliquer le filtre" + +#: src/components/ui/DataGrid.tsx +msgid "Duplicate Row" +msgstr "Dupliquer la ligne" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Duration" +msgstr "Durée" + +#: src/components/modals/ViewEditorModal.tsx +msgid "e.g. active_users, order_summary" +msgstr "ex. active_users, order_summary" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. before_insert_user" +msgstr "" + +#: src/components/modals/AiApprovalModal.tsx +msgid "e.g. Looks risky on prod, please confirm…" +msgstr "ex. Risqué en prod, confirmez…" + +#: src/components/modals/NewConnectionModal.tsx +msgid "e.g. mysql://user:pass@localhost:3306/db" +msgstr "" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "e.g. python3" +msgstr "ex. python3" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "e.g. sales_data" +msgstr "ex. donnees_ventes" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. users" +msgstr "" + +#: src/components/modals/CreateTableModal.tsx +msgid "e.g. users, orders, products" +msgstr "ex. users, orders, products" + +#: src/components/settings/FontPicker.tsx +msgid "e.g., Comic Sans MS" +msgstr "ex. Comic Sans MS" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Edit" +msgstr "Modifier" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Edit before approving" +msgstr "Modifier avant d'approuver" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Edit cell name" +msgstr "Modifier le nom de la cellule" + +#: src/pages/Settings.tsx +msgid "Edit config.json" +msgstr "Modifier config.json" + +#: src/components/notebook/NotebookHistoryPanel.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Edit history" +msgstr "Historique des modifications" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Edit Row" +msgstr "Modifier la ligne" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Edit Schemas" +msgstr "Modifier les schémas" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Edit Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Edit View" +msgstr "Modifier la vue" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited cell {n}" +msgstr "Cellule {n} modifiée" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited notebook" +msgstr "Notebook modifié" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing a trigger requires dropping and recreating it. Continue modifying \"{name}\"?" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing trigger: {name}" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Editing view: {name}" +msgstr "Modification de la vue : {name}" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Editor" +msgstr "Éditeur" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Family" +msgstr "Police de l’éditeur" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Size" +msgstr "Taille de police de l’éditeur" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Theme" +msgstr "Thème de l’éditeur" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Elapsed time" +msgstr "Temps écoulé" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Emoji" +msgstr "Emoji" + +#: src/utils/explainPlan.ts +msgid "Enable ANALYZE to inspect actual rows, timing, loops, and buffers." +msgstr "Activez ANALYZE pour inspecter les lignes réelles, le temps, les boucles et les buffers." + +#: src/components/settings/LogsTab.tsx +msgid "Enable Logging" +msgstr "Activer les logs" + +#: src/components/settings/PluginsTab.tsx +msgid "Enabled" +msgstr "Activés" + +#: src/components/settings/AiTab.tsx +msgid "Endpoint URL" +msgstr "URL du point de terminaison" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Enter {0} Key" +msgstr "Saisir la clé {0}" + +#: src/components/ui/GeometryInput.tsx +msgid "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))" +msgstr "Saisissez une fonction SQL complète (ex. ST_GeomFromText('POINT(30 40)', 4326))" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain plan analysis prompt..." +msgstr "Saisir le prompt d’analyse de plan EXPLAIN..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain prompt..." +msgstr "Saisir le prompt d’explication..." + +#: src/components/settings/FontPicker.tsx +msgid "Enter font name above" +msgstr "Saisissez le nom de la police ci-dessus" + +#: src/components/ui/JsonInput.tsx +msgid "Enter JSON..." +msgstr "Saisir du JSON..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter key passphrase if encrypted" +msgstr "Saisissez la phrase secrète si la clé est chiffrée" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter notebook cell name prompt..." +msgstr "Saisir le prompt de nom de cellule de notebook..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter password" +msgstr "Saisir le mot de passe" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter query tab name prompt..." +msgstr "Saisir le prompt de nom d’onglet de requête..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter SSH password" +msgstr "Saisir le mot de passe SSH" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter system prompt..." +msgstr "Saisir le prompt système..." + +#: src/components/settings/AiTab.tsx +msgid "Enter the exact model name for your OpenAI-compatible provider." +msgstr "Saisissez le nom exact du modèle pour votre fournisseur compatible OpenAI." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter username" +msgstr "Saisir le nom d'utilisateur" + +#: src/components/ui/FieldEditor.tsx +#: src/components/ui/RowEditorSidebar.tsx +msgid "Enter value..." +msgstr "Saisir une valeur..." + +#: src/components/settings/GeneralTab.tsx +msgid "entries" +msgstr "entrées" + +#: src/components/settings/AiTab.tsx +msgid "Environment" +msgstr "Environnement" + +#: src/components/settings/GeneralTab.tsx +msgid "ER Diagram" +msgstr "Diagramme ER" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Error" +msgstr "Erreur" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Error" +msgstr "Erreur" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgctxt "common" +msgid "Error" +msgstr "Erreur" + +#: src/components/settings/LogsTab.tsx +msgctxt "settings" +msgid "Error" +msgstr "Erreur" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgctxt "settings" +msgid "Error Details" +msgstr "Détails de l’erreur" + +#: src/components/modals/QuickNavigatorModal.tsx +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor" +msgid "Esc to close" +msgstr "Échap pour fermer" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Est. Rows" +msgstr "Lignes estimées" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate exceeds actual rows" +msgstr "L’estimation dépasse les lignes réelles" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate Gap" +msgstr "Écart d’estimation" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Event details" +msgstr "Détails de l'événement" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Events" +msgstr "Événements" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity" +msgid "Events" +msgstr "Événements" + +#: src/components/modals/TriggerEditorModal.tsx +msgctxt "triggers" +msgid "Events" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Execute" +msgstr "Exécuter" + +#: src/components/ui/ResultEntryContent.tsx +#: src/pages/Editor.tsx +msgid "Execute a query to see results" +msgstr "Exécutez une requête pour voir les résultats" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Execute all SQL cells top to bottom" +msgstr "Exécuter toutes les cellules SQL de haut en bas" + +#: src/components/notebook/SqlCellResult.tsx +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Executing query..." +msgstr "Exécution de la requête..." + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Execution" +msgstr "Exécution" + +#: src/components/notebook/CellHistoryPanel.tsx +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Execution History" +msgstr "Historique d’exécution" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Exit Fullscreen" +msgstr "Quitter le plein écran" + +#: src/components/modals/AiApprovalModal.tsx +msgctxt "aiApproval" +msgid "Expand" +msgstr "Agrandir" + +#: src/components/ui/JsonInput.tsx +msgctxt "jsonInput" +msgid "Expand" +msgstr "Développer" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Expand all" +msgstr "Tout développer" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Expand All" +msgstr "Tout développer" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Expand Cell" +msgstr "Développer la cellule" + +#: src/components/layout/Sidebar.tsx +msgid "Expand Explorer" +msgstr "Développer l’explorateur" + +#: src/components/ui/AiDropdownButton.tsx +msgid "Explain" +msgstr "Expliquer" + +#. placeholder {0}: approval.explainError +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN failed: {0}" +msgstr "EXPLAIN a échoué : {0}" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain focused" +msgstr "expliquer la sélection" + +#: src/components/modals/VisualExplainModal.tsx +msgid "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained." +msgstr "EXPLAIN est uniquement pris en charge pour les instructions DML (SELECT, INSERT, UPDATE, DELETE). Les instructions DDL comme CREATE, DROP ou ALTER ne peuvent pas être expliquées." + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain Nth" +msgstr "expliquer la n-ième" + +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +msgid "Explain Plan" +msgstr "Expliquer le plan" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Explain Plan Analysis Prompt" +msgstr "Prompt d’analyse de plan EXPLAIN" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Explain this query" +msgstr "Expliquer cette requête" + +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN unavailable for this query." +msgstr "EXPLAIN indisponible." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Explorer" +msgstr "Explorateur" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Export" +msgstr "Exporter" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as CSV" +msgstr "Exporter en CSV" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export as HTML" +msgstr "Exporter en HTML" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as JSON" +msgstr "Exporter en JSON" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Export as Notebook" +msgstr "Exporter en Notebook" + +#: src/pages/Connections.tsx +msgctxt "connections" +msgid "Export Connections" +msgstr "Exporter les connexions" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export CSV" +msgstr "" + +#: src/components/notebook/NotebookView.tsx +msgid "Export failed" +msgstr "" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Export failed: " +msgstr "Échec de l’export : " + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export JSON" +msgstr "" + +#: src/components/settings/LogsTab.tsx +msgid "Export Logs" +msgstr "Exporter les logs" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export Notebook" +msgstr "Exporter le notebook" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Exported to {target}" +msgstr "Exporté vers {target}" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Exporting..." +msgstr "Exportation..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Extra" +msgstr "Suppléments" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Fail with error" +msgstr "Erreur" + +#: src/components/notebook/RunAllSummary.tsx +msgid "failed" +msgstr "échouées" + +#. placeholder {0}: conn.name +#: src/pages/Connections.tsx +msgid "Failed to connect to {0}. Please check your settings or ensuring the database is running." +msgstr "Échec de connexion à {0}. Vérifiez vos paramètres ou assurez-vous que la base de données est en cours d’exécution." + +#: src/pages/Connections.tsx +msgid "Failed to create group" +msgstr "Échec de création du groupe" + +#: src/pages/Editor.tsx +msgid "Failed to create new row: " +msgstr "Échec de création de la nouvelle ligne : " + +#: src/components/modals/CreateTableModal.tsx +msgid "Failed to create table: " +msgstr "Échec de la création de la table : " + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Failed to delete column: " +msgstr "Échec de suppression de la colonne : " + +#: src/pages/Connections.tsx +msgid "Failed to delete group" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete index: " +msgstr "Échec de suppression de l’index : " + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to delete SSH connection" +msgstr "Échec de suppression de la connexion SSH" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete table: " +msgstr "Échec de suppression de la table : " + +#: src/pages/Connections.tsx +msgid "Failed to disconnect from database" +msgstr "Échec de la déconnexion de la base de données" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to drop existing trigger: " +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop trigger: " +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop view: " +msgstr "Échec de suppression de la vue : " + +#: src/pages/Connections.tsx +msgid "Failed to duplicate connection" +msgstr "Échec de duplication de la connexion" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get routine definition: " +msgstr "Échec de récupération de la définition de la routine : " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get trigger definition: " +msgstr "" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to insert row: " +msgstr "Échec de l’insertion de la ligne : " + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to load databases. Check your credentials." +msgstr "Échec du chargement des bases de données. Vérifiez vos identifiants." + +#: src/components/settings/PluginsTab.tsx +msgid "Failed to load registry" +msgstr "Échec de chargement du registre" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to load schema: " +msgstr "Échec du chargement du schéma : " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to load schemas" +msgstr "Échec du chargement des schémas" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to load trigger definition: " +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to load view definition: " +msgstr "Échec du chargement de la définition de la vue : " + +#: src/pages/Connections.tsx +msgid "Failed to move connection" +msgstr "" + +#: src/pages/Editor.tsx +msgid "Failed to process insertions: " +msgstr "Échec du traitement des insertions : " + +#: src/components/settings/AiTab.tsx +msgid "Failed to refresh models" +msgstr "Échec de l’actualisation des modèles" + +#: src/pages/Connections.tsx +msgid "Failed to rename group" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to save connection" +msgstr "Échec de l’enregistrement de la connexion" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to save SSH connection" +msgstr "Échec de l’enregistrement de la connexion SSH" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to save trigger: " +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to save view: " +msgstr "Échec de l’enregistrement de la vue : " + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Failed: " +msgstr "Échec : " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Favorites" +msgstr "Favoris" + +#: src/components/modals/NewConnectionModal.tsx +msgid "File Path" +msgstr "Chemin du fichier" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Filter" +msgstr "Filtre" + +#: src/components/settings/LogsTab.tsx +msgid "Filter by level" +msgstr "Filtrer par niveau" + +#: src/components/ui/TableToolbar.tsx +msgid "Filter conditions" +msgstr "Conditions de filtre" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Filter databases..." +msgstr "Filtrer les bases de données..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter tables..." +msgstr "Filtrer les tables..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter triggers..." +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Filters" +msgstr "Filtres" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +msgid "First row as header" +msgstr "Première ligne comme en-tête" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "FK Name (Optional)" +msgstr "Nom de la clé étrangère (optionnel)" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focus on Table" +msgstr "Focaliser sur la table" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focused on" +msgstr "Focalisé sur" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Folder Path" +msgstr "Chemin du dossier" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Family" +msgstr "Famille de police" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Size" +msgstr "Taille de police" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill" +msgstr "Forcer l’arrêt" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill Plugin Process" +msgstr "Forcer l’arrêt du processus du plugin" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "foreign keys" +msgstr "clés étrangères" + +#: src/components/ui/JsonInput.tsx +msgid "Format" +msgstr "Formater" + +#: src/components/ui/FilterRow.tsx +msgid "from" +msgstr "de" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dependencies" +msgstr "Dépendances frontend" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dev Dependencies" +msgstr "Dépendances de développement frontend" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Fullscreen" +msgstr "Plein écran" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Functions" +msgstr "Fonctions" + +#: src/pages/Settings.tsx +msgid "General" +msgstr "Général" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgctxt "editor" +msgid "General" +msgstr "Général" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "General" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "General" +msgstr "Général" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generate name with AI" +msgstr "Générer un nom avec l’IA" + +#: src/components/notebook/NotebookOutline.tsx +msgid "Generate names for unnamed cells with AI" +msgstr "Générer des noms IA pour les cellules sans nom" + +#: src/components/ui/AiDropdownButton.tsx +msgctxt "ai" +msgid "Generate SQL" +msgstr "Générer du SQL" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Generate SQL" +msgstr "Générer le SQL" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Generate SQL templates" +msgstr "Générer des modèles SQL" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Generated SQL Preview" +msgstr "" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generated SQL: {tableName}" +msgstr "SQL généré : {tableName}" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generating name..." +msgstr "Génération du nom..." + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generating SQL..." +msgstr "Génération du SQL..." + +#: src/components/modals/WhatsNewModal.tsx +msgid "Got it" +msgstr "Compris" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Graph" +msgstr "Graphe" + +#: src/pages/Connections.tsx +msgid "Grid view" +msgstr "Vue grille" + +#: src/pages/Connections.tsx +msgid "Group name" +msgstr "Nom du groupe" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Guided" +msgstr "" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Hash Cond." +msgstr "Condition hash" + +#: src/components/modals/CommunityModal.tsx +msgid "Help tabularis grow" +msgstr "Aidez tabularis à grandir" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Hide overview" +msgstr "Masquer la vue d’ensemble" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Highest Cost" +msgstr "Coût le plus élevé" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "History" +msgstr "Historique" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Horizontal" +msgstr "Horizontale" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Host" +msgstr "Hôte" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "How long the MCP subprocess will wait for the user's decision before failing the request." +msgstr "Temps d'attente avant échec." + +#: src/components/settings/LogsTab.tsx +msgid "How many logs to keep in memory (1-10000)" +msgstr "Combien de logs conserver en mémoire (1-10000)" + +#: src/components/settings/GeneralTab.tsx +msgid "How often to check if active connections are still alive. Set to 0 to disable." +msgstr "À quelle fréquence vérifier si les connexions actives sont toujours vivantes. Définissez 0 pour désactiver." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Icon" +msgstr "Icône" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "If exists" +msgstr "Si existe" + +#: src/utils/explainPlan.ts +msgid "If timing is missing, the server likely returned an estimate-only plan." +msgstr "Si le temps manque, le serveur a probablement renvoyé un plan uniquement estimé." + +#: src/components/settings/InfoTab.tsx +msgid "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo." +msgstr "Si vous aimez tabularis et souhaitez voir davantage de fonctionnalités, pensez à soutenir le projet en contribuant au code, en signalant des bugs ou en mettant une étoile au dépôt." + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Image" +msgstr "Image" + +#: src/components/ui/BlobInput.tsx +msgid "Image preview" +msgstr "Aperçu de l’image" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import cancelled" +msgstr "Import annulé" + +#: src/pages/Connections.tsx +msgid "Import Connections" +msgstr "Importer les connexions" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import Database" +msgstr "Importer une base de données" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed" +msgstr "Échec de l’import" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed: " +msgstr "Échec de l’import : " + +#: src/i18n/registries/shortcutLabels.ts +msgid "Import from Clipboard" +msgstr "Importer depuis le Presse-papiers" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Import from Clipboard" +msgstr "Importer depuis le Presse-papiers" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Import from Clipboard..." +msgstr "Importer depuis le Presse-papiers..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Import Notebook" +msgstr "Importer le notebook" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Importing from" +msgstr "Import depuis" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Importing..." +msgstr "Importation..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Index Cond." +msgstr "Condition d’index" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index Name" +msgstr "Nom de l’index" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index name is required" +msgstr "Le nom de l’index est requis" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "indexes" +msgstr "index" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Info" +msgstr "Infos" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Initial version" +msgstr "Version initiale" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Inline" +msgstr "En ligne" + +#: src/components/modals/NewRowModal.tsx +msgid "Insert" +msgstr "Insérer" + +#: src/components/ui/DataGrid.tsx +msgid "Insert Current Timestamp" +msgstr "Insérer l'horodatage actuel" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Insert to Editor" +msgstr "Insérer dans l’éditeur" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Inspect structure" +msgstr "Inspecter la structure" + +#: src/components/settings/PluginsTab.tsx +msgid "Install" +msgstr "Installer" + +#: src/pages/TaskManagerPage.tsx +msgid "Install and enable plugins to see them here" +msgstr "Installez et activez des plugins pour les voir ici" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Install Config" +msgstr "Installer la configuration" + +#: src/components/settings/PluginsTab.tsx +msgid "Install extensions, manage plugin drivers, and keep runtime settings under control." +msgstr "Installez des extensions, gérez les pilotes de plugins et gardez les paramètres d'exécution sous contrôle." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installation Failed" +msgstr "Échec de l’installation" + +#: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings" +msgid "Installation Failed" +msgstr "Échec de l’installation" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installed" +msgstr "Installé" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Installed" +msgstr "Installés" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Installing..." +msgstr "Installation..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language." +msgstr "Instructions pour l’explication de requêtes par IA. Utilisez {LANGUAGE} comme espace réservé pour la langue de sortie." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure." +msgstr "Instructions pour la génération SQL par IA. Utilisez {SCHEMA} comme espace réservé pour la structure de la base de données." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Interpreter" +msgstr "Interpréteur" + +#: src/components/ui/JsonInput.tsx +msgid "Invalid JSON" +msgstr "JSON invalide" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Invalid notebook file format" +msgstr "Format de fichier notebook invalide" + +#: src/components/notebook/ParamsPanel.tsx +msgid "Invalid parameter name" +msgstr "Nom de paramètre invalide" + +#: src/components/modals/CommunityModal.tsx +msgid "Join Discord" +msgstr "Rejoindre Discord" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Join now" +msgstr "Rejoindre maintenant" + +#: src/components/modals/CommunityModal.tsx +msgid "Join the Community" +msgstr "Rejoindre la communauté" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Join Type" +msgstr "Type de jointure" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "Clé" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Key file" +msgstr "Fichier de clé" + +#: src/components/settings/ShortcutsTab.tsx +#: src/pages/Settings.tsx +msgid "Keyboard Shortcuts" +msgstr "Raccourcis clavier" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "keys" +msgstr "clés" + +#: src/pages/TaskManagerPage.tsx +msgid "Kill" +msgstr "Tuer" + +#: src/pages/TaskManagerPage.tsx +msgid "Killing" +msgstr "Tuer" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Kind" +msgstr "Type" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Kubernetes Connections" +msgstr "Connexions Kubernetes" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Kubernetes context is required" +msgstr "Le contexte Kubernetes est requis" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Kubernetes is not available for this driver." +msgstr "Kubernetes n'est pas disponible pour ce pilote." + +#: src/components/notebook/CellChart.tsx +msgid "Label" +msgstr "Étiquette" + +#: src/components/settings/LocalizationTab.tsx +msgid "Language" +msgstr "Langue" + +#: src/utils/explainPlan.ts +msgid "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well." +msgstr "De grands écarts d’estimation indiquent généralement des statistiques obsolètes ou des prédicats mal modélisés par le planificateur." + +#: src/components/modals/CreateTableModal.tsx +msgid "Len" +msgstr "Longueur" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Length" +msgstr "Longueur" + +#: src/components/settings/LogsTab.tsx +msgid "Level" +msgstr "Niveau" + +#: src/components/settings/GeneralTab.tsx +msgid "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended)." +msgstr "Limite le nombre de lignes récupérées par requête afin d’éviter les problèmes de performance. Définissez 0 pour désactiver la limite (non recommandé)." + +#: src/components/settings/AppearanceTab.tsx +msgid "Line Height" +msgstr "Hauteur de ligne" + +#: src/pages/Connections.tsx +msgid "List view" +msgstr "Vue liste" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Load Databases" +msgstr "Charger les bases de données" + +#: src/pages/Editor.tsx +msgid "Load row count" +msgstr "Charger le nombre de lignes" + +#: src/pages/VisualExplainPage.tsx +msgid "Loading explain plan…" +msgstr "Chargement du plan d'exécution…" + +#: src/components/settings/PluginsTab.tsx +msgid "Loading plugin registry..." +msgstr "Chargement du registre des plugins..." + +#: src/pages/TaskManagerPage.tsx +msgid "Loading processes…" +msgstr "Chargement des processus…" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarRoutineItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "Chargement du schéma..." + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Loading trigger definition..." +msgstr "" + +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Loading..." +msgstr "Chargement..." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Local Column" +msgstr "Colonne locale" + +#: src/components/settings/LocalizationTab.tsx +#: src/pages/Settings.tsx +msgid "Localization" +msgstr "Localisation" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Lock query" +msgstr "Verrouiller" + +#: src/components/settings/LogsTab.tsx +msgid "Log Settings" +msgstr "Paramètres des logs" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Logs" +msgstr "Logs" + +#: src/components/settings/LogsTab.tsx +msgid "Logs exported to clipboard" +msgstr "Logs exportés dans le presse-papiers" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Loops" +msgstr "Boucles" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Make all MCP queries read-only" +msgstr "Mettre toutes les requêtes MCP en lecture seule" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage" +msgstr "Gérer" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Manage Databases" +msgstr "Gérer les bases de données" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage SSH Connections" +msgstr "Gérer les connexions SSH" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL COMMAND" +msgstr "COMMANDE MANUELLE" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL CONFIGURATION" +msgstr "CONFIGURATION MANUELLE" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Markdown" +msgstr "Markdown" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Max Allowed Packet" +msgstr "Max Allowed Packet" + +#: src/components/settings/GeneralTab.tsx +msgid "Max History Entries" +msgstr "Nombre max d’entrées d’historique" + +#: src/components/settings/LogsTab.tsx +msgid "Max Log Entries" +msgstr "Nombre max d’entrées de log" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Maximize" +msgstr "Agrandir" + +#: src/components/settings/GeneralTab.tsx +msgid "Maximum number of query history entries stored per connection." +msgstr "Nombre maximal d’entrées d’historique de requêtes stockées par connexion." + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Maximum packet size used by the MySQL connector." +msgstr "Taille maximale de paquet utilisée par le connecteur MySQL." + +#: src/components/modals/CommunityModal.tsx +msgid "Maybe later" +msgstr "Peut-être plus tard" + +#: src/components/layout/Sidebar.tsx +msgid "MCP Server" +msgstr "Serveur MCP" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MCP Server Integration" +msgstr "Intégration du serveur MCP" + +#: src/components/settings/LogsTab.tsx +msgid "Message" +msgstr "Message" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Minimize" +msgstr "Réduire" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Mixed types detected, defaulted to TEXT" +msgstr "Types mixtes détectés, défaut TEXT" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Mode" +msgstr "Mode" + +#. placeholder {0}: settings.aiModel +#. placeholder {1}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Model <0>{0} not found in <1>{1}. It may not work correctly." +msgstr "Le modèle {0} est introuvable dans {1}. Il pourrait ne pas fonctionner correctement." + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Modify Column" +msgstr "Modifier la colonne" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgctxt "sidebar" +msgid "Modify Column" +msgstr "Modifier la colonne" + +#: src/components/settings/InfoTab.tsx +msgid "Monitor plugin processes, CPU, RAM and disk usage in real time" +msgstr "Surveillez en temps réel les processus plugins, le CPU, la RAM et l’utilisation disque" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Down" +msgstr "Descendre" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Up" +msgstr "Monter" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "My K8s cluster" +msgstr "Mon cluster K8s" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "My SSH Server" +msgstr "Mon serveur SSH" + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants." +msgstr "MySQL et MariaDB n’exposent des métriques réelles que sur les variantes prises en charge d’EXPLAIN ANALYZE ou ANALYZE FORMAT." + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version." +msgstr "MySQL et MariaDB peuvent revenir à EXPLAIN FORMAT=JSON ou à EXPLAIN tabulaire selon la version du serveur." + +#: src/components/notebook/ParamsPanel.tsx +msgid "name" +msgstr "nom" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/SchemaModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Name" +msgstr "Nom" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Name is required" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Namespace" +msgstr "Namespace" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Namespace is required" +msgstr "Le namespace est requis" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Navigation" +msgstr "Navigation" + +#: src/components/ui/DataGrid.tsx +msgid "NEW" +msgstr "NOUVELLE" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New connection" +msgstr "Nouvelle connexion" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "New console" +msgstr "Nouvelle console" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/pages/Editor.tsx +msgid "New Console" +msgstr "Nouvelle console" + +#: src/components/modals/WhatsNewModal.tsx +msgid "New Features" +msgstr "Nouvelles fonctionnalités" + +#: src/pages/Connections.tsx +msgid "New Group" +msgstr "Nouveau groupe" + +#: src/pages/Editor.tsx +msgid "New Notebook" +msgstr "Nouveau notebook" + +#: src/components/modals/NewRowModal.tsx +#: src/pages/Editor.tsx +msgid "New Row" +msgstr "Nouvelle ligne" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New tab" +msgstr "Nouvel onglet" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "New table created" +msgstr "Nouvelle table créée" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "New Version Available" +msgstr "Nouvelle version disponible" + +#: src/pages/Editor.tsx +msgid "New Visual Query" +msgstr "Nouvelle requête visuelle" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Next page" +msgstr "Page suivante" + +#: src/components/modals/CreateTableModal.tsx +msgid "NN" +msgstr "NN" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "NON" + +#: src/pages/Connections.tsx +msgid "No active connections" +msgstr "Aucune connexion active" + +#: src/components/ui/TableToolbar.tsx +msgid "no active filters" +msgstr "aucun filtre actif" + +#: src/pages/Editor.tsx +msgid "No active session. Please select a connection." +msgstr "Aucune session active. Veuillez sélectionner une connexion." + +#: src/components/ui/BlobInput.tsx +msgid "No BLOB data" +msgstr "Aucune donnée BLOB" + +#: src/pages/TaskManagerPage.tsx +msgid "No child processes" +msgstr "Aucun processus enfant" + +#: src/pages/SchemaDiagramPage.tsx +msgid "No Connection ID" +msgstr "Aucun ID de connexion" + +#: src/pages/Connections.tsx +msgid "No connections match \"{search}\"" +msgstr "Aucune connexion ne correspond à \"{search}\"" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No contexts found (is kubectl installed?)" +msgstr "Aucun contexte trouvé (kubectl est-il installé ?)" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "No data found in clipboard" +msgstr "Aucune donnée dans le presse-papiers" + +#: src/components/ui/DataGrid.tsx +msgid "No data to display" +msgstr "Aucune donnée à afficher" + +#: src/components/modals/QueryModal.tsx +msgid "No database" +msgstr "Aucune base de données" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No databases found" +msgstr "Aucune base de données trouvée" + +#: src/components/notebook/CellHistoryPanel.tsx +msgid "No execution history yet" +msgstr "Aucun historique d’exécution pour le moment" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No favorites match your search" +msgstr "Aucun favori ne correspond à votre recherche" + +#: src/pages/VisualExplainPage.tsx +msgid "No file loaded" +msgstr "Aucun fichier chargé" + +#: src/components/ui/TableToolbar.tsx +msgid "No filters —" +msgstr "Aucun filtre —" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No general settings available for this driver." +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No icons match." +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "No Kubernetes connections saved. Click \"Add\" to create one." +msgstr "Aucune connexion Kubernetes enregistrée. Cliquez sur « Ajouter » pour en créer une." + +#: src/components/settings/LogsTab.tsx +msgid "No logs available" +msgstr "Aucun log disponible" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "No major issues detected in the current plan summary." +msgstr "Aucun problème majeur détecté dans le résumé actuel du plan." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "No matching elements found" +msgstr "Aucun élément correspondant trouvé" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No MCP activity yet." +msgstr "Aucune activité MCP." + +#: src/components/settings/AiTab.tsx +msgid "No models found" +msgstr "Aucun modèle trouvé" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No notebooks match your search." +msgstr "Aucun notebook ne correspond à votre recherche." + +#: src/pages/Editor.tsx +msgid "No open tabs for this connection." +msgstr "Aucun onglet ouvert pour cette connexion." + +#: src/components/modals/NewRowModal.tsx +msgid "No options found" +msgstr "Aucune option trouvée" + +#: src/pages/TaskManagerPage.tsx +msgid "No plugin processes are running" +msgstr "Aucun processus de plugin n’est en cours" + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins available in the registry." +msgstr "Aucun plugin disponible dans le registre." + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins match your search." +msgstr "Aucun plugin ne correspond à la recherche." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No preview" +msgstr "" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No queries match your search" +msgstr "Aucune requête ne correspond à votre recherche" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No query history" +msgstr "Aucun historique de requêtes" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "No results found" +msgstr "Aucun résultat trouvé" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No routines found" +msgstr "Aucune routine trouvée" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No saved connections — create one below" +msgstr "Aucune connexion enregistrée — créez-en une ci-dessous" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No saved notebooks yet." +msgstr "Aucun notebook enregistré pour le moment." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No saved queries" +msgstr "Aucune requête enregistrée" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No sessions match the current filters." +msgstr "Aucune session ne correspond aux filtres." + +#: src/components/modals/NewConnectionModal.tsx +msgid "No SSH connections available" +msgstr "Aucune connexion SSH disponible" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "No SSH connections configured yet" +msgstr "Aucune connexion SSH configurée pour le moment" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables found" +msgstr "Aucune table trouvée" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables match" +msgstr "Aucune table correspondante" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers found" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers match your filter" +msgstr "" + +#: src/pages/Editor.tsx +msgid "No valid queries found" +msgstr "Aucune requête valide trouvée" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No views found" +msgstr "Aucune vue trouvée" + +#: src/components/settings/PluginsTab.tsx +msgid "Not available for your platform" +msgstr "Indisponible sur votre plateforme" + +#: src/components/settings/AiTab.tsx +msgid "Not configured" +msgstr "Non configuré" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Not Null" +msgstr "Non nul" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Notebook Cell Name Prompt" +msgstr "Prompt de nom de cellule de notebook" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook exported successfully" +msgstr "Notebook exporté avec succès" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook imported successfully" +msgstr "Notebook importé avec succès" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Notebook name" +msgstr "Nom du notebook" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Notebooks" +msgstr "Notebooks" + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "npm ecosystem" +msgstr "écosystème npm" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "Nullable" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Objects" +msgstr "Objets" + +#. placeholder {0}: sessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "of {0}" +msgstr "sur {0}" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Off" +msgstr "Désactivée" + +#: src/components/modals/AlertModal.tsx +#: src/components/modals/ConfirmModal.tsx +msgid "OK" +msgstr "OK" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Older" +msgstr "Plus ancien" + +#: src/utils/explainPlan.ts +msgid "Older servers may fall back to estimated plans with fewer metrics." +msgstr "Les anciens serveurs peuvent revenir à des plans estimés avec moins de métriques." + +#: src/components/settings/PluginsTab.tsx +msgid "Older versions" +msgstr "Anciennes versions" + +#. placeholder {0}: ( settings.aiCustomModels?.["ollama"] || availableModels["ollama"] || [] ).length +#: src/components/settings/AiTab.tsx +msgid "Ollama connected ({0} models found)" +msgstr "Ollama connecté ({0} modèles trouvés)" + +#. placeholder {0}: settings.aiOllamaPort || 11434 +#: src/components/settings/AiTab.tsx +msgid "Ollama not detected on port {0}. Is it running?" +msgstr "Ollama non détecté sur le port {0}. Est-il en cours d’exécution ?" + +#: src/components/settings/AiTab.tsx +msgid "Ollama Port" +msgstr "Port Ollama" + +#. placeholder {0}: trigger.table_name +#: src/components/layout/sidebar/SidebarTriggerItem.tsx +msgid "on {0}" +msgstr "" + +#. placeholder {0}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "On {0} — review and decide before it executes." +msgstr "Sur {0} — examinez avant exécution." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Delete" +msgstr "À la suppression" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Update" +msgstr "À la mise à jour" + +#: src/components/connections/StatusBadge.tsx +msgctxt "connections" +msgid "Open" +msgstr "Ouvrir" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Open connections" +msgstr "Ouvrir les connexions" + +#: src/pages/VisualExplainPage.tsx +msgid "Open file" +msgstr "Ouvrir un fichier" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Open in Editor" +msgstr "Ouvrir dans l’éditeur" + +#: src/components/ui/DataGrid.tsx +msgid "Open in JSON Editor" +msgstr "Ouvrir dans l’éditeur JSON" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Open in New Tab" +msgstr "Ouvrir dans un nouvel onglet" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Open in Visual Explain" +msgstr "Ouvrir dans Visual Explain" + +#: src/components/ui/JsonCell.tsx +msgid "Open JSON viewer" +msgstr "Ouvrir le visualiseur JSON" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Open package page" +msgstr "Ouvrir la page du package" + +#. placeholder {0}: fkForContextPreview.ref_table +#: src/components/ui/DataGrid.tsx +msgid "Open referenced row in {0}" +msgstr "Ouvrir la ligne référencée dans {0}" + +#: src/components/ui/DataGrid.tsx +msgid "Open Sidebar Editor" +msgstr "Ouvrir l’éditeur latéral" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Open Source Libraries" +msgstr "Bibliothèques open source" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Open Tabs" +msgstr "Onglets ouverts" + +#: src/components/settings/InfoTab.tsx +msgid "Open Task Manager" +msgstr "Ouvrir le gestionnaire des tâches" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +msgid "Operation" +msgstr "Opération" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default." +msgstr "Optionnel. Spécifiez l’exécutable utilisé pour lancer ce plugin (ex. python3 sous macOS/Linux, python ou un chemin complet sous Windows). Laissez vide pour utiliser la valeur par défaut." + +#: src/components/notebook/NotebookOutline.tsx +msgid "Outline" +msgstr "Plan" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Overview" +msgstr "Vue d’ensemble" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +#: src/pages/Editor.tsx +msgid "Page {0}" +msgstr "Page {0}" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {1}: Math.ceil( activeTab.result.pagination.total_rows / activeTab.result.pagination.page_size, ) +#: src/pages/Editor.tsx +msgid "Page {0} of {1}" +msgstr "Page {0} sur {1}" + +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +msgid "Page {0} of {totalPages}" +msgstr "Page {0} sur {totalPages}" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Parallel Execution (Run All)" +msgstr "Exécution parallèle (Tout exécuter)" + +#: src/components/notebook/ParamsPanel.tsx +#: src/pages/Editor.tsx +msgid "Parameters" +msgstr "Paramètres" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password" +msgstr "Mot de passe" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password saved in system keychain" +msgstr "Mot de passe enregistré dans le trousseau système" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Paste structured data and preview the schema before importing" +msgstr "Collez des données structurées et vérifiez le schéma avant l'import" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database." +msgstr "Mettre en pause les écritures (ou toutes les requêtes) et demander la validation utilisateur avant exécution." + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Pending approval" +msgstr "En attente" + +#: src/pages/TaskManagerPage.tsx +msgid "PID" +msgstr "PID" + +#: src/components/settings/GeneralTab.tsx +msgid "Ping Interval" +msgstr "Intervalle de ping" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Pipe (|)" +msgstr "Barre verticale (|)" + +#: src/components/modals/CreateTableModal.tsx +msgid "PK" +msgstr "PK" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Planning" +msgstr "Planification" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Please fill in all required fields" +msgstr "Veuillez remplir tous les champs requis" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least one table" +msgstr "Veuillez sélectionner au moins une table" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least Structure or Data" +msgstr "Veuillez sélectionner au moins Structure ou Données" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin" +msgstr "Plugin" + +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Center" +msgstr "Centre de plugins" + +#: src/components/connections/ActionButtons.tsx +#: src/components/connections/ConnectionCard.tsx +#: src/components/connections/ConnectionListItem.tsx +msgid "Plugin disabled" +msgstr "Plugin désactivé" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Plugin Failed to Start" +msgstr "Échec de démarrage du plugin" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin Processes" +msgstr "Processus des plugins" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin processes & system resources" +msgstr "Processus plugins et ressources système" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Settings" +msgstr "Paramètres du plugin" + +#: src/pages/Settings.tsx +msgid "Plugins" +msgstr "Plugins" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "PNG, JPG, WebP or SVG · max 512 KB" +msgstr "PNG, JPG, WebP ou SVG · max. 512 Ko" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Pod" +msgstr "Pod" + +#: src/components/ui/GeometryInput.tsx +msgid "POINT(30 40)" +msgstr "POINT(30 40)" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Port" +msgstr "Port" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Port must be between 1 and 65535" +msgstr "Le port doit être compris entre 1 et 65535" + +#: src/utils/explainPlan.ts +msgid "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available." +msgstr "PostgreSQL ANALYZE inclut les lignes réelles, le temps, les boucles et les compteurs de buffer lorsqu’ils sont disponibles." + +#: src/utils/explainPlan.ts +msgid "PostgreSQL without ANALYZE shows planner estimates only." +msgstr "PostgreSQL sans ANALYZE n’affiche que les estimations du planificateur." + +#: src/components/modals/AiApprovalModal.tsx +msgid "Pre-flight execution plan" +msgstr "Plan d'exécution préalable" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pre-flight EXPLAIN" +msgstr "EXPLAIN préalable" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Prefer" +msgstr "Préférer" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Preferred" +msgstr "" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Press key combination..." +msgstr "Appuyez sur une combinaison de touches..." + +#: src/pages/Editor.tsx +msgid "Press Run (Ctrl/Command+F5) to load table data" +msgstr "Appuyez sur Exécuter (Ctrl/Commande+F5) pour charger les données de la table" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Preview" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "Preview" +msgstr "Aperçu" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Preview" +msgstr "Aperçu" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Preview failed: " +msgstr "Échec de l’aperçu : " + +#: src/components/ui/BlobInput.tsx +msgid "Preview only - full data not loaded" +msgstr "Aperçu uniquement - données complètes non chargées" + +#: src/components/ui/DataGrid.tsx +msgid "Preview related record" +msgstr "Aperçu de l'enregistrement lié" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Previous page" +msgstr "Page précédente" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Primary Key" +msgstr "Clé primaire" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Procedures" +msgstr "Procédures" + +#: src/components/settings/InfoTab.tsx +msgid "Project Status" +msgstr "État du projet" + +#: src/components/settings/AiTab.tsx +msgid "Prompt Customization" +msgstr "Personnalisation des prompts" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Provide your connection name" +msgstr "Indiquez le nom de votre connexion" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Queries" +msgstr "Requêtes" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Query" +msgstr "Requête" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Explanation" +msgstr "Explication de requête" + +#: src/pages/Editor.tsx +msgid "Query failed." +msgstr "Échec de la requête." + +#: src/components/settings/GeneralTab.tsx +msgid "Query History" +msgstr "Historique des requêtes" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Query history was reset" +msgstr "Historique des requêtes réinitialisé" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Query Parameters" +msgstr "Paramètres de requête" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Tab Name Prompt" +msgstr "Prompt de nom d’onglet de requête" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Quick connection test" +msgstr "Test rapide de connexion" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Quick Navigator" +msgstr "Navigateur rapide" + +#: src/pages/TaskManagerPage.tsx +msgid "RAM" +msgstr "RAM" + +#: src/components/ui/JsonInput.tsx +msgid "Raw" +msgstr "Brut" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Raw Output" +msgstr "Sortie brute" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Raw SQL" +msgstr "" + +#: src/components/modals/VisualExplainModal.tsx +msgid "Re-run" +msgstr "Relancer" + +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Re-run query" +msgstr "Relancer la requête" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Read more" +msgstr "En savoir plus" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only connections" +msgstr "Connexions en lecture seule" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only mode" +msgstr "Mode lecture seule" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Reason (optional)" +msgstr "Motif (facultatif)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Recreate Trigger" +msgstr "" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Redo" +msgstr "Rétablir" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Column" +msgstr "Colonne référencée" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Table" +msgstr "Table référencée" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/LogsTab.tsx +#: src/components/settings/PluginsTab.tsx +#: src/pages/SchemaDiagramPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Refresh" +msgstr "Actualiser" + +#: src/components/settings/AiTab.tsx +msgid "Refresh Models" +msgstr "Actualiser les modèles" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Routines" +msgstr "Actualiser les routines" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Refresh Tables" +msgstr "Actualiser les tables" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Triggers" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Views" +msgstr "Actualiser les vues" + +#: src/components/settings/PluginsTab.tsx +msgid "Registry" +msgstr "Registre" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Release Notes" +msgstr "Notes de version" + +#: src/pages/VisualExplainPage.tsx +msgid "Reload" +msgstr "Recharger" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Remind Me Later" +msgstr "Me le rappeler plus tard" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Remove" +msgstr "Supprimer" + +#: src/components/modals/PluginRemoveModal.tsx +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Remove" +msgstr "Supprimer" + +#: src/components/ui/FilterRow.tsx +msgid "Remove filter" +msgstr "Supprimer le filtre" + +#: src/pages/Connections.tsx +msgid "Remove from Group" +msgstr "Retirer du groupe" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Remove Plugin" +msgstr "Supprimer le plugin" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Connections.tsx +#: src/pages/Editor.tsx +msgid "Rename" +msgstr "Renommer" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Renamed cell {n}" +msgstr "Cellule {n} renommée" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Reordered cells" +msgstr "Cellules réordonnées" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Replace table" +msgstr "Remplacer la table" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Require" +msgstr "Exiger" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Required" +msgstr "Requis" + +#. placeholder {0}: availableTypes.find((t) => t.name === form.type)?.requires_extension +#. placeholder {0}: exts.join(', ') +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "Requires extension: {0}" +msgstr "Extension requise : {0}" + +#: src/components/settings/PluginsTab.tsx +msgid "Requires Tabularis ≥ {minVersion}" +msgstr "Nécessite Tabularis ≥ {minVersion}" + +#: src/components/settings/AiTab.tsx +msgid "Reset" +msgstr "Réinitialiser" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Reset to default" +msgstr "Réinitialiser par défaut" + +#: src/components/settings/AiTab.tsx +msgid "Reset to Default" +msgstr "Réinitialiser par défaut" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Reset to driver default" +msgstr "Réinitialiser au défaut du pilote" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Resize sidebar" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Name" +msgstr "Nom de la ressource" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource name is required" +msgstr "Le nom de la ressource est requis" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Type" +msgstr "Type de ressource" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource type must be \"service\" or \"pod\"" +msgstr "Le type de ressource doit être \"service\" ou \"pod\"" + +#: src/pages/TaskManagerPage.tsx +msgid "Restart" +msgstr "Redémarrer" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Restart Now" +msgstr "Redémarrer maintenant" + +#: src/components/settings/GeneralTab.tsx +msgid "Result Page Size (Limit)" +msgstr "Taille de page des résultats (limite)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Results" +msgstr "Résultats" + +#: src/components/ui/DataGrid.tsx +msgid "Revert Selected" +msgstr "Annuler la sélection" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Review & adjust" +msgstr "Vérifier et ajuster" + +#: src/pages/Editor.tsx +msgid "Rollback Changes" +msgstr "Annuler les modifications" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "routine" +msgstr "routine" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Routines" +msgstr "Routines" + +#. placeholder {0}: rowIndex + 1 +#: src/components/ui/RowEditorSidebar.tsx +msgid "Row #{0}" +msgstr "Ligne n°{0}" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "rows" +msgstr "lignes" + +#: src/components/settings/GeneralTab.tsx +msgctxt "settings" +msgid "rows" +msgstr "lignes" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Rows Processed" +msgstr "Lignes traitées" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Rows returned" +msgstr "Lignes retournées" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Rows will be added to an existing table" +msgstr "Les lignes seront ajoutées à une table existante" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Run" +msgstr "Exécuter" + +#: src/components/modals/QuerySelectionModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgctxt "editor" +msgid "Run All" +msgstr "Tout exécuter" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run All Cells" +msgstr "Exécuter toutes les cellules" + +#: src/components/notebook/RunAllSummary.tsx +msgid "Run All Complete" +msgstr "Exécution complète" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan." +msgstr "Exécute EXPLAIN avant d'afficher le modal pour montrer le plan." + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Run Cell" +msgstr "Exécuter la cellule" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Run in console" +msgstr "Exécuter dans la console" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Run Preview" +msgstr "Exécuter l’aperçu" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Run queries" +msgstr "Requêtes exécutées" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query" +msgstr "Exécuter la requête" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Run Query" +msgstr "Exécuter la requête" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query (in editor)" +msgstr "Exécuter la requête (dans l’éditeur)" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Run SELECT query" +msgstr "Exécuter une requête SELECT" + +#. placeholder {0}: selectedIndices.size +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run Selected ({0})" +msgstr "Exécuter la sélection ({0})" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "Run SQL File..." +msgstr "Exécuter un fichier SQL..." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Run this command in your terminal, then restart Claude Code." +msgstr "Exécutez cette commande dans votre terminal, puis redémarrez Claude Code." + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run this query" +msgstr "Exécuter cette requête" + +#: src/i18n/registries/taskManagerProcessStatus.ts +#: src/pages/TaskManagerPage.tsx +msgid "running" +msgstr "en cours" + +#: src/components/explain/VisualExplainView.tsx +msgid "Running EXPLAIN..." +msgstr "Exécution d’EXPLAIN..." + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Build and Test" +msgstr "Build et tests Rust" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Dependencies" +msgstr "Dépendances Rust" + +#: src/pages/McpPage.tsx +msgid "Safety" +msgstr "Sécurité" + +#: src/components/settings/ThemePicker.tsx +msgid "Same as App" +msgstr "Identique à l’application" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Sample values" +msgstr "Exemples de valeurs" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/Connections.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Save" +msgstr "Enregistrer" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Save & Restart" +msgstr "Enregistrer et redémarrer" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Save Changes" +msgstr "Enregistrer les modifications" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Save passwords in Keychain" +msgstr "Enregistrer les mots de passe dans le trousseau" + +#: src/components/settings/AiTab.tsx +msgid "Save Prompt" +msgstr "Enregistrer le prompt" + +#: src/pages/Editor.tsx +msgid "Save Query" +msgstr "Enregistrer la requête" + +#: src/pages/Editor.tsx +msgid "Save this query" +msgstr "Enregistrer cette requête" + +#: src/components/settings/PluginSettingsPage.tsx +msgid "Saved" +msgstr "Enregistré" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Saved Connection" +msgstr "Connexion enregistrée" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Scan-heavy operations detected" +msgstr "Opérations gourmandes en scans détectées" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "Schéma : {tableName}" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Schemas" +msgstr "Schémas" + +#: src/components/ui/JsonTreeView.tsx +msgid "Search" +msgstr "Rechercher" + +#: src/pages/Connections.tsx +msgid "Search connections..." +msgstr "Rechercher des connexions..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search emoji…" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Search favorites..." +msgstr "Rechercher dans les favoris..." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Search history..." +msgstr "Rechercher dans l’historique..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search icons…" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Search models..." +msgstr "Rechercher des modèles..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Search notebooks" +msgstr "Rechercher des notebooks" + +#: src/components/settings/PluginsTab.tsx +msgid "Search plugins…" +msgstr "Rechercher des plugins…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Search query…" +msgstr "Rechercher…" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Search session, client, connection…" +msgstr "Rechercher session, client, connexion…" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Search tables, views, routines, triggers..." +msgstr "Rechercher tables, vues, routines, triggers..." + +#: src/components/settings/LocalizationTab.tsx +msgid "Search timezones..." +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Search..." +msgstr "Rechercher..." + +#: src/components/modals/mcp/McpSafetySection.tsx +#: src/components/settings/GeneralTab.tsx +msgid "seconds" +msgstr "secondes" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Select" +msgstr "Lecture" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select [fields]" +msgstr "SELECT [champs]" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select *" +msgstr "SELECT *" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a context first" +msgstr "Sélectionnez d'abord un contexte" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a database" +msgstr "Sélectionner une base de données" + +#: src/pages/VisualExplainPage.tsx +msgid "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it." +msgstr "Sélectionnez un fichier contenant un plan EXPLAIN (format JSON ou texte PostgreSQL) pour le visualiser." + +#: src/components/settings/AiTab.tsx +msgid "Select a model" +msgstr "Sélectionner un modèle" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Select a node to view details" +msgstr "Sélectionnez un nœud pour voir les détails" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Select a table..." +msgstr "Sélectionner une table..." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Select All" +msgstr "Tout sélectionner" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Select All" +msgstr "Tout sélectionner" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Select All" +msgstr "Tout sélectionner" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select at least one database" +msgstr "Sélectionnez au moins une base de données" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select context/namespace/type first" +msgstr "Sélectionnez d'abord contexte/namespace/type" + +#: src/components/ui/FilterRow.tsx +msgid "Select for Apply All" +msgstr "Sélectionner pour Tout appliquer" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select K8s Connection" +msgstr "Sélectionner une connexion K8s" + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Select Query to Execute" +msgstr "Sélectionner la requête à exécuter" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Select Query to Explain" +msgstr "Sélectionner la requête à expliquer" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Select schemas to load:" +msgstr "Sélectionnez les schémas à charger :" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select SSH Connection" +msgstr "Sélectionner une connexion SSH" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Select Tables" +msgstr "Sélectionner les tables" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select the databases to include in this connection." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Key" +#: src/components/settings/AiTab.tsx +msgid "Select the model to be used for generation and explanation." +msgstr "Sélectionnez le modèle à utiliser pour la génération et l’explication." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select type..." +msgstr "Sélectionner le type..." + +#: src/components/modals/NewRowModal.tsx +msgid "Select Value..." +msgstr "Sélectionner une valeur..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Selected emoji" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Loading schema..." +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Semicolon (;)" +msgstr "Point-virgule (;)" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Separate Connections" +msgstr "Séparer les connexions" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sequential Scans" +msgstr "Scans séquentiels" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Service" +msgstr "Service" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Session timezone sent to MySQL after connect." +msgstr "Fuseau horaire de session envoyé à MySQL après connexion." + +#: src/components/settings/AiActivityPanel.tsx +msgid "Sessions" +msgstr "Sessions" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Set as Active" +msgstr "Définir comme actif" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set DEFAULT" +msgstr "Définir DEFAULT" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set EMPTY" +msgstr "Définir EMPTY" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set GENERATED" +msgstr "Définir GENERATED" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set NULL" +msgstr "Définir NULL" + +#: src/components/layout/Sidebar.tsx +msgid "Settings" +msgstr "Paramètres" + +#: src/pages/McpPage.tsx +msgid "Setup" +msgstr "Configuration" + +#: src/components/settings/AiTab.tsx +msgid "Show AI Assist and Explain buttons in the editor" +msgstr "Afficher les boutons AI Assist et Explain dans l’éditeur" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All" +msgstr "Tout afficher" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All Tables" +msgstr "Afficher toutes les tables" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Show Data" +msgstr "Afficher les données" + +#: src/components/settings/AppearanceTab.tsx +msgid "Show Line Numbers" +msgstr "Afficher les numéros de ligne" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Show overview" +msgstr "Afficher la vue d’ensemble" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost." +msgstr "Affiche le visualiseur JSON lorsqu'une cellule texte non typée contient un objet ou un tableau JSON. Ajoute un petit coût d'analyse par cellule." + +#: src/components/settings/GeneralTab.tsx +msgid "Show Welcome Screen" +msgstr "Afficher l’écran d’accueil" + +#. placeholder {0}: all.length +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Showing {RESULT_LIMIT} of {0} — refine search to narrow down." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Name" +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "showing first {MAX_PREVIEW_ROWS}" +msgstr "premières {MAX_PREVIEW_ROWS}" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Side by side" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "NO" +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Skip (do not import)" +msgstr "Ignorer (ne pas importer)" + +#: src/components/notebook/RunAllSummary.tsx +msgid "skipped" +msgstr "ignorées" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Slowest Step" +msgstr "Étape la plus lente" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket Timeout" +msgstr "Délai d’expiration du socket" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket timeout in milliseconds." +msgstr "Délai d’expiration du socket en millisecondes." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort ascending" +msgstr "Tri croissant" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} ASC" +msgstr "Trier par {colName} ASC" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} DESC" +msgstr "Trier par {colName} DESC" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Sort by {field}" +msgstr "Trier par {field}" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort by…" +msgstr "Trier par…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort descending" +msgstr "Tri décroissant" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sort or temp work detected" +msgstr "Travail de tri ou temporaire détecté" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Split Group" +msgstr "Diviser le groupe" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Horizontal" +msgstr "Diviser horizontalement" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Vertical" +msgstr "Diviser verticalement" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +#: src/components/ui/TableToolbar.tsx +msgid "SQL" +msgstr "SQL" + +#: src/components/settings/AppearanceTab.tsx +msgid "SQL Editor" +msgstr "Éditeur SQL" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "SQL file executed successfully" +msgstr "Fichier SQL exécuté avec succès" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Functions" +msgstr "Fonctions SQL" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "SQL Generation" +msgstr "Génération SQL" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Mode" +msgstr "Mode SQL" + +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQL Preview" +msgstr "Aperçu SQL" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "SQLite does not support dropping FKs via ALTER TABLE." +msgstr "SQLite ne prend pas en charge la suppression des clés étrangères via ALTER TABLE." + +#: src/utils/explainPlan.ts +msgid "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural." +msgstr "SQLite EXPLAIN QUERY PLAN est léger et principalement structurel." + +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQLite only supports renaming columns. Other modifications require recreating the table manually." +msgstr "SQLite ne prend en charge que le renommage des colonnes. Les autres modifications nécessitent de recréer la table manuellement." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Connections" +msgstr "Connexions SSH" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Host" +msgstr "Hôte SSH" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH is not available for this driver." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Nullable" +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key" +msgstr "Clé SSH" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key File (Optional)" +msgstr "Fichier de clé SSH (optionnel)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key Passphrase (Optional)" +msgstr "Phrase secrète de clé SSH (optionnel)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Password" +msgstr "Mot de passe SSH" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH Password missing. Please re-enter." +msgstr "Mot de passe SSH manquant. Veuillez le ressaisir." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Port" +msgstr "Port SSH" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH User" +msgstr "Utilisateur SSH" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSL Mode" +msgstr "Mode SSL" + +#: src/components/ui/GeometryInput.tsx +msgid "ST_GeomFromText('POINT(30 40)', 4326)" +msgstr "ST_GeomFromText('POINT(30 40)', 4326)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Stacked view" +msgstr "Vue empilée" + +#: src/components/modals/CommunityModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Star on GitHub" +msgstr "Mettre une étoile sur GitHub" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Started" +msgstr "Début" + +#: src/components/settings/GeneralTab.tsx +msgid "Startup" +msgstr "Démarrage" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Status" +msgstr "Statut" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Stop" +msgstr "Arrêter" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop execution when a cell fails" +msgstr "Arrêter l’exécution lorsqu’une cellule échoue" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop on Error" +msgstr "Arrêter en cas d’erreur" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "stopped" +msgstr "arrêté" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Structure" +msgstr "Structure" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Structure (DDL)" +msgstr "Structure (DDL)" + +#: src/pages/Editor.tsx +msgid "Submit Changes" +msgstr "Soumettre les modifications" + +#: src/components/notebook/RunAllSummary.tsx +msgid "succeeded" +msgstr "réussies" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Success" +msgstr "Succès" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Success" +msgstr "Succès" + +#: src/components/modals/ExportProgressModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Success" +msgstr "Succès" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Success" +msgstr "Succès" + +#: src/pages/TaskManagerPage.tsx +msgid "Sum of RSS across the process tree — may overcount shared memory" +msgstr "Somme du RSS sur l’arborescence des processus — peut surestimer la mémoire partagée" + +#: src/components/settings/InfoTab.tsx +msgid "Support the Development" +msgstr "Soutenir le développement" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch tab" +msgstr "Changer d’onglet" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch to connection 1–9" +msgstr "Passer à la connexion 1-9" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Horizontal Layout" +msgstr "Passer en disposition horizontale" + +#: src/components/ui/TableToolbar.tsx +msgid "Switch to SQL WHERE input" +msgstr "Basculer vers le champ SQL WHERE" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Vertical Layout" +msgstr "Passer en disposition verticale" + +#: src/pages/TaskManagerPage.tsx +msgid "System Resources" +msgstr "Ressources système" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Tab" +msgstr "Tabulation" + +#: src/components/settings/AppearanceTab.tsx +msgid "Tab Size" +msgstr "Taille de tabulation" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Tab view" +msgstr "Vue onglets" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "table" +msgstr "table" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Table" +msgstr "Table" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Table name" +msgstr "Nom de la table" + +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Table Name" +msgstr "Nom de la table" + +#: src/components/modals/CreateTableModal.tsx +msgid "Table name is required" +msgstr "Le nom de la table est requis" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Tables" +msgstr "Tables" + +#: src/components/modals/CommunityModal.tsx +msgid "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community." +msgstr "Tabularis est un projet libre et open source. Si vous le trouvez utile, pensez à soutenir le projet et à rejoindre la communauté." + +#: src/pages/TaskManagerPage.tsx +msgid "Tabularis Process" +msgstr "Processus Tabularis" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Target column" +msgstr "Colonne cible" + +#: src/components/settings/InfoTab.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Task Manager" +msgstr "Gestionnaire des tâches" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Temp or Sort Ops" +msgstr "Opérations temporaires ou de tri" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Test" +msgstr "Tester" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Test Connection" +msgstr "Tester la connexion" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Testing..." +msgstr "Test en cours..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "The app will restart automatically after installation" +msgstr "L’application redémarrera automatiquement après l’installation" + +#: src/components/settings/AiTab.tsx +msgid "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1" +msgstr "L’URL de base de votre API compatible OpenAI. Exemples : https://api.groq.com/openai/v1, http://localhost:8000/v1" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "The configuration file has been saved. Restart now to apply the changes?" +msgstr "Le fichier de configuration a été enregistré. Redémarrer maintenant pour appliquer les changements ?" + +#: src/pages/Connections.tsx +msgid "The exported file will contain your database and SSH passwords in plaintext. Please store it securely." +msgstr "Le fichier exporté contiendra vos mots de passe de base de données et SSH en clair. Conservez-le en lieu sûr." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:" +msgstr "Le fichier d’historique était corrompu et a été mis de côté. Les nouvelles requêtes seront enregistrées normalement. Fichier de sauvegarde :" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely." +msgstr "Le Model Context Protocol (MCP) permet aux assistants IA (comme Claude) de se connecter à vos outils locaux. Tabularis expose un serveur MCP permettant à l’IA de lire le schéma de votre base de données et d’exécuter des requêtes en toute sécurité." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "The plugin process could not be launched. Check the error details below." +msgstr "Le processus du plugin n’a pas pu être lancé. Vérifiez les détails de l’erreur ci-dessous." + +#: src/components/settings/AppearanceTab.tsx +msgid "The quick brown fox jumps over the lazy dog" +msgstr "Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwis" + +#: src/components/settings/AppearanceTab.tsx +msgid "Theme Selection" +msgstr "Choix du thème" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "These connections will reject writes from MCP. Other connections behave normally." +msgstr "Ces connexions refuseront les écritures via MCP. Les autres restent normales." + +#: src/pages/TaskManagerPage.tsx +msgid "This action cannot be undone immediately" +msgstr "Cette action ne peut pas être annulée immédiatement" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "This driver only supports primary keys at table creation time" +msgstr "Ce pilote ne prend en charge les clés primaires qu’à la création de la table" + +#: src/components/settings/AiTab.tsx +msgid "This key is loaded from an environment variable" +msgstr "Cette clé est chargée depuis une variable d’environnement" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Month" +msgstr "Ce mois-ci" + +#: src/components/notebook/NotebookView.tsx +msgid "This notebook is empty. Add a cell to get started." +msgstr "Ce notebook est vide. Ajoutez une cellule pour commencer." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path." +msgstr "Ce plugin peut nécessiter un interpréteur (ex. Python). Utilisez les paramètres du plugin pour configurer le chemin de l’interpréteur." + +#: src/components/settings/InfoTab.tsx +msgid "This project is a Work In Progress (WIP). Core features are stable, but we have big plans." +msgstr "Ce projet est un Work In Progress (WIP). Les fonctionnalités principales sont stables, mais nous avons de grands projets." + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Week" +msgstr "Cette semaine" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgctxt "aiActivity" +msgid "Time" +msgstr "Heure" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Time" +msgstr "Temps" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Timeout" +msgstr "Délai dépassé" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Timeout" +msgstr "Délai dépassé" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgctxt "mcp" +msgid "Timeout" +msgstr "Délai" + +#: src/components/settings/LogsTab.tsx +msgid "Timestamp" +msgstr "Horodatage" + +#: src/components/settings/LocalizationTab.tsx +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Timezone" +msgstr "Fuseau horaire" + +#: src/components/settings/LocalizationTab.tsx +msgid "Timezone used to display timestamps and exports. 'Auto' follows your system timezone." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Schema: {tableName}" +#: src/components/modals/TriggerEditorModal.tsx +msgid "Timing" msgstr "" +#: src/components/ui/FilterRow.tsx +msgid "to" +msgstr "à" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Today" +msgstr "Aujourd’hui" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Toggle Chart" +msgstr "Afficher/masquer le graphique" + +#: src/components/ui/JsonCell.tsx +msgid "Toggle inline JSON tree" +msgstr "Afficher/masquer l'arbre JSON" + +#: src/components/ui/TextCell.tsx +msgid "Toggle inline text editor" +msgstr "" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Toggle Preview" +msgstr "Afficher/masquer l’aperçu" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Toggle sidebar" +msgstr "Afficher/masquer la barre latérale" + +#: src/components/ui/TableToolbar.tsx +msgid "Toggle structured filter panel" +msgstr "Afficher/masquer le panneau de filtres structurés" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled parallel (cell {n})" +msgstr "Parallèle basculé (cellule {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled stop on error" +msgstr "Arrêt en cas d'erreur basculé" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Tool" +msgstr "Outil" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Top Issues" +msgstr "Principaux problèmes" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Total Cost" +msgstr "Coût total" + +#: src/components/ui/JsonInput.tsx +msgid "Tree" +msgstr "Arborescence" + +#. placeholder {0}: formatBytes(stats.total_memory_bytes) +#: src/pages/TaskManagerPage.tsx +msgid "Tree total: {0}" +msgstr "Total de l’arborescence : {0}" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "trigger" +msgstr "trigger" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Body (SQL)" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger created successfully" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Name" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger SQL is required" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger updated successfully" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Triggers" +msgstr "" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Try again" +msgstr "Réessayer" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Try again" +msgstr "Réessayer" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx #: src/components/modals/SchemaModal.tsx msgid "Type" +msgstr "Type" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Undo" +msgstr "Annuler" + +#: src/pages/Connections.tsx +msgid "Ungrouped" +msgstr "Non groupé" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Unique Index" +msgstr "Index unique" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "unknown" +msgstr "inconnu" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Unknown" +msgstr "Inconnu" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Unnamed connection" +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Unset" +msgstr "Non défini" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Untitled" +msgstr "Sans titre" + +#: src/components/settings/PluginsTab.tsx +msgid "Up to date" +msgstr "À jour" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Update" +msgstr "UPDATE" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Update" +msgstr "Mettre à jour" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Update" +msgstr "Mettre à jour" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Update Error" +msgstr "Erreur de mise à jour" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Update failed: " +msgstr "Échec de la mise à jour : " + +#: src/components/settings/InfoTab.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Updates" +msgstr "Mises à jour" + +#. placeholder {0}: ({ aur: "AUR", snap: "Snap Store", flatpak: "Flathub" } as Record)[ installationSource ] ?? installationSource +#: src/components/settings/InfoTab.tsx +msgid "Updates managed by {0}" +msgstr "Mises à jour gérées par {0}" + +#: src/components/ui/BlobInput.tsx +msgid "Upload File" +msgstr "Téléverser un fichier" + +#: src/components/ui/BlobInput.tsx +msgid "Uploading..." +msgstr "Téléversement..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Existing SSH Connection" +msgstr "Utiliser une connexion SSH existante" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Kubernetes Port-Forward" +msgstr "Utiliser le Port-Forward Kubernetes" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use SSH Tunnel" +msgstr "Utiliser un tunnel SSH" + +#: src/components/settings/InfoTab.tsx +msgid "Use your package manager to update Tabularis." +msgstr "Utilisez votre gestionnaire de paquets pour mettre à jour Tabularis." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Username" +msgstr "Nom d’utilisateur" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Using the driver's default icon." +msgstr "" + +#: src/components/ui/JsonInput.tsx +msgid "Valid JSON" +msgstr "JSON valide" + +#: src/components/notebook/ParamsPanel.tsx +msgctxt "editor" +msgid "value" +msgstr "valeur" + +#: src/components/ui/FilterRow.tsx +msgctxt "toolbar" +msgid "value" +msgstr "valeur" + +#: src/components/modals/QueryParamsModal.tsx +msgid "Value (e.g. 'text' or 123)" +msgstr "Valeur (ex. 'texte' ou 123)" + +#: src/components/notebook/CellChart.tsx +msgid "Values" +msgstr "Valeurs" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify CA" +msgstr "Vérifier CA" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Full" +msgstr "Vérification complète" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Identity" msgstr "" +#: src/components/modals/UpdateNotificationModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Version" +msgstr "Version" + +#. placeholder {0}: entries[0].version +#: src/components/modals/WhatsNewModal.tsx +msgid "Version {0}" +msgstr "Version {0}" + +#. placeholder {0}: updateInfo.latestVersion +#: src/components/settings/InfoTab.tsx +msgid "Version {0} is available" +msgstr "La version {0} est disponible" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Vertical" +msgstr "Verticale" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "view" +msgstr "vue" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View created successfully" +msgstr "Vue créée avec succès" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "View Definition" +msgstr "Définition de la vue" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Definition (SQL)" +msgstr "Définition de la vue (SQL)" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View definition is required" +msgstr "La définition de la vue est requise" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "View details" +msgstr "Voir les détails" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "View ER Diagram" +msgstr "Afficher le diagramme ER" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Name" +msgstr "Nom de la vue" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View name is required" +msgstr "Le nom de la vue est requis" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "View on GitHub" +msgstr "Voir sur GitHub" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "View Schema" +msgstr "Afficher le schéma" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View updated successfully" +msgstr "Vue mise à jour avec succès" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Views" +msgstr "Vues" + +#: src/components/modals/VisualExplainModal.tsx +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +#: src/pages/VisualExplainPage.tsx +msgid "Visual Explain" +msgstr "Visual Explain" + +#: src/components/settings/LogsTab.tsx +msgid "Warn" +msgstr "Avertissement" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap." +msgstr "Nous venons d’ouvrir une communauté dédiée à Tabularis : entraide, astuces et influence sur la roadmap." + +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "What's New" +msgstr "Nouveautés" + +#: src/pages/TaskManagerPage.tsx +msgid "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted." +msgstr "arrêtera brutalement son processus. Toute connexion à la base de données utilisant ce plugin cessera de fonctionner tant que le plugin ne sera pas redémarré." + +#: src/components/ui/GeometryInput.tsx +msgid "WKT Mode" +msgstr "Mode WKT" + +#: src/components/settings/AppearanceTab.tsx +msgid "Word Wrap" +msgstr "Retour à la ligne automatique" + +#: src/components/settings/AppearanceTab.tsx +msgid "Wrap long lines in the editor instead of scrolling horizontally." +msgstr "Retourne les longues lignes dans l’éditeur au lieu d’un défilement horizontal." + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Write" +msgstr "Écriture" + +#: src/components/notebook/MarkdownCell.tsx +msgid "Write Markdown here..." +msgstr "Écrivez du Markdown ici..." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Writes only" +msgstr "Écritures seulement" + #: src/components/modals/SchemaModal.tsx msgid "YES" -msgstr "" +msgstr "OUI" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Yesterday" +msgstr "Hier" + +#: src/components/settings/InfoTab.tsx +msgid "You're up to date" +msgstr "Vous êtes à jour" diff --git a/src/locales/fr/messages.ts b/src/locales/fr/messages.ts index 39f11cf5..c714f3a4 100644 --- a/src/locales/fr/messages.ts +++ b/src/locales/fr/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Nombre max d’entrées d’historique\"],\"-6AWa-\":[\"Importer les connexions\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Déconnecter\"],\"-PLZfh\":[\"Échec de l’actualisation des modèles\"],\"-T5W2e\":[\"Notes du pilote\"],\"-ZgeeE\":[\"Historique des modifications\"],\"-aYrdc\":[\"La version \",[\"0\"],\" est disponible\"],\"-fBGXl\":[\"Coût le plus élevé\"],\"-jIQDz\":[\"Réduire la cellule\"],\"-u1eRo\":[\"Aucune base de données\"],\"-yoeVU\":[\"Chargement du schéma...\"],\"-zy2Nq\":[\"Type\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID validation\"],\"0E5-gF\":[\"Voulez-vous vraiment supprimer cette connexion ?\"],\"0HCubq\":[\"Agrandir\"],\"0Kmdvy\":[\"Police personnalisée\"],\"0Nj13E\":[\"Générer du SQL\"],\"0ROgz5\":[\"Saisir du JSON...\"],\"0SY9sU\":[\"Échec de la déconnexion de la base de données\"],\"0b3kL9\":[\"Sélectionner une base de données\"],\"0caMy7\":[\"Historique\"],\"0mx5ow\":[\"Requête\"],\"0n9BtL\":[\"Aperçu\"],\"0pHB9N\":[\"Copier comme table.column\"],\"0sQzZK\":[\"Filtrer les bases de données...\"],\"0uPP9X\":[\"Nom de la clé étrangère (optionnel)\"],\"0wxuek\":[\"Version actuelle\"],\"0x09Aw\":[\"Arrêt en cas d'erreur basculé\"],\"0yBP6v\":[\"Soutenir le développement\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes\"],\"other\":[\"#\",\" lignes\"]}]],\"0yVAoD\":[\"Compter les lignes\"],\"0zxJ87\":[\"Aucun log disponible\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Modifier la vue\"],\"11fGJ6\":[\"Requêtes\"],\"13hIUA\":[\"Clé API \",[\"0\"]],\"14qNWF\":[\"Sélectionner une connexion SSH\"],\"17qHRP\":[\"Nouvelle connexion\"],\"1Dn6bg\":[\"Importer depuis le Presse-papiers\"],\"1Dnd0I\":[\"Charger le nombre de lignes\"],\"1FjTLW\":[\"ex. python3\"],\"1GOvbo\":[\"Ollama connecté (\",[\"0\"],\" modèles trouvés)\"],\"1I6UoR\":[\"Vues\"],\"1U7hS5\":[\"Longueur\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Police de l’éditeur\"],\"1ekzlY\":[\"Processus des plugins\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Choix du thème\"],\"1xVZkL\":[\"Aucun modèle trouvé\"],\"26Joci\":[[\"0\"],\" lignes récupérées\"],\"2Bf-Qe\":[\"Nouvelle console\"],\"2CrSmP\":[\"Aidez tabularis à grandir\"],\"2D9F8_\":[\"Échec de duplication de la connexion\"],\"2Eoi_a\":[\"Voir les détails\"],\"2F4pE5\":[\"Build et tests Rust\"],\"2Fsd9r\":[\"Ce mois-ci\"],\"2JzKXI\":[\"Définir GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Tout sélectionner\"],\"2SO5RM\":[\"Kubernetes n'est pas disponible pour ce pilote.\"],\"2Uh5GA\":[\"écosystème Cargo\"],\"2YylFp\":[\"Nouvelle requête visuelle\"],\"2luuSG\":[\"Réessayer\"],\"2wxgft\":[\"Renommer\"],\"2yG2GC\":[\"Mettre en pause les écritures (ou toutes les requêtes) et demander la validation utilisateur avant exécution.\"],\"30-b5r\":[\"Supprimer\"],\"31kwdN\":[\"Dupliquer le filtre\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Tous les outils\"],\"3Am5DS\":[\"Vue onglets\"],\"3BhBCj\":[\"Événements\"],\"3FVg9_\":[\"Colonne locale\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Exécuter\"],\"3L0HCz\":[\"Aucun plugin ne correspond à la recherche.\"],\"3Nv3JV\":[\"Exécution de la requête...\"],\"3TSz9S\":[\"Réduire\"],\"3UW8fG\":[\"Mises à jour gérées par \",[\"0\"]],\"3YvS-c\":[\"Nouvel onglet\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt de nom de cellule de notebook\"],\"3qkggm\":[\"Plein écran\"],\"3rBJ1T\":[\"Afficher le schéma\"],\"3xZ-xV\":[\"Insérer l'horodatage actuel\"],\"40Gx0U\":[\"Fuseau horaire\"],\"41GP4f\":[\"Choisissez le caractère séparateur par défaut utilisé lors de la copie ou de l’export des lignes en CSV.\"],\"42iaEi\":[\"PostgreSQL sans ANALYZE n’affiche que les estimations du planificateur.\"],\"44cXI8\":[\"Trier par \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gérer les bases de données\"],\"4CK17g\":[\"Voulez-vous vraiment modifier la vue \\\"\",[\"name\"],\"\\\" ?\"],\"4DDaw-\":[\"Sélectionnez au moins une base de données\"],\"4D_Nvt\":[\"Échec de création du groupe\"],\"4RiR6c\":[\"Exporter en HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processus enfant\"],\"other\":[\"#\",\" processus enfants\"]}]],\"4VyuY3\":[\"Voulez-vous vraiment effacer tous les logs ?\"],\"4WWqS3\":[\"Afficher/masquer l'arbre JSON\"],\"4cEClj\":[\"Sessions\"],\"4cmfYp\":[\"Dupliquer la ligne\"],\"4lIZTB\":[\"Dépendances de développement frontend\"],\"4oYjvJ\":[\"Rechercher…\"],\"4tMxW4\":[\"Aperçu de l'enregistrement lié\"],\"4yJcjm\":[\"Sélectionner le type...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Fermer le panneau de filtres (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Point-virgule (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" événement\"],\"other\":[\"#\",\" événements\"]}]],\"5I2fxu\":[\"/chemin/vers/id_rsa\"],\"5NZpX8\":[\"Vue liste\"],\"5To6Z6\":[\"Copier la requête\"],\"5gqNQl\":[\"Vue grille\"],\"5igIzr\":[\"Import annulé\"],\"5nTIup\":[\"Modification de la vue : \",[\"name\"]],\"66bEht\":[\"État du projet\"],\"6PIJVc\":[\"Démarrage\"],\"6QvP0l\":[\"Exporter en JSON\"],\"6W41Xq\":[\"Gestionnaire des tâches\"],\"6WngBH\":[\"Définir NULL\"],\"6YtxFj\":[\"Nom\"],\"6_dCYd\":[\"Vue d’ensemble\"],\"6gvoHP\":[\"Copier le message d’erreur\"],\"6oCVzX\":[\"Le contexte Kubernetes est requis\"],\"6wQO0f\":[\"Afficher les données\"],\"6z9W13\":[\"Redémarrer\"],\"71agNy\":[\"Générer des noms IA pour les cellules sans nom\"],\"74J3FG\":[\"Version initiale\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Compris\"],\"77nSMU\":[\"Supprimer tout l'historique d'activité IA ? Action irréversible.\"],\"79UVYW\":[\"Échap pour fermer\"],\"7ABmyQ\":[\"Réessayer\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" sur \",[\"0\"],\" actifs\"],\"7E864M\":[\"Type de base de données\"],\"7FqaG1\":[\"Personnalisez les instructions pour l’analyse IA des plans EXPLAIN. Utilisez \",[\"LANGUAGE\"],\" pour la langue de sortie.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Types mixtes détectés, défaut TEXT\"],\"7RSQQd\":[\"Enregistrer les mots de passe dans le trousseau\"],\"7VpPHA\":[\"Confirmer\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"échouées\"],\"7sMeHQ\":[\"Clé\"],\"7sNhEz\":[\"Nom d’utilisateur\"],\"7tATh2\":[\"Exécuter la requête\"],\"7yb4gk\":[\"Échec : \"],\"8-4V8D\":[\"Tables\"],\"82G-l5\":[\"Le Model Context Protocol (MCP) permet aux assistants IA (comme Claude) de se connecter à vos outils locaux. Tabularis expose un serveur MCP permettant à l’IA de lire le schéma de votre base de données et d’exécuter des requêtes en toute sécurité.\"],\"83VjWE\":[\"Nouveau notebook\"],\"86IgoU\":[\"Exécuter la requête (dans l’éditeur)\"],\"86fCgf\":[\"Personnalisez les instructions pour la génération IA du nom des onglets de résultats. La requête SQL est envoyée comme message utilisateur.\"],\"87a_t_\":[\"Étiquette\"],\"8CWirf\":[\"Serveur MCP\"],\"8S8aIX\":[\"Vérification de l’état des connexions\"],\"8TMaZI\":[\"Horodatage\"],\"8Tg_JR\":[\"Personnalisé\"],\"8UFKYr\":[\"Sélectionner la requête à exécuter\"],\"8VKSGV\":[\"Générer le SQL\"],\"8Wjy6z\":[\"Fermer les onglets à gauche\"],\"8ZsakT\":[\"Mot de passe\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Éditeur SQL\"],\"8bRgTe\":[\"Fournisseur IA non configuré. Veuillez aller dans Paramètres > IA.\"],\"8c_W0h\":[\"Anciennes versions\"],\"8guEQP\":[\"Actualiser les vues\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN est léger et principalement structurel.\"],\"8q_sOc\":[\"Supprimer\"],\"8t-akp\":[\"premières \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nom de la connexion\"],\"91gnWY\":[\"Exporter les logs\"],\"91rtHL\":[\"Créer une nouvelle vue\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Nouveau groupe\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vue mise à jour avec succès\"],\"9NzDFn\":[\"Afficher l’écran d’accueil au démarrage de l’application.\"],\"9OoUS3\":[\"Créer une nouvelle connexion SSH\"],\"9QGRD5\":[\"Colonne cible\"],\"9QTny9\":[\"Échec de la requête.\"],\"9S-fyV\":[\"Plan d'exécution préalable\"],\"9SJ_Sx\":[\"Ressources système\"],\"9UQ730\":[\"Cloner\"],\"9X6cky\":[\"NON\"],\"9XUV5V\":[\"Aucune donnée dans le presse-papiers\"],\"9mMU1R\":[\"Temps\"],\"9mvFo_\":[\"Heure\"],\"9npOH9\":[\"Ouvrir un fichier\"],\"9uI_rE\":[\"Annuler\"],\"9xUjzm\":[\"Tout sélectionner\"],\"9y_02p\":[\"Discutez avec la communauté, obtenez de l’aide, proposez des fonctionnalités\"],\"A1pPcI\":[\"Hôte SSH\"],\"A1taO8\":[\"Rechercher\"],\"A6C0pv\":[\"Coût total\"],\"A7WG0p\":[\"Plugin désactivé\"],\"A7yRz3\":[\"La définition de la vue est requise\"],\"A9Uyp6\":[\"Échec de l’import : \"],\"ABEd-z\":[\"Utilisez votre gestionnaire de paquets pour mettre à jour Tabularis.\"],\"AMdgKV\":[\"Prompt d’analyse de plan EXPLAIN\"],\"ANSTMe\":[\"Aucun problème majeur détecté dans le résumé actuel du plan.\"],\"ANzIr7\":[\"Historique des requêtes\"],\"AOnaU7\":[\"ignorées\"],\"AVlZoM\":[\"Environnement\"],\"AXTVsE\":[\"Vérification complète\"],\"AXdRYR\":[\"Logs actuels\"],\"Aa-YkQ\":[\"Exporter le notebook\"],\"Ai2U7L\":[\"Hôte\"],\"AidayG\":[\"Filtrer par niveau\"],\"AlPiMN\":[\"Cliquer pour aller à la page\"],\"An-1rA\":[\"Lignes retournées\"],\"AnV8j-\":[\"Modifier la colonne\"],\"AvEr_L\":[\"Nouvelle console\"],\"AvYbUL\":[\"Mettre une étoile sur GitHub\"],\"Aw_eOs\":[\"Nécessite Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Aucun résultat trouvé\"],\"B0mJGb\":[\"Sortie brute\"],\"B1c58n\":[\"Modifier la colonne\"],\"B3toQF\":[\"Objets\"],\"B5nKny\":[\"/chemin/absolu/vers/dossier\"],\"B5xevr\":[\"Le nom de la connexion est requis\"],\"BAVvWJ\":[\"Diagramme ER\"],\"BBtVak\":[\"Tout réduire\"],\"BEVzjL\":[\"Échec de l’import\"],\"BFxXo5\":[\"Tout exécuter\"],\"BJe2lZ\":[\"Afficher/masquer la barre latérale\"],\"BK3WCj\":[\"Échec de chargement du registre\"],\"BKbO3i\":[\"Notebook modifié\"],\"BMB51y\":[\"Exécuter dans la console\"],\"BNW_Z4\":[\"ex. active_users, order_summary\"],\"BUO_JN\":[\"Copier la requête\"],\"BYkhHY\":[\"Vérifier les mises à jour au démarrage\"],\"BbHofF\":[\"Exporter les connexions\"],\"BeSg6-\":[\"Collecter les logs de l’application en mémoire pour le débogage\"],\"BgAyQH\":[\"Effacer le tri\"],\"BinTJI\":[\"écosystème npm\"],\"BkFson\":[\"Pagination automatique\"],\"Bpglf1\":[\"Monter\"],\"BrGo6h\":[\"Rechercher des notebooks\"],\"BxiAN_\":[\"Supprimer la requête\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dépendances frontend\"],\"CE-M2e\":[\"Infos\"],\"CHIyL8\":[\"Aucun filtre —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Téléchargement...\"],\"CUxwxn\":[\"Afficher toutes les tables\"],\"CWMXbw\":[\"arrêtera brutalement son processus. Toute connexion à la base de données utilisant ce plugin cessera de fonctionner tant que le plugin ne sera pas redémarré.\"],\"CZt6BX\":[\"CONFIGURATION MANUELLE\"],\"Ca8ixZ\":[\"Supprimer\"],\"CbJBQS\":[\"Échec de la mise à jour : \"],\"Cdz-YU\":[\"Vue empilée\"],\"CpeQf9\":[\"Boucles\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Sélectionnez le modèle à utiliser pour la génération et l’explication.\"],\"DB8zMK\":[\"Appliquer\"],\"DDXf5E\":[\"Fonctions SQL\"],\"DEwnwi\":[\"Supprimer\"],\"DNTvdl\":[\"Ouvrir dans l’éditeur\"],\"DPc2P9\":[\"Supprimer la cellule\"],\"DUY8Ba\":[\"Changements incompatibles\"],\"DVnBSM\":[\"Hauteur de ligne\"],\"Dd7YLj\":[\"Peut-être plus tard\"],\"Deej3j\":[\"JSON invalide\"],\"DfKhk_\":[\"Mettre à jour\"],\"DiRiTz\":[\"Ouvrir la page du package\"],\"DlRHAD\":[\"Exécution d’EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" erreur\"],\"other\":[\"#\",\" erreurs\"]}]],\"Dvdihe\":[\"Sur \",[\"0\"],\" — examinez avant exécution.\"],\"DzFLzw\":[\"OUI\"],\"E-JUtQ\":[\"Validation manuelle\"],\"E0kcnZ\":[\"Général\"],\"E2mje_\":[\"Sélectionner la requête à expliquer\"],\"EDieyg\":[\"Voulez-vous vraiment supprimer cette connexion SSH ?\"],\"EHZxPj\":[\"Développer\"],\"EL4oDO\":[\"Nouvelle version disponible\"],\"EPi4gT\":[\"Trier par \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Non groupé\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Inconnu\"],\"EhADgB\":[\"Supprimer la colonne\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Vous êtes à jour\"],\"Em6JFd\":[\"Compter les lignes\"],\"EnGiqG\":[[\"0\"],\" éléments\"],\"Ew1n5z\":[\"Rechercher des plugins…\"],\"F18WP3\":[\"Paramètres\"],\"F3uc1x\":[\"Le fichier exporté contiendra vos mots de passe de base de données et SSH en clair. Conservez-le en lieu sûr.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" lignes\"],\"other\":[\"#\",\" lignes\"]}]],\"F6pfE9\":[\"Active\"],\"F8tXg7\":[\"Aperçu des données\"],\"F9-6yK\":[\"Format de copie par défaut\"],\"F9lxfG\":[\"Supprimer\"],\"F9nsa2\":[\"Le fichier d’historique était corrompu et a été mis de côté. Les nouvelles requêtes seront enregistrées normalement. Fichier de sauvegarde :\"],\"FF_oap\":[\"Valeur par défaut\"],\"FK8rlP\":[\"Aucune connexion SSH configurée pour le moment\"],\"FMRcH8\":[\"Première ligne comme en-tête\"],\"FNvDMc\":[\"Cette semaine\"],\"FQe1FI\":[\"Lignes estimées\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Avertissement\"],\"FZg3wM\":[\"Opération\"],\"Fa_cky\":[\"Schéma : \",[\"tableName\"]],\"FpEL5o\":[\"Choisissez un thème indépendant pour l’éditeur SQL ou gardez-le synchronisé avec le thème de l’application.\"],\"FsvZQL\":[\"Cellule \",[\"n\"],\" modifiée\"],\"FtwKL9\":[\"Changer d’onglet\"],\"FznI3z\":[\"Supprimer la clé étrangère \\\"\",[\"name\"],\"\\\" ?\"],\"G6W8j1\":[\"Échec de l’aperçu : \"],\"G8Q5Zq\":[\"Le namespace est requis\"],\"GAohqx\":[\"Supprimer la colonne\"],\"GJR99u\":[\"Échec de suppression de la colonne : \"],\"GKfzzM\":[\"Choisir une connexion...\"],\"GS-Mus\":[\"Exporter\"],\"GUaLUq\":[\"Échec du chargement du schéma : \"],\"GXP-Iw\":[\"Ajouter une cellule SQL\"],\"Gj1mLb\":[\"Cellules réordonnées\"],\"GlbqG2\":[\"Réinitialiser au défaut du pilote\"],\"Gs5AlY\":[\"Ouvrir\"],\"GtmO8_\":[\"de\"],\"GxkJXS\":[\"Téléversement...\"],\"H-o4D2\":[\"Créer une nouvelle colonne\"],\"H2B-KW\":[\"Choisissez le format par défaut lors de la copie des lignes avec Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Rétablir\"],\"H7mlCc\":[\"/chemin/absolu/vers/db.sqlite\"],\"H86f9p\":[\"Réduire\"],\"H9P8CD\":[\"ajouter le premier filtre\"],\"HAQlGl\":[\"Activité IA\"],\"HKNZrs\":[\"Condition d’index\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Supprimer \",\"#\",\" lignes\"],\"other\":[\"Supprimer \",\"#\",\" lignes\"]}]],\"HPuCiP\":[\"Chemin du dossier\"],\"HUs1R3\":[\"Aucun onglet ouvert pour cette connexion.\"],\"HV4Isp\":[\"Saisir le mot de passe SSH\"],\"HVC8Hh\":[\"Copié dans le presse-papier\"],\"HWEpq8\":[\"Écriture disque/s\"],\"HY4nP5\":[\"En ligne\"],\"HcmoWv\":[\"Échec de l’enregistrement de la vue : \"],\"He8v1Y\":[\"Désélectionner de Tout appliquer\"],\"HehHP1\":[\"Disposition par défaut\"],\"HilYn4\":[\"Ce notebook est vide. Ajoutez une cellule pour commencer.\"],\"HjxVK_\":[\"Test rapide de connexion\"],\"HmMnRx\":[\"Mode WKT\"],\"HoKCiI\":[\"L’application redémarrera automatiquement après l’installation\"],\"HpK_8d\":[\"Recharger\"],\"Hpi4Jm\":[\"Rejoindre maintenant\"],\"HuA3RU\":[\"Tabulation\"],\"I128p7\":[\"Barre verticale (|)\"],\"I3AgqA\":[\"Configurer SSH en ligne\"],\"I5VBsr\":[\"Identique à l’application\"],\"I8yrPb\":[\"Remplacer la table\"],\"I92BdB\":[\"Retirer du groupe\"],\"I92fr4\":[\"Me le rappeler plus tard\"],\"I99Miw\":[\"Coût\"],\"IETZIR\":[\"Modifier le nom de la cellule\"],\"IG9wzA\":[\"Échec de l’insertion de la ligne : \"],\"ILleOG\":[\"Le type de ressource doit être \\\"service\\\" ou \\\"pod\\\"\"],\"IQ3gAw\":[\"Téléverser un fichier\"],\"IUwGEM\":[\"Enregistrer les modifications\"],\"IUwmLq\":[\"Dépendances directes déclarées dans package.json et src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Bibliothèques open source\"],\"I_43p6\":[\"Sécurité\"],\"Iaizf4\":[\"Apparence\"],\"Il3FBB\":[\"Afficher/masquer le panneau de filtres structurés\"],\"IniZRK\":[\"Téléchargement indisponible - seul l’aperçu est chargé\"],\"Isaozb\":[\"Vérifier et ajuster\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Les requêtes et connexions actives via ce plugin seront interrompues.\"],\"J6v1s_\":[\"Modèle par défaut\"],\"JE-DVk\":[\"Interpréteur\"],\"JEGlfK\":[\"Début\"],\"JKDPqP\":[\"Sélectionnez d'abord un contexte\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Utiliser un tunnel SSH\"],\"JRz8tw\":[\"MySQL et MariaDB n’exposent des métriques réelles que sur les variantes prises en charge d’EXPLAIN ANALYZE ou ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP ou SVG · max. 512 Ko\"],\"JY5Oyv\":[\"Base de données\"],\"JlFRIB\":[\"Fuseau horaire de session envoyé à MySQL après connexion.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Refusée\"],\"K3H9p5\":[\"Non défini\"],\"K5Dgu_\":[\"Bases de données\"],\"K8IGKf\":[\"Type d’authentification\"],\"KAYNSW\":[\"Combien de logs conserver en mémoire (1-10000)\"],\"KHTGbr\":[\"EXPLAIN préalable\"],\"KHvda8\":[\"Non nul\"],\"KJKNaZ\":[\"Copier comme `column`\"],\"KM5Kc8\":[\"Au moins une colonne doit être sélectionnée\"],\"KSCnVQ\":[\"Type\"],\"KUjOb9\":[\"en cours\"],\"KXBdwy\":[\"Actualiser les routines\"],\"KXNyX7\":[\"Définir DEFAULT\"],\"Kd70-v\":[\"Importer depuis le Presse-papiers...\"],\"KhI4oS\":[\"Ouvrir la ligne référencée dans \",[\"0\"]],\"KhgrNu\":[\"Intégration du serveur MCP\"],\"KirERL\":[\"Délai dépassé\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Échec de suppression de l’index : \"],\"KzeARD\":[\"Échec de suppression de la table : \"],\"L-rMC9\":[\"Réinitialiser par défaut\"],\"L3HXkQ\":[\"Corrections de bugs\"],\"LCZ7Dy\":[\"Copier le nom\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"index\"],\"LMeAoR\":[\"lignes\"],\"LPCdc-\":[\"Prompt de nom d’onglet de requête\"],\"LPFmga\":[\"Sélectionner pour Tout appliquer\"],\"LYzbQ2\":[\"Outil\"],\"Lbis_V\":[\"Navigateur rapide\"],\"Lcpbe2\":[\"Le processus du plugin n’a pas pu être lancé. Vérifiez les détails de l’erreur ci-dessous.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN est uniquement pris en charge pour les instructions DML (SELECT, INSERT, UPDATE, DELETE). Les instructions DDL comme CREATE, DROP ou ALTER ne peuvent pas être expliquées.\"],\"LnT0hQ\":[\"Ajouter une colonne\"],\"LvutiO\":[\"Suggérer avec IA\"],\"M-rHQO\":[\"Quitter le plein écran\"],\"M0XJba\":[\"Voulez-vous vraiment effacer tout l’historique des requêtes pour cette connexion ?\"],\"M1co_O\":[\"Configuré\"],\"M73whl\":[\"Contexte\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Tout afficher\"],\"MXdOwj\":[\"Séparer les connexions\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Sélectionner une connexion K8s\"],\"Mc1tjS\":[\"Activez ANALYZE pour inspecter les lignes réelles, le temps, les boucles et les buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" lignes supplémentaires\"],\"Mp0jQ_\":[\"Ce pilote ne prend en charge les clés primaires qu’à la création de la table\"],\"MqpZwN\":[\"Processus Tabularis\"],\"MxIx43\":[\"↑↓ pour naviguer, Entrée pour ouvrir\"],\"MygtgQ\":[\"Ajouter une cellule Markdown\"],\"N40H-G\":[\"Tous\"],\"N5UQxq\":[\"Ollama non détecté sur le port \",[\"0\"],\". Est-il en cours d’exécution ?\"],\"N6GBcC\":[\"Confirmer la suppression\"],\"N6aqHp\":[\"Requêtes exécutées\"],\"N9_S15\":[\"Une nouvelle table sera créée\"],\"NBdMa1\":[\"Étape la plus lente\"],\"NC2AI2\":[\"Longueur\"],\"NCzNnx\":[\"Tri croissant\"],\"NT4Ubs\":[\"Supprimer la clé personnalisée et revenir à la variable d’environnement (si présente)\"],\"NUjrCO\":[\"Aucun favori ne correspond à votre recherche\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Total de l’arborescence : \",[\"0\"]],\"Nc2VQn\":[\"Ajouter à existante\"],\"NgFERn\":[\"Ajouter aux favoris\"],\"NktMHG\":[\"Nom de la base de données\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Tester\"],\"Nq5QTk\":[\"expliquer la n-ième\"],\"O2STgu\":[\"Échec de l’export : \"],\"O8SV8O\":[\"Téléchargement...\"],\"O9_WW6\":[\"connexion\"],\"OGEsKj\":[\"Exécuter toutes les cellules\"],\"OGWdBg\":[\"Nom de la vue\"],\"OHqT6w\":[\"Appuyez sur une combinaison de touches...\"],\"OXJsaG\":[\"Nom de paramètre invalide\"],\"OfhWJH\":[\"Réinitialiser\"],\"OlAl5i\":[\"Tout développer\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Rejoindre Discord\"],\"P1YGsb\":[\"Génération SQL\"],\"P2m1xb\":[\"Arrêter en cas d’erreur\"],\"P3Qlys\":[\"Aucun ID de connexion\"],\"P6Y3Yf\":[\"Exécutez cette commande dans votre terminal, puis redémarrez Claude Code.\"],\"PCdj-c\":[\"Tout désélectionner\"],\"PMnFt9\":[\"Lecture disque/s\"],\"PQU2Va\":[\"Accepter la suggestion avec Entrée\"],\"PRnH8G\":[\"sur \",[\"0\"]],\"PY8UF3\":[\"Parallèle basculé (cellule \",[\"n\"],\")\"],\"PiH3UR\":[\"Copié !\"],\"Pia95d\":[\"Le nom de la colonne est requis\"],\"PrElXQ\":[\"Mettre à jour\"],\"PrixCC\":[\"Les lignes seront ajoutées à une table existante\"],\"Pujgbb\":[\"Configurer la destination\"],\"Pw_eQV\":[\"Échec de démarrage du plugin\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Aucune requête enregistrée\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Aucun processus enfant\"],\"QCxMC0\":[\"Vérifier automatiquement les nouvelles versions au lancement de l’application\"],\"QEazml\":[\"Supprimer la sélection\"],\"QHcLEN\":[\"Connecté\"],\"QLHHFO\":[\"Mode lecture seule\"],\"QOvAW3\":[\"Nouvelles fonctionnalités\"],\"QULGRi\":[\"Aucune requête valide trouvée\"],\"QZwllF\":[\"Parcourir...\"],\"QbkSr_\":[\"EXPLAIN indisponible.\"],\"QeHFYZ\":[\"EXPLAIN a échoué : \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"En savoir plus\"],\"Qu4Hog\":[\"Notebook importé avec succès\"],\"R-A2Vd\":[\"Aucune donnée à afficher\"],\"R0Hkb2\":[[\"0\"],\" base(s) de données sélectionnée(s)\"],\"R1nHhB\":[\"Existe déjà\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convertir en console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configuration\"],\"RF-HyV\":[\"Choisissez votre langue préférée. \\\"Auto\\\" utilisera la langue de votre système.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copier le nom\"],\"RI-HZc\":[\"Saisir la clé \",[\"0\"]],\"RJrE17\":[\"Voulez-vous vraiment supprimer la vue \\\"\",[\"0\"],\"\\\" ?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Une étoile aide d’autres personnes à découvrir le projet\"],\"Rb3Tdm\":[\"Nom du notebook\"],\"RcbKJ3\":[\"À la mise à jour\"],\"RkefFq\":[\"Exécute EXPLAIN avant d'afficher le modal pour montrer le plan.\"],\"RnF_hl\":[\"Chargement du registre des plugins...\"],\"Rns7_C\":[\"Cette action ne peut pas être annulée immédiatement\"],\"RoKRqW\":[\"Plugins disponibles\"],\"RphpKk\":[\"Apparence\"],\"Rt8sHM\":[\"Travail de tri ou temporaire détecté\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Activés\"],\"S1veKH\":[\"Annuler la sélection\"],\"S5zeZU\":[\"Afficher/masquer l’aperçu\"],\"S8Yqbl\":[\"Insérer\"],\"SDND4q\":[\"Non configuré\"],\"SJRy3D\":[\"(Généré automatiquement)\"],\"SSwIjo\":[\"Définir EMPTY\"],\"SgvA_r\":[\"Appuyez sur Exécuter (Ctrl/Commande+F5) pour charger les données de la table\"],\"SlfejT\":[\"Erreur\"],\"SoATkx\":[\"Copier la cellule\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL du point de terminaison\"],\"T7w5CQ\":[\"Échec de création de la nouvelle ligne : \"],\"T9947j\":[\"Valeur (ex. 'texte' ou 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Passer en disposition verticale\"],\"TK5oex\":[\"Enregistrer le prompt\"],\"TKQ7K-\":[\"Installer\"],\"TKZreP\":[\"Exiger\"],\"TMLAx2\":[\"Requis\"],\"TO08JI\":[\"clés étrangères\"],\"TQloo1\":[\"Créer une clé étrangère\"],\"TVKqvO\":[\"Modifier la ligne\"],\"TYSdQ3\":[\"Exécuter une requête SELECT\"],\"TfDFHS\":[\"Retourne les longues lignes dans l’éditeur au lieu d’un défilement horizontal.\"],\"Tibfjs\":[\"Aucune connexion enregistrée — créez-en une ci-dessous\"],\"Tj36Dr\":[\"Réinitialiser par défaut\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Verrouiller\"],\"TpwXyg\":[\"Si le temps manque, le serveur a probablement renvoyé un plan uniquement estimé.\"],\"Tw2M1h\":[\"Échec de l’installation\"],\"Ty-rm9\":[\"Connexions SSH\"],\"Tz0i8g\":[\"Paramètres\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Connexions Kubernetes\"],\"U4uzyV\":[\"Nouveautés\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Arrêter l’exécution lorsqu’une cellule échoue\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" sur \",[\"1\"],\" — examinez avant exécution.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configuration installée avec succès pour \",[\"clientName\"],\" ! Redémarrez l’application pour l’appliquer.\"],\"URmyfc\":[\"Détails\"],\"UWQBvp\":[\"Générer des modèles SQL\"],\"UawTKZ\":[\"Optionnel. Spécifiez l’exécutable utilisé pour lancer ce plugin (ex. python3 sous macOS/Linux, python ou un chemin complet sous Windows). Laissez vide pour utiliser la valeur par défaut.\"],\"Ub8sf5\":[\"SQLite ne prend pas en charge la suppression des clés étrangères via ALTER TABLE.\"],\"UbbJ8j\":[\"Aucune option trouvée\"],\"Ubs68g\":[\"Général\"],\"UftN8J\":[\"Ces connexions refuseront les écritures via MCP. Les autres restent normales.\"],\"UnQNah\":[\"Voulez-vous vraiment supprimer la colonne \\\"\",[\"0\"],\"\\\" de la table \\\"\",[\"tableName\"],\"\\\" ?\\n\\nATTENTION : toutes les données de cette colonne seront définitivement supprimées. Cette action est irréversible.\"],\"UncTTh\":[\"Somme du RSS sur l’arborescence des processus — peut surestimer la mémoire partagée\"],\"UpjgFm\":[\"Paramètres modifiés\"],\"UsAnu1\":[\"ANALYZE exécute la requête. Utilisez-le avec prudence pour les instructions modifiant les données.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Taille de tabulation\"],\"UzWGWO\":[\"Basculer vers le champ SQL WHERE\"],\"V-chk5\":[\"À quelle fréquence vérifier si les connexions actives sont toujours vivantes. Définissez 0 pour désactiver.\"],\"V-pw1j\":[\"Nom de la table\"],\"V2T0Uw\":[\"Aucun notebook enregistré pour le moment.\"],\"V3aNwx\":[\"Éditeur de données\"],\"VGYp2r\":[\"Appliquer à tout\"],\"VH8S7x\":[\"Colonne du presse-papiers\"],\"VIAEcS\":[\"Échec du chargement des bases de données. Vérifiez vos identifiants.\"],\"VKdztF\":[\"Ajouter des lignes\"],\"VLiHXI\":[\"Analyser les données\"],\"VMbmXc\":[\"Voulez-vous vraiment supprimer \\\"\",[\"pluginName\"],\"\\\" ? Cela supprimera les fichiers du plugin.\"],\"VO3weF\":[\"Aucun fichier chargé\"],\"VOZlKc\":[\"Importer une base de données\"],\"VPzsIz\":[\"Génération du nom...\"],\"VUul0v\":[\"Tuer\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Toutes les requêtes\"],\"Vi2Pqx\":[\"par\"],\"Vl2zn2\":[\"arrêté\"],\"Vo4uBA\":[\"Une erreur s’est produite lors de l’installation du plugin. Voir les détails ci-dessous.\"],\"VqqyOs\":[\"Exécutez une requête pour voir les résultats\"],\"VzhDFh\":[\"Bloquer tout statement non-SELECT via MCP, sauf pour les connexions autorisées ci-dessous.\"],\"W3uwpT\":[\"Fermer tous les onglets\"],\"W4MKLh\":[\"ex. Risqué en prod, confirmez…\"],\"WA8RND\":[\"Voulez-vous vraiment supprimer la table \\\"\",[\"0\"],\"\\\" ?\"],\"WG8Qgt\":[\"Supprimer la table\"],\"WLnvCZ\":[\"Saisir le nom d'utilisateur\"],\"WM-__8\":[\"Rechercher des connexions...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes importées dans \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" lignes importées dans \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Voulez-vous vraiment supprimer la requête \\\"\",[\"0\"],\"\\\" ?\"],\"WarTN_\":[\"réussies\"],\"WcF1uL\":[\"Nom du groupe\"],\"Weq9zb\":[\"Général\"],\"WmPpB1\":[\"Chargement du plan d'exécution…\"],\"Wu7cK0\":[\"Aucune base de données trouvée\"],\"WvoUQF\":[\"Cellule \",[\"n\"],\" supprimée\"],\"Ww3pDD\":[\"COMMANDE MANUELLE\"],\"X-20AU\":[\"Saisir le prompt de nom d’onglet de requête...\"],\"X-U6_w\":[\"Famille de police\"],\"X5fs0g\":[\"Créez votre première connexion pour commencer.\"],\"X7Ayjp\":[\"Mot de passe enregistré dans le trousseau système\"],\"X9kySA\":[\"Favoris\"],\"XJOV1Y\":[\"Activité\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Explication de requête\"],\"XVF2Pf\":[\"Modifier les schémas\"],\"XW6OYF\":[\"Ce plugin peut nécessiter un interpréteur (ex. Python). Utilisez les paramètres du plugin pour configurer le chemin de l’interpréteur.\"],\"XZB6Xr\":[\"Nombre max d’entrées de log\"],\"Xcffv2\":[\"Afficher les boutons AI Assist et Explain dans l’éditeur\"],\"XeqTSh\":[\"Type de jointure\"],\"XmJfZT\":[\"nom\"],\"XoQfG1\":[\"Utilisateur SSH\"],\"XwI0Vw\":[\"Auto (Système)\"],\"XyDlLX\":[\"Nom de l’index\"],\"Y2P2aK\":[\"Sélectionnez les schémas à charger :\"],\"Y8HYw2\":[\"valeur\"],\"Y8zX3R\":[\"Insérer dans l’éditeur\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Rechercher...\"],\"YWlnMZ\":[\"Port Ollama\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Parcourez et installez des plugins depuis le registre.\"],\"Y_3yKT\":[\"Ouvrir dans un nouvel onglet\"],\"YiAQ_Q\":[\"Actualiser les tables\"],\"Ysjr9Y\":[\"Aperçu SQL\"],\"YswNf7\":[\"Tous les niveaux\"],\"YtNwr6\":[\"Nombre maximal d’entrées d’historique de requêtes stockées par connexion.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Chargement...\"],\"Z7ZXbT\":[\"Approuver\"],\"Z8JpBH\":[\"Exporter en Notebook\"],\"Z8fBIc\":[\"Les lignes réelles dépassent l’estimation\"],\"ZC2VJP\":[\"Exécuter\"],\"ZCIS4k\":[\"aucun filtre actif\"],\"ZF1_UT\":[\"Mode SSL\"],\"ZGjBPa\":[\"Effacer les logs\"],\"ZHQTlM\":[\"Import depuis\"],\"ZIFDoJ\":[\"Veuillez sélectionner au moins Structure ou Données\"],\"ZIZA6o\":[\"Modifier avant d'approuver\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avertissements d'analyse\"],\"other\":[\"#\",\" avertissements d'analyse\"]}]],\"ZVn8p2\":[\"Affiche les numéros de ligne dans la marge de l’éditeur.\"],\"ZYnwzF\":[\"Déconnecté\"],\"Za3_fO\":[\"Erreur\"],\"Zf7LHg\":[\"Aucun contexte trouvé (kubectl est-il installé ?)\"],\"Zfotp5\":[\"De grands écarts d’estimation indiquent généralement des statistiques obsolètes ou des prédicats mal modélisés par le planificateur.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Échec du chargement des schémas\"],\"ZqXGPF\":[\"Échec de suppression de la vue : \"],\"ZuL73E\":[\"Créer une nouvelle vue de base de données\"],\"_-bi4r\":[\"Table référencée\"],\"_AEYGI\":[\"Aucun historique d’exécution pour le moment\"],\"_FdpZc\":[\"Échec du chargement de la définition de la vue : \"],\"_FxSdi\":[\"Parcourez les dépendances open source directes utilisées par l’application, le backend et l’outillage.\"],\"_JyTG8\":[\"Saisir le prompt d’explication...\"],\"_Ltc_k\":[\"Suppléments\"],\"_Q2Wix\":[\"lignes\"],\"_TK1zF\":[\"Connexion enregistrée\"],\"_bJFBE\":[\"Délai d’expiration de connexion\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Arborescence\"],\"_dqduX\":[\"Page suivante\"],\"_fwE6J\":[\"Plus ancien\"],\"_n04sB\":[\"Tuer\"],\"_otxbQ\":[\"Fichier de clé\"],\"_pezIT\":[\"Échec de connexion à \",[\"0\"],\". Vérifiez vos paramètres ou assurez-vous que la base de données est en cours d’exécution.\"],\"_srfkj\":[\"Clé personnalisée supprimée avec succès\"],\"_t6aFo\":[\"MySQL et MariaDB peuvent revenir à EXPLAIN FORMAT=JSON ou à EXPLAIN tabulaire selon la version du serveur.\"],\"_xTbaM\":[\"colonnes\"],\"_yxaaL\":[\"Index unique\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis est un projet libre et open source. Si vous le trouvez utile, pensez à soutenir le projet et à rejoindre la communauté.\"],\"a9CASo\":[\"SQLite ne prend en charge que le renommage des colonnes. Les autres modifications nécessitent de recréer la table manuellement.\"],\"aAIQg2\":[\"Apparence\"],\"aC_vCa\":[\"Générer un nom avec l’IA\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Sélectionnez un nœud pour voir les détails\"],\"aHKcKc\":[\"Page précédente\"],\"aI-5wG\":[\"Vérifier CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valeur par défaut\"],\"aScJP1\":[\"Exécuter cette requête\"],\"aVNbN8\":[\"Conditions de filtre\"],\"aWhdMQ\":[\"Utiliser une connexion SSH existante\"],\"aXYd8V\":[\"Délai\"],\"aX_S_r\":[\"Page \",[\"0\"],\" sur \",[\"totalPages\"]],\"agZcf8\":[\"SQL généré : \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [champs]\"],\"alplHn\":[\"Analyse du plan de requête avec l’IA...\"],\"anBcU3\":[\"Si vous aimez tabularis et souhaitez voir davantage de fonctionnalités, pensez à soutenir le projet en contribuant au code, en signalant des bugs ou en mettant une étoile au dépôt.\"],\"arHmj2\":[\"Voulez-vous vraiment supprimer cette requête de l’historique ?\"],\"arKcqW\":[\"Les anciens serveurs peuvent revenir à des plans estimés avec moins de métriques.\"],\"arcpYe\":[\"Validation requise\"],\"aurEkh\":[\"Chargement des processus…\"],\"avtdsd\":[\"Mode SQL\"],\"az8lvo\":[\"Désactivée\"],\"b1Ah3z\":[\"Focalisé sur\"],\"b392Dr\":[\"Tout développer\"],\"b5S_PU\":[\"Nom de la base de données\"],\"bAvovP\":[\"Descendre\"],\"bH3JqY\":[\"Aucune table trouvée\"],\"bP5JOn\":[\"Retour à la ligne automatique\"],\"bcOdok\":[\"Supprimer le groupe\"],\"bcqeas\":[\"Mettre toutes les requêtes MCP en lecture seule\"],\"bmca5u\":[\"Écritures seulement\"],\"bpCiBU\":[\"Autoriser les écritures via MCP\"],\"bqnhqW\":[\"L’estimation dépasse les lignes réelles\"],\"bqpcP7\":[\"Exporter la base de données\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Erreur\"],\"bw22Gk\":[\"Schéma des colonnes\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Principaux problèmes\"],\"cFCKYZ\":[\"Refuser\"],\"cFGrCP\":[\"table\"],\"cGeFup\":[\"Taille de police\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focaliser sur la table\"],\"cM9NHc\":[\"Rétrograder vers\"],\"cO9-2L\":[\"Désactiver\"],\"cSev-j\":[\"Filtres\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importer \",\"#\",\" lignes\"],\"other\":[\"Importer \",\"#\",\" lignes\"]}]],\"c_xoSn\":[\"Cellule \",[\"n\"],\" renommée\"],\"cd0XEW\":[\"Enregistrer la requête\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Diviser le groupe\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" instructions\"],\"d34vwG\":[\"Charger les bases de données\"],\"d6ynQ7\":[\"Tri décroissant\"],\"d8_6_v\":[\"annuler\"],\"d8wc1_\":[\"Exemples de valeurs\"],\"dBXoCS\":[\"Une variable d’environnement est présente, mais vous pouvez la remplacer en définissant une clé ci-dessus.\"],\"dD7NPy\":[\"Plan\"],\"dEgA5A\":[\"Annuler\"],\"dMtLDE\":[\"à\"],\"dPJVhW\":[\"Échec de l’installation\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" session\"],\"other\":[\"#\",\" sessions\"]}]],\"dTUzKm\":[\"Exécuter la sélection (\",[\"0\"],\")\"],\"dU_iQN\":[\"Aucune session ne correspond aux filtres.\"],\"dUh9QW\":[\"Planification\"],\"dVoir2\":[\"Cellule Markdown \",[\"n\"],\" ajoutée\"],\"dZ0d2O\":[\"Veuillez sélectionner au moins une table\"],\"dhi13U\":[\"Choisir une image…\"],\"dli1JX\":[\"Soumettre les modifications\"],\"dmYV6f\":[\"Routines\"],\"dohZCo\":[\"Instructions pour la génération SQL par IA. Utilisez \",[\"SCHEMA\"],\" comme espace réservé pour la structure de la base de données.\"],\"dtxpK2\":[\"Analyser\"],\"dwW9nJ\":[\"Afficher les numéros de ligne\"],\"dwWVw_\":[\"Afficher l’écran d’accueil\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" onglet\"],\"other\":[\"#\",\" onglets\"]}]],\"dxxY9r\":[\"Si existe\"],\"dyN4j9\":[\"Cliquez sur \\\"Exécuter l’aperçu\\\" pour voir les résultats\"],\"e07Iz5\":[\"Ouvrir le gestionnaire des tâches\"],\"e0NzXu\":[\"Ce projet est un Work In Progress (WIP). Les fonctionnalités principales sont stables, mais nous avons de grands projets.\"],\"e1UKxf\":[\"Enregistrer cette requête\"],\"e34gdU\":[\"Temps d'attente avant échec.\"],\"e62LQd\":[\"Forcer l’arrêt\"],\"e6QZsM\":[\"Thème de l’éditeur\"],\"e8CirT\":[\"Exécuter la requête\"],\"eD2kUP\":[\"Buffers lus\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Saisir le prompt d’analyse de plan EXPLAIN...\"],\"eIVolo\":[\"Lecture/écriture disque\"],\"eJOEBy\":[\"Exportation...\"],\"eKHY3W\":[\"Paramètres du plugin\"],\"eMb6Ub\":[\"Choisir une ressource...\"],\"ePK91l\":[\"Modifier\"],\"eXweu6\":[\"Développer la cellule\"],\"ecNsTE\":[\"Aucune requête ne correspond à votre recherche\"],\"ecUA8p\":[\"Aujourd’hui\"],\"ecpIZP\":[\"Saisissez la phrase secrète si la clé est chiffrée\"],\"esl-Tv\":[\"Type de ressource\"],\"exyUec\":[\"Connexion\"],\"f2AJjl\":[\"Supprimer la ligne\"],\"f4pD-j\":[\"Échec du test de connexion\"],\"f7sXvi\":[\"Saisir le mot de passe\"],\"fAsxc0\":[\"Scans séquentiels\"],\"fIeFs0\":[\"Sélectionner une valeur...\"],\"fJm92A\":[\"Sélectionnez un fichier contenant un plan EXPLAIN (format JSON ou texte PostgreSQL) pour le visualiser.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Valeurs\"],\"f_b1TA\":[\"Historique d’exécution\"],\"fghnqP\":[\"Passer à la connexion 1-9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Virgule (,)\"],\"fp711N\":[\"Bloquée (lecture seule)\"],\"fpzyLj\":[\"Page \",[\"0\"],\" sur \",[\"1\"]],\"fuA6oy\":[\"Délai d’expiration du socket\"],\"fvImQM\":[[\"0\"],\" sélectionnées\"],\"fwr_nh\":[\"Installez des extensions, gérez les pilotes de plugins et gardez les paramètres d'exécution sous contrôle.\"],\"g0ZzK4\":[\"JSON valide\"],\"g11hAR\":[\"Nouvelle ligne\"],\"g8VcMm\":[\"Mon cluster K8s\"],\"gCFR_O\":[\"Exécution parallèle (Tout exécuter)\"],\"gEjU98\":[\"Ouvrir les connexions\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Au moins une colonne est requise\"],\"gSuQrG\":[\"Aucune connexion ne correspond à \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Relancer la requête\"],\"gZWMnn\":[\"Analyse IA\"],\"ghYd73\":[\"Choisir la cible...\"],\"giAqEC\":[\"Créer une nouvelle table\"],\"gnQS8X\":[\"Taille maximale de paquet utilisée par le connecteur MySQL.\"],\"gqV5VL\":[\"Intégré, non personnalisable\"],\"gww_XE\":[\"Colonne référencée\"],\"gxXPJ9\":[\"Configurer l’interpréteur\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Agrandir\"],\"h-XNc9\":[\"Délimiteur CSV\"],\"h-kNAk\":[\"ex. donnees_ventes\"],\"h3Z_aK\":[\"Écrivez du Markdown ici...\"],\"h7MgpO\":[\"Raccourcis clavier\"],\"h7peZQ\":[\"Autoriser\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processus système en cours\"],\"other\":[\"#\",\" processus système en cours\"]}]],\"hEZrFh\":[\"Exécuter un fichier SQL...\"],\"hEipgW\":[\"Vérifier les mises à jour maintenant\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Exporter en CSV\"],\"hItdtk\":[\"Parcourir le dossier\"],\"hXFVjo\":[\"Le nom de la table est requis\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Relancer\"],\"hbz1rh\":[\"clés\"],\"hdsaJo\":[\"Importation...\"],\"he3ygx\":[\"Copier\"],\"hfGimp\":[\"Choisir un namespace...\"],\"hjjSEi\":[\"Connexions en lecture seule\"],\"hjwN_s\":[\"Nom de la ressource\"],\"hlF1mD\":[\"Copier la sélection\"],\"hnboBb\":[\"Analyse IA du plan de requête\"],\"hq4-D2\":[\"La clé API est stockée en toute sécurité dans le trousseau système. Définir une clé ici remplace la variable d’environnement.\"],\"hqjXdn\":[\"Échec de suppression de la connexion SSH\"],\"hqofAK\":[\"Copier le SQL\"],\"hy6L14\":[\"Voir sur GitHub\"],\"hyjACX\":[\"Cellules réduites/développées\"],\"hz1b5W\":[\"Aucun élément correspondant trouvé\"],\"i1vAVM\":[\"Créer nouvelle table\"],\"i3S5T3\":[\"Rechercher dans les favoris...\"],\"i4_LY_\":[\"Écriture\"],\"i5HBWh\":[\"Historique des requêtes réinitialisé\"],\"iAVlge\":[\"Personnalisez les instructions pour la génération IA des noms de cellules de notebook. Le contenu de la cellule (SQL ou Markdown) est envoyé comme message utilisateur.\"],\"iE1yAB\":[\"Filtrer les tables...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connecter\"],\"iSryJ2\":[\"Mon serveur SSH\"],\"iT7UeX\":[\"Ajouter un index\"],\"iUWwuR\":[\"Télécharger et installer\"],\"ia7i08\":[\"Sélectionnez d'abord contexte/namespace/type\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Enregistré\"],\"igcsfY\":[\"Aucun plugin disponible dans le registre.\"],\"ij-Elv\":[\"Aperçu de l’image\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" requêtes explicables trouvées\"],\"other\":[\"#\",\" requêtes explicables trouvées\"]}]],\"ioL38P\":[\"Surveillez en temps réel les processus plugins, le CPU, la RAM et l’utilisation disque\"],\"ixlL_e\":[\"Fichier de clé SSH (optionnel)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Sélectionner un modèle\"],\"j3gyYH\":[\"Tout appliquer\"],\"j5CWO4\":[\"À jour\"],\"j9HPuI\":[\"Ligne n°\",[\"0\"]],\"jBtpMP\":[\"Tous les statuts\"],\"jEu4bB\":[\"Colonnes\"],\"jEyQIs\":[\"Aucune routine trouvée\"],\"jHc1By\":[\"Supprimer la vue\"],\"jI6sj4\":[\"Le coût, le temps et les estimations de lignes sont souvent indisponibles comparés à PostgreSQL et MySQL.\"],\"jIxQCZ\":[\"Indisponible sur votre plateforme\"],\"jKIncn\":[\"Le nom de la base de données est requis\"],\"jPSk57\":[\"Motif (facultatif)\"],\"jUNY_d\":[\"vue\"],\"jVqjDo\":[\"Format de fichier notebook invalide\"],\"jWSZ-A\":[\"Aperçu uniquement - données complètes non chargées\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Délai d’expiration du socket en millisecondes.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Le nom de la connexion est requis\"],\"jsQZMk\":[\"IA\"],\"juO8wz\":[\"processus enfant\"],\"jx0t66\":[\"Réduire les processus enfants\"],\"jxShEf\":[\"Créer une vue\"],\"jz5PKx\":[\"Définition de la vue\"],\"k-0mL-\":[\"Ajouter une colonne\"],\"k-XiMX\":[\"Brut\"],\"k2UnVy\":[\"Condition hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"secondes\"],\"kBiBq7\":[\"Supprimer l’index \\\"\",[\"name\"],\"\\\" ?\"],\"kEYasw\":[\"Afficher/masquer le graphique\"],\"kI1qVD\":[\"Formater\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes · \",[\"1\"],\" ms\"],\"other\":[\"#\",\" lignes · \",[\"2\"],\" ms\"]}]],\"kJDmsI\":[\"Détails de l'événement\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registre\"],\"kY-q3P\":[[\"label\"],\" est requis\"],\"kexIdC\":[\"Utiliser le Port-Forward Kubernetes\"],\"kj2-CR\":[\"Détails de l’erreur\"],\"krksx_\":[\"Succès\"],\"kwY6nh\":[\"Fermer\"],\"kx0s-n\":[\"Résultats\"],\"kxUEfE\":[\"Échec de récupération de la définition de la routine : \"],\"l2Op2p\":[\"Paramètres de requête\"],\"l9Ivba\":[\"Processus plugins et ressources système\"],\"lBdPxu\":[\"Couleur d'accent\"],\"lCF0wC\":[\"Actualiser\"],\"lEQRwq\":[\"Données (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nouvelle table créée\"],\"lOekZ3\":[\"Passer en disposition horizontale\"],\"lUA1C1\":[\"Phrase secrète de clé SSH (optionnel)\"],\"lVeG20\":[\"Dépendances Rust\"],\"lXAG6D\":[\"Instructions pour l’explication de requêtes par IA. Utilisez \",[\"LANGUAGE\"],\" comme espace réservé pour la langue de sortie.\"],\"lbbYjy\":[\"Modifiez directement le fichier de configuration brut. Un redémarrage est nécessaire pour appliquer les changements.\"],\"lhKW0m\":[\"Cellule SQL \",[\"n\"],\" ajoutée\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Taille de page des résultats (limite)\"],\"lkz6PL\":[\"Durée\"],\"lmVGeo\":[\"Ajouter une clé étrangère\"],\"lnnx3E\":[\"Connectez Tabularis à Claude Desktop, Cursor et plus encore\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Ajouter\"],\"m2Q_r8\":[\"Détecter le JSON dans les colonnes texte\"],\"m2tskz\":[\"Succès\"],\"mA-qpe\":[\"Exécution complète\"],\"mBhhbA\":[\"Logs exportés dans le presse-papiers\"],\"mCNdzH\":[\"Exécuter la cellule\"],\"mO95sp\":[\"Fermer le panneau\"],\"mP7dLi\":[\"Saisissez le nom de la police ci-dessus\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloqué\"],\"other\":[\"#\",\" bloqués\"]}]],\"mS74ir\":[\"Échec de l’enregistrement de la connexion SSH\"],\"mSqtw8\":[\"Exécuter l’aperçu\"],\"mURmfQ\":[\"Définition de la vue (SQL)\"],\"mX_isJ\":[\"Verticale\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Structure (DDL)\"],\"mrk4Cf\":[\"Trier par \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Nous venons d’ouvrir une communauté dédiée à Tabularis : entraide, astuces et influence sur la roadmap.\"],\"mtvVdV\":[\"Lignes traitées\"],\"mx4evv\":[\"Créer la table\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Télécharger\"],\"n7JDTx\":[\"Installez et activez des plugins pour les voir ici\"],\"nDDJir\":[\"Rechercher session, client, connexion…\"],\"nHP-Kr\":[\"Aucune session active. Veuillez sélectionner une connexion.\"],\"nKhCjW\":[\"Sélectionner les tables\"],\"nNmhuY\":[\"Créer un index\"],\"nNwvm4\":[\"Erreur\"],\"nOVim5\":[\"Échec de l’enregistrement de la connexion\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Extension requise : \",[\"0\"]],\"ngO6Pv\":[\"Autorise la touche Entrée (en plus de Tab) à accepter la suggestion d’autocomplétion active. Lorsqu’elle est désactivée, Entrée insère toujours un saut de ligne.\"],\"nhmF3p\":[\"connexions\"],\"noM5A_\":[\"Créez votre première connexion\"],\"nohy4m\":[\"Aucune activité MCP.\"],\"nr-axf\":[\"Supprimer le plugin\"],\"nsPFX9\":[\"Ouvrir dans Visual Explain\"],\"nuBbBr\":[\"Graphique\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Modifier\"],\"o21Y-P\":[\"entrées\"],\"o3tP_A\":[\"Supprimer l’index\"],\"o45L8r\":[\"Indiquez le nom de votre connexion\"],\"o53XGh\":[\"Copier la/les ligne(s) sélectionnée(s)\"],\"o7J4JM\":[\"Filtre\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Niveau\"],\"oGiIL7\":[\"Fournisseur par défaut\"],\"oJ4rAm\":[\"Connexion perdue\"],\"oJlXF2\":[\"Importer le notebook\"],\"oMFv82\":[\"Diviser verticalement\"],\"oOFiQg\":[\"Limite le nombre de lignes récupérées par requête afin d’éviter les problèmes de performance. Définissez 0 pour désactiver la limite (non recommandé).\"],\"oT9ZD3\":[\"Masquer la vue d’ensemble\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Graphique modifié (cellule \",[\"n\"],\")\"],\"oWfclW\":[\"Affiche le visualiseur JSON lorsqu'une cellule texte non typée contient un objet ou un tableau JSON. Ajoute un petit coût d'analyse par cellule.\"],\"obpbdz\":[\"Fichier de configuration introuvable (à créer manuellement)\"],\"odZgfC\":[\"CLIENTS IA\"],\"ogZhXn\":[\"Choisissez la direction de disposition par défaut pour les diagrammes ER\"],\"ohUJJM\":[\"Plugins\"],\"ok3hJJ\":[\"Installés\"],\"olAdaI\":[\"Lignes réelles\"],\"olWzar\":[\"Forcer l’arrêt du processus du plugin\"],\"ovBPCi\":[\"Défaut\"],\"owzTWN\":[\"Modèles IA actualisés depuis les fournisseurs\"],\"oxYi6j\":[\"Ajustez la taille de police de base utilisée dans toute l’application (10-20 px).\"],\"p--hsQ\":[\"Une connexion à la base de données a été perdue\"],\"p6NueD\":[\"NOUVELLE\"],\"pOYHox\":[\"Actions\"],\"pR9bTR\":[\"Aucune donnée BLOB\"],\"pRDT0m\":[\"Table\"],\"pS8S5q\":[\"ex. users, orders, products\"],\"pSws_M\":[\"Nom de la table\"],\"pVLbKZ\":[\"Vue créée avec succès\"],\"pWT04I\":[\"Vérification...\"],\"pZJ_6D\":[\"Le nom de l’index est requis\"],\"pddYFG\":[\"Saisir le prompt de nom de cellule de notebook...\"],\"pnpyuD\":[\"Activer les logs\"],\"pqKMPv\":[\"Échec de la création de la table : \"],\"pqaP1h\":[\"Fermer\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"ex. Comic Sans MS\"],\"pzu7v4\":[\"Horizontale\"],\"q-ch8m\":[\"Les autres restent en lecture seule. Seules celles cochées peuvent écrire.\"],\"qIrtcK\":[\"Mises à jour\"],\"qOqy8G\":[\"Vérification de la configuration...\"],\"qWaVNs\":[\"Enregistrer et redémarrer\"],\"qb3LPX\":[\"Afficher le diagramme ER\"],\"qkK0vq\":[\"Le nom de la vue est requis\"],\"qki9tG\":[\"Erreur\"],\"qoIir-\":[\"L’URL de base de votre API compatible OpenAI. Exemples : https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Tout réduire\"],\"r6ncaO\":[\"Fermer l’onglet\"],\"rAJlpP\":[\"Port du conteneur\"],\"rG3WVm\":[\"Lecture\"],\"rGRCeK\":[\"Effacer l’historique des requêtes\"],\"rNIto7\":[\"Le nom de la ressource est requis\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exporté avec succès\"],\"rY4sEV\":[\"Supprimer la clé étrangère\"],\"rbu0nO\":[\"Gérer les connexions SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connexion(s)\"],\"other\":[\"#\",\" connexion(s)\"]}]],\"rn2_2V\":[\"Supprimer le filtre\"],\"roABNH\":[\"Aucun historique de requêtes\"],\"rtir7c\":[\"inconnu\"],\"ru0-2W\":[\"Aucune connexion active\"],\"rvDPWO\":[\"Écart d’estimation\"],\"rwWjWg\":[\"Notes de version\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Tester la connexion\"],\"sBOaim\":[\"Le fichier de configuration a été enregistré. Redémarrer maintenant pour appliquer les changements ?\"],\"sCyv9B\":[\"Actualiser les modèles\"],\"sSUqe4\":[\"Supprimer\"],\"sUBkgN\":[\"Génération du SQL...\"],\"sZZG3d\":[\"Voulez-vous vraiment importer \\\"\",[\"0\"],\"\\\" ?\\nCela peut écraser des données existantes.\"],\"sbK5ck\":[\"Rechercher dans l’historique...\"],\"sq_bS6\":[\"À la suppression\"],\"suW7-E\":[\"Délai d’expiration de connexion en millisecondes.\"],\"t-R8-P\":[\"Exécution\"],\"t1OfVY\":[[\"totalLibraries\"],\" bibliothèques\"],\"t2TMzs\":[\"Fermer l’onglet\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Sélectionner une table...\"],\"t7KRl1\":[\"Journal de chaque appel MCP et des requêtes en attente de validation. Stockage local.\"],\"t9NJIk\":[\"Opérations gourmandes en scans détectées\"],\"tB7xof\":[\"Opérations temporaires ou de tri\"],\"tBBXTO\":[\"Intervalle de ping\"],\"tFrT3w\":[\"Ajoutez ceci manuellement au fichier de configuration de votre client si l’installation automatique échoue.\"],\"tJ7UbA\":[\"expliquer la sélection\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Diviser horizontalement\"],\"tQhW-D\":[\"Paramètres des logs\"],\"tXFGEx\":[\"Aucune connexion Kubernetes enregistrée. Cliquez sur « Ajouter » pour en créer une.\"],\"tXLz_8\":[\"Supprimer\"],\"tXpRby\":[\"Grille de données\"],\"tbysEk\":[\"Actions\"],\"tdta9X\":[\"Page \",[\"0\"]],\"tfDRzk\":[\"Enregistrer\"],\"tfEioV\":[\"Exécuter toutes les cellules SQL de haut en bas\"],\"tiAIaJ\":[\"Mot de passe SSH manquant. Veuillez le ressaisir.\"],\"tk22BR\":[\"Collez des données structurées et vérifiez le schéma avant l'import\"],\"tst44n\":[\"Événements\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"Fichier SQL exécuté avec succès\"],\"u6QeR6\":[\"Redémarrer maintenant\"],\"uAQUqI\":[\"Statut\"],\"uBAxNB\":[\"Éditeur\"],\"uFViPK\":[\"Aucune connexion SSH disponible\"],\"uHUuhp\":[\"Expliquer cette requête\"],\"uHfFzS\":[\"Taille de police de l’éditeur\"],\"uJ_3K5\":[\"Supprimer le notebook « \",[\"0\"],\" » ? Cette action est irréversible.\"],\"uKaNJ3\":[\"Ouvrir dans l’éditeur JSON\"],\"uQBwTo\":[\"Schémas\"],\"ub54ff\":[\"Centre de plugins\"],\"ufFyBs\":[\"Base de données exportée avec succès\"],\"upNmR2\":[\"Ouvrir l’éditeur latéral\"],\"utMia3\":[\"Tout désélectionner\"],\"uyNaJg\":[\"1 élément\"],\"v61dnS\":[\"Saisissez le nom exact du modèle pour votre fournisseur compatible OpenAI.\"],\"v6oeyr\":[\"Installé\"],\"v75DGg\":[\"Parcourir le fichier\"],\"v99dO4\":[\"Clé primaire\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" requêtes trouvées\"],\"other\":[\"#\",\" requêtes trouvées\"]}]],\"vCSBPD\":[\"Ajouter un filtre\"],\"vH7uJj\":[\"Trier par…\"],\"vUOA1-\":[\"Rechercher des modèles...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE inclut les lignes réelles, le temps, les boucles et les compteurs de buffer lorsqu’ils sont disponibles.\"],\"vXIe7J\":[\"Langue\"],\"vYf4Jm\":[\"Saisissez une fonction SQL complète (ex. ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Préférer\"],\"vditm4\":[\"Expliquer le plan\"],\"vks_ls\":[\"Fermer les autres onglets\"],\"vnAnIp\":[\"Le modèle \",[\"0\"],\" est introuvable dans \",[\"1\"],\". Il pourrait ne pas fonctionner correctement.\"],\"vqoN5u\":[\"Structure\"],\"vrAvbP\":[\"Voulez-vous vraiment supprimer le groupe \\\"\",[\"0\"],\"\\\" ? Les connexions de ce groupe seront déplacées vers Non groupées.\"],\"vtJ2yO\":[\"Explorateur\"],\"vujQJ5\":[\"Localisation\"],\"vvJPVL\":[\"Afficher la vue d’ensemble\"],\"vwI5S4\":[\"Succès\"],\"vzH-7Z\":[\"Expliquer\"],\"w7QmD_\":[\"Saisir le prompt système...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Temps écoulé\"],\"wCfv2R\":[\"Ajouter une connexion\"],\"wGfc86\":[\"Effacer tout l’historique\"],\"wGwNv4\":[\"Base de données active\"],\"wJJ-Wy\":[\"Installation...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers touchés\"],\"wQn-RM\":[\"Ajouter une colonne\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Appliqué\"],\"wTmVhm\":[\"Supprimer\"],\"wZeIWq\":[\"Importer depuis le Presse-papiers\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"En attente\"],\"wckWOP\":[\"Gérer\"],\"wdYcKH\":[\"Onglets ouverts\"],\"wja8aL\":[\"Sans titre\"],\"wkOAzk\":[\"Aucun notebook ne correspond à votre recherche.\"],\"wp49Ao\":[\"Échec du traitement des insertions : \"],\"wqG2hQ\":[\"Ignorer (ne pas importer)\"],\"wwrAsK\":[\"Veuillez remplir tous les champs requis\"],\"wwu18a\":[\"Icône\"],\"x2fr_j\":[\"Graphe\"],\"xANKBj\":[\"Fonctions\"],\"xBwjck\":[\"Un redémarrage est nécessaire pour appliquer les changements.\"],\"xDAtGP\":[\"Message\"],\"xECY01\":[\"Procédures\"],\"xGPNgZ\":[\"Personnalisation des prompts\"],\"xNgtS-\":[\"Aucune vue trouvée\"],\"xOPa1b\":[\"Le port doit être compris entre 1 et 65535\"],\"xY9s5E\":[\"Délai dépassé\"],\"xaVUr1\":[\"Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwis\"],\"xbvTzL\":[\"Chemin du fichier\"],\"xlew5F\":[\"Effacer\"],\"xmNyKz\":[\"Test en cours...\"],\"xtuh6D\":[\"Développer l’explorateur\"],\"y-Zdqj\":[\"Choisir un contexte...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Ouvrir le visualiseur JSON\"],\"yQXjG5\":[\"Tout désélectionner\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Hier\"],\"ygCKqB\":[\"Arrêter\"],\"ykCc6r\":[\"Base de données modifiée (cellule \",[\"n\"],\")\"],\"ynVMSc\":[\"Tout sélectionner\"],\"ytdz1d\":[\"L'IA veut exécuter une écriture\"],\"yyhzur\":[\"Créer une table\"],\"yz7wBu\":[\"Fermer\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"Mot de passe SSH\"],\"z5kV0h\":[\"Connexions\"],\"zBTMzx\":[\"Aperçu\"],\"zCaAKs\":[\"Erreur de mise à jour\"],\"zDAakK\":[\"Impossible d’afficher le diagramme sans ID de connexion.\"],\"zGe21h\":[\"Cette clé est chargée depuis une variable d’environnement\"],\"zGfL5t\":[\"valeur\"],\"zL6-4A\":[\"Aucun processus de plugin n’est en cours\"],\"zLZhCi\":[\"Nouvelle communauté Discord !\"],\"zLlCou\":[\"Copier le nom de colonne\"],\"zNEL34\":[\"Rejoindre la communauté\"],\"zNgTlV\":[\"Fermer les onglets à droite\"],\"zQz55p\":[\"Inspecter la structure\"],\"zR0FfH\":[\"Exporté vers \",[\"target\"]],\"zRZeOc\":[\"Rechercher tables, vues, routines, triggers...\"],\"zUNMsr\":[\"Clé SSH\"],\"zXMRzb\":[\"Port SSH\"],\"zZgoXr\":[\"Aucune table correspondante\"],\"zaWbms\":[\"Annuler les modifications\"],\"zgClmU\":[\"Installer la configuration\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Saisir une valeur...\"],\"zvzN4C\":[\"Définir comme actif\"],\"zzDlyQ\":[\"Succès\"],\"zzMxrp\":[\"Modifier config.json\"],\"zz_Wd_\":[\"Mode\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/it/messages.po b/src/locales/it/messages.po index 62fd84d8..e96e52f3 100644 --- a/src/locales/it/messages.po +++ b/src/locales/it/messages.po @@ -6,39 +6,5291 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: @lingui/cli\n" "Language: it\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" +#: src/components/modals/NewRowModal.tsx +msgid "(Auto-generated)" +msgstr "(Auto-generato)" + +#. placeholder {0}: stats.blocked +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# blocked} other {# blocked}}" +msgstr "{0, plural, one {# bloccato} other {# bloccati}}" + +#. placeholder {0}: proc.children.length +#. placeholder {0}: stats.child_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# child process} other {# child processes}}" +msgstr "{0, plural, one {# processo figlio} other {# processi figli}}" + +#. placeholder {0}: connections.length +#: src/pages/Connections.tsx +msgid "{0, plural, one {# connection} other {# connections}}" +msgstr "{0, plural, one {# connessione/i} other {# connessione/i}}" + +#. placeholder {0}: stats.errors +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# error} other {# errors}}" +msgstr "{0, plural, one {# errore} other {# errori}}" + +#. placeholder {0}: stats.total +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# event} other {# events}}" +msgstr "{0, plural, one {# evento} other {# eventi}}" + +#. placeholder {0}: queries.length +#: src/components/modals/ExplainSelectionModal.tsx +msgid "{0, plural, one {# explainable query found} other {# explainable queries found}}" +msgstr "{0, plural, one {# query analizzabili trovate} other {# query analizzabili trovate}}" + +#. placeholder {0}: parsed.warnings.length +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# parsing warning} other {# parsing warnings}}" +msgstr "{0, plural, one {# avvisi di parsing} other {# avvisi di parsing}}" + +#. placeholder {0}: queries.length +#: src/components/modals/QuerySelectionModal.tsx +msgid "{0, plural, one {# query found} other {# queries found}}" +msgstr "{0, plural, one {# query trovate} other {# query trovate}}" + +#. placeholder {0}: result.rows.length +#. placeholder {1}: executionTime != null ? Math.round(executionTime) : "—" +#. placeholder {2}: executionTime != null ? Math.round(executionTime) : "—" +#: src/components/notebook/ResultToolbar.tsx +msgid "{0, plural, one {# row · {1}ms} other {# rows · {2}ms}}" +msgstr "{0, plural, one {# righe · {1}ms} other {# righe · {2}ms}}" + +#. placeholder {0}: result.rows_inserted +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row imported into \"{tableName}\"} other {# rows imported into \"{tableName}\"}}" +msgstr "{0, plural, one {# righe importate in \"{tableName}\"} other {# righe importate in \"{tableName}\"}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row} other {# rows}}" +msgstr "{0, plural, one {# righe} other {# righe}}" + +#. placeholder {0}: visibleSessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "{0, plural, one {# session} other {# sessions}}" +msgstr "{0, plural, one {# sessione} other {# sessioni}}" + +#. placeholder {0}: systemStats.process_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# system process running} other {# system processes running}}" +msgstr "{0, plural, one {# processo di sistema in esecuzione} other {# processi di sistema in esecuzione}}" + +#. placeholder {0}: tabs.length +#: src/components/modals/TabSwitcherModal.tsx +msgid "{0, plural, one {# tab} other {# tabs}}" +msgstr "" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {Import # row} other {Import # rows}}" +msgstr "{0, plural, one {Importa # righe} other {Importa # righe}}" + +#. placeholder {0}: progress.statements_executed +#. placeholder {1}: progress.total_statements +#: src/components/modals/ImportDatabaseModal.tsx +msgid "{0} / {1} statements" +msgstr "{0} / {1} istruzioni" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "{0} API Key" +msgstr "Chiave API {0}" + +#. placeholder {0}: selectedDatabasesState.length +#: src/components/modals/NewConnectionModal.tsx +msgid "{0} database(s) selected" +msgstr "{0} database selezionato/i" + +#. placeholder {0}: filteredItems.length +#: src/components/modals/QuickNavigatorModal.tsx +msgid "{0} elements" +msgstr "{0} elementi" + +#. placeholder {0}: approval.clientHint +#. placeholder {1}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "{0} on {1} — review and decide before it executes." +msgstr "{0} su {1} — controlla e decidi prima dell'esecuzione." + +#. placeholder {0}: activeTab.result.rows.length +#. placeholder {0}: entry.result!.rows.length +#. placeholder {0}: entry.result.rows.length +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "{0} rows retrieved" +msgstr "{0} righe recuperate" + +#. placeholder {0}: selected.size +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "{0} selected" +msgstr "{0} selezionate" + +#. placeholder {0}: structuredFilters.length +#: src/components/ui/TableToolbar.tsx +msgid "{activeFilterCount} of {0} active" +msgstr "{activeFilterCount} di {0} attivi" + +#: src/components/ui/DataGrid.tsx +msgid "{deleteRowCount, plural, one {Delete # row} other {Delete # rows}}" +msgstr "{deleteRowCount, plural, one {Elimina # righe} other {Elimina # righe}}" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "{label} is required" +msgstr "{label} è obbligatorio" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "{rowCount, plural, one {# row} other {# rows}}" +msgstr "{rowCount, plural, one {# righe} other {# righe}}" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "{totalLibraries} libraries" +msgstr "{totalLibraries} librerie" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/db.sqlite" +msgstr "/percorso/assoluto/db.sqlite" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/folder" +msgstr "/percorso/assoluto/cartella" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "/path/to/id_rsa" +msgstr "/percorso/id_rsa" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "↑↓ to navigate, Enter to open" +msgstr "↑↓ per navigare, Invio per aprire" + +#. placeholder {0}: previewResult.rows.length - 5 +#: src/components/modals/ViewEditorModal.tsx +msgid "+{0} more rows" +msgstr "+{0} righe in più" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "1 element" +msgstr "1 elemento" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "A database connection was lost" +msgstr "Una connessione al database è stata persa" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "A new table will be created" +msgstr "Verrà creata una nuova tabella" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "A restart is required to apply changes." +msgstr "È necessario un riavvio per applicare le modifiche." + +#: src/components/modals/CommunityModal.tsx +msgid "A star helps others discover the project" +msgstr "Una stella aiuta gli altri a scoprire il progetto" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Accent color" +msgstr "Colore di accento" + +#: src/components/settings/AppearanceTab.tsx +msgid "Accept Suggestion with Enter" +msgstr "Accetta Suggerimento con Invio" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Actions" +msgstr "" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Actions" +msgstr "Azioni" + +#: src/pages/TaskManagerPage.tsx +msgctxt "taskManager" +msgid "Actions" +msgstr "Azioni" + +#: src/components/connections/StatusBadge.tsx +msgid "Active" +msgstr "Attiva" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/pages/Editor.tsx +msgid "Active database" +msgstr "Database attivo" + +#: src/pages/TaskManagerPage.tsx +msgid "Active queries and connections through this plugin will be interrupted." +msgstr "Le query attive e le connessioni attraverso questo plugin verranno interrotte." + +#: src/pages/McpPage.tsx +msgid "Activity" +msgstr "Attività" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual Rows" +msgstr "Righe Reali" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual rows exceed estimate" +msgstr "Le righe reali superano la stima" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Add" +msgstr "Aggiungi" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Add Column" +msgstr "Aggiungi Colonna" + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Add Column" +msgstr "Aggiungi Colonna" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Add Column" +msgstr "Aggiungi colonna" + +#: src/pages/Connections.tsx +msgid "Add Connection" +msgstr "Aggiungi Connessione" + +#: src/components/ui/TableToolbar.tsx +msgid "Add filter" +msgstr "Aggiungi filtro" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Foreign Key" +msgstr "Aggiungi Chiave Esterna" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Index" +msgstr "Aggiungi Indice" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add Markdown Cell" +msgstr "Aggiungi Cella Markdown" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add SQL Cell" +msgstr "Aggiungi Cella SQL" + +#: src/components/ui/TableToolbar.tsx +msgid "add the first filter" +msgstr "aggiungi il primo filtro" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Add this to your client config file manually if automatic install fails." +msgstr "Aggiungi questo al file di configurazione del client manualmente se l'installazione automatica fallisce." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add to Favorites" +msgstr "Aggiungi ai Preferiti" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added Markdown cell {n}" +msgstr "Aggiunta cella Markdown {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added SQL cell {n}" +msgstr "Aggiunta cella SQL {n}" + +#: src/components/settings/AppearanceTab.tsx +msgid "Adjust the base font size used throughout the application (10-20px)." +msgstr "Regola la dimensione base del font usata nell'applicazione (10-20px)." + +#: src/pages/Settings.tsx +msgid "AI" +msgstr "AI" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "AI" +msgstr "AI" + +#: src/components/settings/AiActivityPanel.tsx +#: src/pages/Settings.tsx +msgid "AI Activity" +msgstr "Attività AI" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "AI Analysis" +msgstr "Analisi AI" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "AI CLIENTS" +msgstr "CLIENT AI" + +#: src/components/settings/AiTab.tsx +msgid "AI models refreshed from providers" +msgstr "Modelli AI aggiornati dai provider" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Provider not configured. Please go to Settings > AI." +msgstr "Provider AI non configurato. Vai su Impostazioni > AI." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Query Plan Analysis" +msgstr "Analisi AI del Piano di Esecuzione" + +#: src/components/modals/AiApprovalModal.tsx +msgid "AI requested a database write" +msgstr "L'AI vuole eseguire una scrittura sul database" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "AI Suggest" +msgstr "Suggerisci con AI" + +#: src/components/settings/PluginsTab.tsx +msgid "All" +msgstr "Tutti" + +#: src/components/settings/LogsTab.tsx +msgid "All levels" +msgstr "Tutti i livelli" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All other connections stay read-only. Only the connections checked here may execute writes." +msgstr "Tutte le altre connessioni restano in sola lettura. Solo quelle selezionate possono eseguire scritture." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All queries" +msgstr "Tutte le query" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All statuses" +msgstr "Tutti gli stati" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All tools" +msgstr "Tutti gli strumenti" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Allow" +msgstr "Permetti" + +#: src/components/settings/AppearanceTab.tsx +msgid "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline." +msgstr "Permetti al tasto Invio (oltre a Tab) di accettare il suggerimento di autocompletamento attivo. Quando disattivato, Invio inserisce sempre una nuova riga." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Allow writes from MCP" +msgstr "Consenti scritture da MCP" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Already exists" +msgstr "Esiste già" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Alter View" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "An environment variable is present, but you can override it by setting a key above." +msgstr "È presente una variabile d'ambiente, ma puoi sovrascriverla impostando una chiave qui sopra." + +#: src/components/modals/PluginInstallErrorModal.tsx +msgid "An error occurred while installing the plugin. See the details below." +msgstr "Si è verificato un errore durante l'installazione del plugin. Vedi i dettagli qui sotto." + +#: src/components/modals/VisualExplainModal.tsx +msgid "Analyze" +msgstr "Analizza" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Analyze Data" +msgstr "Dati Analyze" + +#: src/components/modals/VisualExplainModal.tsx +msgid "ANALYZE executes the query. Use with caution on data-modifying statements." +msgstr "ANALYZE esegue la query. Usare con cautela su istruzioni che modificano dati." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "Analyzing query plan with AI..." +msgstr "Analisi del piano di esecuzione con AI..." + +#: src/components/settings/AiTab.tsx +msgid "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable." +msgstr "La chiave API è salvata in modo sicuro nel portachiavi. Impostare una chiave qui sovrascrive la variabile d'ambiente." + +#: src/pages/Settings.tsx +msgid "Appearance" +msgstr "Aspetto" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Appearance" +msgstr "Aspetto" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Appearance" +msgstr "Aspetto" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Append rows" +msgstr "Aggiungi righe" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Append to existing" +msgstr "Aggiungi a esistente" + +#: src/components/ui/FilterRow.tsx +msgid "Applied" +msgstr "Applicato" + +#: src/components/ui/FilterRow.tsx +msgid "Apply" +msgstr "Applica" + +#: src/components/ui/TableToolbar.tsx +msgid "Apply All" +msgstr "Applica tutti" + +#: src/pages/Editor.tsx +msgid "Apply to all" +msgstr "Applica a tutto" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval gate" +msgstr "Approvazione manuale" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Approval ID" +msgstr "ID approvazione" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval required" +msgstr "Approvazione richiesta" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Approve" +msgstr "Approva" + +#: src/components/settings/LogsTab.tsx +msgid "Are you sure you want to clear all logs?" +msgstr "Sei sicuro di voler cancellare tutti i log?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to clear all query history for this connection?" +msgstr "Sei sicuro di voler cancellare tutta la cronologia delle query per questa connessione?" + +#. placeholder {0}: column.name +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "" +"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +"\n" +"WARNING: This will permanently delete all data in this column. This action cannot be undone." +msgstr "" +"Sei sicuro di voler eliminare la colonna \"{0}\" dalla tabella \"{tableName}\"?\n" +"\n" +"ATTENZIONE: Questo eliminerà permanentemente tutti i dati in questa colonna. L'azione non può essere annullata." + +#. placeholder {0}: group?.name +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete group \"{0}\"? Connections in this group will be moved to ungrouped." +msgstr "" + +#. placeholder {0}: queries.find((q) => q.id === favoriteDeleteConfirm)?.name ?? "" +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete query \"{0}\"?" +msgstr "Sei sicuro di voler eliminare la query \"{0}\"?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete table \"{0}\"?" +msgstr "Sei sicuro di voler eliminare la tabella \"{0}\"?" + +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete this connection?" +msgstr "Sei sicuro di voler eliminare questa connessione?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete this query from history?" +msgstr "Sei sicuro di voler eliminare questa query dalla cronologia?" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Are you sure you want to delete this SSH connection?" +msgstr "Sei sicuro di voler eliminare questa connessione SSH?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop trigger \"{0}\"?" +msgstr "" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop view \"{0}\"?" +msgstr "Sei sicuro di voler eliminare la vista \"{0}\"?" + +#. placeholder {0}: file.split(/[\\/]/).pop() +#: src/components/layout/ExplorerSidebar.tsx +msgid "" +"Are you sure you want to import \"{0}\"?\n" +"This may overwrite existing data." +msgstr "" +"Sei sicuro di voler importare \"{0}\"?\n" +"Questo potrebbe sovrascrivere i dati esistenti." + +#: src/components/modals/ViewEditorModal.tsx +msgid "Are you sure you want to modify view \"{name}\"?" +msgstr "Sei sicuro di voler modificare la vista \"{name}\"?" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Are you sure you want to remove \"{pluginName}\"? This will delete the plugin files." +msgstr "Sei sicuro di voler rimuovere \"{pluginName}\"? I file del plugin verranno eliminati." + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Asc" +msgstr "Cresc." + +#: src/components/modals/CreateTableModal.tsx +msgid "At least one column is required" +msgstr "È richiesta almeno una colonna" + +#: src/components/modals/CreateIndexModal.tsx +msgid "At least one column must be selected" +msgstr "Almeno una colonna deve essere selezionata" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere." +msgstr "Log di ogni chiamata MCP e delle query in attesa di approvazione. Tutto è salvato localmente." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Authentication Type" +msgstr "Tipo di Autenticazione" + +#: src/components/modals/NewRowModal.tsx +msgid "Auto" +msgstr "Auto" + +#: src/components/settings/LocalizationTab.tsx +msgid "Auto (System)" +msgstr "Auto (Sistema)" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Auto Increment" +msgstr "Auto Increment" + +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Auto paginated" +msgstr "Impaginazione automatica" + +#: src/components/settings/InfoTab.tsx +msgid "Automatically check for new versions when the app launches" +msgstr "Controlla automaticamente nuove versioni all'avvio dell'app" + +#: src/components/settings/PluginsTab.tsx +msgid "Available Plugins" +msgstr "Plugin Disponibili" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below." +msgstr "Blocca qualsiasi statement non-SELECT proveniente da MCP, salvo le connessioni esplicitamente abilitate." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Blocked (read-only)" +msgstr "Bloccata (sola lettura)" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Brand-new Discord community!" +msgstr "Nuova community Discord!" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Breaking Changes" +msgstr "Modifiche Incompatibili" + +#: src/components/settings/PluginsTab.tsx +msgid "Browse and install plugins from the registry." +msgstr "Sfoglia e installa plugin dal registro." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse file" +msgstr "Sfoglia file" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse folder" +msgstr "Sfoglia cartella" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Browse the direct open source dependencies used across the app, backend, and tooling." +msgstr "Consulta le dipendenze open source dirette usate dall'app, dal backend e dalla toolchain." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Browse..." +msgstr "Sfoglia..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Hit" +msgstr "Buffer Hit" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Read" +msgstr "Buffer Letti" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Bug Fixes" +msgstr "Correzioni Bug" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Built-in, not customizable" +msgstr "Integrata, non personalizzabile" + +#: src/components/settings/PluginsTab.tsx +msgid "by" +msgstr "di" + +#: src/components/modals/NewConnectionModal.tsx +msgid "CA Certificate" +msgstr "" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "cancel" +msgstr "annulla" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/ConfirmModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/JsonViewerPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Cancel" +msgstr "Annulla" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Cannot display diagram without a connection ID." +msgstr "Impossibile visualizzare il diagramma senza un ID connessione." + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "Cargo ecosystem" +msgstr "ecosistema Cargo" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Certificate paths are optional. Leave empty to use system defaults." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Change" +msgstr "Cambia" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed chart (cell {n})" +msgstr "Grafico cambiato (cella {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed database (cell {n})" +msgstr "Database cambiato (cella {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed parameters" +msgstr "Parametri modificati" + +#: src/components/notebook/CellChart.tsx +msgid "Chart" +msgstr "Grafico" + +#: src/components/modals/CommunityModal.tsx +msgid "Chat with the community, get help, suggest features" +msgstr "Chatta con la community, ricevi aiuto, suggerisci funzionalità" + +#: src/components/settings/InfoTab.tsx +msgid "Check for Updates Now" +msgstr "Controlla Aggiornamenti Ora" + +#: src/components/settings/InfoTab.tsx +msgid "Check for updates on startup" +msgstr "Controlla aggiornamenti all'avvio" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Checking configuration..." +msgstr "Verifica configurazione..." + +#: src/components/settings/InfoTab.tsx +msgid "Checking..." +msgstr "Controllo..." + +#: src/pages/TaskManagerPage.tsx +msgid "child process" +msgstr "processo figlio" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a connection..." +msgstr "Scegli una connessione..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a context..." +msgstr "Scegli un contesto..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a namespace..." +msgstr "Scegli un namespace..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a resource..." +msgstr "Scegli una risorsa..." + +#: src/components/settings/AppearanceTab.tsx +msgid "Choose an independent theme for the SQL editor, or keep it in sync with the app theme." +msgstr "Scegli un tema indipendente per l'editor SQL, oppure mantienilo sincronizzato con il tema dell'app." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Choose image…" +msgstr "Scegli immagine…" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Choose target..." +msgstr "Scegli destinazione..." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default delimiter character used when copying or exporting rows as CSV." +msgstr "Scegli il delimitatore predefinito utilizzato per la copia o l'esportazione delle righe in formato CSV." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default format when copying rows with Ctrl+C / Cmd+C." +msgstr "Scegli il formato predefinito per la copia delle righe con Ctrl+C / Cmd+C." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default layout direction for ER diagrams" +msgstr "Scegli la direzione di default per i diagrammi ER" + +#: src/components/settings/LocalizationTab.tsx +msgid "Choose your preferred language. 'Auto' will use your system language." +msgstr "Scegli la tua lingua preferita. 'Auto' userà la lingua di sistema." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Clear" +msgstr "Svuota" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "common" +msgid "Clear" +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Clear" +msgstr "Rimuovi" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Clear All History" +msgstr "Cancella Tutta la Cronologia" + +#: src/components/settings/LogsTab.tsx +msgid "Clear Logs" +msgstr "Pulisci Log" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Clear Query History" +msgstr "Cancella Cronologia Query" + +#: src/components/ui/DataGrid.tsx +msgid "Clear sort" +msgstr "Rimuovi ordinamento" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Click 'Run Preview' to see results" +msgstr "Clicca 'Esegui Anteprima' per vedere i risultati" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Click another emoji below to change." +msgstr "Clicca un altro emoji qui sotto per cambiarlo." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Click Load Databases to fetch available databases." +msgstr "" + +#: src/pages/Editor.tsx +msgid "Click to jump to page" +msgstr "Clicca per saltare alla pagina" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Client" +msgstr "Client" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Certificate" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Key" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Clipboard column" +msgstr "Colonna appunti" + +#: src/components/connections/ActionButtons.tsx +msgid "Clone" +msgstr "Clona" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/McpModal.tsx +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx #: src/components/modals/SchemaModal.tsx +#: src/components/modals/VisualExplainModal.tsx +#: src/pages/JsonViewerPage.tsx msgid "Close" +msgstr "Chiudi" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close All Tabs" +msgstr "Chiudi tutte le schede" + +#: src/components/ui/TableToolbar.tsx +msgid "Close filter panel (ESC)" +msgstr "Chiudi pannello filtri (ESC)" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Other Tabs" +msgstr "Chiudi altre schede" + +#: src/components/layout/SplitPaneLayout.tsx +msgid "Close panel" +msgstr "Chiudi pannello" + +#: src/components/ui/StackedResultItem.tsx +#: src/i18n/registries/shortcutLabels.ts +msgid "Close tab" +msgstr "Chiudi tab" + +#: src/components/modals/TabSwitcherModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tab" +msgstr "Chiudi scheda" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Left" +msgstr "Chiudi schede a sinistra" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Right" +msgstr "Chiudi schede a destra" + +#: src/components/ui/JsonInput.tsx +msgid "Code" +msgstr "Codice" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Collapse" +msgstr "Riduci" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Collapse all" +msgstr "Comprimi tutto" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Collapse All" +msgstr "Comprimi Tutto" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Collapse Cell" +msgstr "Comprimi Cella" + +#: src/pages/TaskManagerPage.tsx +msgid "Collapse child processes" +msgstr "Comprimi processi figli" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Collapsed/expanded cells" +msgstr "Celle compresse/espanse" + +#: src/components/settings/LogsTab.tsx +msgid "Collect application logs in memory for debugging" +msgstr "Raccogli i log dell'applicazione in memoria per il debug" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Column name is required" +msgstr "Il nome della colonna è richiesto" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Column Schema" +msgstr "Schema Colonne" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "columns" +msgstr "colonne" + +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +msgid "Columns" +msgstr "Colonne" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Comma (,)" +msgstr "Virgola (,)" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Config file not found (create manually)" +msgstr "File config non trovato (crealo manualmente)" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "config.json" +msgstr "config.json" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Configuration installed successfully for {clientName}! Restart the app to apply." +msgstr "Configurazione installata per {clientName}! Riavvia l'app per applicare." + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Configure destination" +msgstr "Configura destinazione" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Configure Interpreter" +msgstr "Configura Interprete" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSH Inline" +msgstr "Configura SSH Inline" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSL/TLS for secure database connections (optional)." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Configured" +msgstr "Configurato" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Confirm" +msgstr "Conferma" + +#: src/pages/Connections.tsx +msgid "Confirm Delete" +msgstr "Conferma eliminazione" + +#: src/components/connections/ActionButtons.tsx +msgid "Connect" +msgstr "Connetti" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Connect Tabularis to Claude Desktop, Cursor, and more" +msgstr "Connetti Tabularis a Claude Desktop, Cursor e altri" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connect Timeout" +msgstr "Timeout Connessione" + +#: src/pages/Editor.tsx +msgid "Connected" +msgstr "Connesso" + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connection" +msgstr "" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Connection" +msgstr "Connessione" + +#: src/components/settings/GeneralTab.tsx +msgid "Connection Health Check" +msgstr "Controllo Connessione" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "Connection Lost" +msgstr "Connessione Persa" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection Name" +msgstr "Nome Connessione" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Connection name is required" +msgstr "Il nome della connessione è obbligatorio" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Connection name is required" +msgstr "Il nome della connessione è richiesto" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Connection String" +msgstr "" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection test failed" +msgstr "Test connessione fallito" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connection timeout in milliseconds." +msgstr "Timeout di connessione in millisecondi." + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connections" +msgstr "" + +#: src/components/layout/Sidebar.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/Connections.tsx +msgid "Connections" +msgstr "Connessioni" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Container Port" +msgstr "Porta container" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Context" +msgstr "Contesto" + +#: src/pages/Editor.tsx +msgid "Convert to Console" +msgstr "Converti in Console" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Copied to clipboard" +msgstr "Copiato negli appunti" + +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copied!" +msgstr "Copiato!" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copy" +msgstr "Copia" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as `column`" +msgstr "Copia come `colonna`" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as table.column" +msgstr "Copia come tabella.colonna" + +#: src/components/ui/DataGrid.tsx +msgid "Copy Cell" +msgstr "Copia cella" + +#: src/components/ui/DataGrid.tsx +msgid "Copy column name" +msgstr "Copia nome colonna" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy error message" +msgstr "Copia messaggio d’errore" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Copy name" +msgstr "Copia nome" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Copy Name" +msgstr "Copia nome" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Copy query" +msgstr "Copia query" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy Query" +msgstr "Copia Query" + +#: src/components/ui/DataGrid.tsx +msgid "Copy selected row(s)" +msgstr "Copia riga/righe selezionate" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Copy selection" +msgstr "Copia selezione" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Copy SQL" +msgstr "Copia SQL" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Cost" +msgstr "Costo" + +#: src/utils/explainPlan.ts +msgid "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL." +msgstr "Costo, tempi e stime di righe spesso non sono disponibili come in PostgreSQL e MySQL." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Count rows" +msgstr "Conta righe" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Count Rows" +msgstr "Conta righe" + +#: src/pages/TaskManagerPage.tsx +msgid "CPU" +msgstr "CPU" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create a new database trigger" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Create a new database view" +msgstr "Crea una nuova vista database" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk" +msgid "Create Foreign Key" +msgstr "Crea Chiave Esterna" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex" +msgid "Create Index" +msgstr "Crea Indice" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Create new column" +msgstr "Crea nuova colonna" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Create New SSH Connection" +msgstr "Crea Nuova Connessione SSH" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Create new table" +msgstr "Crea nuova tabella" + +#: src/components/modals/CreateTableModal.tsx +msgid "Create New Table" +msgstr "Crea Nuova Tabella" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New View" +msgstr "Crea Nuova Vista" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Create Table" +msgstr "Crea tabella" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Create Table" +msgstr "Crea Tabella" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create Trigger" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Create View" +msgstr "Crea Vista" + +#: src/pages/Connections.tsx +msgid "Create your first connection" +msgstr "Crea la tua prima connessione" + +#: src/pages/Connections.tsx +msgid "Create your first connection to get started." +msgstr "Crea la tua prima connessione per iniziare." + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "CSV Delimiter" +msgstr "Delimitatore CSV" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Ctrl+Tab" +msgstr "Ctrl+Tab" + +#: src/components/settings/LogsTab.tsx +msgid "Current Logs" +msgstr "Log attuali" + +#: src/components/settings/InfoTab.tsx +msgid "Current Version" +msgstr "Versione Corrente" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Custom" +msgstr "Personalizzato" + +#: src/components/settings/FontPicker.tsx +msgid "Custom Font" +msgstr "Font Personalizzato" + +#: src/components/settings/AiTab.tsx +msgid "Custom key deleted successfully" +msgstr "Chiave personalizzata eliminata con successo" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language." +msgstr "Personalizza le istruzioni per l'analisi AI dei piani EXPLAIN. Usa {LANGUAGE} per la lingua di output." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message." +msgstr "Personalizza le istruzioni per la generazione AI del nome cella nei notebook. Il contenuto della cella (SQL o Markdown) viene inviato come messaggio utente." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message." +msgstr "Personalizza le istruzioni per la generazione AI del nome delle tab risultato query. La query SQL viene inviata come messaggio utente." + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Data (INSERT)" +msgstr "Dati (INSERT)" + +#: src/components/settings/GeneralTab.tsx +msgid "Data Editor" +msgstr "Editor Dati" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Data Grid" +msgstr "Griglia dati" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "Data Preview" +msgstr "Anteprima Dati" + +#: src/components/modals/QueryModal.tsx +msgid "Database" +msgstr "Database" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Database exported successfully" +msgstr "Database esportato con successo" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name" +msgstr "Nome database" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Name" +msgstr "Nome Database" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name is required" +msgstr "Il nome del database è richiesto" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Type" +msgstr "Tipo Database" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Databases" +msgstr "Database" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "DDL" +msgstr "DDL" + +#: src/components/settings/LogsTab.tsx +msgid "Debug" +msgstr "Debug" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Default" +msgstr "Predefinito" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Default" +msgstr "Default" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Default Copy Format" +msgstr "Formato di copia predefinito" + +#: src/components/settings/GeneralTab.tsx +msgid "Default Layout" +msgstr "Layout Predefinito" + +#: src/components/settings/AiTab.tsx +msgid "Default Model" +msgstr "Modello Predefinito" + +#: src/components/settings/AiTab.tsx +msgid "Default Provider" +msgstr "Provider Predefinito" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Default Value" +msgstr "Valore Predefinito" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Delete" +msgstr "DELETE" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Delete" +msgstr "Elimina" + +#: src/components/modals/ConfirmModal.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Delete" +msgstr "Elimina" + +#: src/components/connections/ActionButtons.tsx +msgctxt "connections" +msgid "Delete" +msgstr "Elimina" + +#: src/pages/Connections.tsx +msgctxt "groups" +msgid "Delete" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +msgctxt "sidebar" +msgid "Delete" +msgstr "Elimina" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Delete" +msgstr "Elimina" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Delete Cell" +msgstr "Elimina Cella" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete column" +msgstr "Elimina colonna" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Delete Column" +msgstr "Elimina colonna" + +#: src/components/settings/AiTab.tsx +msgid "Delete custom key and revert to environment variable (if present)" +msgstr "Elimina chiave personalizzata e ripristina variabile d'ambiente (se presente)" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete FK" +msgstr "Elimina FK" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete foreign key \"{name}\"?" +msgstr "Eliminare la chiave esterna \"{name}\"?" + +#: src/pages/Connections.tsx +msgid "Delete Group" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Index" +msgstr "Elimina indice" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete index \"{name}\"?" +msgstr "Eliminare l'indice \"{name}\"?" + +#. placeholder {0}: pendingDelete?.title ?? "" +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Delete notebook \"{0}\"? This cannot be undone." +msgstr "Eliminare il notebook \"{0}\"? L'operazione non è reversibile." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Query" +msgstr "Elimina Query" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Delete Row" +msgstr "Elimina riga" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete selected" +msgstr "Elimina selezionate" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Table" +msgstr "Elimina tabella" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Delete the entire AI activity history? This cannot be undone." +msgstr "Vuoi eliminare l'intera storia delle attività AI? L'operazione è irreversibile." + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Deleted cell {n}" +msgstr "Eliminata cella {n}" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Denied" +msgstr "Negata" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Deny" +msgstr "Nega" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Desc" +msgstr "Decresc." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Deselect All" +msgstr "Deseleziona Tutto" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Deselect All" +msgstr "Deseleziona tutte" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Deselect All" +msgstr "Deseleziona Tutti" + +#: src/components/ui/FilterRow.tsx +msgid "Deselect from Apply All" +msgstr "Deseleziona da Applica tutti" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Details" +msgstr "Dettagli" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Detect JSON in text columns" +msgstr "Rileva JSON nelle colonne di testo" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Diff" +msgstr "" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Direct dependencies declared in package.json and src-tauri/Cargo.toml." +msgstr "Dipendenze dirette dichiarate in package.json e src-tauri/Cargo.toml." + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Directly edit the raw configuration file. A restart is required to apply changes." +msgstr "Modifica direttamente il file di configurazione grezzo. È necessario un riavvio per applicare le modifiche." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disable" +msgstr "Disabilitato" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disabled" +msgstr "" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Disconnect" +msgstr "Disconnetti" + +#: src/pages/Editor.tsx +msgid "Disconnected" +msgstr "Disconnesso" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk R/W" +msgstr "Disco L/S" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Read/s" +msgstr "Lettura Disco/s" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Write/s" +msgstr "Scrittura Disco/s" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgctxt "discordCallout" +msgid "Dismiss" +msgstr "Chiudi" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgctxt "sidebar" +msgid "Dismiss" +msgstr "Chiudi" + +#: src/components/settings/AppearanceTab.tsx +msgid "Display line numbers in the editor gutter." +msgstr "Visualizza i numeri di riga nel margine dell'editor." + +#: src/components/settings/GeneralTab.tsx +msgid "Display the welcome screen when the application starts." +msgstr "Mostra la schermata di benvenuto all'avvio dell'applicazione." + +#: src/components/settings/PluginsTab.tsx +msgid "Downgrade to" +msgstr "Effettua downgrade a" + +#: src/components/ui/BlobInput.tsx +msgid "Download" +msgstr "Scarica" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Download & Install" +msgstr "Scarica e Installa" + +#: src/components/ui/BlobInput.tsx +msgid "Download unavailable - only preview loaded" +msgstr "Download non disponibile - caricata solo anteprima" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Downloading..." +msgstr "Download in corso..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgctxt "update" +msgid "Downloading..." +msgstr "Download in corso..." + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Driver Notes" +msgstr "Note Driver" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop View" +msgstr "Elimina Vista" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Dump Database" +msgstr "Esporta Database" + +#: src/components/ui/FilterRow.tsx +msgid "Duplicate filter" +msgstr "Duplica filtro" + +#: src/components/ui/DataGrid.tsx +msgid "Duplicate Row" +msgstr "" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Duration" +msgstr "Durata" + +#: src/components/modals/ViewEditorModal.tsx +msgid "e.g. active_users, order_summary" +msgstr "es. utenti_attivi, riepilogo_ordini" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. before_insert_user" +msgstr "" + +#: src/components/modals/AiApprovalModal.tsx +msgid "e.g. Looks risky on prod, please confirm…" +msgstr "es. Sembra rischiosa in produzione, conferma…" + +#: src/components/modals/NewConnectionModal.tsx +msgid "e.g. mysql://user:pass@localhost:3306/db" +msgstr "" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "e.g. python3" +msgstr "es. python3" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "e.g. sales_data" +msgstr "es. dati_vendite" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. users" +msgstr "" + +#: src/components/modals/CreateTableModal.tsx +msgid "e.g. users, orders, products" +msgstr "es. utenti, ordini, prodotti" + +#: src/components/settings/FontPicker.tsx +msgid "e.g., Comic Sans MS" +msgstr "es. Comic Sans MS" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Edit" +msgstr "Modifica" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Edit before approving" +msgstr "Modifica prima di approvare" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Edit cell name" +msgstr "Modifica nome cella" + +#: src/pages/Settings.tsx +msgid "Edit config.json" +msgstr "Modifica config.json" + +#: src/components/notebook/NotebookHistoryPanel.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Edit history" +msgstr "Cronologia modifiche" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Edit Row" +msgstr "Modifica Riga" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Edit Schemas" +msgstr "Modifica Schemi" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Edit Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Edit View" +msgstr "Modifica Vista" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited cell {n}" +msgstr "Modificata cella {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited notebook" +msgstr "Notebook modificato" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing a trigger requires dropping and recreating it. Continue modifying \"{name}\"?" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing trigger: {name}" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Editing view: {name}" +msgstr "Modifica vista: {name}" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Editor" +msgstr "Editor" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Family" +msgstr "Font dell'Editor" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Size" +msgstr "Dimensione Font dell'Editor" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Theme" +msgstr "Tema dell'Editor" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Elapsed time" +msgstr "Tempo trascorso" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Emoji" +msgstr "Emoji" + +#: src/utils/explainPlan.ts +msgid "Enable ANALYZE to inspect actual rows, timing, loops, and buffers." +msgstr "Abilita ANALYZE per ispezionare righe reali, tempi, cicli e buffer." + +#: src/components/settings/LogsTab.tsx +msgid "Enable Logging" +msgstr "Abilita Logging" + +#: src/components/settings/PluginsTab.tsx +msgid "Enabled" +msgstr "Abilitati" + +#: src/components/settings/AiTab.tsx +msgid "Endpoint URL" +msgstr "URL Endpoint" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Enter {0} Key" +msgstr "Inserisci Chiave {0}" + +#: src/components/ui/GeometryInput.tsx +msgid "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))" +msgstr "Inserisci una funzione SQL completa (es: ST_GeomFromText('POINT(30 40)', 4326))" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain plan analysis prompt..." +msgstr "Inserisci prompt analisi piano di esecuzione..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain prompt..." +msgstr "Inserisci prompt di spiegazione..." + +#: src/components/settings/FontPicker.tsx +msgid "Enter font name above" +msgstr "Inserisci il nome del font sopra" + +#: src/components/ui/JsonInput.tsx +msgid "Enter JSON..." +msgstr "Inserisci JSON..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter key passphrase if encrypted" +msgstr "Inserisci passphrase se la chiave è cifrata" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter notebook cell name prompt..." +msgstr "Inserisci prompt nome cella..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter password" +msgstr "Inserisci password" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter query tab name prompt..." +msgstr "Inserisci prompt nome tab query..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter SSH password" +msgstr "Inserisci password SSH" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter system prompt..." +msgstr "Inserisci prompt di sistema..." + +#: src/components/settings/AiTab.tsx +msgid "Enter the exact model name for your OpenAI-compatible provider." +msgstr "Inserisci il nome esatto del modello per il tuo provider compatibile OpenAI." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter username" +msgstr "Inserisci nome utente" + +#: src/components/ui/FieldEditor.tsx +#: src/components/ui/RowEditorSidebar.tsx +msgid "Enter value..." +msgstr "Inserisci valore..." + +#: src/components/settings/GeneralTab.tsx +msgid "entries" +msgstr "voci" + +#: src/components/settings/AiTab.tsx +msgid "Environment" +msgstr "Variabile Ambiente" + +#: src/components/settings/GeneralTab.tsx +msgid "ER Diagram" +msgstr "Diagramma ER" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Error" +msgstr "Errore" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Error" +msgstr "Errore" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgctxt "common" +msgid "Error" +msgstr "Errore" + +#: src/components/settings/LogsTab.tsx +msgctxt "settings" +msgid "Error" +msgstr "Error" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgctxt "settings" +msgid "Error Details" +msgstr "Dettagli errore" + +#: src/components/modals/QuickNavigatorModal.tsx +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor" +msgid "Esc to close" +msgstr "Esc per chiudere" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Est. Rows" +msgstr "Righe Stimate" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate exceeds actual rows" +msgstr "La stima supera le righe reali" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate Gap" +msgstr "Scostamento Stima" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Event details" +msgstr "Dettagli evento" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Events" +msgstr "Eventi" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity" +msgid "Events" +msgstr "Eventi" + +#: src/components/modals/TriggerEditorModal.tsx +msgctxt "triggers" +msgid "Events" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Execute" +msgstr "Esegui" + +#: src/components/ui/ResultEntryContent.tsx +#: src/pages/Editor.tsx +msgid "Execute a query to see results" +msgstr "Esegui una query per vedere i risultati" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Execute all SQL cells top to bottom" +msgstr "Esegui tutte le celle SQL dall'alto in basso" + +#: src/components/notebook/SqlCellResult.tsx +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Executing query..." +msgstr "Esecuzione query..." + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Execution" +msgstr "Esecuzione" + +#: src/components/notebook/CellHistoryPanel.tsx +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Execution History" +msgstr "Cronologia Esecuzioni" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Exit Fullscreen" +msgstr "Esci da Schermo Intero" + +#: src/components/modals/AiApprovalModal.tsx +msgctxt "aiApproval" +msgid "Expand" +msgstr "Espandi" + +#: src/components/ui/JsonInput.tsx +msgctxt "jsonInput" +msgid "Expand" +msgstr "Espandi" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Expand all" +msgstr "Espandi tutto" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Expand All" +msgstr "Espandi Tutto" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Expand Cell" +msgstr "Espandi Cella" + +#: src/components/layout/Sidebar.tsx +msgid "Expand Explorer" +msgstr "Espandi Explorer" + +#: src/components/ui/AiDropdownButton.tsx +msgid "Explain" +msgstr "Spiega" + +#. placeholder {0}: approval.explainError +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN failed: {0}" +msgstr "EXPLAIN fallito: {0}" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain focused" +msgstr "analizza selezionata" + +#: src/components/modals/VisualExplainModal.tsx +msgid "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained." +msgstr "EXPLAIN è supportato solo per istruzioni DML (SELECT, INSERT, UPDATE, DELETE). Le istruzioni DDL come CREATE, DROP o ALTER non possono essere analizzate." + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain Nth" +msgstr "analizza N-esima" + +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +msgid "Explain Plan" +msgstr "Piano Query" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Explain Plan Analysis Prompt" +msgstr "Prompt Analisi Piano di Esecuzione" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Explain this query" +msgstr "Analizza questa query" + +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN unavailable for this query." +msgstr "EXPLAIN non disponibile per questa query." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Explorer" +msgstr "Esplora" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Export" +msgstr "Esporta" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as CSV" +msgstr "Esporta come CSV" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export as HTML" +msgstr "Esporta come HTML" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as JSON" +msgstr "Esporta come JSON" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Export as Notebook" +msgstr "Esporta come Notebook" + +#: src/pages/Connections.tsx +msgctxt "connections" +msgid "Export Connections" +msgstr "Esporta connessioni" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export CSV" +msgstr "" + +#: src/components/notebook/NotebookView.tsx +msgid "Export failed" +msgstr "" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Export failed: " +msgstr "Esportazione fallita: " + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export JSON" +msgstr "" + +#: src/components/settings/LogsTab.tsx +msgid "Export Logs" +msgstr "Esporta Log" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export Notebook" +msgstr "Esporta Notebook" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Exported to {target}" +msgstr "Esportato in {target}" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Exporting..." +msgstr "Esportazione in corso..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Extra" +msgstr "Extra" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Fail with error" +msgstr "Errore" + +#: src/components/notebook/RunAllSummary.tsx +msgid "failed" +msgstr "fallite" + +#. placeholder {0}: conn.name +#: src/pages/Connections.tsx +msgid "Failed to connect to {0}. Please check your settings or ensuring the database is running." +msgstr "Impossibile connettersi a {0}. Verifica le impostazioni o assicurati che il database sia in esecuzione." + +#: src/pages/Connections.tsx +msgid "Failed to create group" +msgstr "" + +#: src/pages/Editor.tsx +msgid "Failed to create new row: " +msgstr "Impossibile creare nuova riga: " + +#: src/components/modals/CreateTableModal.tsx +msgid "Failed to create table: " +msgstr "Creazione tabella fallita: " + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Failed to delete column: " +msgstr "Eliminazione colonna fallita: " + +#: src/pages/Connections.tsx +msgid "Failed to delete group" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete index: " +msgstr "Eliminazione indice fallita: " + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to delete SSH connection" +msgstr "Eliminazione connessione SSH fallita" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete table: " +msgstr "Eliminazione tabella fallita: " + +#: src/pages/Connections.tsx +msgid "Failed to disconnect from database" +msgstr "Impossibile disconnettersi dal database" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to drop existing trigger: " +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop trigger: " +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop view: " +msgstr "Eliminazione vista fallita: " + +#: src/pages/Connections.tsx +msgid "Failed to duplicate connection" +msgstr "Impossibile duplicare la connessione" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get routine definition: " +msgstr "Impossibile recuperare la definizione della routine: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get trigger definition: " +msgstr "" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to insert row: " +msgstr "Inserimento riga fallito: " + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to load databases. Check your credentials." +msgstr "Impossibile caricare i database. Verifica le credenziali." + +#: src/components/settings/PluginsTab.tsx +msgid "Failed to load registry" +msgstr "Impossibile caricare il registro" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to load schema: " +msgstr "Caricamento schema fallito: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to load schemas" +msgstr "Caricamento degli schemi fallito" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to load trigger definition: " +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to load view definition: " +msgstr "Impossibile caricare la definizione della vista: " + +#: src/pages/Connections.tsx +msgid "Failed to move connection" +msgstr "" + +#: src/pages/Editor.tsx +msgid "Failed to process insertions: " +msgstr "Impossibile processare gli inserimenti: " + +#: src/components/settings/AiTab.tsx +msgid "Failed to refresh models" +msgstr "Impossibile aggiornare i modelli" + +#: src/pages/Connections.tsx +msgid "Failed to rename group" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to save connection" +msgstr "Salvataggio connessione fallito" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to save SSH connection" +msgstr "Salvataggio connessione SSH fallito" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to save trigger: " +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to save view: " +msgstr "Salvataggio vista fallito: " + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Failed: " +msgstr "Fallito: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Favorites" +msgstr "Preferiti" + +#: src/components/modals/NewConnectionModal.tsx +msgid "File Path" +msgstr "Percorso File" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Filter" +msgstr "Filtro" + +#: src/components/settings/LogsTab.tsx +msgid "Filter by level" +msgstr "Filtra per livello" + +#: src/components/ui/TableToolbar.tsx +msgid "Filter conditions" +msgstr "Condizioni filtro" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Filter databases..." +msgstr "Filtra database..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter tables..." +msgstr "Filtra tabelle..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter triggers..." +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Filters" +msgstr "Filtri" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +msgid "First row as header" +msgstr "Prima riga come intestazione" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "FK Name (Optional)" +msgstr "Nome FK (Opzionale)" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focus on Table" +msgstr "Focus su Tabella" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focused on" +msgstr "Focus su" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Folder Path" +msgstr "Percorso Cartella" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Family" +msgstr "Famiglia Font" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Size" +msgstr "Dimensione Font" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill" +msgstr "Termina Forzatamente" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill Plugin Process" +msgstr "Termina Forzatamente il Processo" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "foreign keys" +msgstr "chiavi esterne" + +#: src/components/ui/JsonInput.tsx +msgid "Format" +msgstr "Formatta" + +#: src/components/ui/FilterRow.tsx +msgid "from" +msgstr "da" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dependencies" +msgstr "Dipendenze Frontend" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dev Dependencies" +msgstr "Dipendenze Dev Frontend" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Fullscreen" +msgstr "Schermo Intero" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Functions" +msgstr "Funzioni" + +#: src/pages/Settings.tsx +msgid "General" +msgstr "Generali" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgctxt "editor" +msgid "General" +msgstr "Generale" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "General" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "General" +msgstr "Generali" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generate name with AI" +msgstr "Genera nome con AI" + +#: src/components/notebook/NotebookOutline.tsx +msgid "Generate names for unnamed cells with AI" +msgstr "Genera nomi per le celle senza nome con AI" + +#: src/components/ui/AiDropdownButton.tsx +msgctxt "ai" +msgid "Generate SQL" +msgstr "Genera SQL" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Generate SQL" +msgstr "Genera SQL" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Generate SQL templates" +msgstr "Genera modelli SQL" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Generated SQL Preview" +msgstr "" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generated SQL: {tableName}" +msgstr "SQL Generato: {tableName}" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generating name..." +msgstr "Generazione nome..." + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generating SQL..." +msgstr "Generazione SQL in corso..." + +#: src/components/modals/WhatsNewModal.tsx +msgid "Got it" +msgstr "Ho capito" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Graph" +msgstr "Grafo" + +#: src/pages/Connections.tsx +msgid "Grid view" +msgstr "Vista griglia" + +#: src/pages/Connections.tsx +msgid "Group name" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Guided" +msgstr "" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Hash Cond." +msgstr "Cond. Hash" + +#: src/components/modals/CommunityModal.tsx +msgid "Help tabularis grow" +msgstr "Aiuta tabularis a crescere" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Hide overview" +msgstr "Nascondi panoramica" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Highest Cost" +msgstr "Costo Più Alto" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "History" +msgstr "Cronologia" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Horizontal" +msgstr "Orizzontale" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Host" +msgstr "Host" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "How long the MCP subprocess will wait for the user's decision before failing the request." +msgstr "Quanti secondi il processo MCP attende la decisione dell'utente prima di abortire." + +#: src/components/settings/LogsTab.tsx +msgid "How many logs to keep in memory (1-10000)" +msgstr "Quanti log mantenere in memoria (1-10000)" + +#: src/components/settings/GeneralTab.tsx +msgid "How often to check if active connections are still alive. Set to 0 to disable." +msgstr "Frequenza con cui verificare se le connessioni attive sono ancora raggiungibili. Imposta 0 per disabilitare." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Icon" +msgstr "Icona" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "If exists" +msgstr "Se esiste" + +#: src/utils/explainPlan.ts +msgid "If timing is missing, the server likely returned an estimate-only plan." +msgstr "Se il tempo manca, il server ha probabilmente restituito un piano solo stimato." + +#: src/components/settings/InfoTab.tsx +msgid "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo." +msgstr "Se ti piace tabularis e vuoi vedere nuove funzionalità, considera di supportare il progetto contribuendo al codice, segnalando bug o mettendo una stella su GitHub." + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Image" +msgstr "Immagine" + +#: src/components/ui/BlobInput.tsx +msgid "Image preview" +msgstr "Anteprima immagine" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import cancelled" +msgstr "Importazione annullata" + +#: src/pages/Connections.tsx +msgid "Import Connections" +msgstr "Importa connessioni" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import Database" +msgstr "Importazione Database" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed" +msgstr "Importazione fallita" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed: " +msgstr "Importazione fallita: " + +#: src/i18n/registries/shortcutLabels.ts +msgid "Import from Clipboard" +msgstr "Importa dagli Appunti" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Import from Clipboard" +msgstr "Importa dagli Appunti" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Import from Clipboard..." +msgstr "Importa dagli Appunti..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Import Notebook" +msgstr "Importa Notebook" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Importing from" +msgstr "Importazione da" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Importing..." +msgstr "Importazione..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Index Cond." +msgstr "Cond. Indice" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index Name" +msgstr "Nome Indice" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index name is required" +msgstr "Il nome dell'indice è richiesto" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "indexes" +msgstr "indici" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Info" +msgstr "Info" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Initial version" +msgstr "Versione iniziale" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Inline" +msgstr "Inline" + +#: src/components/modals/NewRowModal.tsx +msgid "Insert" +msgstr "Inserisci" + +#: src/components/ui/DataGrid.tsx +msgid "Insert Current Timestamp" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Insert to Editor" +msgstr "Inserisci nell'Editor" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Inspect structure" +msgstr "Ispeziona struttura" + +#: src/components/settings/PluginsTab.tsx +msgid "Install" +msgstr "Installa" + +#: src/pages/TaskManagerPage.tsx +msgid "Install and enable plugins to see them here" +msgstr "Installa e abilita i plugin per vederli qui" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Install Config" +msgstr "Installa Config" + +#: src/components/settings/PluginsTab.tsx +msgid "Install extensions, manage plugin drivers, and keep runtime settings under control." +msgstr "Installa estensioni, gestisci i driver dei plugin e tieni sotto controllo le impostazioni di runtime." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installation Failed" +msgstr "Installazione Fallita" + +#: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings" +msgid "Installation Failed" +msgstr "Installazione fallita" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installed" +msgstr "Installato" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Installed" +msgstr "Installati" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Installing..." +msgstr "Installazione in corso..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language." +msgstr "Istruzioni per la spiegazione delle query tramite AI. Usa {LANGUAGE} come segnaposto per la lingua di output." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure." +msgstr "Istruzioni per la generazione SQL tramite AI. Usa {SCHEMA} come segnaposto per la struttura del database." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Interpreter" +msgstr "Interprete" + +#: src/components/ui/JsonInput.tsx +msgid "Invalid JSON" +msgstr "JSON non valido" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Invalid notebook file format" +msgstr "Formato file notebook non valido" + +#: src/components/notebook/ParamsPanel.tsx +msgid "Invalid parameter name" +msgstr "Nome parametro non valido" + +#: src/components/modals/CommunityModal.tsx +msgid "Join Discord" +msgstr "Unisciti su Discord" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Join now" +msgstr "Entra subito" + +#: src/components/modals/CommunityModal.tsx +msgid "Join the Community" +msgstr "Unisciti alla Community" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Join Type" +msgstr "Tipo Join" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "Chiave" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Key file" +msgstr "File chiave" + +#: src/components/settings/ShortcutsTab.tsx +#: src/pages/Settings.tsx +msgid "Keyboard Shortcuts" +msgstr "Scorciatoie da tastiera" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "keys" +msgstr "chiavi" + +#: src/pages/TaskManagerPage.tsx +msgid "Kill" +msgstr "Termina" + +#: src/pages/TaskManagerPage.tsx +msgid "Killing" +msgstr "La terminazione di" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Kind" +msgstr "Tipo" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Kubernetes Connections" +msgstr "Connessioni Kubernetes" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Kubernetes context is required" +msgstr "Il contesto Kubernetes è obbligatorio" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Kubernetes is not available for this driver." +msgstr "Kubernetes non è disponibile per questo driver." + +#: src/components/notebook/CellChart.tsx +msgid "Label" +msgstr "Etichetta" + +#: src/components/settings/LocalizationTab.tsx +msgid "Language" +msgstr "Lingua" + +#: src/utils/explainPlan.ts +msgid "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well." +msgstr "Scostamenti elevati tra stima e reale indicano spesso statistiche non aggiornate o predicati difficili da modellare." + +#: src/components/modals/CreateTableModal.tsx +msgid "Len" +msgstr "Lung" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Length" +msgstr "Lunghezza" + +#: src/components/settings/LogsTab.tsx +msgid "Level" +msgstr "Livello" + +#: src/components/settings/GeneralTab.tsx +msgid "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended)." +msgstr "Limita il numero di righe caricate per query per prevenire problemi di performance. Imposta a 0 per disabilitare (non consigliato)." + +#: src/components/settings/AppearanceTab.tsx +msgid "Line Height" +msgstr "Altezza Riga" + +#: src/pages/Connections.tsx +msgid "List view" +msgstr "Vista lista" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Load Databases" +msgstr "Carica Database" + +#: src/pages/Editor.tsx +msgid "Load row count" +msgstr "Carica conteggio righe" + +#: src/pages/VisualExplainPage.tsx +msgid "Loading explain plan…" +msgstr "Caricamento del piano di esecuzione…" + +#: src/components/settings/PluginsTab.tsx +msgid "Loading plugin registry..." +msgstr "Caricamento registro plugin..." + +#: src/pages/TaskManagerPage.tsx +msgid "Loading processes…" +msgstr "Caricamento processi…" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarRoutineItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "Caricamento schema..." + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Loading trigger definition..." +msgstr "" + +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Loading..." +msgstr "Caricamento..." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Local Column" +msgstr "Colonna Locale" + +#: src/components/settings/LocalizationTab.tsx +#: src/pages/Settings.tsx +msgid "Localization" +msgstr "Localizzazione" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Lock query" +msgstr "Blocca query" + +#: src/components/settings/LogsTab.tsx +msgid "Log Settings" +msgstr "Impostazioni Log" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Logs" +msgstr "Log" + +#: src/components/settings/LogsTab.tsx +msgid "Logs exported to clipboard" +msgstr "Log esportati negli appunti" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Loops" +msgstr "Cicli" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Make all MCP queries read-only" +msgstr "Rendi tutte le query MCP di sola lettura" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage" +msgstr "Gestisci" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Manage Databases" +msgstr "Gestisci Database" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage SSH Connections" +msgstr "Gestisci Connessioni SSH" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL COMMAND" +msgstr "COMANDO MANUALE" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL CONFIGURATION" +msgstr "CONFIGURAZIONE MANUALE" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Markdown" +msgstr "Markdown" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Max Allowed Packet" +msgstr "Max Allowed Packet" + +#: src/components/settings/GeneralTab.tsx +msgid "Max History Entries" +msgstr "Max Voci Cronologia" + +#: src/components/settings/LogsTab.tsx +msgid "Max Log Entries" +msgstr "Numero massimo di log" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Maximize" +msgstr "Massimizza" + +#: src/components/settings/GeneralTab.tsx +msgid "Maximum number of query history entries stored per connection." +msgstr "Numero massimo di voci nella cronologia delle query salvate per connessione." + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Maximum packet size used by the MySQL connector." +msgstr "Dimensione massima del pacchetto usata dal connettore MySQL." + +#: src/components/modals/CommunityModal.tsx +msgid "Maybe later" +msgstr "Forse più tardi" + +#: src/components/layout/Sidebar.tsx +msgid "MCP Server" +msgstr "Server MCP" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MCP Server Integration" +msgstr "Integrazione Server MCP" + +#: src/components/settings/LogsTab.tsx +msgid "Message" +msgstr "Messaggio" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Minimize" +msgstr "Riduci" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Mixed types detected, defaulted to TEXT" +msgstr "Tipi misti rilevati, default TEXT" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Mode" +msgstr "Modalità" + +#. placeholder {0}: settings.aiModel +#. placeholder {1}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Model <0>{0} not found in <1>{1}. It may not work correctly." +msgstr "Modello {0} non trovato in {1}. Potrebbe non funzionare correttamente." + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Modify Column" +msgstr "Modifica Colonna" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgctxt "sidebar" +msgid "Modify Column" +msgstr "Modifica colonna" + +#: src/components/settings/InfoTab.tsx +msgid "Monitor plugin processes, CPU, RAM and disk usage in real time" +msgstr "Monitora i processi dei plugin, CPU, RAM e utilizzo disco in tempo reale" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Down" +msgstr "Sposta Giù" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Up" +msgstr "Sposta Su" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "My K8s cluster" +msgstr "Il mio cluster K8s" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "My SSH Server" +msgstr "Il Mio Server SSH" + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants." +msgstr "MySQL e MariaDB espongono metriche reali solo con le varianti supportate di EXPLAIN ANALYZE o ANALYZE FORMAT." + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version." +msgstr "MySQL e MariaDB possono ripiegare su EXPLAIN FORMAT=JSON o sull'EXPLAIN tabellare in base alla versione del server." + +#: src/components/notebook/ParamsPanel.tsx +msgid "name" +msgstr "nome" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/SchemaModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Name" +msgstr "Nome" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Name is required" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Namespace" +msgstr "Namespace" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Namespace is required" +msgstr "Il namespace è obbligatorio" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Navigation" +msgstr "Navigazione" + +#: src/components/ui/DataGrid.tsx +msgid "NEW" +msgstr "NUOVA" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New connection" +msgstr "Nuova connessione" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "New console" +msgstr "Nuova console" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/pages/Editor.tsx +msgid "New Console" +msgstr "Nuova Console" + +#: src/components/modals/WhatsNewModal.tsx +msgid "New Features" +msgstr "Nuove Funzionalità" + +#: src/pages/Connections.tsx +msgid "New Group" +msgstr "" + +#: src/pages/Editor.tsx +msgid "New Notebook" +msgstr "Nuovo Notebook" + +#: src/components/modals/NewRowModal.tsx +#: src/pages/Editor.tsx +msgid "New Row" +msgstr "Nuova riga" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New tab" +msgstr "Nuovo tab" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "New table created" +msgstr "Nuova tabella creata" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "New Version Available" +msgstr "Nuova Versione Disponibile" + +#: src/pages/Editor.tsx +msgid "New Visual Query" +msgstr "Nuova Query Visuale" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Next page" +msgstr "Pagina successiva" + +#: src/components/modals/CreateTableModal.tsx +msgid "NN" +msgstr "NN" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "NO" + +#: src/pages/Connections.tsx +msgid "No active connections" +msgstr "Nessuna connessione attiva" + +#: src/components/ui/TableToolbar.tsx +msgid "no active filters" +msgstr "nessun filtro attivo" + +#: src/pages/Editor.tsx +msgid "No active session. Please select a connection." +msgstr "Nessuna sessione attiva. Seleziona una connessione." + +#: src/components/ui/BlobInput.tsx +msgid "No BLOB data" +msgstr "Nessun dato BLOB" + +#: src/pages/TaskManagerPage.tsx +msgid "No child processes" +msgstr "Nessun processo figlio" + +#: src/pages/SchemaDiagramPage.tsx +msgid "No Connection ID" +msgstr "Nessun ID Connessione" + +#: src/pages/Connections.tsx +msgid "No connections match \"{search}\"" +msgstr "Nessuna connessione corrisponde a \"{search}\"" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No contexts found (is kubectl installed?)" +msgstr "Nessun contesto trovato (kubectl è installato?)" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "No data found in clipboard" +msgstr "Nessun dato negli appunti" + +#: src/components/ui/DataGrid.tsx +msgid "No data to display" +msgstr "Nessun dato da visualizzare" + +#: src/components/modals/QueryModal.tsx +msgid "No database" +msgstr "Nessun database" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No databases found" +msgstr "Nessun database trovato" + +#: src/components/notebook/CellHistoryPanel.tsx +msgid "No execution history yet" +msgstr "Nessuna cronologia di esecuzione" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No favorites match your search" +msgstr "Nessun preferito corrisponde alla ricerca" + +#: src/pages/VisualExplainPage.tsx +msgid "No file loaded" +msgstr "Nessun file caricato" + +#: src/components/ui/TableToolbar.tsx +msgid "No filters —" +msgstr "Nessun filtro —" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No general settings available for this driver." +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No icons match." +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "No Kubernetes connections saved. Click \"Add\" to create one." +msgstr "Nessuna connessione Kubernetes salvata. Clicca \"Aggiungi\" per crearne una." + +#: src/components/settings/LogsTab.tsx +msgid "No logs available" +msgstr "Nessun log disponibile" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "No major issues detected in the current plan summary." +msgstr "Nessun problema rilevante nel riepilogo del piano corrente." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "No matching elements found" +msgstr "Nessun elemento corrispondente trovato" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No MCP activity yet." +msgstr "Nessuna attività MCP registrata." + +#: src/components/settings/AiTab.tsx +msgid "No models found" +msgstr "Nessun modello trovato" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No notebooks match your search." +msgstr "Nessun notebook corrisponde alla ricerca." + +#: src/pages/Editor.tsx +msgid "No open tabs for this connection." +msgstr "Nessuna scheda aperta per questa connessione." + +#: src/components/modals/NewRowModal.tsx +msgid "No options found" +msgstr "Nessuna opzione trovata" + +#: src/pages/TaskManagerPage.tsx +msgid "No plugin processes are running" +msgstr "Nessun processo plugin in esecuzione" + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins available in the registry." +msgstr "Nessun plugin disponibile nel registro." + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins match your search." +msgstr "Nessun plugin corrisponde alla ricerca." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No preview" +msgstr "" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No queries match your search" +msgstr "Nessuna query corrisponde alla ricerca" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No query history" +msgstr "Nessuna cronologia query" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "No results found" +msgstr "Nessun risultato trovato" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No routines found" +msgstr "Nessuna routine trovata" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No saved connections — create one below" +msgstr "Nessuna connessione salvata — creane una qui sotto" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No saved notebooks yet." +msgstr "Nessun notebook salvato." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No saved queries" +msgstr "Nessuna query salvata" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No sessions match the current filters." +msgstr "Nessuna sessione corrisponde ai filtri." + +#: src/components/modals/NewConnectionModal.tsx +msgid "No SSH connections available" +msgstr "Nessuna connessione SSH disponibile" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "No SSH connections configured yet" +msgstr "Nessuna connessione SSH configurata" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables found" +msgstr "Nessuna tabella trovata" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables match" +msgstr "Nessuna tabella trovata" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers found" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers match your filter" +msgstr "" + +#: src/pages/Editor.tsx +msgid "No valid queries found" +msgstr "Nessuna query valida trovata" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No views found" +msgstr "Nessuna vista trovata" + +#: src/components/settings/PluginsTab.tsx +msgid "Not available for your platform" +msgstr "Non disponibile per la tua piattaforma" + +#: src/components/settings/AiTab.tsx +msgid "Not configured" +msgstr "Non configurato" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Not Null" +msgstr "Not Null" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Notebook Cell Name Prompt" +msgstr "Prompt Nome Cella Notebook" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook exported successfully" +msgstr "Notebook esportato con successo" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook imported successfully" +msgstr "Notebook importato con successo" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Notebook name" +msgstr "Nome del notebook" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Notebooks" +msgstr "Notebook" + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "npm ecosystem" +msgstr "ecosistema npm" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "Nullable" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Objects" +msgstr "Oggetti" + +#. placeholder {0}: sessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "of {0}" +msgstr "su {0}" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Off" +msgstr "Disattiva" + +#: src/components/modals/AlertModal.tsx +#: src/components/modals/ConfirmModal.tsx +msgid "OK" +msgstr "OK" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Older" +msgstr "Precedenti" + +#: src/utils/explainPlan.ts +msgid "Older servers may fall back to estimated plans with fewer metrics." +msgstr "I server meno recenti possono ripiegare su piani stimati con meno metriche." + +#: src/components/settings/PluginsTab.tsx +msgid "Older versions" +msgstr "Versioni precedenti" + +#. placeholder {0}: ( settings.aiCustomModels?.["ollama"] || availableModels["ollama"] || [] ).length +#: src/components/settings/AiTab.tsx +msgid "Ollama connected ({0} models found)" +msgstr "Ollama connesso ({0} modelli trovati)" + +#. placeholder {0}: settings.aiOllamaPort || 11434 +#: src/components/settings/AiTab.tsx +msgid "Ollama not detected on port {0}. Is it running?" +msgstr "Ollama non rilevato sulla porta {0}. È in esecuzione?" + +#: src/components/settings/AiTab.tsx +msgid "Ollama Port" +msgstr "Porta Ollama" + +#. placeholder {0}: trigger.table_name +#: src/components/layout/sidebar/SidebarTriggerItem.tsx +msgid "on {0}" +msgstr "" + +#. placeholder {0}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "On {0} — review and decide before it executes." +msgstr "Su {0} — controlla e decidi prima dell'esecuzione." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Delete" +msgstr "Al Delete" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Update" +msgstr "All'Update" + +#: src/components/connections/StatusBadge.tsx +msgctxt "connections" +msgid "Open" +msgstr "Aperta" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Open connections" +msgstr "Apri connessioni" + +#: src/pages/VisualExplainPage.tsx +msgid "Open file" +msgstr "Apri file" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Open in Editor" +msgstr "Apri nell'editor" + +#: src/components/ui/DataGrid.tsx +msgid "Open in JSON Editor" +msgstr "Apri nell'editor JSON" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Open in New Tab" +msgstr "Apri in Nuova Scheda" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Open in Visual Explain" +msgstr "Apri in Visual Explain" + +#: src/components/ui/JsonCell.tsx +msgid "Open JSON viewer" +msgstr "Apri visualizzatore JSON" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Open package page" +msgstr "Apri pagina del pacchetto" + +#. placeholder {0}: fkForContextPreview.ref_table +#: src/components/ui/DataGrid.tsx +msgid "Open referenced row in {0}" +msgstr "Apri la riga referenziata in {0}" + +#: src/components/ui/DataGrid.tsx +msgid "Open Sidebar Editor" +msgstr "Apri Barra Laterale" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Open Source Libraries" +msgstr "Librerie Open Source" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Open Tabs" +msgstr "Tab Aperte" + +#: src/components/settings/InfoTab.tsx +msgid "Open Task Manager" +msgstr "Apri Gestione Attività" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +msgid "Operation" +msgstr "Operazione" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default." +msgstr "Opzionale. Specifica l'eseguibile usato per avviare questo plugin (es. python3 su macOS/Linux, python o percorso completo su Windows). Lascia vuoto per usare il valore predefinito." + +#: src/components/notebook/NotebookOutline.tsx +msgid "Outline" +msgstr "Sommario" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Overview" +msgstr "Panoramica" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +#: src/pages/Editor.tsx +msgid "Page {0}" +msgstr "Pagina {0}" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {1}: Math.ceil( activeTab.result.pagination.total_rows / activeTab.result.pagination.page_size, ) +#: src/pages/Editor.tsx +msgid "Page {0} of {1}" +msgstr "Pagina {0} di {1}" + +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +msgid "Page {0} of {totalPages}" +msgstr "Pagina {0} di {totalPages}" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Parallel Execution (Run All)" +msgstr "Esecuzione Parallela (Esegui Tutto)" + +#: src/components/notebook/ParamsPanel.tsx +#: src/pages/Editor.tsx +msgid "Parameters" +msgstr "Parametri" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password" +msgstr "Password" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password saved in system keychain" +msgstr "Password salvata nel portachiavi di sistema" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Paste structured data and preview the schema before importing" +msgstr "Incolla dati strutturati e rivedi lo schema prima dell'importazione" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database." +msgstr "Sospendi le scritture (o ogni query) chiedendo conferma all'utente in Tabularis prima dell'esecuzione." + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Pending approval" +msgstr "In attesa" + +#: src/pages/TaskManagerPage.tsx +msgid "PID" +msgstr "PID" + +#: src/components/settings/GeneralTab.tsx +msgid "Ping Interval" +msgstr "Intervallo di Ping" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Pipe (|)" +msgstr "Pipe (|)" + +#: src/components/modals/CreateTableModal.tsx +msgid "PK" +msgstr "PK" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Planning" +msgstr "Pianificazione" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Please fill in all required fields" +msgstr "Per favore compila tutti i campi obbligatori" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least one table" +msgstr "Seleziona almeno una tabella" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least Structure or Data" +msgstr "Seleziona almeno Struttura o Dati" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin" +msgstr "Plugin" + +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Center" +msgstr "Centro Plugin" + +#: src/components/connections/ActionButtons.tsx +#: src/components/connections/ConnectionCard.tsx +#: src/components/connections/ConnectionListItem.tsx +msgid "Plugin disabled" +msgstr "Plugin disabilitato" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Plugin Failed to Start" +msgstr "Plugin non avviato" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin Processes" +msgstr "Processi Plugin" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin processes & system resources" +msgstr "Processi dei plugin e risorse di sistema" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Settings" +msgstr "Impostazioni Plugin" + +#: src/pages/Settings.tsx +msgid "Plugins" +msgstr "Plugin" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "PNG, JPG, WebP or SVG · max 512 KB" +msgstr "PNG, JPG, WebP o SVG · max 512 KB" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Pod" +msgstr "Pod" + +#: src/components/ui/GeometryInput.tsx +msgid "POINT(30 40)" +msgstr "POINT(30 40)" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Port" +msgstr "Porta" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Port must be between 1 and 65535" +msgstr "La porta deve essere compresa tra 1 e 65535" + +#: src/utils/explainPlan.ts +msgid "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available." +msgstr "PostgreSQL ANALYZE include righe reali, tempi, cicli e contatori buffer quando disponibili." + +#: src/utils/explainPlan.ts +msgid "PostgreSQL without ANALYZE shows planner estimates only." +msgstr "PostgreSQL senza ANALYZE mostra solo le stime del planner." + +#: src/components/modals/AiApprovalModal.tsx +msgid "Pre-flight execution plan" +msgstr "Piano di esecuzione preliminare" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pre-flight EXPLAIN" +msgstr "EXPLAIN preliminare" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Prefer" +msgstr "Preferito" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Preferred" +msgstr "" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Press key combination..." +msgstr "Premi la combinazione di tasti..." + +#: src/pages/Editor.tsx +msgid "Press Run (Ctrl/Command+F5) to load table data" +msgstr "Premi Esegui (Ctrl/Command+F5) per caricare i dati della tabella" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Preview" +msgstr "Anteprima" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "Preview" +msgstr "Anteprima" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Preview" +msgstr "Anteprima" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Preview failed: " +msgstr "Anteprima fallita: " + +#: src/components/ui/BlobInput.tsx +msgid "Preview only - full data not loaded" +msgstr "Solo anteprima - dati completi non caricati" + +#: src/components/ui/DataGrid.tsx +msgid "Preview related record" +msgstr "Anteprima record correlato" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Previous page" +msgstr "Pagina precedente" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Primary Key" +msgstr "Chiave Primaria" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Procedures" +msgstr "Procedure" + +#: src/components/settings/InfoTab.tsx +msgid "Project Status" +msgstr "Stato del Progetto" + +#: src/components/settings/AiTab.tsx +msgid "Prompt Customization" +msgstr "Personalizzazione Prompt" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Provide your connection name" +msgstr "Inserisci il nome della connessione" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Queries" +msgstr "Query" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Query" +msgstr "Query" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Explanation" +msgstr "Spiegazione Query" + +#: src/pages/Editor.tsx +msgid "Query failed." +msgstr "Esecuzione query fallita." + +#: src/components/settings/GeneralTab.tsx +msgid "Query History" +msgstr "Cronologia Query" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Query history was reset" +msgstr "Cronologia query azzerata" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Query Parameters" +msgstr "Parametri Query" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Tab Name Prompt" +msgstr "Prompt Nome Tab Query" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Quick connection test" +msgstr "Test connessione rapido" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Quick Navigator" +msgstr "Navigatore rapido" + +#: src/pages/TaskManagerPage.tsx +msgid "RAM" +msgstr "RAM" + +#: src/components/ui/JsonInput.tsx +msgid "Raw" +msgstr "Grezzo" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Raw Output" +msgstr "Output Grezzo" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Raw SQL" +msgstr "" + +#: src/components/modals/VisualExplainModal.tsx +msgid "Re-run" +msgstr "Riesegui" + +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Re-run query" +msgstr "Riesegui query" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Read more" +msgstr "Leggi di più" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only connections" +msgstr "Connessioni di sola lettura" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only mode" +msgstr "Modalità sola lettura" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Reason (optional)" +msgstr "Motivo (opzionale)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Recreate Trigger" +msgstr "" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Redo" +msgstr "Ripeti" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Column" +msgstr "Colonna Riferita" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Table" +msgstr "Tabella Riferita" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/LogsTab.tsx +#: src/components/settings/PluginsTab.tsx +#: src/pages/SchemaDiagramPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Refresh" +msgstr "Aggiorna" + +#: src/components/settings/AiTab.tsx +msgid "Refresh Models" +msgstr "Aggiorna Modelli" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Routines" +msgstr "Aggiorna Routine" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Refresh Tables" +msgstr "Aggiorna Tabelle" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Triggers" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Views" +msgstr "Aggiorna Viste" + +#: src/components/settings/PluginsTab.tsx +msgid "Registry" +msgstr "Registro" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Release Notes" +msgstr "Note di Rilascio" + +#: src/pages/VisualExplainPage.tsx +msgid "Reload" +msgstr "Ricarica" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Remind Me Later" +msgstr "Ricordamelo Dopo" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Remove" +msgstr "Rimuovi" + +#: src/components/modals/PluginRemoveModal.tsx +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Remove" +msgstr "Rimuovi" + +#: src/components/ui/FilterRow.tsx +msgid "Remove filter" +msgstr "Rimuovi filtro" + +#: src/pages/Connections.tsx +msgid "Remove from Group" +msgstr "" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Remove Plugin" +msgstr "Rimuovi Plugin" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Connections.tsx +#: src/pages/Editor.tsx +msgid "Rename" +msgstr "Rinomina" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Renamed cell {n}" +msgstr "Rinominata cella {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Reordered cells" +msgstr "Celle riordinate" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Replace table" +msgstr "Sostituisci tabella" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Require" +msgstr "Richiesto" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Required" +msgstr "Richiesto" + +#. placeholder {0}: availableTypes.find((t) => t.name === form.type)?.requires_extension +#. placeholder {0}: exts.join(', ') +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "Requires extension: {0}" +msgstr "Richiede estensione: {0}" + +#: src/components/settings/PluginsTab.tsx +msgid "Requires Tabularis ≥ {minVersion}" +msgstr "Richiede Tabularis ≥ {minVersion}" + +#: src/components/settings/AiTab.tsx +msgid "Reset" +msgstr "Ripristina" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Reset to default" +msgstr "Ripristina predefinito" + +#: src/components/settings/AiTab.tsx +msgid "Reset to Default" +msgstr "Ripristina Predefinito" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Reset to driver default" +msgstr "Ripristina predefinito" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Resize sidebar" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Name" +msgstr "Nome risorsa" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource name is required" +msgstr "Il nome della risorsa è obbligatorio" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Type" +msgstr "Tipo di risorsa" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource type must be \"service\" or \"pod\"" +msgstr "Il tipo di risorsa deve essere \"service\" o \"pod\"" + +#: src/pages/TaskManagerPage.tsx +msgid "Restart" +msgstr "Riavvia" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Restart Now" +msgstr "Riavvia Ora" + +#: src/components/settings/GeneralTab.tsx +msgid "Result Page Size (Limit)" +msgstr "Dimensione Pagina Risultati (Limite)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Results" +msgstr "Risultati" + +#: src/components/ui/DataGrid.tsx +msgid "Revert Selected" +msgstr "Ripristina selezionato" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Review & adjust" +msgstr "Rivedi e modifica" + +#: src/pages/Editor.tsx +msgid "Rollback Changes" +msgstr "Annulla Modifiche" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "routine" +msgstr "routine" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Routines" +msgstr "Routine" + +#. placeholder {0}: rowIndex + 1 +#: src/components/ui/RowEditorSidebar.tsx +msgid "Row #{0}" +msgstr "Riga #{0}" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "rows" +msgstr "righe" + +#: src/components/settings/GeneralTab.tsx +msgctxt "settings" +msgid "rows" +msgstr "righe" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Rows Processed" +msgstr "Righe processate" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Rows returned" +msgstr "Righe restituite" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Rows will be added to an existing table" +msgstr "Le righe verranno aggiunte a una tabella esistente" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Run" +msgstr "Esegui" + +#: src/components/modals/QuerySelectionModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgctxt "editor" +msgid "Run All" +msgstr "Esegui Tutto" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run All Cells" +msgstr "Esegui Tutte le Celle" + +#: src/components/notebook/RunAllSummary.tsx +msgid "Run All Complete" +msgstr "Esecuzione Completata" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan." +msgstr "Esegui un EXPLAIN della query prima di mostrare il modal di approvazione, così l'utente vede il piano di esecuzione." + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Run Cell" +msgstr "Esegui Cella" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Run in console" +msgstr "Esegui nella console" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Run Preview" +msgstr "Esegui Anteprima" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Run queries" +msgstr "Query eseguite" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query" +msgstr "Esegui query" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Run Query" +msgstr "Esegui Query" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query (in editor)" +msgstr "Esegui query (nell'editor)" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Run SELECT query" +msgstr "Esegui query SELECT" + +#. placeholder {0}: selectedIndices.size +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run Selected ({0})" +msgstr "Esegui selezionate ({0})" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "Run SQL File..." +msgstr "Esegui File SQL..." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Run this command in your terminal, then restart Claude Code." +msgstr "Esegui questo comando nel terminale, poi riavvia Claude Code." + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run this query" +msgstr "Esegui questa query" + +#: src/i18n/registries/taskManagerProcessStatus.ts +#: src/pages/TaskManagerPage.tsx +msgid "running" +msgstr "in esecuzione" + +#: src/components/explain/VisualExplainView.tsx +msgid "Running EXPLAIN..." +msgstr "Esecuzione EXPLAIN..." + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Build and Test" +msgstr "Build e Test Rust" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Dependencies" +msgstr "Dipendenze Rust" + +#: src/pages/McpPage.tsx +msgid "Safety" +msgstr "Sicurezza" + +#: src/components/settings/ThemePicker.tsx +msgid "Same as App" +msgstr "Come l'app" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Sample values" +msgstr "Valori campione" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/Connections.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Save" +msgstr "Salva" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Save & Restart" +msgstr "Salva e Riavvia" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Save Changes" +msgstr "Salva Modifiche" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Save passwords in Keychain" +msgstr "Salva password nel Portachiavi" + +#: src/components/settings/AiTab.tsx +msgid "Save Prompt" +msgstr "Salva Prompt" + +#: src/pages/Editor.tsx +msgid "Save Query" +msgstr "Salva Query" + +#: src/pages/Editor.tsx +msgid "Save this query" +msgstr "Salva questa query" + +#: src/components/settings/PluginSettingsPage.tsx +msgid "Saved" +msgstr "Salvato" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Saved Connection" +msgstr "Connessione salvata" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Scan-heavy operations detected" +msgstr "Rilevate operazioni con scansione pesante" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "Schema: {tableName}" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Schemas" +msgstr "Schemi" + +#: src/components/ui/JsonTreeView.tsx +msgid "Search" +msgstr "Cerca" + +#: src/pages/Connections.tsx +msgid "Search connections..." +msgstr "Cerca connessioni..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search emoji…" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Search favorites..." +msgstr "Cerca nei preferiti..." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Search history..." +msgstr "Cerca nella cronologia..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search icons…" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Search models..." +msgstr "Cerca modelli..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Search notebooks" +msgstr "Cerca notebook" + +#: src/components/settings/PluginsTab.tsx +msgid "Search plugins…" +msgstr "Cerca plugin…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Search query…" +msgstr "Cerca nella query…" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Search session, client, connection…" +msgstr "Cerca sessione, client, connessione…" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Search tables, views, routines, triggers..." +msgstr "Cerca tabelle, viste, routine, trigger..." + +#: src/components/settings/LocalizationTab.tsx +msgid "Search timezones..." +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Search..." +msgstr "Cerca..." + +#: src/components/modals/mcp/McpSafetySection.tsx +#: src/components/settings/GeneralTab.tsx +msgid "seconds" +msgstr "secondi" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Select" +msgstr "Lettura" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select [fields]" +msgstr "SELECT [campi]" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select *" +msgstr "SELECT *" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a context first" +msgstr "Seleziona prima un contesto" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a database" +msgstr "Seleziona un database" + +#: src/pages/VisualExplainPage.tsx +msgid "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it." +msgstr "Seleziona un file contenente un piano EXPLAIN (formato JSON o testo PostgreSQL) per visualizzarlo." + +#: src/components/settings/AiTab.tsx +msgid "Select a model" +msgstr "Seleziona un modello" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Select a node to view details" +msgstr "Seleziona un nodo per i dettagli" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Select a table..." +msgstr "Seleziona una tabella..." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Select All" +msgstr "Seleziona Tutto" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Select All" +msgstr "Seleziona tutte" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Select All" +msgstr "Seleziona Tutti" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select at least one database" +msgstr "Seleziona almeno un database" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select context/namespace/type first" +msgstr "Seleziona prima contesto/namespace/tipo" + +#: src/components/ui/FilterRow.tsx +msgid "Select for Apply All" +msgstr "Seleziona per Applica tutti" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select K8s Connection" +msgstr "Seleziona connessione K8s" + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Select Query to Execute" +msgstr "Seleziona la query da eseguire" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Select Query to Explain" +msgstr "Seleziona la query da analizzare" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Select schemas to load:" +msgstr "Seleziona gli schemi da caricare:" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select SSH Connection" +msgstr "Seleziona Connessione SSH" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Select Tables" +msgstr "Seleziona Tabelle" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select the databases to include in this connection." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Key" +#: src/components/settings/AiTab.tsx +msgid "Select the model to be used for generation and explanation." +msgstr "Seleziona il modello da utilizzare per la generazione e la spiegazione." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select type..." +msgstr "Seleziona tipo..." + +#: src/components/modals/NewRowModal.tsx +msgid "Select Value..." +msgstr "Seleziona valore..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Selected emoji" +msgstr "Emoji selezionato" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Semicolon (;)" +msgstr "Punto e virgola (;)" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Separate Connections" +msgstr "Separa Connessioni" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sequential Scans" +msgstr "Scansioni Sequenziali" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Service" +msgstr "Service" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Session timezone sent to MySQL after connect." +msgstr "Fuso orario della sessione inviato a MySQL dopo la connessione." + +#: src/components/settings/AiActivityPanel.tsx +msgid "Sessions" +msgstr "Sessioni" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Set as Active" +msgstr "Imposta come attiva" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set DEFAULT" +msgstr "Imposta DEFAULT" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set EMPTY" +msgstr "Imposta VUOTO" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set GENERATED" +msgstr "Imposta GENERATED" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set NULL" +msgstr "Imposta NULL" + +#: src/components/layout/Sidebar.tsx +msgid "Settings" +msgstr "Impostazioni" + +#: src/pages/McpPage.tsx +msgid "Setup" +msgstr "Configurazione" + +#: src/components/settings/AiTab.tsx +msgid "Show AI Assist and Explain buttons in the editor" +msgstr "Mostra i pulsanti AI Assist ed Explain nell'editor" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All" +msgstr "Mostra Tutto" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All Tables" +msgstr "Mostra Tutte le Tabelle" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Show Data" +msgstr "Mostra Dati" + +#: src/components/settings/AppearanceTab.tsx +msgid "Show Line Numbers" +msgstr "Mostra Numeri di Riga" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Show overview" +msgstr "Mostra panoramica" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost." +msgstr "Mostra il visualizzatore JSON quando una cella di testo non tipizzata contiene un oggetto o un array JSON. Aggiunge un piccolo costo di analisi per cella." + +#: src/components/settings/GeneralTab.tsx +msgid "Show Welcome Screen" +msgstr "Mostra schermata di benvenuto" + +#. placeholder {0}: all.length +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Showing {RESULT_LIMIT} of {0} — refine search to narrow down." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Loading schema..." +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "showing first {MAX_PREVIEW_ROWS}" +msgstr "prime {MAX_PREVIEW_ROWS}" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Side by side" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Name" +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Skip (do not import)" +msgstr "Salta (non importare)" + +#: src/components/notebook/RunAllSummary.tsx +msgid "skipped" +msgstr "saltate" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Slowest Step" +msgstr "Step Più Lento" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket Timeout" +msgstr "Timeout Socket" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket timeout in milliseconds." +msgstr "Timeout del socket in millisecondi." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort ascending" +msgstr "Ordine crescente" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} ASC" +msgstr "Ordina per {colName} ASC" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} DESC" +msgstr "Ordina per {colName} DESC" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Sort by {field}" +msgstr "Ordina per {field}" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort by…" +msgstr "Ordina per…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort descending" +msgstr "Ordine decrescente" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sort or temp work detected" +msgstr "Rilevato lavoro di sort o temporaneo" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Split Group" +msgstr "Gruppo Diviso" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Horizontal" +msgstr "Dividi Orizzontale" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Vertical" +msgstr "Dividi Verticale" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +#: src/components/ui/TableToolbar.tsx +msgid "SQL" +msgstr "SQL" + +#: src/components/settings/AppearanceTab.tsx +msgid "SQL Editor" +msgstr "Editor SQL" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "SQL file executed successfully" +msgstr "File SQL eseguito con successo" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Functions" +msgstr "Funzioni SQL" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "SQL Generation" +msgstr "Generazione SQL" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Mode" +msgstr "Modalità SQL" + +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQL Preview" +msgstr "Anteprima SQL" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "SQLite does not support dropping FKs via ALTER TABLE." +msgstr "SQLite non supporta l'eliminazione di FK tramite ALTER TABLE." + +#: src/utils/explainPlan.ts +msgid "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural." +msgstr "SQLite EXPLAIN QUERY PLAN è leggero e soprattutto strutturale." + +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQLite only supports renaming columns. Other modifications require recreating the table manually." +msgstr "SQLite supporta solo la rinomina delle colonne. Altre modifiche richiedono la ricreazione manuale della tabella." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Connections" +msgstr "Connessioni SSH" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Host" +msgstr "Host SSH" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH is not available for this driver." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "NO" +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key" +msgstr "Chiave SSH" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key File (Optional)" +msgstr "File Chiave SSH (Opzionale)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key Passphrase (Optional)" +msgstr "Passphrase Chiave SSH (Opzionale)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Password" +msgstr "Password SSH" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH Password missing. Please re-enter." +msgstr "Password SSH mancante. Per favore reinseriscila." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Port" +msgstr "Porta SSH" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH User" +msgstr "Utente SSH" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSL Mode" +msgstr "Modalità SSL" + +#: src/components/ui/GeometryInput.tsx +msgid "ST_GeomFromText('POINT(30 40)', 4326)" +msgstr "ST_GeomFromText('POINT(30 40)', 4326)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Stacked view" +msgstr "Vista impilata" + +#: src/components/modals/CommunityModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Star on GitHub" +msgstr "Star su GitHub" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Started" +msgstr "Inizio" + +#: src/components/settings/GeneralTab.tsx +msgid "Startup" +msgstr "Avvio" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Status" +msgstr "Stato" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Stop" +msgstr "Stop" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop execution when a cell fails" +msgstr "Ferma l'esecuzione quando una cella fallisce" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop on Error" +msgstr "Ferma su Errore" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "stopped" +msgstr "arrestato" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Structure" +msgstr "Struttura" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Structure (DDL)" +msgstr "Struttura (DDL)" + +#: src/pages/Editor.tsx +msgid "Submit Changes" +msgstr "Invia Modifiche" + +#: src/components/notebook/RunAllSummary.tsx +msgid "succeeded" +msgstr "riuscite" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Success" +msgstr "Successo" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Success" +msgstr "Successo" + +#: src/components/modals/ExportProgressModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Success" +msgstr "Successo" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Success" +msgstr "Successo" + +#: src/pages/TaskManagerPage.tsx +msgid "Sum of RSS across the process tree — may overcount shared memory" +msgstr "Somma RSS dell'albero dei processi — può sovrastimare la memoria condivisa" + +#: src/components/settings/InfoTab.tsx +msgid "Support the Development" +msgstr "Supporta lo Sviluppo" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch tab" +msgstr "Cambia tab" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch to connection 1–9" +msgstr "Passa alla connessione 1–9" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Horizontal Layout" +msgstr "Passa a Layout Orizzontale" + +#: src/components/ui/TableToolbar.tsx +msgid "Switch to SQL WHERE input" +msgstr "Passa all'input SQL WHERE" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Vertical Layout" +msgstr "Passa a Layout Verticale" + +#: src/pages/TaskManagerPage.tsx +msgid "System Resources" +msgstr "Risorse di Sistema" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Tab" +msgstr "Tab" + +#: src/components/settings/AppearanceTab.tsx +msgid "Tab Size" +msgstr "Dimensione Tab" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Tab view" +msgstr "Vista a tab" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "table" +msgstr "tabella" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Table" +msgstr "Tabella" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Table name" +msgstr "Nome tabella" + +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Table Name" +msgstr "Nome Tabella" + +#: src/components/modals/CreateTableModal.tsx +msgid "Table name is required" +msgstr "Il nome della tabella è richiesto" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Tables" +msgstr "Tabelle" + +#: src/components/modals/CommunityModal.tsx +msgid "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community." +msgstr "Tabularis è un progetto gratuito e open-source. Se lo trovi utile, considera di supportare il progetto e unirti alla community." + +#: src/pages/TaskManagerPage.tsx +msgid "Tabularis Process" +msgstr "Processo Tabularis" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Target column" +msgstr "Colonna destinazione" + +#: src/components/settings/InfoTab.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Task Manager" +msgstr "Gestione Attività" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Temp or Sort Ops" +msgstr "Operazioni Temp o Sort" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Test" +msgstr "Test" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Test Connection" +msgstr "Testa Connessione" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Testing..." +msgstr "Test in corso..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "The app will restart automatically after installation" +msgstr "L'app si riavvierà automaticamente dopo l'installazione" + +#: src/components/settings/AiTab.tsx +msgid "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1" +msgstr "L'URL base della tua API compatibile OpenAI. Esempi: https://api.groq.com/openai/v1, http://localhost:8000/v1" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "The configuration file has been saved. Restart now to apply the changes?" +msgstr "Il file di configurazione è stato salvato. Riavviare ora per applicare le modifiche?" + +#: src/pages/Connections.tsx +msgid "The exported file will contain your database and SSH passwords in plaintext. Please store it securely." +msgstr "Il file esportato conterrà le password del database e SSH in chiaro. Conservalo in modo sicuro." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:" +msgstr "Il file di cronologia era corrotto ed è stato spostato in backup. Le nuove query verranno registrate normalmente. File di backup:" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely." +msgstr "Il Model Context Protocol (MCP) permette agli assistenti AI (come Claude) di connettersi ai tuoi strumenti locali. Tabularis espone un server MCP che permette all'AI di leggere lo schema del database ed eseguire query in sicurezza." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "The plugin process could not be launched. Check the error details below." +msgstr "Impossibile avviare il processo del plugin. Controlla i dettagli dell'errore." + +#: src/components/settings/AppearanceTab.tsx +msgid "The quick brown fox jumps over the lazy dog" +msgstr "La volpe marrone salta sopra il cane pigro" + +#: src/components/settings/AppearanceTab.tsx +msgid "Theme Selection" +msgstr "Selezione Tema" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "These connections will reject writes from MCP. Other connections behave normally." +msgstr "Queste connessioni rifiuteranno le scritture da MCP. Le altre si comportano normalmente." + +#: src/pages/TaskManagerPage.tsx +msgid "This action cannot be undone immediately" +msgstr "Questa azione non può essere annullata immediatamente" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "This driver only supports primary keys at table creation time" +msgstr "Questo driver supporta le chiavi primarie solo in fase di creazione della tabella" + +#: src/components/settings/AiTab.tsx +msgid "This key is loaded from an environment variable" +msgstr "Questa chiave è caricata da una variabile d'ambiente" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Month" +msgstr "Questo Mese" + +#: src/components/notebook/NotebookView.tsx +msgid "This notebook is empty. Add a cell to get started." +msgstr "Questo notebook è vuoto. Aggiungi una cella per iniziare." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path." +msgstr "Questo plugin potrebbe richiedere un interprete (es. Python). Usa le Impostazioni Plugin per configurare il percorso dell'interprete." + +#: src/components/settings/InfoTab.tsx +msgid "This project is a Work In Progress (WIP). Core features are stable, but we have big plans." +msgstr "Questo progetto è un Work In Progress (WIP). Le funzioni principali sono stabili, ma abbiamo grandi piani." + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Week" +msgstr "Questa Settimana" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgctxt "aiActivity" +msgid "Time" +msgstr "Ora" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Time" +msgstr "Tempo" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Timeout" +msgstr "Timeout" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Timeout" +msgstr "Timeout" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgctxt "mcp" +msgid "Timeout" +msgstr "Timeout" + +#: src/components/settings/LogsTab.tsx +msgid "Timestamp" +msgstr "Timestamp" + +#: src/components/settings/LocalizationTab.tsx +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Timezone" +msgstr "Fuso Orario" + +#: src/components/settings/LocalizationTab.tsx +msgid "Timezone used to display timestamps and exports. 'Auto' follows your system timezone." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Nullable" +#: src/components/modals/TriggerEditorModal.tsx +msgid "Timing" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Schema: {tableName}" +#: src/components/ui/FilterRow.tsx +msgid "to" +msgstr "a" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Today" +msgstr "Oggi" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Toggle Chart" +msgstr "Mostra/Nascondi Grafico" + +#: src/components/ui/JsonCell.tsx +msgid "Toggle inline JSON tree" +msgstr "Espandi/comprimi albero JSON" + +#: src/components/ui/TextCell.tsx +msgid "Toggle inline text editor" +msgstr "" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Toggle Preview" +msgstr "Anteprima" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Toggle sidebar" +msgstr "Mostra/nascondi sidebar" + +#: src/components/ui/TableToolbar.tsx +msgid "Toggle structured filter panel" +msgstr "Pannello filtri strutturati" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled parallel (cell {n})" +msgstr "Parallelo commutato (cella {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled stop on error" +msgstr "Stop on error commutato" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Tool" +msgstr "Strumento" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Top Issues" +msgstr "Punti Critici" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Total Cost" +msgstr "Costo Totale" + +#: src/components/ui/JsonInput.tsx +msgid "Tree" +msgstr "Albero" + +#. placeholder {0}: formatBytes(stats.total_memory_bytes) +#: src/pages/TaskManagerPage.tsx +msgid "Tree total: {0}" +msgstr "Totale albero: {0}" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "trigger" +msgstr "trigger" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Body (SQL)" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger created successfully" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Name" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger SQL is required" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger updated successfully" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Triggers" msgstr "" +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Try again" +msgstr "Riprova" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Try again" +msgstr "Riprova" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx #: src/components/modals/SchemaModal.tsx msgid "Type" +msgstr "Tipo" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Undo" +msgstr "Annulla" + +#: src/pages/Connections.tsx +msgid "Ungrouped" +msgstr "" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Unique Index" +msgstr "Indice Unico" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "unknown" +msgstr "sconosciuto" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Unknown" +msgstr "Sconosciuto" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Unnamed connection" +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Unset" +msgstr "Rimuovi" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Untitled" +msgstr "Senza nome" + +#: src/components/settings/PluginsTab.tsx +msgid "Up to date" +msgstr "Aggiornato" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Update" +msgstr "UPDATE" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Update" +msgstr "Aggiorna" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Update" +msgstr "Aggiorna" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Update Error" +msgstr "Errore Aggiornamento" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Update failed: " +msgstr "Aggiornamento fallito: " + +#: src/components/settings/InfoTab.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Updates" +msgstr "Aggiornamenti" + +#. placeholder {0}: ({ aur: "AUR", snap: "Snap Store", flatpak: "Flathub" } as Record)[ installationSource ] ?? installationSource +#: src/components/settings/InfoTab.tsx +msgid "Updates managed by {0}" +msgstr "Aggiornamenti gestiti da {0}" + +#: src/components/ui/BlobInput.tsx +msgid "Upload File" +msgstr "Carica File" + +#: src/components/ui/BlobInput.tsx +msgid "Uploading..." +msgstr "Caricamento in corso..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Existing SSH Connection" +msgstr "Usa Connessione SSH Esistente" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Kubernetes Port-Forward" +msgstr "Usa Port-Forward Kubernetes" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use SSH Tunnel" +msgstr "Usa Tunnel SSH" + +#: src/components/settings/InfoTab.tsx +msgid "Use your package manager to update Tabularis." +msgstr "Usa il tuo package manager per aggiornare Tabularis." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Username" +msgstr "Nome utente" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Using the driver's default icon." +msgstr "In uso l'icona predefinita del driver." + +#: src/components/ui/JsonInput.tsx +msgid "Valid JSON" +msgstr "JSON valido" + +#: src/components/notebook/ParamsPanel.tsx +msgctxt "editor" +msgid "value" +msgstr "valore" + +#: src/components/ui/FilterRow.tsx +msgctxt "toolbar" +msgid "value" +msgstr "valore" + +#: src/components/modals/QueryParamsModal.tsx +msgid "Value (e.g. 'text' or 123)" +msgstr "Valore (es. 'testo' o 123)" + +#: src/components/notebook/CellChart.tsx +msgid "Values" +msgstr "Valori" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify CA" +msgstr "Verifica CA" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Full" +msgstr "Verifica completa" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Identity" msgstr "" +#: src/components/modals/UpdateNotificationModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Version" +msgstr "Versione" + +#. placeholder {0}: entries[0].version +#: src/components/modals/WhatsNewModal.tsx +msgid "Version {0}" +msgstr "Versione {0}" + +#. placeholder {0}: updateInfo.latestVersion +#: src/components/settings/InfoTab.tsx +msgid "Version {0} is available" +msgstr "La versione {0} è disponibile" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Vertical" +msgstr "Verticale" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "view" +msgstr "vista" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View created successfully" +msgstr "Vista creata con successo" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "View Definition" +msgstr "Definizione Vista" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Definition (SQL)" +msgstr "Definizione Vista (SQL)" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View definition is required" +msgstr "La definizione della vista è richiesta" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "View details" +msgstr "Mostra dettagli" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "View ER Diagram" +msgstr "Visualizza Diagramma ER" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Name" +msgstr "Nome Vista" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View name is required" +msgstr "Il nome della vista è richiesto" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "View on GitHub" +msgstr "Visualizza su GitHub" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "View Schema" +msgstr "Vedi schema" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View updated successfully" +msgstr "Vista aggiornata con successo" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Views" +msgstr "Viste" + +#: src/components/modals/VisualExplainModal.tsx +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +#: src/pages/VisualExplainPage.tsx +msgid "Visual Explain" +msgstr "Visual Explain" + +#: src/components/settings/LogsTab.tsx +msgid "Warn" +msgstr "Warn" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap." +msgstr "Abbiamo una community Discord dedicata a Tabularis: ricevi aiuto, scambia consigli e influenza la roadmap." + +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "What's New" +msgstr "Novità" + +#: src/pages/TaskManagerPage.tsx +msgid "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted." +msgstr "fermerà forzatamente il suo processo. Tutte le connessioni database attive che usano questo plugin smetteranno di funzionare finché il plugin non verrà riavviato." + +#: src/components/ui/GeometryInput.tsx +msgid "WKT Mode" +msgstr "Modalità WKT" + +#: src/components/settings/AppearanceTab.tsx +msgid "Word Wrap" +msgstr "A Capo Automatico" + +#: src/components/settings/AppearanceTab.tsx +msgid "Wrap long lines in the editor instead of scrolling horizontally." +msgstr "Manda a capo le righe lunghe nell'editor invece di scorrere orizzontalmente." + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Write" +msgstr "Scrittura" + +#: src/components/notebook/MarkdownCell.tsx +msgid "Write Markdown here..." +msgstr "Scrivi Markdown qui..." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Writes only" +msgstr "Solo scritture" + #: src/components/modals/SchemaModal.tsx msgid "YES" -msgstr "" +msgstr "SÌ" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Yesterday" +msgstr "Ieri" + +#: src/components/settings/InfoTab.tsx +msgid "You're up to date" +msgstr "Sei aggiornato" diff --git a/src/locales/it/messages.ts b/src/locales/it/messages.ts index 39f11cf5..598c0c67 100644 --- a/src/locales/it/messages.ts +++ b/src/locales/it/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Max Voci Cronologia\"],\"-6AWa-\":[\"Importa connessioni\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Disconnetti\"],\"-PLZfh\":[\"Impossibile aggiornare i modelli\"],\"-T5W2e\":[\"Note Driver\"],\"-ZgeeE\":[\"Cronologia modifiche\"],\"-aYrdc\":[\"La versione \",[\"0\"],\" è disponibile\"],\"-fBGXl\":[\"Costo Più Alto\"],\"-jIQDz\":[\"Comprimi Cella\"],\"-u1eRo\":[\"Nessun database\"],\"-yoeVU\":[\"Caricamento schema...\"],\"-zy2Nq\":[\"Tipo\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID approvazione\"],\"0E5-gF\":[\"Sei sicuro di voler eliminare questa connessione?\"],\"0HCubq\":[\"Espandi\"],\"0Kmdvy\":[\"Font Personalizzato\"],\"0Nj13E\":[\"Genera SQL\"],\"0ROgz5\":[\"Inserisci JSON...\"],\"0SY9sU\":[\"Impossibile disconnettersi dal database\"],\"0b3kL9\":[\"Seleziona un database\"],\"0caMy7\":[\"Cronologia\"],\"0mx5ow\":[\"Query\"],\"0n9BtL\":[\"Anteprima\"],\"0pHB9N\":[\"Copia come tabella.colonna\"],\"0sQzZK\":[\"Filtra database...\"],\"0uPP9X\":[\"Nome FK (Opzionale)\"],\"0wxuek\":[\"Versione Corrente\"],\"0x09Aw\":[\"Stop on error commutato\"],\"0yBP6v\":[\"Supporta lo Sviluppo\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe\"],\"other\":[\"#\",\" righe\"]}]],\"0yVAoD\":[\"Conta righe\"],\"0zxJ87\":[\"Nessun log disponibile\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Modifica Vista\"],\"11fGJ6\":[\"Query\"],\"13hIUA\":[\"Chiave API \",[\"0\"]],\"14qNWF\":[\"Seleziona Connessione SSH\"],\"17qHRP\":[\"Nuova connessione\"],\"1Dn6bg\":[\"Importa dagli Appunti\"],\"1Dnd0I\":[\"Carica conteggio righe\"],\"1FjTLW\":[\"es. python3\"],\"1GOvbo\":[\"Ollama connesso (\",[\"0\"],\" modelli trovati)\"],\"1I6UoR\":[\"Viste\"],\"1U7hS5\":[\"Lung\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Font dell'Editor\"],\"1ekzlY\":[\"Processi Plugin\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Selezione Tema\"],\"1xVZkL\":[\"Nessun modello trovato\"],\"26Joci\":[[\"0\"],\" righe recuperate\"],\"2Bf-Qe\":[\"Nuova console\"],\"2CrSmP\":[\"Aiuta tabularis a crescere\"],\"2D9F8_\":[\"Impossibile duplicare la connessione\"],\"2Eoi_a\":[\"Mostra dettagli\"],\"2F4pE5\":[\"Build e Test Rust\"],\"2Fsd9r\":[\"Questo Mese\"],\"2JzKXI\":[\"Imposta GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Seleziona Tutto\"],\"2SO5RM\":[\"Kubernetes non è disponibile per questo driver.\"],\"2Uh5GA\":[\"ecosistema Cargo\"],\"2YylFp\":[\"Nuova Query Visuale\"],\"2luuSG\":[\"Riprova\"],\"2wxgft\":[\"Rinomina\"],\"2yG2GC\":[\"Sospendi le scritture (o ogni query) chiedendo conferma all'utente in Tabularis prima dell'esecuzione.\"],\"30-b5r\":[\"Elimina\"],\"31kwdN\":[\"Duplica filtro\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Tutti gli strumenti\"],\"3Am5DS\":[\"Vista a tab\"],\"3BhBCj\":[\"Eventi\"],\"3FVg9_\":[\"Colonna Locale\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Esegui\"],\"3L0HCz\":[\"Nessun plugin corrisponde alla ricerca.\"],\"3Nv3JV\":[\"Esecuzione query...\"],\"3TSz9S\":[\"Riduci\"],\"3UW8fG\":[\"Aggiornamenti gestiti da \",[\"0\"]],\"3YvS-c\":[\"Nuovo tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt Nome Cella Notebook\"],\"3qkggm\":[\"Schermo Intero\"],\"3rBJ1T\":[\"Vedi schema\"],\"3xZ-xV\":[\"Insert Current Timestamp\"],\"40Gx0U\":[\"Fuso Orario\"],\"41GP4f\":[\"Scegli il delimitatore predefinito utilizzato per la copia o l'esportazione delle righe in formato CSV.\"],\"42iaEi\":[\"PostgreSQL senza ANALYZE mostra solo le stime del planner.\"],\"44cXI8\":[\"Ordina per \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gestisci Database\"],\"4CK17g\":[\"Sei sicuro di voler modificare la vista \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Seleziona almeno un database\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Esporta come HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processo figlio\"],\"other\":[\"#\",\" processi figli\"]}]],\"4VyuY3\":[\"Sei sicuro di voler cancellare tutti i log?\"],\"4WWqS3\":[\"Espandi/comprimi albero JSON\"],\"4cEClj\":[\"Sessioni\"],\"4cmfYp\":[\"Duplicate Row\"],\"4lIZTB\":[\"Dipendenze Dev Frontend\"],\"4oYjvJ\":[\"Cerca nella query…\"],\"4tMxW4\":[\"Anteprima record correlato\"],\"4yJcjm\":[\"Seleziona tipo...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Chiudi pannello filtri (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Punto e virgola (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" evento\"],\"other\":[\"#\",\" eventi\"]}]],\"5I2fxu\":[\"/percorso/id_rsa\"],\"5NZpX8\":[\"Vista lista\"],\"5To6Z6\":[\"Copia query\"],\"5gqNQl\":[\"Vista griglia\"],\"5igIzr\":[\"Importazione annullata\"],\"5nTIup\":[\"Modifica vista: \",[\"name\"]],\"66bEht\":[\"Stato del Progetto\"],\"6PIJVc\":[\"Avvio\"],\"6QvP0l\":[\"Esporta come JSON\"],\"6W41Xq\":[\"Gestione Attività\"],\"6WngBH\":[\"Imposta NULL\"],\"6YtxFj\":[\"Nome\"],\"6_dCYd\":[\"Panoramica\"],\"6gvoHP\":[\"Copia messaggio d’errore\"],\"6oCVzX\":[\"Il contesto Kubernetes è obbligatorio\"],\"6wQO0f\":[\"Mostra Dati\"],\"6z9W13\":[\"Riavvia\"],\"71agNy\":[\"Genera nomi per le celle senza nome con AI\"],\"74J3FG\":[\"Versione iniziale\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Ho capito\"],\"77nSMU\":[\"Vuoi eliminare l'intera storia delle attività AI? L'operazione è irreversibile.\"],\"79UVYW\":[\"Esc per chiudere\"],\"7ABmyQ\":[\"Riprova\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" di \",[\"0\"],\" attivi\"],\"7E864M\":[\"Tipo Database\"],\"7FqaG1\":[\"Personalizza le istruzioni per l'analisi AI dei piani EXPLAIN. Usa \",[\"LANGUAGE\"],\" per la lingua di output.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Tipi misti rilevati, default TEXT\"],\"7RSQQd\":[\"Salva password nel Portachiavi\"],\"7VpPHA\":[\"Conferma\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fallite\"],\"7sMeHQ\":[\"Chiave\"],\"7sNhEz\":[\"Nome utente\"],\"7tATh2\":[\"Esegui Query\"],\"7yb4gk\":[\"Fallito: \"],\"8-4V8D\":[\"Tabelle\"],\"82G-l5\":[\"Il Model Context Protocol (MCP) permette agli assistenti AI (come Claude) di connettersi ai tuoi strumenti locali. Tabularis espone un server MCP che permette all'AI di leggere lo schema del database ed eseguire query in sicurezza.\"],\"83VjWE\":[\"Nuovo Notebook\"],\"86IgoU\":[\"Esegui query (nell'editor)\"],\"86fCgf\":[\"Personalizza le istruzioni per la generazione AI del nome delle tab risultato query. La query SQL viene inviata come messaggio utente.\"],\"87a_t_\":[\"Etichetta\"],\"8CWirf\":[\"Server MCP\"],\"8S8aIX\":[\"Controllo Connessione\"],\"8TMaZI\":[\"Timestamp\"],\"8Tg_JR\":[\"Personalizzato\"],\"8UFKYr\":[\"Seleziona la query da eseguire\"],\"8VKSGV\":[\"Genera SQL\"],\"8Wjy6z\":[\"Chiudi schede a sinistra\"],\"8ZsakT\":[\"Password\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Editor SQL\"],\"8bRgTe\":[\"Provider AI non configurato. Vai su Impostazioni > AI.\"],\"8c_W0h\":[\"Versioni precedenti\"],\"8guEQP\":[\"Aggiorna Viste\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN è leggero e soprattutto strutturale.\"],\"8q_sOc\":[\"Rimuovi\"],\"8t-akp\":[\"prime \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nome Connessione\"],\"91gnWY\":[\"Esporta Log\"],\"91rtHL\":[\"Crea Nuova Vista\"],\"92hf9a\":[\"Rimuovi\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vista aggiornata con successo\"],\"9NzDFn\":[\"Mostra la schermata di benvenuto all'avvio dell'applicazione.\"],\"9OoUS3\":[\"Crea Nuova Connessione SSH\"],\"9QGRD5\":[\"Colonna destinazione\"],\"9QTny9\":[\"Esecuzione query fallita.\"],\"9S-fyV\":[\"Piano di esecuzione preliminare\"],\"9SJ_Sx\":[\"Risorse di Sistema\"],\"9UQ730\":[\"Clona\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"Nessun dato negli appunti\"],\"9mMU1R\":[\"Tempo\"],\"9mvFo_\":[\"Ora\"],\"9npOH9\":[\"Apri file\"],\"9uI_rE\":[\"Annulla\"],\"9xUjzm\":[\"Seleziona Tutti\"],\"9y_02p\":[\"Chatta con la community, ricevi aiuto, suggerisci funzionalità\"],\"A1pPcI\":[\"Host SSH\"],\"A1taO8\":[\"Cerca\"],\"A6C0pv\":[\"Costo Totale\"],\"A7WG0p\":[\"Plugin disabilitato\"],\"A7yRz3\":[\"La definizione della vista è richiesta\"],\"A9Uyp6\":[\"Importazione fallita: \"],\"ABEd-z\":[\"Usa il tuo package manager per aggiornare Tabularis.\"],\"AMdgKV\":[\"Prompt Analisi Piano di Esecuzione\"],\"ANSTMe\":[\"Nessun problema rilevante nel riepilogo del piano corrente.\"],\"ANzIr7\":[\"Cronologia Query\"],\"AOnaU7\":[\"saltate\"],\"AVlZoM\":[\"Variabile Ambiente\"],\"AXTVsE\":[\"Verifica completa\"],\"AXdRYR\":[\"Log attuali\"],\"Aa-YkQ\":[\"Esporta Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filtra per livello\"],\"AlPiMN\":[\"Clicca per saltare alla pagina\"],\"An-1rA\":[\"Righe restituite\"],\"AnV8j-\":[\"Modifica Colonna\"],\"AvEr_L\":[\"Nuova Console\"],\"AvYbUL\":[\"Star su GitHub\"],\"Aw_eOs\":[\"Richiede Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Nessun risultato trovato\"],\"B0mJGb\":[\"Output Grezzo\"],\"B1c58n\":[\"Modifica colonna\"],\"B3toQF\":[\"Oggetti\"],\"B5nKny\":[\"/percorso/assoluto/cartella\"],\"B5xevr\":[\"Il nome della connessione è obbligatorio\"],\"BAVvWJ\":[\"Diagramma ER\"],\"BBtVak\":[\"Comprimi Tutto\"],\"BEVzjL\":[\"Importazione fallita\"],\"BFxXo5\":[\"Esegui Tutto\"],\"BJe2lZ\":[\"Mostra/nascondi sidebar\"],\"BK3WCj\":[\"Impossibile caricare il registro\"],\"BKbO3i\":[\"Notebook modificato\"],\"BMB51y\":[\"Esegui nella console\"],\"BNW_Z4\":[\"es. utenti_attivi, riepilogo_ordini\"],\"BUO_JN\":[\"Copia Query\"],\"BYkhHY\":[\"Controlla aggiornamenti all'avvio\"],\"BbHofF\":[\"Esporta connessioni\"],\"BeSg6-\":[\"Raccogli i log dell'applicazione in memoria per il debug\"],\"BgAyQH\":[\"Rimuovi ordinamento\"],\"BinTJI\":[\"ecosistema npm\"],\"BkFson\":[\"Impaginazione automatica\"],\"Bpglf1\":[\"Sposta Su\"],\"BrGo6h\":[\"Cerca notebook\"],\"BxiAN_\":[\"Elimina Query\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dipendenze Frontend\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Nessun filtro —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Download in corso...\"],\"CUxwxn\":[\"Mostra Tutte le Tabelle\"],\"CWMXbw\":[\"fermerà forzatamente il suo processo. Tutte le connessioni database attive che usano questo plugin smetteranno di funzionare finché il plugin non verrà riavviato.\"],\"CZt6BX\":[\"CONFIGURAZIONE MANUALE\"],\"Ca8ixZ\":[\"Elimina\"],\"CbJBQS\":[\"Aggiornamento fallito: \"],\"Cdz-YU\":[\"Vista impilata\"],\"CpeQf9\":[\"Cicli\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Seleziona il modello da utilizzare per la generazione e la spiegazione.\"],\"DB8zMK\":[\"Applica\"],\"DDXf5E\":[\"Funzioni SQL\"],\"DEwnwi\":[\"Elimina\"],\"DNTvdl\":[\"Apri nell'editor\"],\"DPc2P9\":[\"Elimina Cella\"],\"DUY8Ba\":[\"Modifiche Incompatibili\"],\"DVnBSM\":[\"Altezza Riga\"],\"Dd7YLj\":[\"Forse più tardi\"],\"Deej3j\":[\"JSON non valido\"],\"DfKhk_\":[\"Aggiorna\"],\"DiRiTz\":[\"Apri pagina del pacchetto\"],\"DlRHAD\":[\"Esecuzione EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" errore\"],\"other\":[\"#\",\" errori\"]}]],\"Dvdihe\":[\"Su \",[\"0\"],\" — controlla e decidi prima dell'esecuzione.\"],\"DzFLzw\":[\"SÌ\"],\"E-JUtQ\":[\"Approvazione manuale\"],\"E0kcnZ\":[\"Generale\"],\"E2mje_\":[\"Seleziona la query da analizzare\"],\"EDieyg\":[\"Sei sicuro di voler eliminare questa connessione SSH?\"],\"EHZxPj\":[\"Espandi\"],\"EL4oDO\":[\"Nuova Versione Disponibile\"],\"EPi4gT\":[\"Ordina per \",[\"field\"]],\"EWPtMO\":[\"Codice\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Sconosciuto\"],\"EhADgB\":[\"Elimina colonna\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Sei aggiornato\"],\"Em6JFd\":[\"Conta righe\"],\"EnGiqG\":[[\"0\"],\" elementi\"],\"Ew1n5z\":[\"Cerca plugin…\"],\"F18WP3\":[\"Parametri\"],\"F3uc1x\":[\"Il file esportato conterrà le password del database e SSH in chiaro. Conservalo in modo sicuro.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" righe\"],\"other\":[\"#\",\" righe\"]}]],\"F6pfE9\":[\"Attiva\"],\"F8tXg7\":[\"Anteprima Dati\"],\"F9-6yK\":[\"Formato di copia predefinito\"],\"F9lxfG\":[\"Rimuovi\"],\"F9nsa2\":[\"Il file di cronologia era corrotto ed è stato spostato in backup. Le nuove query verranno registrate normalmente. File di backup:\"],\"FF_oap\":[\"Default\"],\"FK8rlP\":[\"Nessuna connessione SSH configurata\"],\"FMRcH8\":[\"Prima riga come intestazione\"],\"FNvDMc\":[\"Questa Settimana\"],\"FQe1FI\":[\"Righe Stimate\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operazione\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Scegli un tema indipendente per l'editor SQL, oppure mantienilo sincronizzato con il tema dell'app.\"],\"FsvZQL\":[\"Modificata cella \",[\"n\"]],\"FtwKL9\":[\"Cambia tab\"],\"FznI3z\":[\"Eliminare la chiave esterna \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Anteprima fallita: \"],\"G8Q5Zq\":[\"Il namespace è obbligatorio\"],\"GAohqx\":[\"Elimina colonna\"],\"GJR99u\":[\"Eliminazione colonna fallita: \"],\"GKfzzM\":[\"Scegli una connessione...\"],\"GS-Mus\":[\"Esporta\"],\"GUaLUq\":[\"Caricamento schema fallito: \"],\"GXP-Iw\":[\"Aggiungi Cella SQL\"],\"Gj1mLb\":[\"Celle riordinate\"],\"GlbqG2\":[\"Ripristina predefinito\"],\"Gs5AlY\":[\"Aperta\"],\"GtmO8_\":[\"da\"],\"GxkJXS\":[\"Caricamento in corso...\"],\"H-o4D2\":[\"Crea nuova colonna\"],\"H2B-KW\":[\"Scegli il formato predefinito per la copia delle righe con Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Ripeti\"],\"H7mlCc\":[\"/percorso/assoluto/db.sqlite\"],\"H86f9p\":[\"Riduci\"],\"H9P8CD\":[\"aggiungi il primo filtro\"],\"HAQlGl\":[\"Attività AI\"],\"HKNZrs\":[\"Cond. Indice\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Elimina \",\"#\",\" righe\"],\"other\":[\"Elimina \",\"#\",\" righe\"]}]],\"HPuCiP\":[\"Percorso Cartella\"],\"HUs1R3\":[\"Nessuna scheda aperta per questa connessione.\"],\"HV4Isp\":[\"Inserisci password SSH\"],\"HVC8Hh\":[\"Copiato negli appunti\"],\"HWEpq8\":[\"Scrittura Disco/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Salvataggio vista fallito: \"],\"He8v1Y\":[\"Deseleziona da Applica tutti\"],\"HehHP1\":[\"Layout Predefinito\"],\"HilYn4\":[\"Questo notebook è vuoto. Aggiungi una cella per iniziare.\"],\"HjxVK_\":[\"Test connessione rapido\"],\"HmMnRx\":[\"Modalità WKT\"],\"HoKCiI\":[\"L'app si riavvierà automaticamente dopo l'installazione\"],\"HpK_8d\":[\"Ricarica\"],\"Hpi4Jm\":[\"Entra subito\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configura SSH Inline\"],\"I5VBsr\":[\"Come l'app\"],\"I8yrPb\":[\"Sostituisci tabella\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Ricordamelo Dopo\"],\"I99Miw\":[\"Costo\"],\"IETZIR\":[\"Modifica nome cella\"],\"IG9wzA\":[\"Inserimento riga fallito: \"],\"ILleOG\":[\"Il tipo di risorsa deve essere \\\"service\\\" o \\\"pod\\\"\"],\"IQ3gAw\":[\"Carica File\"],\"IUwGEM\":[\"Salva Modifiche\"],\"IUwmLq\":[\"Dipendenze dirette dichiarate in package.json e src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Librerie Open Source\"],\"I_43p6\":[\"Sicurezza\"],\"Iaizf4\":[\"Aspetto\"],\"Il3FBB\":[\"Pannello filtri strutturati\"],\"IniZRK\":[\"Download non disponibile - caricata solo anteprima\"],\"Isaozb\":[\"Rivedi e modifica\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Le query attive e le connessioni attraverso questo plugin verranno interrotte.\"],\"J6v1s_\":[\"Modello Predefinito\"],\"JE-DVk\":[\"Interprete\"],\"JEGlfK\":[\"Inizio\"],\"JKDPqP\":[\"Seleziona prima un contesto\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Usa Tunnel SSH\"],\"JRz8tw\":[\"MySQL e MariaDB espongono metriche reali solo con le varianti supportate di EXPLAIN ANALYZE o ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP o SVG · max 512 KB\"],\"JY5Oyv\":[\"Database\"],\"JlFRIB\":[\"Fuso orario della sessione inviato a MySQL dopo la connessione.\"],\"JrOEip\":[\"Anteprima\"],\"JsY1p5\":[\"Negata\"],\"K3H9p5\":[\"Rimuovi\"],\"K5Dgu_\":[\"Database\"],\"K8IGKf\":[\"Tipo di Autenticazione\"],\"KAYNSW\":[\"Quanti log mantenere in memoria (1-10000)\"],\"KHTGbr\":[\"EXPLAIN preliminare\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copia come `colonna`\"],\"KM5Kc8\":[\"Almeno una colonna deve essere selezionata\"],\"KSCnVQ\":[\"Tipo\"],\"KUjOb9\":[\"in esecuzione\"],\"KXBdwy\":[\"Aggiorna Routine\"],\"KXNyX7\":[\"Imposta DEFAULT\"],\"Kd70-v\":[\"Importa dagli Appunti...\"],\"KhI4oS\":[\"Apri la riga referenziata in \",[\"0\"]],\"KhgrNu\":[\"Integrazione Server MCP\"],\"KirERL\":[\"Timeout\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Eliminazione indice fallita: \"],\"KzeARD\":[\"Eliminazione tabella fallita: \"],\"L-rMC9\":[\"Ripristina predefinito\"],\"L3HXkQ\":[\"Correzioni Bug\"],\"LCZ7Dy\":[\"Copia nome\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"indici\"],\"LMeAoR\":[\"righe\"],\"LPCdc-\":[\"Prompt Nome Tab Query\"],\"LPFmga\":[\"Seleziona per Applica tutti\"],\"LYzbQ2\":[\"Strumento\"],\"Lbis_V\":[\"Navigatore rapido\"],\"Lcpbe2\":[\"Impossibile avviare il processo del plugin. Controlla i dettagli dell'errore.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN è supportato solo per istruzioni DML (SELECT, INSERT, UPDATE, DELETE). Le istruzioni DDL come CREATE, DROP o ALTER non possono essere analizzate.\"],\"LnT0hQ\":[\"Aggiungi colonna\"],\"LvutiO\":[\"Suggerisci con AI\"],\"M-rHQO\":[\"Esci da Schermo Intero\"],\"M0XJba\":[\"Sei sicuro di voler cancellare tutta la cronologia delle query per questa connessione?\"],\"M1co_O\":[\"Configurato\"],\"M73whl\":[\"Contesto\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Emoji selezionato\"],\"MWB7fV\":[\"Mostra Tutto\"],\"MXdOwj\":[\"Separa Connessioni\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Seleziona connessione K8s\"],\"Mc1tjS\":[\"Abilita ANALYZE per ispezionare righe reali, tempi, cicli e buffer.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" righe in più\"],\"Mp0jQ_\":[\"Questo driver supporta le chiavi primarie solo in fase di creazione della tabella\"],\"MqpZwN\":[\"Processo Tabularis\"],\"MxIx43\":[\"↑↓ per navigare, Invio per aprire\"],\"MygtgQ\":[\"Aggiungi Cella Markdown\"],\"N40H-G\":[\"Tutti\"],\"N5UQxq\":[\"Ollama non rilevato sulla porta \",[\"0\"],\". È in esecuzione?\"],\"N6GBcC\":[\"Conferma eliminazione\"],\"N6aqHp\":[\"Query eseguite\"],\"N9_S15\":[\"Verrà creata una nuova tabella\"],\"NBdMa1\":[\"Step Più Lento\"],\"NC2AI2\":[\"Lunghezza\"],\"NCzNnx\":[\"Ordine crescente\"],\"NT4Ubs\":[\"Elimina chiave personalizzata e ripristina variabile d'ambiente (se presente)\"],\"NUjrCO\":[\"Nessun preferito corrisponde alla ricerca\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Totale albero: \",[\"0\"]],\"Nc2VQn\":[\"Aggiungi a esistente\"],\"NgFERn\":[\"Aggiungi ai Preferiti\"],\"NktMHG\":[\"Nome database\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Test\"],\"Nq5QTk\":[\"analizza N-esima\"],\"O2STgu\":[\"Esportazione fallita: \"],\"O8SV8O\":[\"Download in corso...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Esegui Tutte le Celle\"],\"OGWdBg\":[\"Nome Vista\"],\"OHqT6w\":[\"Premi la combinazione di tasti...\"],\"OXJsaG\":[\"Nome parametro non valido\"],\"OfhWJH\":[\"Ripristina\"],\"OlAl5i\":[\"Espandi tutto\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Unisciti su Discord\"],\"P1YGsb\":[\"Generazione SQL\"],\"P2m1xb\":[\"Ferma su Errore\"],\"P3Qlys\":[\"Nessun ID Connessione\"],\"P6Y3Yf\":[\"Esegui questo comando nel terminale, poi riavvia Claude Code.\"],\"PCdj-c\":[\"Deseleziona tutte\"],\"PMnFt9\":[\"Lettura Disco/s\"],\"PQU2Va\":[\"Accetta Suggerimento con Invio\"],\"PRnH8G\":[\"su \",[\"0\"]],\"PY8UF3\":[\"Parallelo commutato (cella \",[\"n\"],\")\"],\"PiH3UR\":[\"Copiato!\"],\"Pia95d\":[\"Il nome della colonna è richiesto\"],\"PrElXQ\":[\"Aggiorna\"],\"PrixCC\":[\"Le righe verranno aggiunte a una tabella esistente\"],\"Pujgbb\":[\"Configura destinazione\"],\"Pw_eQV\":[\"Plugin non avviato\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Nessuna query salvata\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Nessun processo figlio\"],\"QCxMC0\":[\"Controlla automaticamente nuove versioni all'avvio dell'app\"],\"QEazml\":[\"Elimina selezionate\"],\"QHcLEN\":[\"Connesso\"],\"QLHHFO\":[\"Modalità sola lettura\"],\"QOvAW3\":[\"Nuove Funzionalità\"],\"QULGRi\":[\"Nessuna query valida trovata\"],\"QZwllF\":[\"Sfoglia...\"],\"QbkSr_\":[\"EXPLAIN non disponibile per questa query.\"],\"QeHFYZ\":[\"EXPLAIN fallito: \",[\"0\"]],\"Qll2Tb\":[\"Decresc.\"],\"Qoq-GP\":[\"Leggi di più\"],\"Qu4Hog\":[\"Notebook importato con successo\"],\"R-A2Vd\":[\"Nessun dato da visualizzare\"],\"R0Hkb2\":[[\"0\"],\" database selezionato/i\"],\"R1nHhB\":[\"Esiste già\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Converti in Console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configurazione\"],\"RF-HyV\":[\"Scegli la tua lingua preferita. 'Auto' userà la lingua di sistema.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copia nome\"],\"RI-HZc\":[\"Inserisci Chiave \",[\"0\"]],\"RJrE17\":[\"Sei sicuro di voler eliminare la vista \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Una stella aiuta gli altri a scoprire il progetto\"],\"Rb3Tdm\":[\"Nome del notebook\"],\"RcbKJ3\":[\"All'Update\"],\"RkefFq\":[\"Esegui un EXPLAIN della query prima di mostrare il modal di approvazione, così l'utente vede il piano di esecuzione.\"],\"RnF_hl\":[\"Caricamento registro plugin...\"],\"Rns7_C\":[\"Questa azione non può essere annullata immediatamente\"],\"RoKRqW\":[\"Plugin Disponibili\"],\"RphpKk\":[\"Aspetto\"],\"Rt8sHM\":[\"Rilevato lavoro di sort o temporaneo\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Abilitati\"],\"S1veKH\":[\"Ripristina selezionato\"],\"S5zeZU\":[\"Anteprima\"],\"S8Yqbl\":[\"Inserisci\"],\"SDND4q\":[\"Non configurato\"],\"SJRy3D\":[\"(Auto-generato)\"],\"SSwIjo\":[\"Imposta VUOTO\"],\"SgvA_r\":[\"Premi Esegui (Ctrl/Command+F5) per caricare i dati della tabella\"],\"SlfejT\":[\"Errore\"],\"SoATkx\":[\"Copia cella\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL Endpoint\"],\"T7w5CQ\":[\"Impossibile creare nuova riga: \"],\"T9947j\":[\"Valore (es. 'testo' o 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Passa a Layout Verticale\"],\"TK5oex\":[\"Salva Prompt\"],\"TKQ7K-\":[\"Installa\"],\"TKZreP\":[\"Richiesto\"],\"TMLAx2\":[\"Richiesto\"],\"TO08JI\":[\"chiavi esterne\"],\"TQloo1\":[\"Crea Chiave Esterna\"],\"TVKqvO\":[\"Modifica Riga\"],\"TYSdQ3\":[\"Esegui query SELECT\"],\"TfDFHS\":[\"Manda a capo le righe lunghe nell'editor invece di scorrere orizzontalmente.\"],\"Tibfjs\":[\"Nessuna connessione salvata — creane una qui sotto\"],\"Tj36Dr\":[\"Ripristina Predefinito\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Blocca query\"],\"TpwXyg\":[\"Se il tempo manca, il server ha probabilmente restituito un piano solo stimato.\"],\"Tw2M1h\":[\"Installazione fallita\"],\"Ty-rm9\":[\"Connessioni SSH\"],\"Tz0i8g\":[\"Impostazioni\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Connessioni Kubernetes\"],\"U4uzyV\":[\"Novità\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Ferma l'esecuzione quando una cella fallisce\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" su \",[\"1\"],\" — controlla e decidi prima dell'esecuzione.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configurazione installata per \",[\"clientName\"],\"! Riavvia l'app per applicare.\"],\"URmyfc\":[\"Dettagli\"],\"UWQBvp\":[\"Genera modelli SQL\"],\"UawTKZ\":[\"Opzionale. Specifica l'eseguibile usato per avviare questo plugin (es. python3 su macOS/Linux, python o percorso completo su Windows). Lascia vuoto per usare il valore predefinito.\"],\"Ub8sf5\":[\"SQLite non supporta l'eliminazione di FK tramite ALTER TABLE.\"],\"UbbJ8j\":[\"Nessuna opzione trovata\"],\"Ubs68g\":[\"Generali\"],\"UftN8J\":[\"Queste connessioni rifiuteranno le scritture da MCP. Le altre si comportano normalmente.\"],\"UnQNah\":[\"Sei sicuro di voler eliminare la colonna \\\"\",[\"0\"],\"\\\" dalla tabella \\\"\",[\"tableName\"],\"\\\"?\\n\\nATTENZIONE: Questo eliminerà permanentemente tutti i dati in questa colonna. L'azione non può essere annullata.\"],\"UncTTh\":[\"Somma RSS dell'albero dei processi — può sovrastimare la memoria condivisa\"],\"UpjgFm\":[\"Parametri modificati\"],\"UsAnu1\":[\"ANALYZE esegue la query. Usare con cautela su istruzioni che modificano dati.\"],\"UxKoFf\":[\"Navigazione\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Dimensione Tab\"],\"UzWGWO\":[\"Passa all'input SQL WHERE\"],\"V-chk5\":[\"Frequenza con cui verificare se le connessioni attive sono ancora raggiungibili. Imposta 0 per disabilitare.\"],\"V-pw1j\":[\"Nome tabella\"],\"V2T0Uw\":[\"Nessun notebook salvato.\"],\"V3aNwx\":[\"Editor Dati\"],\"VGYp2r\":[\"Applica a tutto\"],\"VH8S7x\":[\"Colonna appunti\"],\"VIAEcS\":[\"Impossibile caricare i database. Verifica le credenziali.\"],\"VKdztF\":[\"Aggiungi righe\"],\"VLiHXI\":[\"Dati Analyze\"],\"VMbmXc\":[\"Sei sicuro di voler rimuovere \\\"\",[\"pluginName\"],\"\\\"? I file del plugin verranno eliminati.\"],\"VO3weF\":[\"Nessun file caricato\"],\"VOZlKc\":[\"Importazione Database\"],\"VPzsIz\":[\"Generazione nome...\"],\"VUul0v\":[\"La terminazione di\"],\"VW0GVQ\":[\"Clicca un altro emoji qui sotto per cambiarlo.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Tutte le query\"],\"Vi2Pqx\":[\"di\"],\"Vl2zn2\":[\"arrestato\"],\"Vo4uBA\":[\"Si è verificato un errore durante l'installazione del plugin. Vedi i dettagli qui sotto.\"],\"VqqyOs\":[\"Esegui una query per vedere i risultati\"],\"VzhDFh\":[\"Blocca qualsiasi statement non-SELECT proveniente da MCP, salvo le connessioni esplicitamente abilitate.\"],\"W3uwpT\":[\"Chiudi tutte le schede\"],\"W4MKLh\":[\"es. Sembra rischiosa in produzione, conferma…\"],\"WA8RND\":[\"Sei sicuro di voler eliminare la tabella \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Elimina tabella\"],\"WLnvCZ\":[\"Inserisci nome utente\"],\"WM-__8\":[\"Cerca connessioni...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe importate in \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" righe importate in \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Sei sicuro di voler eliminare la query \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"riuscite\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"Generali\"],\"WmPpB1\":[\"Caricamento del piano di esecuzione…\"],\"Wu7cK0\":[\"Nessun database trovato\"],\"WvoUQF\":[\"Eliminata cella \",[\"n\"]],\"Ww3pDD\":[\"COMANDO MANUALE\"],\"X-20AU\":[\"Inserisci prompt nome tab query...\"],\"X-U6_w\":[\"Famiglia Font\"],\"X5fs0g\":[\"Crea la tua prima connessione per iniziare.\"],\"X7Ayjp\":[\"Password salvata nel portachiavi di sistema\"],\"X9kySA\":[\"Preferiti\"],\"XJOV1Y\":[\"Attività\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Spiegazione Query\"],\"XVF2Pf\":[\"Modifica Schemi\"],\"XW6OYF\":[\"Questo plugin potrebbe richiedere un interprete (es. Python). Usa le Impostazioni Plugin per configurare il percorso dell'interprete.\"],\"XZB6Xr\":[\"Numero massimo di log\"],\"Xcffv2\":[\"Mostra i pulsanti AI Assist ed Explain nell'editor\"],\"XeqTSh\":[\"Tipo Join\"],\"XmJfZT\":[\"nome\"],\"XoQfG1\":[\"Utente SSH\"],\"XwI0Vw\":[\"Auto (Sistema)\"],\"XyDlLX\":[\"Nome Indice\"],\"Y2P2aK\":[\"Seleziona gli schemi da caricare:\"],\"Y8HYw2\":[\"valore\"],\"Y8zX3R\":[\"Inserisci nell'Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Cerca...\"],\"YWlnMZ\":[\"Porta Ollama\"],\"YYdC3A\":[\"Versione \",[\"0\"]],\"YYn8b5\":[\"Sfoglia e installa plugin dal registro.\"],\"Y_3yKT\":[\"Apri in Nuova Scheda\"],\"YiAQ_Q\":[\"Aggiorna Tabelle\"],\"Ysjr9Y\":[\"Anteprima SQL\"],\"YswNf7\":[\"Tutti i livelli\"],\"YtNwr6\":[\"Numero massimo di voci nella cronologia delle query salvate per connessione.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Caricamento...\"],\"Z7ZXbT\":[\"Approva\"],\"Z8JpBH\":[\"Esporta come Notebook\"],\"Z8fBIc\":[\"Le righe reali superano la stima\"],\"ZC2VJP\":[\"Esegui\"],\"ZCIS4k\":[\"nessun filtro attivo\"],\"ZF1_UT\":[\"Modalità SSL\"],\"ZGjBPa\":[\"Pulisci Log\"],\"ZHQTlM\":[\"Importazione da\"],\"ZIFDoJ\":[\"Seleziona almeno Struttura o Dati\"],\"ZIZA6o\":[\"Modifica prima di approvare\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avvisi di parsing\"],\"other\":[\"#\",\" avvisi di parsing\"]}]],\"ZVn8p2\":[\"Visualizza i numeri di riga nel margine dell'editor.\"],\"ZYnwzF\":[\"Disconnesso\"],\"Za3_fO\":[\"Error\"],\"Zf7LHg\":[\"Nessun contesto trovato (kubectl è installato?)\"],\"Zfotp5\":[\"Scostamenti elevati tra stima e reale indicano spesso statistiche non aggiornate o predicati difficili da modellare.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Caricamento degli schemi fallito\"],\"ZqXGPF\":[\"Eliminazione vista fallita: \"],\"ZuL73E\":[\"Crea una nuova vista database\"],\"_-bi4r\":[\"Tabella Riferita\"],\"_AEYGI\":[\"Nessuna cronologia di esecuzione\"],\"_FdpZc\":[\"Impossibile caricare la definizione della vista: \"],\"_FxSdi\":[\"Consulta le dipendenze open source dirette usate dall'app, dal backend e dalla toolchain.\"],\"_JyTG8\":[\"Inserisci prompt di spiegazione...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"righe\"],\"_TK1zF\":[\"Connessione salvata\"],\"_bJFBE\":[\"Timeout Connessione\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Albero\"],\"_dqduX\":[\"Pagina successiva\"],\"_fwE6J\":[\"Precedenti\"],\"_n04sB\":[\"Termina\"],\"_otxbQ\":[\"File chiave\"],\"_pezIT\":[\"Impossibile connettersi a \",[\"0\"],\". Verifica le impostazioni o assicurati che il database sia in esecuzione.\"],\"_srfkj\":[\"Chiave personalizzata eliminata con successo\"],\"_t6aFo\":[\"MySQL e MariaDB possono ripiegare su EXPLAIN FORMAT=JSON o sull'EXPLAIN tabellare in base alla versione del server.\"],\"_xTbaM\":[\"colonne\"],\"_yxaaL\":[\"Indice Unico\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis è un progetto gratuito e open-source. Se lo trovi utile, considera di supportare il progetto e unirti alla community.\"],\"a9CASo\":[\"SQLite supporta solo la rinomina delle colonne. Altre modifiche richiedono la ricreazione manuale della tabella.\"],\"aAIQg2\":[\"Aspetto\"],\"aC_vCa\":[\"Genera nome con AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Seleziona un nodo per i dettagli\"],\"aHKcKc\":[\"Pagina precedente\"],\"aI-5wG\":[\"Verifica CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valore Predefinito\"],\"aScJP1\":[\"Esegui questa query\"],\"aVNbN8\":[\"Condizioni filtro\"],\"aWhdMQ\":[\"Usa Connessione SSH Esistente\"],\"aXYd8V\":[\"Timeout\"],\"aX_S_r\":[\"Pagina \",[\"0\"],\" di \",[\"totalPages\"]],\"agZcf8\":[\"SQL Generato: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [campi]\"],\"alplHn\":[\"Analisi del piano di esecuzione con AI...\"],\"anBcU3\":[\"Se ti piace tabularis e vuoi vedere nuove funzionalità, considera di supportare il progetto contribuendo al codice, segnalando bug o mettendo una stella su GitHub.\"],\"arHmj2\":[\"Sei sicuro di voler eliminare questa query dalla cronologia?\"],\"arKcqW\":[\"I server meno recenti possono ripiegare su piani stimati con meno metriche.\"],\"arcpYe\":[\"Approvazione richiesta\"],\"aurEkh\":[\"Caricamento processi…\"],\"avtdsd\":[\"Modalità SQL\"],\"az8lvo\":[\"Disattiva\"],\"b1Ah3z\":[\"Focus su\"],\"b392Dr\":[\"Espandi Tutto\"],\"b5S_PU\":[\"Nome Database\"],\"bAvovP\":[\"Sposta Giù\"],\"bH3JqY\":[\"Nessuna tabella trovata\"],\"bP5JOn\":[\"A Capo Automatico\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Rendi tutte le query MCP di sola lettura\"],\"bmca5u\":[\"Solo scritture\"],\"bpCiBU\":[\"Consenti scritture da MCP\"],\"bqnhqW\":[\"La stima supera le righe reali\"],\"bqpcP7\":[\"Esporta Database\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Errore\"],\"bw22Gk\":[\"Schema Colonne\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Punti Critici\"],\"cFCKYZ\":[\"Nega\"],\"cFGrCP\":[\"tabella\"],\"cGeFup\":[\"Dimensione Font\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focus su Tabella\"],\"cM9NHc\":[\"Effettua downgrade a\"],\"cO9-2L\":[\"Disabilitato\"],\"cSev-j\":[\"Filtri\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importa \",\"#\",\" righe\"],\"other\":[\"Importa \",\"#\",\" righe\"]}]],\"c_xoSn\":[\"Rinominata cella \",[\"n\"]],\"cd0XEW\":[\"Salva Query\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Gruppo Diviso\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" istruzioni\"],\"d34vwG\":[\"Carica Database\"],\"d6ynQ7\":[\"Ordine decrescente\"],\"d8_6_v\":[\"annulla\"],\"d8wc1_\":[\"Valori campione\"],\"dBXoCS\":[\"È presente una variabile d'ambiente, ma puoi sovrascriverla impostando una chiave qui sopra.\"],\"dD7NPy\":[\"Sommario\"],\"dEgA5A\":[\"Annulla\"],\"dMtLDE\":[\"a\"],\"dPJVhW\":[\"Installazione Fallita\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" sessione\"],\"other\":[\"#\",\" sessioni\"]}]],\"dTUzKm\":[\"Esegui selezionate (\",[\"0\"],\")\"],\"dU_iQN\":[\"Nessuna sessione corrisponde ai filtri.\"],\"dUh9QW\":[\"Pianificazione\"],\"dVoir2\":[\"Aggiunta cella Markdown \",[\"n\"]],\"dZ0d2O\":[\"Seleziona almeno una tabella\"],\"dhi13U\":[\"Scegli immagine…\"],\"dli1JX\":[\"Invia Modifiche\"],\"dmYV6f\":[\"Routine\"],\"dohZCo\":[\"Istruzioni per la generazione SQL tramite AI. Usa \",[\"SCHEMA\"],\" come segnaposto per la struttura del database.\"],\"dtxpK2\":[\"Analizza\"],\"dwW9nJ\":[\"Mostra Numeri di Riga\"],\"dwWVw_\":[\"Mostra schermata di benvenuto\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"Se esiste\"],\"dyN4j9\":[\"Clicca 'Esegui Anteprima' per vedere i risultati\"],\"e07Iz5\":[\"Apri Gestione Attività\"],\"e0NzXu\":[\"Questo progetto è un Work In Progress (WIP). Le funzioni principali sono stabili, ma abbiamo grandi piani.\"],\"e1UKxf\":[\"Salva questa query\"],\"e34gdU\":[\"Quanti secondi il processo MCP attende la decisione dell'utente prima di abortire.\"],\"e62LQd\":[\"Termina Forzatamente\"],\"e6QZsM\":[\"Tema dell'Editor\"],\"e8CirT\":[\"Esegui query\"],\"eD2kUP\":[\"Buffer Letti\"],\"eE0JZ4\":[\"Versione\"],\"eIDch7\":[\"Inserisci prompt analisi piano di esecuzione...\"],\"eIVolo\":[\"Disco L/S\"],\"eJOEBy\":[\"Esportazione in corso...\"],\"eKHY3W\":[\"Impostazioni Plugin\"],\"eMb6Ub\":[\"Scegli una risorsa...\"],\"ePK91l\":[\"Modifica\"],\"eXweu6\":[\"Espandi Cella\"],\"ecNsTE\":[\"Nessuna query corrisponde alla ricerca\"],\"ecUA8p\":[\"Oggi\"],\"ecpIZP\":[\"Inserisci passphrase se la chiave è cifrata\"],\"esl-Tv\":[\"Tipo di risorsa\"],\"exyUec\":[\"Connessione\"],\"f2AJjl\":[\"Elimina riga\"],\"f4pD-j\":[\"Test connessione fallito\"],\"f7sXvi\":[\"Inserisci password\"],\"fAsxc0\":[\"Scansioni Sequenziali\"],\"fIeFs0\":[\"Seleziona valore...\"],\"fJm92A\":[\"Seleziona un file contenente un piano EXPLAIN (formato JSON o testo PostgreSQL) per visualizzarlo.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Valori\"],\"f_b1TA\":[\"Cronologia Esecuzioni\"],\"fghnqP\":[\"Passa alla connessione 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Virgola (,)\"],\"fp711N\":[\"Bloccata (sola lettura)\"],\"fpzyLj\":[\"Pagina \",[\"0\"],\" di \",[\"1\"]],\"fuA6oy\":[\"Timeout Socket\"],\"fvImQM\":[[\"0\"],\" selezionate\"],\"fwr_nh\":[\"Installa estensioni, gestisci i driver dei plugin e tieni sotto controllo le impostazioni di runtime.\"],\"g0ZzK4\":[\"JSON valido\"],\"g11hAR\":[\"Nuova riga\"],\"g8VcMm\":[\"Il mio cluster K8s\"],\"gCFR_O\":[\"Esecuzione Parallela (Esegui Tutto)\"],\"gEjU98\":[\"Apri connessioni\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"È richiesta almeno una colonna\"],\"gSuQrG\":[\"Nessuna connessione corrisponde a \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Riesegui query\"],\"gZWMnn\":[\"Analisi AI\"],\"ghYd73\":[\"Scegli destinazione...\"],\"giAqEC\":[\"Crea Nuova Tabella\"],\"gnQS8X\":[\"Dimensione massima del pacchetto usata dal connettore MySQL.\"],\"gqV5VL\":[\"Integrata, non personalizzabile\"],\"gww_XE\":[\"Colonna Riferita\"],\"gxXPJ9\":[\"Configura Interprete\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Massimizza\"],\"h-XNc9\":[\"Delimitatore CSV\"],\"h-kNAk\":[\"es. dati_vendite\"],\"h3Z_aK\":[\"Scrivi Markdown qui...\"],\"h7MgpO\":[\"Scorciatoie da tastiera\"],\"h7peZQ\":[\"Permetti\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processo di sistema in esecuzione\"],\"other\":[\"#\",\" processi di sistema in esecuzione\"]}]],\"hEZrFh\":[\"Esegui File SQL...\"],\"hEipgW\":[\"Controlla Aggiornamenti Ora\"],\"hG89Ed\":[\"Immagine\"],\"hIHcBE\":[\"Esporta come CSV\"],\"hItdtk\":[\"Sfoglia cartella\"],\"hXFVjo\":[\"Il nome della tabella è richiesto\"],\"hZ6znB\":[\"Porta\"],\"h_huI6\":[\"Riesegui\"],\"hbz1rh\":[\"chiavi\"],\"hdsaJo\":[\"Importazione...\"],\"he3ygx\":[\"Copia\"],\"hfGimp\":[\"Scegli un namespace...\"],\"hjjSEi\":[\"Connessioni di sola lettura\"],\"hjwN_s\":[\"Nome risorsa\"],\"hlF1mD\":[\"Copia selezione\"],\"hnboBb\":[\"Analisi AI del Piano di Esecuzione\"],\"hq4-D2\":[\"La chiave API è salvata in modo sicuro nel portachiavi. Impostare una chiave qui sovrascrive la variabile d'ambiente.\"],\"hqjXdn\":[\"Eliminazione connessione SSH fallita\"],\"hqofAK\":[\"Copia SQL\"],\"hy6L14\":[\"Visualizza su GitHub\"],\"hyjACX\":[\"Celle compresse/espanse\"],\"hz1b5W\":[\"Nessun elemento corrispondente trovato\"],\"i1vAVM\":[\"Crea nuova tabella\"],\"i3S5T3\":[\"Cerca nei preferiti...\"],\"i4_LY_\":[\"Scrittura\"],\"i5HBWh\":[\"Cronologia query azzerata\"],\"iAVlge\":[\"Personalizza le istruzioni per la generazione AI del nome cella nei notebook. Il contenuto della cella (SQL o Markdown) viene inviato come messaggio utente.\"],\"iE1yAB\":[\"Filtra tabelle...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connetti\"],\"iSryJ2\":[\"Il Mio Server SSH\"],\"iT7UeX\":[\"Aggiungi Indice\"],\"iUWwuR\":[\"Scarica e Installa\"],\"ia7i08\":[\"Seleziona prima contesto/namespace/tipo\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Salvato\"],\"igcsfY\":[\"Nessun plugin disponibile nel registro.\"],\"ij-Elv\":[\"Anteprima immagine\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query analizzabili trovate\"],\"other\":[\"#\",\" query analizzabili trovate\"]}]],\"ioL38P\":[\"Monitora i processi dei plugin, CPU, RAM e utilizzo disco in tempo reale\"],\"ixlL_e\":[\"File Chiave SSH (Opzionale)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Seleziona un modello\"],\"j3gyYH\":[\"Applica tutti\"],\"j5CWO4\":[\"Aggiornato\"],\"j9HPuI\":[\"Riga #\",[\"0\"]],\"jBtpMP\":[\"Tutti gli stati\"],\"jEu4bB\":[\"Colonne\"],\"jEyQIs\":[\"Nessuna routine trovata\"],\"jHc1By\":[\"Elimina Vista\"],\"jI6sj4\":[\"Costo, tempi e stime di righe spesso non sono disponibili come in PostgreSQL e MySQL.\"],\"jIxQCZ\":[\"Non disponibile per la tua piattaforma\"],\"jKIncn\":[\"Il nome del database è richiesto\"],\"jPSk57\":[\"Motivo (opzionale)\"],\"jUNY_d\":[\"vista\"],\"jVqjDo\":[\"Formato file notebook non valido\"],\"jWSZ-A\":[\"Solo anteprima - dati completi non caricati\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Timeout del socket in millisecondi.\"],\"jpeU_Z\":[\"Notebook\"],\"jpgB4Y\":[\"Il nome della connessione è richiesto\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"processo figlio\"],\"jx0t66\":[\"Comprimi processi figli\"],\"jxShEf\":[\"Crea Vista\"],\"jz5PKx\":[\"Definizione Vista\"],\"k-0mL-\":[\"Aggiungi Colonna\"],\"k-XiMX\":[\"Grezzo\"],\"k2UnVy\":[\"Cond. Hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"secondi\"],\"kBiBq7\":[\"Eliminare l'indice \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Mostra/Nascondi Grafico\"],\"kI1qVD\":[\"Formatta\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" righe · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Dettagli evento\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registro\"],\"kY-q3P\":[[\"label\"],\" è obbligatorio\"],\"kexIdC\":[\"Usa Port-Forward Kubernetes\"],\"kj2-CR\":[\"Dettagli errore\"],\"krksx_\":[\"Successo\"],\"kwY6nh\":[\"Chiudi\"],\"kx0s-n\":[\"Risultati\"],\"kxUEfE\":[\"Impossibile recuperare la definizione della routine: \"],\"l2Op2p\":[\"Parametri Query\"],\"l9Ivba\":[\"Processi dei plugin e risorse di sistema\"],\"lBdPxu\":[\"Colore di accento\"],\"lCF0wC\":[\"Aggiorna\"],\"lEQRwq\":[\"Dati (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nuova tabella creata\"],\"lOekZ3\":[\"Passa a Layout Orizzontale\"],\"lUA1C1\":[\"Passphrase Chiave SSH (Opzionale)\"],\"lVeG20\":[\"Dipendenze Rust\"],\"lXAG6D\":[\"Istruzioni per la spiegazione delle query tramite AI. Usa \",[\"LANGUAGE\"],\" come segnaposto per la lingua di output.\"],\"lbbYjy\":[\"Modifica direttamente il file di configurazione grezzo. È necessario un riavvio per applicare le modifiche.\"],\"lhKW0m\":[\"Aggiunta cella SQL \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Dimensione Pagina Risultati (Limite)\"],\"lkz6PL\":[\"Durata\"],\"lmVGeo\":[\"Aggiungi Chiave Esterna\"],\"lnnx3E\":[\"Connetti Tabularis a Claude Desktop, Cursor e altri\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Aggiungi\"],\"m2Q_r8\":[\"Rileva JSON nelle colonne di testo\"],\"m2tskz\":[\"Successo\"],\"mA-qpe\":[\"Esecuzione Completata\"],\"mBhhbA\":[\"Log esportati negli appunti\"],\"mCNdzH\":[\"Esegui Cella\"],\"mO95sp\":[\"Chiudi pannello\"],\"mP7dLi\":[\"Inserisci il nome del font sopra\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloccato\"],\"other\":[\"#\",\" bloccati\"]}]],\"mS74ir\":[\"Salvataggio connessione SSH fallito\"],\"mSqtw8\":[\"Esegui Anteprima\"],\"mURmfQ\":[\"Definizione Vista (SQL)\"],\"mX_isJ\":[\"Verticale\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Struttura (DDL)\"],\"mrk4Cf\":[\"Ordina per \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Abbiamo una community Discord dedicata a Tabularis: ricevi aiuto, scambia consigli e influenza la roadmap.\"],\"mtvVdV\":[\"Righe processate\"],\"mx4evv\":[\"Crea Tabella\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Scarica\"],\"n7JDTx\":[\"Installa e abilita i plugin per vederli qui\"],\"nDDJir\":[\"Cerca sessione, client, connessione…\"],\"nHP-Kr\":[\"Nessuna sessione attiva. Seleziona una connessione.\"],\"nKhCjW\":[\"Seleziona Tabelle\"],\"nNmhuY\":[\"Crea Indice\"],\"nNwvm4\":[\"Errore\"],\"nOVim5\":[\"Salvataggio connessione fallito\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Richiede estensione: \",[\"0\"]],\"ngO6Pv\":[\"Permetti al tasto Invio (oltre a Tab) di accettare il suggerimento di autocompletamento attivo. Quando disattivato, Invio inserisce sempre una nuova riga.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Crea la tua prima connessione\"],\"nohy4m\":[\"Nessuna attività MCP registrata.\"],\"nr-axf\":[\"Rimuovi Plugin\"],\"nsPFX9\":[\"Apri in Visual Explain\"],\"nuBbBr\":[\"Grafico\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Cambia\"],\"o21Y-P\":[\"voci\"],\"o3tP_A\":[\"Elimina indice\"],\"o45L8r\":[\"Inserisci il nome della connessione\"],\"o53XGh\":[\"Copia riga/righe selezionate\"],\"o7J4JM\":[\"Filtro\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Livello\"],\"oGiIL7\":[\"Provider Predefinito\"],\"oJ4rAm\":[\"Connessione Persa\"],\"oJlXF2\":[\"Importa Notebook\"],\"oMFv82\":[\"Dividi Verticale\"],\"oOFiQg\":[\"Limita il numero di righe caricate per query per prevenire problemi di performance. Imposta a 0 per disabilitare (non consigliato).\"],\"oT9ZD3\":[\"Nascondi panoramica\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Grafico cambiato (cella \",[\"n\"],\")\"],\"oWfclW\":[\"Mostra il visualizzatore JSON quando una cella di testo non tipizzata contiene un oggetto o un array JSON. Aggiunge un piccolo costo di analisi per cella.\"],\"obpbdz\":[\"File config non trovato (crealo manualmente)\"],\"odZgfC\":[\"CLIENT AI\"],\"ogZhXn\":[\"Scegli la direzione di default per i diagrammi ER\"],\"ohUJJM\":[\"Plugin\"],\"ok3hJJ\":[\"Installati\"],\"olAdaI\":[\"Righe Reali\"],\"olWzar\":[\"Termina Forzatamente il Processo\"],\"ovBPCi\":[\"Predefinito\"],\"owzTWN\":[\"Modelli AI aggiornati dai provider\"],\"oxYi6j\":[\"Regola la dimensione base del font usata nell'applicazione (10-20px).\"],\"p--hsQ\":[\"Una connessione al database è stata persa\"],\"p6NueD\":[\"NUOVA\"],\"pOYHox\":[\"Azioni\"],\"pR9bTR\":[\"Nessun dato BLOB\"],\"pRDT0m\":[\"Tabella\"],\"pS8S5q\":[\"es. utenti, ordini, prodotti\"],\"pSws_M\":[\"Nome Tabella\"],\"pVLbKZ\":[\"Vista creata con successo\"],\"pWT04I\":[\"Controllo...\"],\"pZJ_6D\":[\"Il nome dell'indice è richiesto\"],\"pddYFG\":[\"Inserisci prompt nome cella...\"],\"pnpyuD\":[\"Abilita Logging\"],\"pqKMPv\":[\"Creazione tabella fallita: \"],\"pqaP1h\":[\"Chiudi\"],\"pqarBu\":[\"Cresc.\"],\"ptuq35\":[\"es. Comic Sans MS\"],\"pzu7v4\":[\"Orizzontale\"],\"q-ch8m\":[\"Tutte le altre connessioni restano in sola lettura. Solo quelle selezionate possono eseguire scritture.\"],\"qIrtcK\":[\"Aggiornamenti\"],\"qOqy8G\":[\"Verifica configurazione...\"],\"qWaVNs\":[\"Salva e Riavvia\"],\"qb3LPX\":[\"Visualizza Diagramma ER\"],\"qkK0vq\":[\"Il nome della vista è richiesto\"],\"qki9tG\":[\"Errore\"],\"qoIir-\":[\"L'URL base della tua API compatibile OpenAI. Esempi: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Comprimi tutto\"],\"r6ncaO\":[\"Chiudi tab\"],\"rAJlpP\":[\"Porta container\"],\"rG3WVm\":[\"Lettura\"],\"rGRCeK\":[\"Cancella Cronologia Query\"],\"rNIto7\":[\"Il nome della risorsa è obbligatorio\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook esportato con successo\"],\"rY4sEV\":[\"Elimina FK\"],\"rbu0nO\":[\"Gestisci Connessioni SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connessione/i\"],\"other\":[\"#\",\" connessione/i\"]}]],\"rn2_2V\":[\"Rimuovi filtro\"],\"roABNH\":[\"Nessuna cronologia query\"],\"rtir7c\":[\"sconosciuto\"],\"ru0-2W\":[\"Nessuna connessione attiva\"],\"rvDPWO\":[\"Scostamento Stima\"],\"rwWjWg\":[\"Note di Rilascio\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Testa Connessione\"],\"sBOaim\":[\"Il file di configurazione è stato salvato. Riavviare ora per applicare le modifiche?\"],\"sCyv9B\":[\"Aggiorna Modelli\"],\"sSUqe4\":[\"Elimina\"],\"sUBkgN\":[\"Generazione SQL in corso...\"],\"sZZG3d\":[\"Sei sicuro di voler importare \\\"\",[\"0\"],\"\\\"?\\nQuesto potrebbe sovrascrivere i dati esistenti.\"],\"sbK5ck\":[\"Cerca nella cronologia...\"],\"sq_bS6\":[\"Al Delete\"],\"suW7-E\":[\"Timeout di connessione in millisecondi.\"],\"t-R8-P\":[\"Esecuzione\"],\"t1OfVY\":[[\"totalLibraries\"],\" librerie\"],\"t2TMzs\":[\"Chiudi scheda\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Seleziona una tabella...\"],\"t7KRl1\":[\"Log di ogni chiamata MCP e delle query in attesa di approvazione. Tutto è salvato localmente.\"],\"t9NJIk\":[\"Rilevate operazioni con scansione pesante\"],\"tB7xof\":[\"Operazioni Temp o Sort\"],\"tBBXTO\":[\"Intervallo di Ping\"],\"tFrT3w\":[\"Aggiungi questo al file di configurazione del client manualmente se l'installazione automatica fallisce.\"],\"tJ7UbA\":[\"analizza selezionata\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Dividi Orizzontale\"],\"tQhW-D\":[\"Impostazioni Log\"],\"tXFGEx\":[\"Nessuna connessione Kubernetes salvata. Clicca \\\"Aggiungi\\\" per crearne una.\"],\"tXLz_8\":[\"Elimina\"],\"tXpRby\":[\"Griglia dati\"],\"tbysEk\":[\"Azioni\"],\"tdta9X\":[\"Pagina \",[\"0\"]],\"tfDRzk\":[\"Salva\"],\"tfEioV\":[\"Esegui tutte le celle SQL dall'alto in basso\"],\"tiAIaJ\":[\"Password SSH mancante. Per favore reinseriscila.\"],\"tk22BR\":[\"Incolla dati strutturati e rivedi lo schema prima dell'importazione\"],\"tst44n\":[\"Eventi\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"File SQL eseguito con successo\"],\"u6QeR6\":[\"Riavvia Ora\"],\"uAQUqI\":[\"Stato\"],\"uBAxNB\":[\"Editor\"],\"uFViPK\":[\"Nessuna connessione SSH disponibile\"],\"uHUuhp\":[\"Analizza questa query\"],\"uHfFzS\":[\"Dimensione Font dell'Editor\"],\"uJ_3K5\":[\"Eliminare il notebook \\\"\",[\"0\"],\"\\\"? L'operazione non è reversibile.\"],\"uKaNJ3\":[\"Apri nell'editor JSON\"],\"uQBwTo\":[\"Schemi\"],\"ub54ff\":[\"Centro Plugin\"],\"ufFyBs\":[\"Database esportato con successo\"],\"upNmR2\":[\"Apri Barra Laterale\"],\"utMia3\":[\"Deseleziona Tutto\"],\"uyNaJg\":[\"1 elemento\"],\"v61dnS\":[\"Inserisci il nome esatto del modello per il tuo provider compatibile OpenAI.\"],\"v6oeyr\":[\"Installato\"],\"v75DGg\":[\"Sfoglia file\"],\"v99dO4\":[\"Chiave Primaria\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query trovate\"],\"other\":[\"#\",\" query trovate\"]}]],\"vCSBPD\":[\"Aggiungi filtro\"],\"vH7uJj\":[\"Ordina per…\"],\"vUOA1-\":[\"Cerca modelli...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE include righe reali, tempi, cicli e contatori buffer quando disponibili.\"],\"vXIe7J\":[\"Lingua\"],\"vYf4Jm\":[\"Inserisci una funzione SQL completa (es: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Preferito\"],\"vditm4\":[\"Piano Query\"],\"vks_ls\":[\"Chiudi altre schede\"],\"vnAnIp\":[\"Modello \",[\"0\"],\" non trovato in \",[\"1\"],\". Potrebbe non funzionare correttamente.\"],\"vqoN5u\":[\"Struttura\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Esplora\"],\"vujQJ5\":[\"Localizzazione\"],\"vvJPVL\":[\"Mostra panoramica\"],\"vwI5S4\":[\"Successo\"],\"vzH-7Z\":[\"Spiega\"],\"w7QmD_\":[\"Inserisci prompt di sistema...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Tempo trascorso\"],\"wCfv2R\":[\"Aggiungi Connessione\"],\"wGfc86\":[\"Cancella Tutta la Cronologia\"],\"wGwNv4\":[\"Database attivo\"],\"wJJ-Wy\":[\"Installazione in corso...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffer Hit\"],\"wQn-RM\":[\"Aggiungi Colonna\"],\"wRXcR2\":[\"In uso l'icona predefinita del driver.\"],\"wTOwz-\":[\"Applicato\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Importa dagli Appunti\"],\"w_bY7R\":[\"Log\"],\"wc_8bA\":[\"In attesa\"],\"wckWOP\":[\"Gestisci\"],\"wdYcKH\":[\"Tab Aperte\"],\"wja8aL\":[\"Senza nome\"],\"wkOAzk\":[\"Nessun notebook corrisponde alla ricerca.\"],\"wp49Ao\":[\"Impossibile processare gli inserimenti: \"],\"wqG2hQ\":[\"Salta (non importare)\"],\"wwrAsK\":[\"Per favore compila tutti i campi obbligatori\"],\"wwu18a\":[\"Icona\"],\"x2fr_j\":[\"Grafo\"],\"xANKBj\":[\"Funzioni\"],\"xBwjck\":[\"È necessario un riavvio per applicare le modifiche.\"],\"xDAtGP\":[\"Messaggio\"],\"xECY01\":[\"Procedure\"],\"xGPNgZ\":[\"Personalizzazione Prompt\"],\"xNgtS-\":[\"Nessuna vista trovata\"],\"xOPa1b\":[\"La porta deve essere compresa tra 1 e 65535\"],\"xY9s5E\":[\"Timeout\"],\"xaVUr1\":[\"La volpe marrone salta sopra il cane pigro\"],\"xbvTzL\":[\"Percorso File\"],\"xlew5F\":[\"Svuota\"],\"xmNyKz\":[\"Test in corso...\"],\"xtuh6D\":[\"Espandi Explorer\"],\"y-Zdqj\":[\"Scegli un contesto...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Apri visualizzatore JSON\"],\"yQXjG5\":[\"Deseleziona Tutti\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Ieri\"],\"ygCKqB\":[\"Stop\"],\"ykCc6r\":[\"Database cambiato (cella \",[\"n\"],\")\"],\"ynVMSc\":[\"Seleziona tutte\"],\"ytdz1d\":[\"L'AI vuole eseguire una scrittura sul database\"],\"yyhzur\":[\"Crea tabella\"],\"yz7wBu\":[\"Chiudi\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"Password SSH\"],\"z5kV0h\":[\"Connessioni\"],\"zBTMzx\":[\"Anteprima\"],\"zCaAKs\":[\"Errore Aggiornamento\"],\"zDAakK\":[\"Impossibile visualizzare il diagramma senza un ID connessione.\"],\"zGe21h\":[\"Questa chiave è caricata da una variabile d'ambiente\"],\"zGfL5t\":[\"valore\"],\"zL6-4A\":[\"Nessun processo plugin in esecuzione\"],\"zLZhCi\":[\"Nuova community Discord!\"],\"zLlCou\":[\"Copia nome colonna\"],\"zNEL34\":[\"Unisciti alla Community\"],\"zNgTlV\":[\"Chiudi schede a destra\"],\"zQz55p\":[\"Ispeziona struttura\"],\"zR0FfH\":[\"Esportato in \",[\"target\"]],\"zRZeOc\":[\"Cerca tabelle, viste, routine, trigger...\"],\"zUNMsr\":[\"Chiave SSH\"],\"zXMRzb\":[\"Porta SSH\"],\"zZgoXr\":[\"Nessuna tabella trovata\"],\"zaWbms\":[\"Annulla Modifiche\"],\"zgClmU\":[\"Installa Config\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Inserisci valore...\"],\"zvzN4C\":[\"Imposta come attiva\"],\"zzDlyQ\":[\"Successo\"],\"zzMxrp\":[\"Modifica config.json\"],\"zz_Wd_\":[\"Modalità\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/ja/messages.po b/src/locales/ja/messages.po index 17d6a3f9..5d5f181c 100644 --- a/src/locales/ja/messages.po +++ b/src/locales/ja/messages.po @@ -6,39 +6,5291 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: @lingui/cli\n" "Language: ja\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" +#: src/components/modals/NewRowModal.tsx +msgid "(Auto-generated)" +msgstr "(自動生成)" + +#. placeholder {0}: stats.blocked +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# blocked} other {# blocked}}" +msgstr "{0, plural, one {# 件ブロック} other {# 件ブロック}}" + +#. placeholder {0}: proc.children.length +#. placeholder {0}: stats.child_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# child process} other {# child processes}}" +msgstr "{0, plural, one {# 個の子プロセス} other {# 個の子プロセス}}" + +#. placeholder {0}: connections.length +#: src/pages/Connections.tsx +msgid "{0, plural, one {# connection} other {# connections}}" +msgstr "{0, plural, one {# 件の接続} other {# 件の接続}}" + +#. placeholder {0}: stats.errors +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# error} other {# errors}}" +msgstr "{0, plural, one {# 件のエラー} other {# 件のエラー}}" + +#. placeholder {0}: stats.total +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# event} other {# events}}" +msgstr "{0, plural, one {# 件のイベント} other {# 件のイベント}}" + +#. placeholder {0}: queries.length +#: src/components/modals/ExplainSelectionModal.tsx +msgid "{0, plural, one {# explainable query found} other {# explainable queries found}}" +msgstr "{0, plural, one {説明可能なクエリが # 件見つかりました} other {説明可能なクエリが # 件見つかりました}}" + +#. placeholder {0}: parsed.warnings.length +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# parsing warning} other {# parsing warnings}}" +msgstr "{0, plural, one {# 件の解析警告} other {# 件の解析警告}}" + +#. placeholder {0}: queries.length +#: src/components/modals/QuerySelectionModal.tsx +msgid "{0, plural, one {# query found} other {# queries found}}" +msgstr "{0, plural, one {# 件のクエリが見つかりました} other {# 件のクエリが見つかりました}}" + +#. placeholder {0}: result.rows.length +#. placeholder {1}: executionTime != null ? Math.round(executionTime) : "—" +#. placeholder {2}: executionTime != null ? Math.round(executionTime) : "—" +#: src/components/notebook/ResultToolbar.tsx +msgid "{0, plural, one {# row · {1}ms} other {# rows · {2}ms}}" +msgstr "{0, plural, one {# 行 · {1}ms} other {# 行 · {2}ms}}" + +#. placeholder {0}: result.rows_inserted +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row imported into \"{tableName}\"} other {# rows imported into \"{tableName}\"}}" +msgstr "{0, plural, one {# 行を「{tableName}」にインポートしました} other {# 行を「{tableName}」にインポートしました}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row} other {# rows}}" +msgstr "{0, plural, one {# 行} other {# 行}}" + +#. placeholder {0}: visibleSessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "{0, plural, one {# session} other {# sessions}}" +msgstr "{0, plural, one {# 件のセッション} other {# 件のセッション}}" + +#. placeholder {0}: systemStats.process_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# system process running} other {# system processes running}}" +msgstr "{0, plural, one {# 個のシステムプロセスが実行中} other {# 個のシステムプロセスが実行中}}" + +#. placeholder {0}: tabs.length +#: src/components/modals/TabSwitcherModal.tsx +msgid "{0, plural, one {# tab} other {# tabs}}" +msgstr "" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {Import # row} other {Import # rows}}" +msgstr "{0, plural, one {# 行をインポート} other {# 行をインポート}}" + +#. placeholder {0}: progress.statements_executed +#. placeholder {1}: progress.total_statements +#: src/components/modals/ImportDatabaseModal.tsx +msgid "{0} / {1} statements" +msgstr "{0} / {1} ステートメント" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "{0} API Key" +msgstr "{0} API キー" + +#. placeholder {0}: selectedDatabasesState.length +#: src/components/modals/NewConnectionModal.tsx +msgid "{0} database(s) selected" +msgstr "{0} 個のデータベースを選択中" + +#. placeholder {0}: filteredItems.length +#: src/components/modals/QuickNavigatorModal.tsx +msgid "{0} elements" +msgstr "{0}件" + +#. placeholder {0}: approval.clientHint +#. placeholder {1}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "{0} on {1} — review and decide before it executes." +msgstr "{0} が {1} 上 — 実行前に確認して判断してください。" + +#. placeholder {0}: activeTab.result.rows.length +#. placeholder {0}: entry.result!.rows.length +#. placeholder {0}: entry.result.rows.length +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "{0} rows retrieved" +msgstr "{0} 行を取得しました" + +#. placeholder {0}: selected.size +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "{0} selected" +msgstr "{0} 件選択中" + +#. placeholder {0}: structuredFilters.length +#: src/components/ui/TableToolbar.tsx +msgid "{activeFilterCount} of {0} active" +msgstr "{0} 件中 {activeFilterCount} 件が有効" + +#: src/components/ui/DataGrid.tsx +msgid "{deleteRowCount, plural, one {Delete # row} other {Delete # rows}}" +msgstr "{deleteRowCount, plural, one {# 行を削除} other {# 行を削除}}" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "{label} is required" +msgstr "{label} は必須です" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "{rowCount, plural, one {# row} other {# rows}}" +msgstr "{rowCount, plural, one {# 行} other {# 行}}" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "{totalLibraries} libraries" +msgstr "{totalLibraries} 個のライブラリ" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/db.sqlite" +msgstr "/absolute/path/to/db.sqlite" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/folder" +msgstr "/absolute/path/to/folder" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "/path/to/id_rsa" +msgstr "/path/to/id_rsa" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "↑↓ to navigate, Enter to open" +msgstr "↑↓で移動、Enterで開く" + +#. placeholder {0}: previewResult.rows.length - 5 +#: src/components/modals/ViewEditorModal.tsx +msgid "+{0} more rows" +msgstr "+{0} 行以上" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "1 element" +msgstr "1件" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "A database connection was lost" +msgstr "データベース接続が失われました" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "A new table will be created" +msgstr "新規テーブルが作成されます" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "A restart is required to apply changes." +msgstr "変更を反映するには再起動が必要です。" + +#: src/components/modals/CommunityModal.tsx +msgid "A star helps others discover the project" +msgstr "スターはプロジェクトを他の人に見つけてもらう助けになります" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Accent color" +msgstr "アクセントカラー" + +#: src/components/settings/AppearanceTab.tsx +msgid "Accept Suggestion with Enter" +msgstr "Enter で候補を確定" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Actions" +msgstr "" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Actions" +msgstr "アクション" + +#: src/pages/TaskManagerPage.tsx +msgctxt "taskManager" +msgid "Actions" +msgstr "操作" + +#: src/components/connections/StatusBadge.tsx +msgid "Active" +msgstr "アクティブ" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/pages/Editor.tsx +msgid "Active database" +msgstr "アクティブなデータベース" + +#: src/pages/TaskManagerPage.tsx +msgid "Active queries and connections through this plugin will be interrupted." +msgstr "このプラグインを経由するアクティブなクエリや接続は中断されます。" + +#: src/pages/McpPage.tsx +msgid "Activity" +msgstr "アクティビティ" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual Rows" +msgstr "実行行数" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual rows exceed estimate" +msgstr "実行行数が推定を超過" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Add" +msgstr "追加" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Add Column" +msgstr "カラムを追加" + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Add Column" +msgstr "カラムを追加" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Add Column" +msgstr "カラムを追加" + +#: src/pages/Connections.tsx +msgid "Add Connection" +msgstr "接続を追加" + +#: src/components/ui/TableToolbar.tsx +msgid "Add filter" +msgstr "フィルターを追加" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Foreign Key" +msgstr "外部キーを追加" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Index" +msgstr "インデックスを追加" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add Markdown Cell" +msgstr "Markdown セルを追加" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add SQL Cell" +msgstr "SQL セルを追加" + +#: src/components/ui/TableToolbar.tsx +msgid "add the first filter" +msgstr "最初のフィルターを追加" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Add this to your client config file manually if automatic install fails." +msgstr "自動インストールが失敗する場合は、これをクライアントの設定ファイルに手動で追加してください。" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add to Favorites" +msgstr "お気に入りに追加" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added Markdown cell {n}" +msgstr "Markdown セル {n} を追加" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added SQL cell {n}" +msgstr "SQL セル {n} を追加" + +#: src/components/settings/AppearanceTab.tsx +msgid "Adjust the base font size used throughout the application (10-20px)." +msgstr "アプリケーション全体で使用される基本フォントサイズを調整します (10〜20px)。" + +#: src/pages/Settings.tsx +msgid "AI" +msgstr "AI" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "AI" +msgstr "AI" + +#: src/components/settings/AiActivityPanel.tsx +#: src/pages/Settings.tsx +msgid "AI Activity" +msgstr "AI アクティビティ" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "AI Analysis" +msgstr "AI 分析" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "AI CLIENTS" +msgstr "AI クライアント" + +#: src/components/settings/AiTab.tsx +msgid "AI models refreshed from providers" +msgstr "プロバイダから AI モデルを更新しました" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Provider not configured. Please go to Settings > AI." +msgstr "AI プロバイダが未設定です。設定 > AI に移動してください。" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Query Plan Analysis" +msgstr "AI によるクエリ計画分析" + +#: src/components/modals/AiApprovalModal.tsx +msgid "AI requested a database write" +msgstr "AI がデータベース書き込みを要求しています" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "AI Suggest" +msgstr "AI 提案" + +#: src/components/settings/PluginsTab.tsx +msgid "All" +msgstr "すべて" + +#: src/components/settings/LogsTab.tsx +msgid "All levels" +msgstr "すべてのレベル" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All other connections stay read-only. Only the connections checked here may execute writes." +msgstr "他のすべての接続は読み取り専用のままです。ここでチェックされた接続のみ書き込みを実行できます。" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All queries" +msgstr "すべてのクエリ" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All statuses" +msgstr "すべてのステータス" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All tools" +msgstr "すべてのツール" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Allow" +msgstr "許可" + +#: src/components/settings/AppearanceTab.tsx +msgid "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline." +msgstr "Tab に加えて Enter でもオートコンプリートの候補を確定できるようにします。オフの場合、Enter は常に改行を挿入します。" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Allow writes from MCP" +msgstr "MCP からの書き込みを許可" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Already exists" +msgstr "既に存在します" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Alter View" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "An environment variable is present, but you can override it by setting a key above." +msgstr "環境変数が検出されていますが、上でキーを設定すれば上書きできます。" + +#: src/components/modals/PluginInstallErrorModal.tsx +msgid "An error occurred while installing the plugin. See the details below." +msgstr "プラグインのインストール中にエラーが発生しました。詳細は下記を参照してください。" + +#: src/components/modals/VisualExplainModal.tsx +msgid "Analyze" +msgstr "分析" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Analyze Data" +msgstr "分析データ" + +#: src/components/modals/VisualExplainModal.tsx +msgid "ANALYZE executes the query. Use with caution on data-modifying statements." +msgstr "ANALYZE はクエリを実行します。データを変更するステートメントでは注意して使用してください。" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "Analyzing query plan with AI..." +msgstr "AI でクエリ計画を分析中..." + +#: src/components/settings/AiTab.tsx +msgid "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable." +msgstr "API キーはシステムのキーチェーンに安全に保管されます。ここでキーを設定すると環境変数より優先されます。" + +#: src/pages/Settings.tsx +msgid "Appearance" +msgstr "外観" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Appearance" +msgstr "外観" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Appearance" +msgstr "外観" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Append rows" +msgstr "行を追加" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Append to existing" +msgstr "既存に追加" + +#: src/components/ui/FilterRow.tsx +msgid "Applied" +msgstr "適用済み" + +#: src/components/ui/FilterRow.tsx +msgid "Apply" +msgstr "適用" + +#: src/components/ui/TableToolbar.tsx +msgid "Apply All" +msgstr "すべて適用" + +#: src/pages/Editor.tsx +msgid "Apply to all" +msgstr "すべてに適用" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval gate" +msgstr "承認ゲート" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Approval ID" +msgstr "承認 ID" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval required" +msgstr "承認が必要" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Approve" +msgstr "承認" + +#: src/components/settings/LogsTab.tsx +msgid "Are you sure you want to clear all logs?" +msgstr "すべてのログを消去してもよろしいですか?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to clear all query history for this connection?" +msgstr "この接続のクエリ履歴をすべて削除してもよろしいですか?" + +#. placeholder {0}: column.name +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "" +"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +"\n" +"WARNING: This will permanently delete all data in this column. This action cannot be undone." +msgstr "" +"テーブル「{tableName}」のカラム「{0}」を削除してもよろしいですか?\n" +"\n" +"警告: このカラムのすべてのデータが完全に削除されます。この操作は取り消せません。" + +#. placeholder {0}: group?.name +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete group \"{0}\"? Connections in this group will be moved to ungrouped." +msgstr "グループ「{0}」を削除してもよろしいですか?このグループ内の接続は未分類に移動されます。" + +#. placeholder {0}: queries.find((q) => q.id === favoriteDeleteConfirm)?.name ?? "" +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete query \"{0}\"?" +msgstr "クエリ「{0}」を削除してもよろしいですか?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete table \"{0}\"?" +msgstr "テーブル「{0}」を削除してもよろしいですか?" + +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete this connection?" +msgstr "この接続を削除してもよろしいですか?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete this query from history?" +msgstr "このクエリを履歴から削除してもよろしいですか?" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Are you sure you want to delete this SSH connection?" +msgstr "この SSH 接続を削除してもよろしいですか?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop trigger \"{0}\"?" +msgstr "トリガー「{0}」を削除してもよろしいですか?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop view \"{0}\"?" +msgstr "ビュー「{0}」を削除してもよろしいですか?" + +#. placeholder {0}: file.split(/[\\/]/).pop() +#: src/components/layout/ExplorerSidebar.tsx +msgid "" +"Are you sure you want to import \"{0}\"?\n" +"This may overwrite existing data." +msgstr "" +"「{0}」をインポートしてもよろしいですか?\n" +"既存のデータが上書きされる可能性があります。" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Are you sure you want to modify view \"{name}\"?" +msgstr "ビュー「{name}」を変更してもよろしいですか?" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Are you sure you want to remove \"{pluginName}\"? This will delete the plugin files." +msgstr "「{pluginName}」を削除してもよろしいですか?プラグインファイルが削除されます。" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Asc" +msgstr "昇順" + +#: src/components/modals/CreateTableModal.tsx +msgid "At least one column is required" +msgstr "少なくとも 1 つのカラムが必要です" + +#: src/components/modals/CreateIndexModal.tsx +msgid "At least one column must be selected" +msgstr "少なくとも 1 つのカラムを選択してください" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere." +msgstr "すべての MCP ツール呼び出しの監査ログと、承認待ちのクエリ。ローカルに保存され、外部には送信されません。" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Authentication Type" +msgstr "認証方式" + +#: src/components/modals/NewRowModal.tsx +msgid "Auto" +msgstr "自動" + +#: src/components/settings/LocalizationTab.tsx +msgid "Auto (System)" +msgstr "自動 (システム)" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Auto Increment" +msgstr "自動インクリメント" + +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Auto paginated" +msgstr "自動ページング" + +#: src/components/settings/InfoTab.tsx +msgid "Automatically check for new versions when the app launches" +msgstr "アプリ起動時に自動で新しいバージョンを確認します" + +#: src/components/settings/PluginsTab.tsx +msgid "Available Plugins" +msgstr "利用可能なプラグイン" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below." +msgstr "下記で明示的に許可されていない限り、MCP 経由の SELECT 以外のステートメントをブロックします。" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Blocked (read-only)" +msgstr "ブロック (読み取り専用)" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Brand-new Discord community!" +msgstr "Discord コミュニティが新登場!" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Breaking Changes" +msgstr "破壊的変更" + +#: src/components/settings/PluginsTab.tsx +msgid "Browse and install plugins from the registry." +msgstr "レジストリからプラグインを閲覧・インストールします。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse file" +msgstr "ファイルを参照" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse folder" +msgstr "フォルダを参照" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Browse the direct open source dependencies used across the app, backend, and tooling." +msgstr "アプリ、バックエンド、ツールで使用している直接依存のオープンソースを閲覧できます。" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Browse..." +msgstr "参照..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Hit" +msgstr "バッファヒット" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Read" +msgstr "バッファ読み込み" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Bug Fixes" +msgstr "バグ修正" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Built-in, not customizable" +msgstr "組み込み、カスタマイズ不可" + +#: src/components/settings/PluginsTab.tsx +msgid "by" +msgstr "作成者:" + +#: src/components/modals/NewConnectionModal.tsx +msgid "CA Certificate" +msgstr "" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "cancel" +msgstr "キャンセル" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/ConfirmModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/JsonViewerPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Cancel" +msgstr "キャンセル" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Cannot display diagram without a connection ID." +msgstr "接続 ID がないため、図を表示できません。" + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "Cargo ecosystem" +msgstr "Cargo エコシステム" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Certificate paths are optional. Leave empty to use system defaults." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Change" +msgstr "変更" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed chart (cell {n})" +msgstr "チャートを変更(セル {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed database (cell {n})" +msgstr "データベースを変更(セル {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed parameters" +msgstr "パラメータを変更" + +#: src/components/notebook/CellChart.tsx +msgid "Chart" +msgstr "チャート" + +#: src/components/modals/CommunityModal.tsx +msgid "Chat with the community, get help, suggest features" +msgstr "コミュニティとの交流、サポート、機能提案" + +#: src/components/settings/InfoTab.tsx +msgid "Check for Updates Now" +msgstr "今すぐアップデートを確認" + +#: src/components/settings/InfoTab.tsx +msgid "Check for updates on startup" +msgstr "起動時にアップデートを確認" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Checking configuration..." +msgstr "設定を確認中..." + +#: src/components/settings/InfoTab.tsx +msgid "Checking..." +msgstr "確認中..." + +#: src/pages/TaskManagerPage.tsx +msgid "child process" +msgstr "子プロセス" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a connection..." +msgstr "接続を選択..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a context..." +msgstr "コンテキストを選択..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a namespace..." +msgstr "ネームスペースを選択..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a resource..." +msgstr "リソースを選択..." + +#: src/components/settings/AppearanceTab.tsx +msgid "Choose an independent theme for the SQL editor, or keep it in sync with the app theme." +msgstr "SQL エディタに独立したテーマを選択するか、アプリのテーマと同期するかを選びます。" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Choose image…" +msgstr "画像を選択…" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Choose target..." +msgstr "対象を選択..." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default delimiter character used when copying or exporting rows as CSV." +msgstr "行を CSV としてコピーまたはエクスポートする際のデフォルト区切り文字を選択します。" + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default format when copying rows with Ctrl+C / Cmd+C." +msgstr "Ctrl+C / Cmd+C で行をコピーする際のデフォルト形式を選択します。" + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default layout direction for ER diagrams" +msgstr "ER 図のデフォルトのレイアウト方向を選択します" + +#: src/components/settings/LocalizationTab.tsx +msgid "Choose your preferred language. 'Auto' will use your system language." +msgstr "使用する言語を選択します。「自動」はシステムの言語を使用します。" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Clear" +msgstr "クリア" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "common" +msgid "Clear" +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Clear" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Clear All History" +msgstr "すべての履歴を削除" + +#: src/components/settings/LogsTab.tsx +msgid "Clear Logs" +msgstr "ログを消去" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Clear Query History" +msgstr "クエリ履歴を削除" + +#: src/components/ui/DataGrid.tsx +msgid "Clear sort" +msgstr "並べ替えを解除" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Click 'Run Preview' to see results" +msgstr "「プレビューを実行」をクリックすると結果が表示されます" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Click another emoji below to change." +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Click Load Databases to fetch available databases." +msgstr "" + +#: src/pages/Editor.tsx +msgid "Click to jump to page" +msgstr "クリックでページ移動" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Client" +msgstr "クライアント" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Certificate" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Key" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Clipboard column" +msgstr "クリップボードのカラム" + +#: src/components/connections/ActionButtons.tsx +msgid "Clone" +msgstr "複製" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/McpModal.tsx +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx #: src/components/modals/SchemaModal.tsx +#: src/components/modals/VisualExplainModal.tsx +#: src/pages/JsonViewerPage.tsx msgid "Close" +msgstr "閉じる" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close All Tabs" +msgstr "すべてのタブを閉じる" + +#: src/components/ui/TableToolbar.tsx +msgid "Close filter panel (ESC)" +msgstr "フィルターパネルを閉じる (ESC)" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Other Tabs" +msgstr "他のタブを閉じる" + +#: src/components/layout/SplitPaneLayout.tsx +msgid "Close panel" +msgstr "パネルを閉じる" + +#: src/components/ui/StackedResultItem.tsx +#: src/i18n/registries/shortcutLabels.ts +msgid "Close tab" +msgstr "タブを閉じる" + +#: src/components/modals/TabSwitcherModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tab" +msgstr "タブを閉じる" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Left" +msgstr "左側のタブを閉じる" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Right" +msgstr "右側のタブを閉じる" + +#: src/components/ui/JsonInput.tsx +msgid "Code" +msgstr "" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Collapse" +msgstr "折りたたむ" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Collapse all" +msgstr "すべて折りたたむ" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Collapse All" +msgstr "すべて折りたたむ" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Collapse Cell" +msgstr "セルを折りたたむ" + +#: src/pages/TaskManagerPage.tsx +msgid "Collapse child processes" +msgstr "子プロセスを折りたたむ" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Collapsed/expanded cells" +msgstr "セルを折りたたみ/展開" + +#: src/components/settings/LogsTab.tsx +msgid "Collect application logs in memory for debugging" +msgstr "デバッグ用にアプリケーションログをメモリに収集します" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Column name is required" +msgstr "カラム名は必須です" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Column Schema" +msgstr "カラムスキーマ" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "columns" +msgstr "カラム" + +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +msgid "Columns" +msgstr "カラム" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Comma (,)" +msgstr "カンマ (,)" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Config file not found (create manually)" +msgstr "設定ファイルが見つかりません (手動で作成してください)" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "config.json" +msgstr "config.json" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Configuration installed successfully for {clientName}! Restart the app to apply." +msgstr "{clientName} の設定が正常にインストールされました。変更を反映するにはアプリを再起動してください。" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Configure destination" +msgstr "インポート先を設定" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Configure Interpreter" +msgstr "インタプリタを設定" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSH Inline" +msgstr "SSH をインラインで設定" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSL/TLS for secure database connections (optional)." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Configured" +msgstr "設定済み" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Confirm" +msgstr "確定" + +#: src/pages/Connections.tsx +msgid "Confirm Delete" +msgstr "削除の確認" + +#: src/components/connections/ActionButtons.tsx +msgid "Connect" +msgstr "接続" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Connect Tabularis to Claude Desktop, Cursor, and more" +msgstr "Tabularis を Claude Desktop、Cursor などに接続" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connect Timeout" +msgstr "接続タイムアウト" + +#: src/pages/Editor.tsx +msgid "Connected" +msgstr "接続済み" + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connection" +msgstr "接続" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Connection" +msgstr "接続" + +#: src/components/settings/GeneralTab.tsx +msgid "Connection Health Check" +msgstr "接続ヘルスチェック" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "Connection Lost" +msgstr "接続が失われました" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection Name" +msgstr "接続名" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Connection name is required" +msgstr "接続名は必須です" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Connection name is required" +msgstr "接続名は必須です" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Connection String" +msgstr "" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection test failed" +msgstr "接続テストに失敗しました" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connection timeout in milliseconds." +msgstr "接続タイムアウト (ミリ秒)。" + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connections" +msgstr "接続" + +#: src/components/layout/Sidebar.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/Connections.tsx +msgid "Connections" +msgstr "接続" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Container Port" +msgstr "コンテナポート" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Context" +msgstr "コンテキスト" + +#: src/pages/Editor.tsx +msgid "Convert to Console" +msgstr "コンソールに変換" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Copied to clipboard" +msgstr "クリップボードにコピーしました" + +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copied!" +msgstr "コピーしました!" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copy" +msgstr "コピー" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as `column`" +msgstr "`column` 形式でコピー" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as table.column" +msgstr "table.column 形式でコピー" + +#: src/components/ui/DataGrid.tsx +msgid "Copy Cell" +msgstr "セルをコピー" + +#: src/components/ui/DataGrid.tsx +msgid "Copy column name" +msgstr "カラム名をコピー" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy error message" +msgstr "エラーメッセージをコピー" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Copy name" +msgstr "名前をコピー" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Copy Name" +msgstr "名前をコピー" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Copy query" +msgstr "クエリをコピー" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy Query" +msgstr "クエリをコピー" + +#: src/components/ui/DataGrid.tsx +msgid "Copy selected row(s)" +msgstr "選択した行をコピー" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Copy selection" +msgstr "選択範囲をコピー" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Copy SQL" +msgstr "SQL をコピー" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Cost" +msgstr "コスト" + +#: src/utils/explainPlan.ts +msgid "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL." +msgstr "コスト、タイミング、行数推定は PostgreSQL や MySQL と比べて得られないことが多いです。" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Count rows" +msgstr "行数をカウント" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Count Rows" +msgstr "行数をカウント" + +#: src/pages/TaskManagerPage.tsx +msgid "CPU" +msgstr "CPU" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create a new database trigger" +msgstr "新しいデータベーストリガーを作成します" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Create a new database view" +msgstr "新しいデータベースビューを作成します" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk" +msgid "Create Foreign Key" +msgstr "外部キーを作成" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex" +msgid "Create Index" +msgstr "インデックスを作成" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Create new column" +msgstr "新規カラムを作成" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Create New SSH Connection" +msgstr "新しい SSH 接続を作成" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Create new table" +msgstr "新規テーブルを作成" + +#: src/components/modals/CreateTableModal.tsx +msgid "Create New Table" +msgstr "新規テーブルを作成" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New Trigger" +msgstr "トリガーを新規作成" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New View" +msgstr "ビューを新規作成" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Create Table" +msgstr "テーブル作成" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Create Table" +msgstr "テーブルを作成" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create Trigger" +msgstr "トリガーを作成" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Create View" +msgstr "ビューを作成" + +#: src/pages/Connections.tsx +msgid "Create your first connection" +msgstr "最初の接続を作成" + +#: src/pages/Connections.tsx +msgid "Create your first connection to get started." +msgstr "最初の接続を作成して始めましょう。" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "CSV Delimiter" +msgstr "CSV 区切り文字" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Ctrl+Tab" +msgstr "Ctrl+Tab" + +#: src/components/settings/LogsTab.tsx +msgid "Current Logs" +msgstr "現在のログ" + +#: src/components/settings/InfoTab.tsx +msgid "Current Version" +msgstr "現在のバージョン" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Custom" +msgstr "カスタム" + +#: src/components/settings/FontPicker.tsx +msgid "Custom Font" +msgstr "カスタムフォント" + +#: src/components/settings/AiTab.tsx +msgid "Custom key deleted successfully" +msgstr "カスタムキーを正常に削除しました" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language." +msgstr "AI による EXPLAIN クエリ計画分析の指示をカスタマイズします。{LANGUAGE} を出力言語に使用します。" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message." +msgstr "AI によるノートブックセル名生成の指示をカスタマイズします。セルの内容 (SQL または Markdown) がユーザーメッセージとして送信されます。" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message." +msgstr "AI によるクエリ結果タブ名生成の指示をカスタマイズします。SQL クエリがユーザーメッセージとして送信されます。" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Data (INSERT)" +msgstr "データ (INSERT)" + +#: src/components/settings/GeneralTab.tsx +msgid "Data Editor" +msgstr "データエディタ" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Data Grid" +msgstr "データグリッド" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "Data Preview" +msgstr "データプレビュー" + +#: src/components/modals/QueryModal.tsx +msgid "Database" +msgstr "データベース" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Database exported successfully" +msgstr "データベースを正常にエクスポートしました" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name" +msgstr "データベース名" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Name" +msgstr "データベース名" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name is required" +msgstr "データベース名は必須です" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Type" +msgstr "データベースの種類" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Databases" +msgstr "データベース" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "DDL" +msgstr "DDL" + +#: src/components/settings/LogsTab.tsx +msgid "Debug" +msgstr "デバッグ" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Default" +msgstr "デフォルト" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Default" +msgstr "デフォルト" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Default Copy Format" +msgstr "デフォルトのコピー形式" + +#: src/components/settings/GeneralTab.tsx +msgid "Default Layout" +msgstr "デフォルトレイアウト" + +#: src/components/settings/AiTab.tsx +msgid "Default Model" +msgstr "デフォルトモデル" + +#: src/components/settings/AiTab.tsx +msgid "Default Provider" +msgstr "デフォルトプロバイダ" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Default Value" +msgstr "デフォルト値" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Delete" +msgstr "DELETE" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Delete" +msgstr "削除" + +#: src/components/modals/ConfirmModal.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Delete" +msgstr "削除" + +#: src/components/connections/ActionButtons.tsx +msgctxt "connections" +msgid "Delete" +msgstr "削除" + +#: src/pages/Connections.tsx +msgctxt "groups" +msgid "Delete" +msgstr "削除" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +msgctxt "sidebar" +msgid "Delete" +msgstr "削除" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Delete" +msgstr "削除" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Delete Cell" +msgstr "セルを削除" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete column" +msgstr "カラムを削除" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Delete Column" +msgstr "カラムを削除" + +#: src/components/settings/AiTab.tsx +msgid "Delete custom key and revert to environment variable (if present)" +msgstr "カスタムキーを削除し、環境変数に戻します (存在する場合)" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete FK" +msgstr "FK を削除" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete foreign key \"{name}\"?" +msgstr "外部キー「{name}」を削除しますか?" + +#: src/pages/Connections.tsx +msgid "Delete Group" +msgstr "グループを削除" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Index" +msgstr "インデックスを削除" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete index \"{name}\"?" +msgstr "インデックス「{name}」を削除しますか?" + +#. placeholder {0}: pendingDelete?.title ?? "" +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Delete notebook \"{0}\"? This cannot be undone." +msgstr "ノートブック「{0}」を削除しますか?この操作は元に戻せません。" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Query" +msgstr "クエリを削除" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Delete Row" +msgstr "行を削除" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete selected" +msgstr "選択を削除" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Table" +msgstr "テーブルを削除" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Delete the entire AI activity history? This cannot be undone." +msgstr "AI アクティビティ履歴をすべて削除しますか?この操作は元に戻せません。" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Deleted cell {n}" +msgstr "セル {n} を削除" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Denied" +msgstr "拒否" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Deny" +msgstr "拒否" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Desc" +msgstr "降順" + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Deselect All" +msgstr "すべて解除" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Deselect All" +msgstr "すべて解除" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Deselect All" +msgstr "すべて解除" + +#: src/components/ui/FilterRow.tsx +msgid "Deselect from Apply All" +msgstr "すべて適用から除外" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Details" +msgstr "詳細" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Detect JSON in text columns" +msgstr "" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Diff" +msgstr "" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Direct dependencies declared in package.json and src-tauri/Cargo.toml." +msgstr "package.json および src-tauri/Cargo.toml に宣言された直接依存です。" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Directly edit the raw configuration file. A restart is required to apply changes." +msgstr "生の設定ファイルを直接編集します。変更を反映するには再起動が必要です。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disable" +msgstr "無効" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disabled" +msgstr "" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Disconnect" +msgstr "切断" + +#: src/pages/Editor.tsx +msgid "Disconnected" +msgstr "切断済み" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk R/W" +msgstr "ディスク R/W" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Read/s" +msgstr "ディスク読み取り/秒" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Write/s" +msgstr "ディスク書き込み/秒" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgctxt "discordCallout" +msgid "Dismiss" +msgstr "閉じる" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgctxt "sidebar" +msgid "Dismiss" +msgstr "閉じる" + +#: src/components/settings/AppearanceTab.tsx +msgid "Display line numbers in the editor gutter." +msgstr "エディタの左端に行番号を表示します。" + +#: src/components/settings/GeneralTab.tsx +msgid "Display the welcome screen when the application starts." +msgstr "アプリ起動時にウェルカム画面を表示します。" + +#: src/components/settings/PluginsTab.tsx +msgid "Downgrade to" +msgstr "ダウングレード:" + +#: src/components/ui/BlobInput.tsx +msgid "Download" +msgstr "ダウンロード" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Download & Install" +msgstr "ダウンロードしてインストール" + +#: src/components/ui/BlobInput.tsx +msgid "Download unavailable - only preview loaded" +msgstr "ダウンロード不可 - プレビューのみ読み込み済み" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Downloading..." +msgstr "ダウンロード中..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgctxt "update" +msgid "Downloading..." +msgstr "ダウンロード中..." + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Driver Notes" +msgstr "ドライバ補足" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop Trigger" +msgstr "トリガーを削除" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop View" +msgstr "ビューを削除" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Dump Database" +msgstr "データベースをダンプ" + +#: src/components/ui/FilterRow.tsx +msgid "Duplicate filter" +msgstr "フィルターを複製" + +#: src/components/ui/DataGrid.tsx +msgid "Duplicate Row" +msgstr "行を複製" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Duration" +msgstr "所要時間" + +#: src/components/modals/ViewEditorModal.tsx +msgid "e.g. active_users, order_summary" +msgstr "例: active_users, order_summary" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. before_insert_user" +msgstr "例: before_insert_user" + +#: src/components/modals/AiApprovalModal.tsx +msgid "e.g. Looks risky on prod, please confirm…" +msgstr "例: 本番環境でリスクがありそう、確認お願いします…" + +#: src/components/modals/NewConnectionModal.tsx +msgid "e.g. mysql://user:pass@localhost:3306/db" +msgstr "" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "e.g. python3" +msgstr "例: python3" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "e.g. sales_data" +msgstr "例: sales_data" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. users" +msgstr "例: users" + +#: src/components/modals/CreateTableModal.tsx +msgid "e.g. users, orders, products" +msgstr "例: users, orders, products" + +#: src/components/settings/FontPicker.tsx +msgid "e.g., Comic Sans MS" +msgstr "例: Comic Sans MS" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Edit" +msgstr "編集" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Edit before approving" +msgstr "承認前に編集" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Edit cell name" +msgstr "セル名を編集" + +#: src/pages/Settings.tsx +msgid "Edit config.json" +msgstr "config.json を編集" + +#: src/components/notebook/NotebookHistoryPanel.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Edit history" +msgstr "編集履歴" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Edit Row" +msgstr "行を編集" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Edit Schemas" +msgstr "スキーマを編集" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Edit Trigger" +msgstr "トリガーを編集" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Edit View" +msgstr "ビューを編集" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited cell {n}" +msgstr "セル {n} を編集" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited notebook" +msgstr "ノートブックを編集" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing a trigger requires dropping and recreating it. Continue modifying \"{name}\"?" +msgstr "トリガーを編集するには、いったん削除して再作成する必要があります。「{name}」の変更を続行しますか?" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing trigger: {name}" +msgstr "トリガーを編集中: {name}" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Editing view: {name}" +msgstr "ビューを編集中: {name}" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Editor" +msgstr "エディタ" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Family" +msgstr "エディタのフォントファミリー" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Size" +msgstr "エディタのフォントサイズ" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Theme" +msgstr "エディタテーマ" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Elapsed time" +msgstr "経過時間" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Emoji" +msgstr "絵文字" + +#: src/utils/explainPlan.ts +msgid "Enable ANALYZE to inspect actual rows, timing, loops, and buffers." +msgstr "ANALYZE を有効にすると、実行行数、時間、ループ、バッファを確認できます。" + +#: src/components/settings/LogsTab.tsx +msgid "Enable Logging" +msgstr "ログを有効化" + +#: src/components/settings/PluginsTab.tsx +msgid "Enabled" +msgstr "有効" + +#: src/components/settings/AiTab.tsx +msgid "Endpoint URL" +msgstr "エンドポイント URL" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Enter {0} Key" +msgstr "{0} キーを入力" + +#: src/components/ui/GeometryInput.tsx +msgid "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))" +msgstr "完全な SQL 関数を入力してください (例: ST_GeomFromText('POINT(30 40)', 4326))" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain plan analysis prompt..." +msgstr "実行計画分析プロンプトを入力..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain prompt..." +msgstr "説明プロンプトを入力..." + +#: src/components/settings/FontPicker.tsx +msgid "Enter font name above" +msgstr "上にフォント名を入力してください" + +#: src/components/ui/JsonInput.tsx +msgid "Enter JSON..." +msgstr "JSON を入力..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter key passphrase if encrypted" +msgstr "鍵が暗号化されている場合はパスフレーズを入力" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter notebook cell name prompt..." +msgstr "ノートブックセル名プロンプトを入力..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter password" +msgstr "パスワードを入力" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter query tab name prompt..." +msgstr "クエリタブ名プロンプトを入力..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter SSH password" +msgstr "SSH パスワードを入力" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter system prompt..." +msgstr "システムプロンプトを入力..." + +#: src/components/settings/AiTab.tsx +msgid "Enter the exact model name for your OpenAI-compatible provider." +msgstr "OpenAI 互換プロバイダの正確なモデル名を入力してください。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter username" +msgstr "ユーザー名を入力" + +#: src/components/ui/FieldEditor.tsx +#: src/components/ui/RowEditorSidebar.tsx +msgid "Enter value..." +msgstr "値を入力..." + +#: src/components/settings/GeneralTab.tsx +msgid "entries" +msgstr "件" + +#: src/components/settings/AiTab.tsx +msgid "Environment" +msgstr "環境変数" + +#: src/components/settings/GeneralTab.tsx +msgid "ER Diagram" +msgstr "ER 図" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Error" +msgstr "エラー" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Error" +msgstr "エラー" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgctxt "common" +msgid "Error" +msgstr "エラー" + +#: src/components/settings/LogsTab.tsx +msgctxt "settings" +msgid "Error" +msgstr "エラー" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgctxt "settings" +msgid "Error Details" +msgstr "エラーの詳細" + +#: src/components/modals/QuickNavigatorModal.tsx +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor" +msgid "Esc to close" +msgstr "Escで閉じる" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Est. Rows" +msgstr "推定行数" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate exceeds actual rows" +msgstr "推定が実行行数を超過" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate Gap" +msgstr "推定の乖離" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Event details" +msgstr "イベントの詳細" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Events" +msgstr "イベント" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity" +msgid "Events" +msgstr "イベント" + +#: src/components/modals/TriggerEditorModal.tsx +msgctxt "triggers" +msgid "Events" +msgstr "イベント" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Execute" +msgstr "実行" + +#: src/components/ui/ResultEntryContent.tsx +#: src/pages/Editor.tsx +msgid "Execute a query to see results" +msgstr "クエリを実行すると結果が表示されます" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Execute all SQL cells top to bottom" +msgstr "上から下へすべての SQL セルを実行" + +#: src/components/notebook/SqlCellResult.tsx +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Executing query..." +msgstr "クエリを実行中..." + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Execution" +msgstr "実行" + +#: src/components/notebook/CellHistoryPanel.tsx +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Execution History" +msgstr "実行履歴" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Exit Fullscreen" +msgstr "フルスクリーンを終了" + +#: src/components/modals/AiApprovalModal.tsx +msgctxt "aiApproval" +msgid "Expand" +msgstr "展開" + +#: src/components/ui/JsonInput.tsx +msgctxt "jsonInput" +msgid "Expand" +msgstr "" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Expand all" +msgstr "すべて展開" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Expand All" +msgstr "すべて展開" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Expand Cell" +msgstr "セルを展開" + +#: src/components/layout/Sidebar.tsx +msgid "Expand Explorer" +msgstr "エクスプローラーを展開" + +#: src/components/ui/AiDropdownButton.tsx +msgid "Explain" +msgstr "Explain" + +#. placeholder {0}: approval.explainError +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN failed: {0}" +msgstr "EXPLAIN 失敗: {0}" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain focused" +msgstr "フォーカス中のものを説明" + +#: src/components/modals/VisualExplainModal.tsx +msgid "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained." +msgstr "EXPLAIN は DML ステートメント (SELECT, INSERT, UPDATE, DELETE) のみサポートされます。CREATE、DROP、ALTER などの DDL は説明できません。" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain Nth" +msgstr "N 番目を説明" + +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +msgid "Explain Plan" +msgstr "実行計画" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Explain Plan Analysis Prompt" +msgstr "実行計画分析プロンプト" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Explain this query" +msgstr "このクエリを説明" + +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN unavailable for this query." +msgstr "このクエリは EXPLAIN に対応していません。" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Explorer" +msgstr "エクスプローラー" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Export" +msgstr "エクスポート" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as CSV" +msgstr "CSV としてエクスポート" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export as HTML" +msgstr "HTML としてエクスポート" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as JSON" +msgstr "JSON としてエクスポート" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Export as Notebook" +msgstr "ノートブックとしてエクスポート" + +#: src/pages/Connections.tsx +msgctxt "connections" +msgid "Export Connections" +msgstr "接続をエクスポート" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export CSV" +msgstr "" + +#: src/components/notebook/NotebookView.tsx +msgid "Export failed" +msgstr "" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Export failed: " +msgstr "エクスポートに失敗しました: " + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export JSON" +msgstr "" + +#: src/components/settings/LogsTab.tsx +msgid "Export Logs" +msgstr "ログをエクスポート" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export Notebook" +msgstr "ノートブックをエクスポート" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Exported to {target}" +msgstr "{target} にエクスポートしました" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Exporting..." +msgstr "エクスポート中..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Extra" +msgstr "詳細" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Fail with error" +msgstr "エラーで失敗" + +#: src/components/notebook/RunAllSummary.tsx +msgid "failed" +msgstr "失敗" + +#. placeholder {0}: conn.name +#: src/pages/Connections.tsx +msgid "Failed to connect to {0}. Please check your settings or ensuring the database is running." +msgstr "{0} への接続に失敗しました。設定を確認するか、データベースが稼働していることを確認してください。" + +#: src/pages/Connections.tsx +msgid "Failed to create group" +msgstr "グループの作成に失敗しました" + +#: src/pages/Editor.tsx +msgid "Failed to create new row: " +msgstr "新規行の作成に失敗しました: " + +#: src/components/modals/CreateTableModal.tsx +msgid "Failed to create table: " +msgstr "テーブルの作成に失敗しました: " + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Failed to delete column: " +msgstr "カラムの削除に失敗しました: " + +#: src/pages/Connections.tsx +msgid "Failed to delete group" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete index: " +msgstr "インデックスの削除に失敗しました: " + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to delete SSH connection" +msgstr "SSH 接続の削除に失敗しました" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete table: " +msgstr "テーブルの削除に失敗しました: " + +#: src/pages/Connections.tsx +msgid "Failed to disconnect from database" +msgstr "データベースからの切断に失敗しました" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to drop existing trigger: " +msgstr "既存のトリガーの削除に失敗しました: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop trigger: " +msgstr "トリガーの削除に失敗しました: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop view: " +msgstr "ビューの削除に失敗しました: " + +#: src/pages/Connections.tsx +msgid "Failed to duplicate connection" +msgstr "接続の複製に失敗しました" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get routine definition: " +msgstr "ルーチン定義の取得に失敗しました: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get trigger definition: " +msgstr "トリガー定義の取得に失敗しました: " + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to insert row: " +msgstr "行の挿入に失敗しました: " + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to load databases. Check your credentials." +msgstr "データベースの読み込みに失敗しました。認証情報を確認してください。" + +#: src/components/settings/PluginsTab.tsx +msgid "Failed to load registry" +msgstr "レジストリの読み込みに失敗しました" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to load schema: " +msgstr "スキーマの読み込みに失敗しました: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to load schemas" +msgstr "スキーマの読み込みに失敗しました" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to load trigger definition: " +msgstr "トリガー定義の読み込みに失敗しました: " + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to load view definition: " +msgstr "ビュー定義の読み込みに失敗しました: " + +#: src/pages/Connections.tsx +msgid "Failed to move connection" +msgstr "" + +#: src/pages/Editor.tsx +msgid "Failed to process insertions: " +msgstr "挿入の処理に失敗しました: " + +#: src/components/settings/AiTab.tsx +msgid "Failed to refresh models" +msgstr "モデルの更新に失敗しました" + +#: src/pages/Connections.tsx +msgid "Failed to rename group" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to save connection" +msgstr "接続の保存に失敗しました" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to save SSH connection" +msgstr "SSH 接続の保存に失敗しました" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to save trigger: " +msgstr "トリガーの保存に失敗しました: " + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to save view: " +msgstr "ビューの保存に失敗しました: " + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Failed: " +msgstr "失敗: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Favorites" +msgstr "お気に入り" + +#: src/components/modals/NewConnectionModal.tsx +msgid "File Path" +msgstr "ファイルパス" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Filter" +msgstr "フィルター" + +#: src/components/settings/LogsTab.tsx +msgid "Filter by level" +msgstr "レベルでフィルター" + +#: src/components/ui/TableToolbar.tsx +msgid "Filter conditions" +msgstr "フィルター条件" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Filter databases..." +msgstr "データベースをフィルター..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter tables..." +msgstr "テーブルをフィルター..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter triggers..." +msgstr "トリガーを絞り込み..." + +#: src/components/ui/TableToolbar.tsx +msgid "Filters" +msgstr "フィルター" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +msgid "First row as header" +msgstr "最初の行をヘッダーとして扱う" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "FK Name (Optional)" +msgstr "FK 名 (任意)" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focus on Table" +msgstr "テーブルにフォーカス" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focused on" +msgstr "フォーカス中" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Folder Path" +msgstr "フォルダパス" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Family" +msgstr "フォントファミリー" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Size" +msgstr "フォントサイズ" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill" +msgstr "強制終了" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill Plugin Process" +msgstr "プラグインプロセスを強制終了" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "foreign keys" +msgstr "外部キー" + +#: src/components/ui/JsonInput.tsx +msgid "Format" +msgstr "整形" + +#: src/components/ui/FilterRow.tsx +msgid "from" +msgstr "開始" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dependencies" +msgstr "フロントエンド依存" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dev Dependencies" +msgstr "フロントエンド開発依存" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Fullscreen" +msgstr "フルスクリーン" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Functions" +msgstr "関数" + +#: src/pages/Settings.tsx +msgid "General" +msgstr "一般" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgctxt "editor" +msgid "General" +msgstr "一般" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "General" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "General" +msgstr "一般" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generate name with AI" +msgstr "AI で名前を生成" + +#: src/components/notebook/NotebookOutline.tsx +msgid "Generate names for unnamed cells with AI" +msgstr "AI で未命名セルの名前を生成" + +#: src/components/ui/AiDropdownButton.tsx +msgctxt "ai" +msgid "Generate SQL" +msgstr "SQL を生成" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Generate SQL" +msgstr "SQL を生成" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Generate SQL templates" +msgstr "SQLテンプレートを生成" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Generated SQL Preview" +msgstr "生成 SQL プレビュー" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generated SQL: {tableName}" +msgstr "生成された SQL: {tableName}" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generating name..." +msgstr "名前を生成中..." + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generating SQL..." +msgstr "SQL を生成中..." + +#: src/components/modals/WhatsNewModal.tsx +msgid "Got it" +msgstr "了解" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Graph" +msgstr "グラフ" + +#: src/pages/Connections.tsx +msgid "Grid view" +msgstr "グリッド表示" + +#: src/pages/Connections.tsx +msgid "Group name" +msgstr "グループ名" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Guided" +msgstr "ガイド" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Hash Cond." +msgstr "ハッシュ条件" + +#: src/components/modals/CommunityModal.tsx +msgid "Help tabularis grow" +msgstr "Tabularis の成長をサポート" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Hide overview" +msgstr "概要を非表示" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Highest Cost" +msgstr "最高コスト" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "History" +msgstr "履歴" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Horizontal" +msgstr "水平" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Host" +msgstr "ホスト" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "How long the MCP subprocess will wait for the user's decision before failing the request." +msgstr "MCP サブプロセスがリクエストをタイムアウトさせる前にユーザーの判断を待つ時間。" + +#: src/components/settings/LogsTab.tsx +msgid "How many logs to keep in memory (1-10000)" +msgstr "メモリに保持するログの件数 (1〜10000)" + +#: src/components/settings/GeneralTab.tsx +msgid "How often to check if active connections are still alive. Set to 0 to disable." +msgstr "アクティブな接続の生存確認を行う間隔です。0 にすると無効になります。" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Icon" +msgstr "アイコン" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "If exists" +msgstr "既存時の動作" + +#: src/utils/explainPlan.ts +msgid "If timing is missing, the server likely returned an estimate-only plan." +msgstr "タイミングが欠落している場合、サーバーは推定のみのプランを返している可能性があります。" + +#: src/components/settings/InfoTab.tsx +msgid "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo." +msgstr "Tabularis を気に入っていただけたら、コードへの貢献、バグ報告、リポジトリへのスターなどでプロジェクトのサポートをご検討ください。" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Image" +msgstr "画像" + +#: src/components/ui/BlobInput.tsx +msgid "Image preview" +msgstr "画像プレビュー" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import cancelled" +msgstr "インポートをキャンセルしました" + +#: src/pages/Connections.tsx +msgid "Import Connections" +msgstr "接続をインポート" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import Database" +msgstr "データベースをインポート" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed" +msgstr "インポートに失敗しました" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed: " +msgstr "インポートに失敗しました: " + +#: src/i18n/registries/shortcutLabels.ts +msgid "Import from Clipboard" +msgstr "クリップボードからインポート" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Import from Clipboard" +msgstr "クリップボードからインポート" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Import from Clipboard..." +msgstr "クリップボードからインポート..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Import Notebook" +msgstr "ノートブックをインポート" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Importing from" +msgstr "インポート元" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Importing..." +msgstr "インポート中..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Index Cond." +msgstr "インデックス条件" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index Name" +msgstr "インデックス名" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index name is required" +msgstr "インデックス名は必須です" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "indexes" +msgstr "インデックス" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Info" +msgstr "情報" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Initial version" +msgstr "初期バージョン" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Inline" +msgstr "インライン" + +#: src/components/modals/NewRowModal.tsx +msgid "Insert" +msgstr "挿入" + +#: src/components/ui/DataGrid.tsx +msgid "Insert Current Timestamp" +msgstr "現在のタイムスタンプを挿入" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Insert to Editor" +msgstr "エディタに挿入" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Inspect structure" +msgstr "構造を表示" + +#: src/components/settings/PluginsTab.tsx +msgid "Install" +msgstr "インストール" + +#: src/pages/TaskManagerPage.tsx +msgid "Install and enable plugins to see them here" +msgstr "プラグインをインストールして有効化するとここに表示されます" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Install Config" +msgstr "設定をインストール" + +#: src/components/settings/PluginsTab.tsx +msgid "Install extensions, manage plugin drivers, and keep runtime settings under control." +msgstr "拡張機能のインストール、プラグインドライバの管理、実行時設定のコントロールを行います。" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installation Failed" +msgstr "インストール失敗" + +#: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings" +msgid "Installation Failed" +msgstr "インストール失敗" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installed" +msgstr "インストール済み" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Installed" +msgstr "インストール済み" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Installing..." +msgstr "インストール中..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language." +msgstr "AI によるクエリ説明の指示です。{LANGUAGE} を出力言語のプレースホルダーとして使用します。" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure." +msgstr "AI による SQL 生成の指示です。{SCHEMA} をデータベース構造のプレースホルダーとして使用します。" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Interpreter" +msgstr "インタプリタ" + +#: src/components/ui/JsonInput.tsx +msgid "Invalid JSON" +msgstr "無効な JSON" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Invalid notebook file format" +msgstr "不正なノートブックファイル形式です" + +#: src/components/notebook/ParamsPanel.tsx +msgid "Invalid parameter name" +msgstr "不正なパラメータ名です" + +#: src/components/modals/CommunityModal.tsx +msgid "Join Discord" +msgstr "Discord に参加" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Join now" +msgstr "今すぐ参加" + +#: src/components/modals/CommunityModal.tsx +msgid "Join the Community" +msgstr "コミュニティに参加" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Join Type" +msgstr "結合タイプ" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "キー" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Key file" +msgstr "鍵ファイル" + +#: src/components/settings/ShortcutsTab.tsx +#: src/pages/Settings.tsx +msgid "Keyboard Shortcuts" +msgstr "キーボードショートカット" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "keys" +msgstr "キー" + +#: src/pages/TaskManagerPage.tsx +msgid "Kill" +msgstr "停止" + +#: src/pages/TaskManagerPage.tsx +msgid "Killing" +msgstr "強制終了中:" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Kind" +msgstr "種別" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Kubernetes Connections" +msgstr "Kubernetes 接続" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Kubernetes context is required" +msgstr "Kubernetes コンテキストは必須です" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Kubernetes is not available for this driver." +msgstr "このドライバーでは Kubernetes を使用できません。" + +#: src/components/notebook/CellChart.tsx +msgid "Label" +msgstr "ラベル" + +#: src/components/settings/LocalizationTab.tsx +msgid "Language" +msgstr "言語" + +#: src/utils/explainPlan.ts +msgid "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well." +msgstr "大きな推定乖離は通常、古い統計やプランナーがモデル化しきれない述語を示します。" + +#: src/components/modals/CreateTableModal.tsx +msgid "Len" +msgstr "長さ" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Length" +msgstr "長さ" + +#: src/components/settings/LogsTab.tsx +msgid "Level" +msgstr "レベル" + +#: src/components/settings/GeneralTab.tsx +msgid "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended)." +msgstr "パフォーマンス問題を避けるため、クエリごとに取得する行数を制限します。0 に設定すると無効化されます (非推奨)。" + +#: src/components/settings/AppearanceTab.tsx +msgid "Line Height" +msgstr "行の高さ" + +#: src/pages/Connections.tsx +msgid "List view" +msgstr "リスト表示" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Load Databases" +msgstr "データベースを読み込み" + +#: src/pages/Editor.tsx +msgid "Load row count" +msgstr "行数を読み込む" + +#: src/pages/VisualExplainPage.tsx +msgid "Loading explain plan…" +msgstr "実行計画を読み込み中…" + +#: src/components/settings/PluginsTab.tsx +msgid "Loading plugin registry..." +msgstr "プラグインレジストリを読み込み中..." + +#: src/pages/TaskManagerPage.tsx +msgid "Loading processes…" +msgstr "プロセスを読み込み中…" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarRoutineItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "スキーマを読み込み中..." + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Loading trigger definition..." +msgstr "トリガー定義を読み込み中..." + +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Loading..." +msgstr "読み込み中..." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Local Column" +msgstr "ローカルカラム" + +#: src/components/settings/LocalizationTab.tsx +#: src/pages/Settings.tsx +msgid "Localization" +msgstr "ローカライズ" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Lock query" +msgstr "クエリをロック" + +#: src/components/settings/LogsTab.tsx +msgid "Log Settings" +msgstr "ログ設定" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Logs" +msgstr "ログ" + +#: src/components/settings/LogsTab.tsx +msgid "Logs exported to clipboard" +msgstr "ログをクリップボードにエクスポートしました" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Loops" +msgstr "ループ" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Make all MCP queries read-only" +msgstr "MCP クエリをすべて読み取り専用にする" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage" +msgstr "管理" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Manage Databases" +msgstr "データベースを管理" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage SSH Connections" +msgstr "SSH 接続を管理" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL COMMAND" +msgstr "手動コマンド" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL CONFIGURATION" +msgstr "手動設定" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Markdown" +msgstr "Markdown" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Max Allowed Packet" +msgstr "最大許容パケットサイズ" + +#: src/components/settings/GeneralTab.tsx +msgid "Max History Entries" +msgstr "最大履歴件数" + +#: src/components/settings/LogsTab.tsx +msgid "Max Log Entries" +msgstr "最大ログエントリ数" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Maximize" +msgstr "最大化" + +#: src/components/settings/GeneralTab.tsx +msgid "Maximum number of query history entries stored per connection." +msgstr "接続ごとに保存されるクエリ履歴の最大件数です。" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Maximum packet size used by the MySQL connector." +msgstr "MySQL コネクタが使用する最大パケットサイズです。" + +#: src/components/modals/CommunityModal.tsx +msgid "Maybe later" +msgstr "あとで" + +#: src/components/layout/Sidebar.tsx +msgid "MCP Server" +msgstr "MCP サーバー" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MCP Server Integration" +msgstr "MCP サーバー連携" + +#: src/components/settings/LogsTab.tsx +msgid "Message" +msgstr "メッセージ" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Minimize" +msgstr "最小化" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Mixed types detected, defaulted to TEXT" +msgstr "混在タイプを検出、TEXT にデフォルト設定" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Mode" +msgstr "モード" + +#. placeholder {0}: settings.aiModel +#. placeholder {1}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Model <0>{0} not found in <1>{1}. It may not work correctly." +msgstr "{1} ではモデル {0} が見つかりません。正しく動作しない可能性があります。" + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Modify Column" +msgstr "カラムを変更" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgctxt "sidebar" +msgid "Modify Column" +msgstr "カラムを変更" + +#: src/components/settings/InfoTab.tsx +msgid "Monitor plugin processes, CPU, RAM and disk usage in real time" +msgstr "プラグインプロセス、CPU、RAM、ディスク使用量をリアルタイムで監視します" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Down" +msgstr "下に移動" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Up" +msgstr "上に移動" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "My K8s cluster" +msgstr "マイ K8s クラスター" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "My SSH Server" +msgstr "My SSH Server" + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants." +msgstr "MySQL および MariaDB では、サポートされた EXPLAIN ANALYZE または ANALYZE FORMAT バリアントでのみ実測値が得られます。" + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version." +msgstr "MySQL および MariaDB はサーバーのバージョンに応じて EXPLAIN FORMAT=JSON または表形式 EXPLAIN にフォールバックする場合があります。" + +#: src/components/notebook/ParamsPanel.tsx +msgid "name" +msgstr "名前" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/SchemaModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Name" +msgstr "名前" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Name is required" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Namespace" +msgstr "ネームスペース" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Namespace is required" +msgstr "ネームスペースは必須です" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Navigation" +msgstr "ナビゲーション" + +#: src/components/ui/DataGrid.tsx +msgid "NEW" +msgstr "" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New connection" +msgstr "新規接続" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "New console" +msgstr "新規コンソール" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/pages/Editor.tsx +msgid "New Console" +msgstr "新規コンソール" + +#: src/components/modals/WhatsNewModal.tsx +msgid "New Features" +msgstr "新機能" + +#: src/pages/Connections.tsx +msgid "New Group" +msgstr "新規グループ" + +#: src/pages/Editor.tsx +msgid "New Notebook" +msgstr "新規ノートブック" + +#: src/components/modals/NewRowModal.tsx +#: src/pages/Editor.tsx +msgid "New Row" +msgstr "新規行" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New tab" +msgstr "新規タブ" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "New table created" +msgstr "新規テーブルを作成しました" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "New Version Available" +msgstr "新しいバージョンが利用可能" + +#: src/pages/Editor.tsx +msgid "New Visual Query" +msgstr "新規ビジュアルクエリ" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Next page" +msgstr "次のページ" + +#: src/components/modals/CreateTableModal.tsx +msgid "NN" +msgstr "NN" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "いいえ" + +#: src/pages/Connections.tsx +msgid "No active connections" +msgstr "アクティブな接続はありません" + +#: src/components/ui/TableToolbar.tsx +msgid "no active filters" +msgstr "有効なフィルターなし" + +#: src/pages/Editor.tsx +msgid "No active session. Please select a connection." +msgstr "アクティブなセッションがありません。接続を選択してください。" + +#: src/components/ui/BlobInput.tsx +msgid "No BLOB data" +msgstr "BLOB データなし" + +#: src/pages/TaskManagerPage.tsx +msgid "No child processes" +msgstr "子プロセスはありません" + +#: src/pages/SchemaDiagramPage.tsx +msgid "No Connection ID" +msgstr "接続 ID がありません" + +#: src/pages/Connections.tsx +msgid "No connections match \"{search}\"" +msgstr "「{search}」に一致する接続はありません" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No contexts found (is kubectl installed?)" +msgstr "コンテキストが見つかりません(kubectl はインストールされていますか?)" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "No data found in clipboard" +msgstr "クリップボードにデータが見つかりません" + +#: src/components/ui/DataGrid.tsx +msgid "No data to display" +msgstr "表示するデータがありません" + +#: src/components/modals/QueryModal.tsx +msgid "No database" +msgstr "データベースなし" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No databases found" +msgstr "データベースが見つかりません" + +#: src/components/notebook/CellHistoryPanel.tsx +msgid "No execution history yet" +msgstr "実行履歴はまだありません" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No favorites match your search" +msgstr "検索に一致するお気に入りがありません" + +#: src/pages/VisualExplainPage.tsx +msgid "No file loaded" +msgstr "ファイルが読み込まれていません" + +#: src/components/ui/TableToolbar.tsx +msgid "No filters —" +msgstr "フィルターなし —" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No general settings available for this driver." +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No icons match." +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "No Kubernetes connections saved. Click \"Add\" to create one." +msgstr "保存された Kubernetes 接続がありません。「追加」をクリックして作成してください。" + +#: src/components/settings/LogsTab.tsx +msgid "No logs available" +msgstr "ログがありません" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "No major issues detected in the current plan summary." +msgstr "現在のプランサマリに大きな問題は検出されませんでした。" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "No matching elements found" +msgstr "一致する要素が見つかりません" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No MCP activity yet." +msgstr "MCP アクティビティはまだありません。" + +#: src/components/settings/AiTab.tsx +msgid "No models found" +msgstr "モデルが見つかりません" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No notebooks match your search." +msgstr "一致するノートブックがありません。" + +#: src/pages/Editor.tsx +msgid "No open tabs for this connection." +msgstr "この接続に対して開いているタブはありません。" + +#: src/components/modals/NewRowModal.tsx +msgid "No options found" +msgstr "選択肢が見つかりません" + +#: src/pages/TaskManagerPage.tsx +msgid "No plugin processes are running" +msgstr "実行中のプラグインプロセスはありません" + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins available in the registry." +msgstr "レジストリに利用可能なプラグインがありません。" + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins match your search." +msgstr "検索に一致するプラグインがありません。" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No preview" +msgstr "" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No queries match your search" +msgstr "検索に一致するクエリがありません" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No query history" +msgstr "クエリ履歴はありません" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "No results found" +msgstr "結果が見つかりません" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No routines found" +msgstr "ルーチンが見つかりません" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No saved connections — create one below" +msgstr "保存された接続がありません — 下で作成してください" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No saved notebooks yet." +msgstr "保存されたノートブックはまだありません。" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No saved queries" +msgstr "保存済みクエリはありません" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No sessions match the current filters." +msgstr "現在のフィルタに一致するセッションがありません。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No SSH connections available" +msgstr "利用可能な SSH 接続がありません" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "No SSH connections configured yet" +msgstr "SSH 接続が設定されていません" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables found" +msgstr "テーブルが見つかりません" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables match" +msgstr "一致するテーブルがありません" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers found" +msgstr "トリガーが見つかりません" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers match your filter" +msgstr "条件に一致するトリガーがありません" + +#: src/pages/Editor.tsx +msgid "No valid queries found" +msgstr "有効なクエリが見つかりません" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No views found" +msgstr "ビューが見つかりません" + +#: src/components/settings/PluginsTab.tsx +msgid "Not available for your platform" +msgstr "お使いのプラットフォームでは利用できません" + +#: src/components/settings/AiTab.tsx +msgid "Not configured" +msgstr "未設定" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Not Null" +msgstr "NOT NULL" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Notebook Cell Name Prompt" +msgstr "ノートブックセル名プロンプト" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook exported successfully" +msgstr "ノートブックを正常にエクスポートしました" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook imported successfully" +msgstr "ノートブックを正常にインポートしました" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Notebook name" +msgstr "ノートブック名" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Notebooks" +msgstr "ノートブック" + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "npm ecosystem" +msgstr "npm エコシステム" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "NULL 許可" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Objects" +msgstr "オブジェクト" + +#. placeholder {0}: sessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "of {0}" +msgstr "/ {0} 件中" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Off" +msgstr "オフ" + +#: src/components/modals/AlertModal.tsx +#: src/components/modals/ConfirmModal.tsx +msgid "OK" +msgstr "OK" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Older" +msgstr "それ以前" + +#: src/utils/explainPlan.ts +msgid "Older servers may fall back to estimated plans with fewer metrics." +msgstr "古いサーバーでは、指標の少ない推定プランにフォールバックする場合があります。" + +#: src/components/settings/PluginsTab.tsx +msgid "Older versions" +msgstr "以前のバージョン" + +#. placeholder {0}: ( settings.aiCustomModels?.["ollama"] || availableModels["ollama"] || [] ).length +#: src/components/settings/AiTab.tsx +msgid "Ollama connected ({0} models found)" +msgstr "Ollama に接続しました ({0} 個のモデルを検出)" + +#. placeholder {0}: settings.aiOllamaPort || 11434 +#: src/components/settings/AiTab.tsx +msgid "Ollama not detected on port {0}. Is it running?" +msgstr "ポート {0} で Ollama を検出できませんでした。起動していますか?" + +#: src/components/settings/AiTab.tsx +msgid "Ollama Port" +msgstr "Ollama ポート" + +#. placeholder {0}: trigger.table_name +#: src/components/layout/sidebar/SidebarTriggerItem.tsx +msgid "on {0}" +msgstr "{0} に対して" + +#. placeholder {0}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "On {0} — review and decide before it executes." +msgstr "{0} 上 — 実行前に確認して判断してください。" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Delete" +msgstr "削除時" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Update" +msgstr "更新時" + +#: src/components/connections/StatusBadge.tsx +msgctxt "connections" +msgid "Open" +msgstr "開く" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Open connections" +msgstr "接続を開く" + +#: src/pages/VisualExplainPage.tsx +msgid "Open file" +msgstr "ファイルを開く" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Open in Editor" +msgstr "エディタで開く" + +#: src/components/ui/DataGrid.tsx +msgid "Open in JSON Editor" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Open in New Tab" +msgstr "新しいタブで開く" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Open in Visual Explain" +msgstr "Visual Explain で開く" + +#: src/components/ui/JsonCell.tsx +msgid "Open JSON viewer" +msgstr "" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Open package page" +msgstr "パッケージページを開く" + +#. placeholder {0}: fkForContextPreview.ref_table +#: src/components/ui/DataGrid.tsx +msgid "Open referenced row in {0}" +msgstr "{0} で参照行を開く" + +#: src/components/ui/DataGrid.tsx +msgid "Open Sidebar Editor" +msgstr "サイドバーエディタで開く" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Open Source Libraries" +msgstr "オープンソースライブラリ" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Open Tabs" +msgstr "開いているタブ" + +#: src/components/settings/InfoTab.tsx +msgid "Open Task Manager" +msgstr "タスクマネージャを開く" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +msgid "Operation" +msgstr "操作" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default." +msgstr "任意。このプラグインの実行に使用する実行ファイルを指定します (例: macOS/Linux では python3、Windows では python またはフルパス)。空欄の場合はデフォルトが使用されます。" + +#: src/components/notebook/NotebookOutline.tsx +msgid "Outline" +msgstr "アウトライン" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Overview" +msgstr "概要" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +#: src/pages/Editor.tsx +msgid "Page {0}" +msgstr "{0} ページ" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {1}: Math.ceil( activeTab.result.pagination.total_rows / activeTab.result.pagination.page_size, ) +#: src/pages/Editor.tsx +msgid "Page {0} of {1}" +msgstr "{0} / {1} ページ" + +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +msgid "Page {0} of {totalPages}" +msgstr "{0} / {totalPages} ページ" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Parallel Execution (Run All)" +msgstr "並列実行 (すべて実行)" + +#: src/components/notebook/ParamsPanel.tsx +#: src/pages/Editor.tsx +msgid "Parameters" +msgstr "パラメータ" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password" +msgstr "パスワード" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password saved in system keychain" +msgstr "パスワードをシステムのキーチェーンに保存しました" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Paste structured data and preview the schema before importing" +msgstr "構造化データを貼り付け、インポート前にスキーマをプレビューします" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database." +msgstr "書き込み(またはすべてのクエリ)を一時停止し、データベースに到達する前に Tabularis 内でユーザーに承認を求めます。" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Pending approval" +msgstr "承認待ち" + +#: src/pages/TaskManagerPage.tsx +msgid "PID" +msgstr "PID" + +#: src/components/settings/GeneralTab.tsx +msgid "Ping Interval" +msgstr "Ping 間隔" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Pipe (|)" +msgstr "パイプ (|)" + +#: src/components/modals/CreateTableModal.tsx +msgid "PK" +msgstr "PK" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Planning" +msgstr "プランニング" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Please fill in all required fields" +msgstr "必須項目をすべて入力してください" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least one table" +msgstr "少なくとも 1 つのテーブルを選択してください" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least Structure or Data" +msgstr "構造かデータのいずれかを選択してください" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin" +msgstr "プラグイン" + +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Center" +msgstr "プラグインセンター" + +#: src/components/connections/ActionButtons.tsx +#: src/components/connections/ConnectionCard.tsx +#: src/components/connections/ConnectionListItem.tsx +msgid "Plugin disabled" +msgstr "プラグインが無効" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Plugin Failed to Start" +msgstr "プラグインの起動に失敗" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin Processes" +msgstr "プラグインプロセス" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin processes & system resources" +msgstr "プラグインプロセスとシステムリソース" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Settings" +msgstr "プラグイン設定" + +#: src/pages/Settings.tsx +msgid "Plugins" +msgstr "プラグイン" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "PNG, JPG, WebP or SVG · max 512 KB" +msgstr "PNG、JPG、WebP または SVG · 最大 512 KB" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Pod" +msgstr "Pod" + +#: src/components/ui/GeometryInput.tsx +msgid "POINT(30 40)" +msgstr "POINT(30 40)" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Port" +msgstr "ポート" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Port must be between 1 and 65535" +msgstr "ポートは 1 から 65535 の範囲で指定してください" + +#: src/utils/explainPlan.ts +msgid "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available." +msgstr "PostgreSQL の ANALYZE では、利用可能な場合は実行行数、時間、ループ、バッファカウンタが含まれます。" + +#: src/utils/explainPlan.ts +msgid "PostgreSQL without ANALYZE shows planner estimates only." +msgstr "ANALYZE なしの PostgreSQL はプランナーの推定のみを表示します。" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Pre-flight execution plan" +msgstr "プリフライト実行計画" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pre-flight EXPLAIN" +msgstr "プリフライト EXPLAIN" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Prefer" +msgstr "優先" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Preferred" +msgstr "" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Press key combination..." +msgstr "キーの組み合わせを押してください..." + +#: src/pages/Editor.tsx +msgid "Press Run (Ctrl/Command+F5) to load table data" +msgstr "Run (Ctrl/Command+F5) を押してテーブルデータを読み込んでください" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Preview" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "Preview" +msgstr "プレビュー" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Preview" +msgstr "プレビュー" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Preview failed: " +msgstr "プレビューに失敗しました: " + +#: src/components/ui/BlobInput.tsx +msgid "Preview only - full data not loaded" +msgstr "プレビューのみ - 完全なデータは読み込まれていません" + +#: src/components/ui/DataGrid.tsx +msgid "Preview related record" +msgstr "関連レコードをプレビュー" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Previous page" +msgstr "前のページ" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Primary Key" +msgstr "主キー" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Procedures" +msgstr "プロシージャ" + +#: src/components/settings/InfoTab.tsx +msgid "Project Status" +msgstr "プロジェクトの状態" + +#: src/components/settings/AiTab.tsx +msgid "Prompt Customization" +msgstr "プロンプトのカスタマイズ" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Provide your connection name" +msgstr "接続名を入力" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Queries" +msgstr "クエリ" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Query" +msgstr "クエリ" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Explanation" +msgstr "クエリ説明" + +#: src/pages/Editor.tsx +msgid "Query failed." +msgstr "クエリが失敗しました。" + +#: src/components/settings/GeneralTab.tsx +msgid "Query History" +msgstr "クエリ履歴" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Query history was reset" +msgstr "クエリ履歴をリセットしました" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Query Parameters" +msgstr "クエリパラメータ" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Tab Name Prompt" +msgstr "クエリタブ名プロンプト" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Quick connection test" +msgstr "簡易接続テスト" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Quick Navigator" +msgstr "クイックナビゲーター" + +#: src/pages/TaskManagerPage.tsx +msgid "RAM" +msgstr "RAM" + +#: src/components/ui/JsonInput.tsx +msgid "Raw" +msgstr "" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Raw Output" +msgstr "生出力" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Raw SQL" +msgstr "Raw SQL" + +#: src/components/modals/VisualExplainModal.tsx +msgid "Re-run" +msgstr "再実行" + +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Re-run query" +msgstr "クエリを再実行" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Read more" +msgstr "もっと読む" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only connections" +msgstr "読み取り専用接続" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only mode" +msgstr "読み取り専用モード" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Reason (optional)" +msgstr "理由 (任意)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Recreate Trigger" +msgstr "トリガーを再作成" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Redo" +msgstr "やり直す" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Column" +msgstr "参照カラム" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Table" +msgstr "参照テーブル" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/LogsTab.tsx +#: src/components/settings/PluginsTab.tsx +#: src/pages/SchemaDiagramPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Refresh" +msgstr "更新" + +#: src/components/settings/AiTab.tsx +msgid "Refresh Models" +msgstr "モデルを更新" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Routines" +msgstr "ルーチンを更新" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Refresh Tables" +msgstr "テーブルを更新" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Triggers" +msgstr "トリガーを更新" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Views" +msgstr "ビューを更新" + +#: src/components/settings/PluginsTab.tsx +msgid "Registry" +msgstr "レジストリ" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Release Notes" +msgstr "リリースノート" + +#: src/pages/VisualExplainPage.tsx +msgid "Reload" +msgstr "再読み込み" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Remind Me Later" +msgstr "あとで通知" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Remove" +msgstr "削除" + +#: src/components/modals/PluginRemoveModal.tsx +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Remove" +msgstr "削除" + +#: src/components/ui/FilterRow.tsx +msgid "Remove filter" +msgstr "フィルターを削除" + +#: src/pages/Connections.tsx +msgid "Remove from Group" +msgstr "グループから削除" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Remove Plugin" +msgstr "プラグインを削除" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Connections.tsx +#: src/pages/Editor.tsx +msgid "Rename" +msgstr "名前を変更" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Renamed cell {n}" +msgstr "セル {n} の名前を変更" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Reordered cells" +msgstr "セルを並べ替え" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Replace table" +msgstr "テーブルを置換" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Require" +msgstr "必須" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Required" +msgstr "必須" + +#. placeholder {0}: availableTypes.find((t) => t.name === form.type)?.requires_extension +#. placeholder {0}: exts.join(', ') +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "Requires extension: {0}" +msgstr "拡張機能が必要: {0}" + +#: src/components/settings/PluginsTab.tsx +msgid "Requires Tabularis ≥ {minVersion}" +msgstr "Tabularis ≥ {minVersion} が必要です" + +#: src/components/settings/AiTab.tsx +msgid "Reset" +msgstr "リセット" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Reset to default" +msgstr "デフォルトに戻す" + +#: src/components/settings/AiTab.tsx +msgid "Reset to Default" +msgstr "デフォルトに戻す" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Reset to driver default" +msgstr "ドライバーの初期設定に戻す" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Resize sidebar" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Name" +msgstr "リソース名" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource name is required" +msgstr "リソース名は必須です" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Type" +msgstr "リソースタイプ" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource type must be \"service\" or \"pod\"" +msgstr "リソースタイプは \"service\" または \"pod\" である必要があります" + +#: src/pages/TaskManagerPage.tsx +msgid "Restart" +msgstr "再起動" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Restart Now" +msgstr "今すぐ再起動" + +#: src/components/settings/GeneralTab.tsx +msgid "Result Page Size (Limit)" +msgstr "結果ページサイズ (上限)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Results" +msgstr "結果" + +#: src/components/ui/DataGrid.tsx +msgid "Revert Selected" +msgstr "選択を元に戻す" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Review & adjust" +msgstr "確認・調整" + +#: src/pages/Editor.tsx +msgid "Rollback Changes" +msgstr "変更をロールバック" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "routine" +msgstr "ルーチン" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Routines" +msgstr "ルーチン" + +#. placeholder {0}: rowIndex + 1 +#: src/components/ui/RowEditorSidebar.tsx +msgid "Row #{0}" +msgstr "行 #{0}" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "rows" +msgstr "行" + +#: src/components/settings/GeneralTab.tsx +msgctxt "settings" +msgid "rows" +msgstr "行" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Rows Processed" +msgstr "処理行数" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Rows returned" +msgstr "取得行数" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Rows will be added to an existing table" +msgstr "既存テーブルに行が追加されます" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Run" +msgstr "実行" + +#: src/components/modals/QuerySelectionModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgctxt "editor" +msgid "Run All" +msgstr "すべて実行" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run All Cells" +msgstr "すべてのセルを実行" + +#: src/components/notebook/RunAllSummary.tsx +msgid "Run All Complete" +msgstr "すべての実行が完了" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan." +msgstr "承認モーダルを表示する前にクエリに対して EXPLAIN を実行し、ユーザーに実行計画を表示します。" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Run Cell" +msgstr "セルを実行" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Run in console" +msgstr "コンソールで実行" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Run Preview" +msgstr "プレビューを実行" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Run queries" +msgstr "実行クエリ" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query" +msgstr "クエリを実行" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Run Query" +msgstr "クエリを実行" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query (in editor)" +msgstr "クエリを実行 (エディタ内)" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Run SELECT query" +msgstr "SELECTクエリを実行" + +#. placeholder {0}: selectedIndices.size +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run Selected ({0})" +msgstr "選択したものを実行 ({0})" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "Run SQL File..." +msgstr "SQL ファイルを実行..." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Run this command in your terminal, then restart Claude Code." +msgstr "このコマンドをターミナルで実行し、Claude Code を再起動してください。" + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run this query" +msgstr "このクエリを実行" + +#: src/i18n/registries/taskManagerProcessStatus.ts +#: src/pages/TaskManagerPage.tsx +msgid "running" +msgstr "実行中" + +#: src/components/explain/VisualExplainView.tsx +msgid "Running EXPLAIN..." +msgstr "EXPLAIN を実行中..." + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Build and Test" +msgstr "Rust ビルド・テスト" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Dependencies" +msgstr "Rust 依存" + +#: src/pages/McpPage.tsx +msgid "Safety" +msgstr "セーフティ" + +#: src/components/settings/ThemePicker.tsx +msgid "Same as App" +msgstr "アプリと同じ" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Sample values" +msgstr "サンプル値" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/Connections.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Save" +msgstr "保存" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Save & Restart" +msgstr "保存して再起動" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Save Changes" +msgstr "変更を保存" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Save passwords in Keychain" +msgstr "パスワードをキーチェーンに保存" + +#: src/components/settings/AiTab.tsx +msgid "Save Prompt" +msgstr "プロンプトを保存" + +#: src/pages/Editor.tsx +msgid "Save Query" +msgstr "クエリを保存" + +#: src/pages/Editor.tsx +msgid "Save this query" +msgstr "このクエリを保存" + +#: src/components/settings/PluginSettingsPage.tsx +msgid "Saved" +msgstr "保存しました" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Saved Connection" +msgstr "保存された接続" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Scan-heavy operations detected" +msgstr "スキャンの多い操作を検出" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "スキーマ: {tableName}" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Schemas" +msgstr "スキーマ" + +#: src/components/ui/JsonTreeView.tsx +msgid "Search" +msgstr "" + +#: src/pages/Connections.tsx +msgid "Search connections..." +msgstr "接続を検索..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search emoji…" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Search favorites..." +msgstr "お気に入りを検索..." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Search history..." +msgstr "履歴を検索..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search icons…" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Search models..." +msgstr "モデルを検索..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Search notebooks" +msgstr "ノートブックを検索" + +#: src/components/settings/PluginsTab.tsx +msgid "Search plugins…" +msgstr "プラグインを検索…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Search query…" +msgstr "クエリを検索…" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Search session, client, connection…" +msgstr "セッション、クライアント、接続を検索…" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Search tables, views, routines, triggers..." +msgstr "テーブル、ビュー、ルーチン、トリガーを検索..." + +#: src/components/settings/LocalizationTab.tsx +msgid "Search timezones..." +msgstr "タイムゾーンを検索..." + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Search..." +msgstr "検索..." + +#: src/components/modals/mcp/McpSafetySection.tsx +#: src/components/settings/GeneralTab.tsx +msgid "seconds" +msgstr "秒" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Select" +msgstr "SELECT" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select [fields]" +msgstr "SELECT [フィールド]" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select *" +msgstr "SELECT *" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a context first" +msgstr "先にコンテキストを選択してください" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a database" +msgstr "データベースを選択" + +#: src/pages/VisualExplainPage.tsx +msgid "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it." +msgstr "EXPLAIN プランを含むファイル (Postgres JSON またはテキスト形式) を選択して可視化します。" + +#: src/components/settings/AiTab.tsx +msgid "Select a model" +msgstr "モデルを選択" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Select a node to view details" +msgstr "ノードを選択して詳細を表示" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Select a table..." +msgstr "テーブルを選択..." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Select All" +msgstr "すべて選択" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Select All" +msgstr "すべて選択" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Select All" +msgstr "すべて選択" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select at least one database" +msgstr "少なくとも 1 つのデータベースを選択してください" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select context/namespace/type first" +msgstr "先にコンテキスト/ネームスペース/タイプを選択してください" + +#: src/components/ui/FilterRow.tsx +msgid "Select for Apply All" +msgstr "すべて適用に含める" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select K8s Connection" +msgstr "K8s 接続を選択" + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Select Query to Execute" +msgstr "実行するクエリを選択" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Select Query to Explain" +msgstr "説明するクエリを選択" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Select schemas to load:" +msgstr "読み込むスキーマを選択:" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select SSH Connection" +msgstr "SSH 接続を選択" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Select Tables" +msgstr "テーブルを選択" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select the databases to include in this connection." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Key" +#: src/components/settings/AiTab.tsx +msgid "Select the model to be used for generation and explanation." +msgstr "生成と説明に使用するモデルを選択します。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select type..." +msgstr "タイプを選択..." + +#: src/components/modals/NewRowModal.tsx +msgid "Select Value..." +msgstr "値を選択..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Selected emoji" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Loading schema..." +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Semicolon (;)" +msgstr "セミコロン (;)" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Separate Connections" +msgstr "接続を分離" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sequential Scans" +msgstr "シーケンシャルスキャン" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Service" +msgstr "Service" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Session timezone sent to MySQL after connect." +msgstr "接続後に MySQL に送信するセッションタイムゾーンです。" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Sessions" +msgstr "セッション" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Set as Active" +msgstr "アクティブに設定" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set DEFAULT" +msgstr "DEFAULT に設定" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set EMPTY" +msgstr "EMPTY に設定" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set GENERATED" +msgstr "GENERATED に設定" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set NULL" +msgstr "NULL に設定" + +#: src/components/layout/Sidebar.tsx +msgid "Settings" +msgstr "設定" + +#: src/pages/McpPage.tsx +msgid "Setup" +msgstr "セットアップ" + +#: src/components/settings/AiTab.tsx +msgid "Show AI Assist and Explain buttons in the editor" +msgstr "エディタに AI Assist と Explain ボタンを表示します" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All" +msgstr "すべて表示" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All Tables" +msgstr "すべてのテーブルを表示" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Show Data" +msgstr "データを表示" + +#: src/components/settings/AppearanceTab.tsx +msgid "Show Line Numbers" +msgstr "行番号を表示" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Show overview" +msgstr "概要を表示" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Name" +#: src/components/settings/GeneralTab.tsx +msgid "Show Welcome Screen" +msgstr "ウェルカム画面を表示" + +#. placeholder {0}: all.length +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Showing {RESULT_LIMIT} of {0} — refine search to narrow down." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "NO" +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "showing first {MAX_PREVIEW_ROWS}" +msgstr "先頭 {MAX_PREVIEW_ROWS} 行を表示中" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Side by side" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Nullable" +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Skip (do not import)" +msgstr "スキップ (インポートしない)" + +#: src/components/notebook/RunAllSummary.tsx +msgid "skipped" +msgstr "スキップ" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Slowest Step" +msgstr "最も遅いステップ" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket Timeout" +msgstr "ソケットタイムアウト" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket timeout in milliseconds." +msgstr "ソケットタイムアウト (ミリ秒)。" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort ascending" +msgstr "昇順で並び替え" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} ASC" +msgstr "{colName} を昇順で並べ替え" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} DESC" +msgstr "{colName} を降順で並べ替え" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Sort by {field}" +msgstr "{field} で並び替え" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort by…" +msgstr "並び替え…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort descending" +msgstr "降順で並び替え" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sort or temp work detected" +msgstr "ソートまたは一時処理を検出" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Split Group" +msgstr "グループを分割" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Horizontal" +msgstr "水平分割" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Vertical" +msgstr "垂直分割" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +#: src/components/ui/TableToolbar.tsx +msgid "SQL" +msgstr "SQL" + +#: src/components/settings/AppearanceTab.tsx +msgid "SQL Editor" +msgstr "SQL エディタ" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "SQL file executed successfully" +msgstr "SQL ファイルを正常に実行しました" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Functions" +msgstr "SQL 関数" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "SQL Generation" +msgstr "SQL 生成" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Mode" +msgstr "SQL モード" + +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQL Preview" +msgstr "SQL プレビュー" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "SQLite does not support dropping FKs via ALTER TABLE." +msgstr "SQLite は ALTER TABLE による FK 削除をサポートしていません。" + +#: src/utils/explainPlan.ts +msgid "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural." +msgstr "SQLite の EXPLAIN QUERY PLAN は軽量で、主に構造情報のみを提供します。" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQLite only supports renaming columns. Other modifications require recreating the table manually." +msgstr "SQLite はカラムの名前変更のみサポートします。その他の変更にはテーブルの再作成が必要です。" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Connections" +msgstr "SSH 接続" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Host" +msgstr "SSH ホスト" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH is not available for this driver." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Schema: {tableName}" +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key" +msgstr "SSH 鍵" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key File (Optional)" +msgstr "SSH 鍵ファイル (任意)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key Passphrase (Optional)" +msgstr "SSH 鍵のパスフレーズ (任意)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Password" +msgstr "SSH パスワード" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH Password missing. Please re-enter." +msgstr "SSH パスワードが未入力です。再入力してください。" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Port" +msgstr "SSH ポート" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH User" +msgstr "SSH ユーザー" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSL Mode" +msgstr "SSL モード" + +#: src/components/ui/GeometryInput.tsx +msgid "ST_GeomFromText('POINT(30 40)', 4326)" +msgstr "ST_GeomFromText('POINT(30 40)', 4326)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Stacked view" +msgstr "スタック表示" + +#: src/components/modals/CommunityModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Star on GitHub" +msgstr "GitHub でスター" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Started" +msgstr "開始" + +#: src/components/settings/GeneralTab.tsx +msgid "Startup" +msgstr "起動" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Status" +msgstr "ステータス" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Stop" +msgstr "停止" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop execution when a cell fails" +msgstr "セルが失敗したら実行を停止します" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop on Error" +msgstr "エラー時に停止" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "stopped" +msgstr "停止" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Structure" +msgstr "構造" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Structure (DDL)" +msgstr "構造 (DDL)" + +#: src/pages/Editor.tsx +msgid "Submit Changes" +msgstr "変更を送信" + +#: src/components/notebook/RunAllSummary.tsx +msgid "succeeded" +msgstr "成功" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Success" +msgstr "成功" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Success" +msgstr "成功" + +#: src/components/modals/ExportProgressModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Success" +msgstr "成功" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Success" +msgstr "成功" + +#: src/pages/TaskManagerPage.tsx +msgid "Sum of RSS across the process tree — may overcount shared memory" +msgstr "プロセスツリー全体の RSS 合計 — 共有メモリを重複して計算している可能性があります" + +#: src/components/settings/InfoTab.tsx +msgid "Support the Development" +msgstr "開発をサポート" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch tab" +msgstr "タブを切り替え" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch to connection 1–9" +msgstr "接続 1〜9 に切り替え" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Horizontal Layout" +msgstr "水平レイアウトに切り替え" + +#: src/components/ui/TableToolbar.tsx +msgid "Switch to SQL WHERE input" +msgstr "SQL WHERE 入力に切り替え" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Vertical Layout" +msgstr "垂直レイアウトに切り替え" + +#: src/pages/TaskManagerPage.tsx +msgid "System Resources" +msgstr "システムリソース" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Tab" +msgstr "タブ" + +#: src/components/settings/AppearanceTab.tsx +msgid "Tab Size" +msgstr "タブサイズ" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Tab view" +msgstr "タブ表示" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "table" +msgstr "テーブル" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Table" +msgstr "テーブル" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Table name" +msgstr "テーブル名" + +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Table Name" +msgstr "テーブル名" + +#: src/components/modals/CreateTableModal.tsx +msgid "Table name is required" +msgstr "テーブル名は必須です" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Tables" +msgstr "テーブル" + +#: src/components/modals/CommunityModal.tsx +msgid "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community." +msgstr "Tabularis は無料のオープンソースプロジェクトです。便利だと感じたら、プロジェクトのサポートやコミュニティへの参加をご検討ください。" + +#: src/pages/TaskManagerPage.tsx +msgid "Tabularis Process" +msgstr "Tabularis プロセス" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Target column" +msgstr "対象カラム" + +#: src/components/settings/InfoTab.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Task Manager" +msgstr "タスクマネージャ" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Temp or Sort Ops" +msgstr "一時またはソート操作" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Test" +msgstr "テスト" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Test Connection" +msgstr "接続テスト" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Testing..." +msgstr "テスト中..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "The app will restart automatically after installation" +msgstr "インストール後にアプリは自動的に再起動します" + +#: src/components/settings/AiTab.tsx +msgid "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1" +msgstr "OpenAI 互換 API のベース URL です。例: https://api.groq.com/openai/v1, http://localhost:8000/v1" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "The configuration file has been saved. Restart now to apply the changes?" +msgstr "設定ファイルを保存しました。変更を反映するために今すぐ再起動しますか?" + +#: src/pages/Connections.tsx +msgid "The exported file will contain your database and SSH passwords in plaintext. Please store it securely." +msgstr "エクスポートされたファイルには、データベースおよび SSH のパスワードが平文で含まれます。安全な場所に保管してください。" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:" +msgstr "履歴ファイルが破損していたためバックアップに移動しました。新しいクエリは通常どおり記録されます。バックアップ ファイル:" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely." +msgstr "Model Context Protocol (MCP) を使うと、AI アシスタント (Claude など) がローカルツールに接続できます。Tabularis は MCP サーバーを公開しており、AI がデータベーススキーマを読み取り、クエリを安全に実行できるようにします。" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "The plugin process could not be launched. Check the error details below." +msgstr "プラグインプロセスを起動できませんでした。下記のエラー詳細を確認してください。" + +#: src/components/settings/AppearanceTab.tsx +msgid "The quick brown fox jumps over the lazy dog" +msgstr "いろはにほへと ちりぬるを わかよたれそ つねならむ" + +#: src/components/settings/AppearanceTab.tsx +msgid "Theme Selection" +msgstr "テーマ選択" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "These connections will reject writes from MCP. Other connections behave normally." +msgstr "これらの接続は MCP からの書き込みを拒否します。他の接続は通常通り動作します。" + +#: src/pages/TaskManagerPage.tsx +msgid "This action cannot be undone immediately" +msgstr "この操作はすぐには取り消せません" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "This driver only supports primary keys at table creation time" +msgstr "このドライバはテーブル作成時のみ主キーをサポートします" + +#: src/components/settings/AiTab.tsx +msgid "This key is loaded from an environment variable" +msgstr "このキーは環境変数から読み込まれています" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Month" +msgstr "今月" + +#: src/components/notebook/NotebookView.tsx +msgid "This notebook is empty. Add a cell to get started." +msgstr "このノートブックは空です。セルを追加して始めましょう。" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path." +msgstr "このプラグインにはインタプリタ (例: Python) が必要な場合があります。プラグイン設定からインタプリタのパスを設定してください。" + +#: src/components/settings/InfoTab.tsx +msgid "This project is a Work In Progress (WIP). Core features are stable, but we have big plans." +msgstr "このプロジェクトは現在開発中 (WIP) です。主要機能は安定していますが、より大きな構想も進めています。" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Week" +msgstr "今週" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgctxt "aiActivity" +msgid "Time" +msgstr "時刻" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Time" +msgstr "時間" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Timeout" +msgstr "タイムアウト" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Timeout" +msgstr "タイムアウト" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgctxt "mcp" +msgid "Timeout" +msgstr "タイムアウト" + +#: src/components/settings/LogsTab.tsx +msgid "Timestamp" +msgstr "タイムスタンプ" + +#: src/components/settings/LocalizationTab.tsx +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Timezone" +msgstr "タイムゾーン" + +#: src/components/settings/LocalizationTab.tsx +msgid "Timezone used to display timestamps and exports. 'Auto' follows your system timezone." +msgstr "タイムスタンプの表示とエクスポートに使用するタイムゾーン。「自動」はシステムのタイムゾーンに従います。" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Timing" +msgstr "タイミング" + +#: src/components/ui/FilterRow.tsx +msgid "to" +msgstr "終了" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Today" +msgstr "今日" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Toggle Chart" +msgstr "チャートを切り替え" + +#: src/components/ui/JsonCell.tsx +msgid "Toggle inline JSON tree" +msgstr "" + +#: src/components/ui/TextCell.tsx +msgid "Toggle inline text editor" +msgstr "" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Toggle Preview" +msgstr "プレビューを切り替え" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Toggle sidebar" +msgstr "サイドバーを切り替え" + +#: src/components/ui/TableToolbar.tsx +msgid "Toggle structured filter panel" +msgstr "構造化フィルターパネルを切り替え" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled parallel (cell {n})" +msgstr "並列を切り替え(セル {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled stop on error" +msgstr "エラー時に停止を切り替え" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Tool" +msgstr "ツール" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Top Issues" +msgstr "主な問題" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Total Cost" +msgstr "総コスト" + +#: src/components/ui/JsonInput.tsx +msgid "Tree" msgstr "" +#. placeholder {0}: formatBytes(stats.total_memory_bytes) +#: src/pages/TaskManagerPage.tsx +msgid "Tree total: {0}" +msgstr "ツリー合計: {0}" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "trigger" +msgstr "トリガー" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Body (SQL)" +msgstr "トリガー本体 (SQL)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger created successfully" +msgstr "トリガーを正常に作成しました" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Name" +msgstr "トリガー名" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger SQL is required" +msgstr "トリガー SQL は必須です" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger updated successfully" +msgstr "トリガーを正常に更新しました" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Triggers" +msgstr "トリガー" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Try again" +msgstr "再試行" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Try again" +msgstr "再試行" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx #: src/components/modals/SchemaModal.tsx msgid "Type" +msgstr "タイプ" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Undo" +msgstr "元に戻す" + +#: src/pages/Connections.tsx +msgid "Ungrouped" +msgstr "未分類" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Unique Index" +msgstr "ユニークインデックス" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "unknown" +msgstr "不明" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Unknown" +msgstr "不明" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Unnamed connection" +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Unset" +msgstr "未設定" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Untitled" +msgstr "無題" + +#: src/components/settings/PluginsTab.tsx +msgid "Up to date" +msgstr "最新" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Update" +msgstr "UPDATE" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Update" +msgstr "更新" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Update" +msgstr "更新" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Update Error" +msgstr "アップデートエラー" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Update failed: " +msgstr "更新に失敗しました: " + +#: src/components/settings/InfoTab.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Updates" +msgstr "アップデート" + +#. placeholder {0}: ({ aur: "AUR", snap: "Snap Store", flatpak: "Flathub" } as Record)[ installationSource ] ?? installationSource +#: src/components/settings/InfoTab.tsx +msgid "Updates managed by {0}" +msgstr "アップデートは {0} によって管理されています" + +#: src/components/ui/BlobInput.tsx +msgid "Upload File" +msgstr "ファイルをアップロード" + +#: src/components/ui/BlobInput.tsx +msgid "Uploading..." +msgstr "アップロード中..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Existing SSH Connection" +msgstr "既存の SSH 接続を使用" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Kubernetes Port-Forward" +msgstr "Kubernetes ポートフォワードを使用" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use SSH Tunnel" +msgstr "SSH トンネルを使用" + +#: src/components/settings/InfoTab.tsx +msgid "Use your package manager to update Tabularis." +msgstr "Tabularis のアップデートにはパッケージマネージャを使用してください。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Username" +msgstr "ユーザー名" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Using the driver's default icon." +msgstr "" + +#: src/components/ui/JsonInput.tsx +msgid "Valid JSON" +msgstr "有効な JSON" + +#: src/components/notebook/ParamsPanel.tsx +msgctxt "editor" +msgid "value" +msgstr "値" + +#: src/components/ui/FilterRow.tsx +msgctxt "toolbar" +msgid "value" +msgstr "値" + +#: src/components/modals/QueryParamsModal.tsx +msgid "Value (e.g. 'text' or 123)" +msgstr "値 (例: 'text' や 123)" + +#: src/components/notebook/CellChart.tsx +msgid "Values" +msgstr "値" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify CA" +msgstr "CAを検証" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Full" +msgstr "完全検証" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Identity" msgstr "" +#: src/components/modals/UpdateNotificationModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Version" +msgstr "バージョン" + +#. placeholder {0}: entries[0].version +#: src/components/modals/WhatsNewModal.tsx +msgid "Version {0}" +msgstr "バージョン {0}" + +#. placeholder {0}: updateInfo.latestVersion +#: src/components/settings/InfoTab.tsx +msgid "Version {0} is available" +msgstr "バージョン {0} が利用可能です" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Vertical" +msgstr "垂直" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "view" +msgstr "ビュー" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View created successfully" +msgstr "ビューを正常に作成しました" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "View Definition" +msgstr "ビュー定義" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Definition (SQL)" +msgstr "ビュー定義 (SQL)" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View definition is required" +msgstr "ビュー定義は必須です" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "View details" +msgstr "詳細を表示" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "View ER Diagram" +msgstr "ER 図を表示" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Name" +msgstr "ビュー名" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View name is required" +msgstr "ビュー名は必須です" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "View on GitHub" +msgstr "GitHub で表示" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "View Schema" +msgstr "スキーマを表示" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View updated successfully" +msgstr "ビューを正常に更新しました" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Views" +msgstr "ビュー" + +#: src/components/modals/VisualExplainModal.tsx +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +#: src/pages/VisualExplainPage.tsx +msgid "Visual Explain" +msgstr "ビジュアル Explain" + +#: src/components/settings/LogsTab.tsx +msgid "Warn" +msgstr "警告" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap." +msgstr "Tabularis ユーザー専用のコミュニティを立ち上げました。質問・情報交換・ロードマップへのフィードバックをお寄せください。" + +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "What's New" +msgstr "新機能" + +#: src/pages/TaskManagerPage.tsx +msgid "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted." +msgstr "のプロセスを強制的に停止します。このプラグインを使用しているアクティブなデータベース接続は、プラグインが再起動されるまで動作しなくなります。" + +#: src/components/ui/GeometryInput.tsx +msgid "WKT Mode" +msgstr "WKT モード" + +#: src/components/settings/AppearanceTab.tsx +msgid "Word Wrap" +msgstr "ワードラップ" + +#: src/components/settings/AppearanceTab.tsx +msgid "Wrap long lines in the editor instead of scrolling horizontally." +msgstr "エディタ内の長い行を横スクロールせず折り返します。" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Write" +msgstr "書き込み" + +#: src/components/notebook/MarkdownCell.tsx +msgid "Write Markdown here..." +msgstr "ここに Markdown を記述..." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Writes only" +msgstr "書き込みのみ" + #: src/components/modals/SchemaModal.tsx msgid "YES" -msgstr "" +msgstr "はい" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Yesterday" +msgstr "昨日" + +#: src/components/settings/InfoTab.tsx +msgid "You're up to date" +msgstr "最新の状態です" diff --git a/src/locales/ja/messages.ts b/src/locales/ja/messages.ts index 39f11cf5..91f804a2 100644 --- a/src/locales/ja/messages.ts +++ b/src/locales/ja/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"最大履歴件数\"],\"-6AWa-\":[\"接続をインポート\"],\"-6NyRG\":[\"クライアント\"],\"-K0AvT\":[\"切断\"],\"-PLZfh\":[\"モデルの更新に失敗しました\"],\"-T5W2e\":[\"ドライバ補足\"],\"-ZgeeE\":[\"編集履歴\"],\"-aYrdc\":[\"バージョン \",[\"0\"],\" が利用可能です\"],\"-fBGXl\":[\"最高コスト\"],\"-jIQDz\":[\"セルを折りたたむ\"],\"-u1eRo\":[\"データベースなし\"],\"-yoeVU\":[\"スキーマを読み込み中...\"],\"-zy2Nq\":[\"タイプ\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"承認 ID\"],\"0E5-gF\":[\"この接続を削除してもよろしいですか?\"],\"0HCubq\":[\"展開\"],\"0Kmdvy\":[\"カスタムフォント\"],\"0Nj13E\":[\"SQL を生成\"],\"0ROgz5\":[\"JSON を入力...\"],\"0SY9sU\":[\"データベースからの切断に失敗しました\"],\"0b3kL9\":[\"データベースを選択\"],\"0caMy7\":[\"履歴\"],\"0mx5ow\":[\"クエリ\"],\"0n9BtL\":[\"プレビュー\"],\"0pHB9N\":[\"table.column 形式でコピー\"],\"0sQzZK\":[\"データベースをフィルター...\"],\"0uPP9X\":[\"FK 名 (任意)\"],\"0wxuek\":[\"現在のバージョン\"],\"0x09Aw\":[\"エラー時に停止を切り替え\"],\"0yBP6v\":[\"開発をサポート\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"0yVAoD\":[\"行数をカウント\"],\"0zxJ87\":[\"ログがありません\"],\"1-ETbn\":[\"ビジュアル Explain\"],\"1133_z\":[\"ビューを編集\"],\"11fGJ6\":[\"クエリ\"],\"13hIUA\":[[\"0\"],\" API キー\"],\"14qNWF\":[\"SSH 接続を選択\"],\"17qHRP\":[\"新規接続\"],\"1Dn6bg\":[\"クリップボードからインポート\"],\"1Dnd0I\":[\"行数を読み込む\"],\"1FjTLW\":[\"例: python3\"],\"1GOvbo\":[\"Ollama に接続しました (\",[\"0\"],\" 個のモデルを検出)\"],\"1I6UoR\":[\"ビュー\"],\"1U7hS5\":[\"長さ\"],\"1UTmg5\":[\"最大許容パケットサイズ\"],\"1b7aSU\":[\"エディタのフォントファミリー\"],\"1ekzlY\":[\"プラグインプロセス\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"テーマ選択\"],\"1xVZkL\":[\"モデルが見つかりません\"],\"26Joci\":[[\"0\"],\" 行を取得しました\"],\"2Bf-Qe\":[\"新規コンソール\"],\"2CrSmP\":[\"Tabularis の成長をサポート\"],\"2D9F8_\":[\"接続の複製に失敗しました\"],\"2Eoi_a\":[\"詳細を表示\"],\"2F4pE5\":[\"Rust ビルド・テスト\"],\"2Fsd9r\":[\"今月\"],\"2JzKXI\":[\"GENERATED に設定\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"すべて選択\"],\"2SO5RM\":[\"このドライバーでは Kubernetes を使用できません。\"],\"2Uh5GA\":[\"Cargo エコシステム\"],\"2YylFp\":[\"新規ビジュアルクエリ\"],\"2luuSG\":[\"再試行\"],\"2wxgft\":[\"名前を変更\"],\"2yG2GC\":[\"書き込み(またはすべてのクエリ)を一時停止し、データベースに到達する前に Tabularis 内でユーザーに承認を求めます。\"],\"30-b5r\":[\"削除\"],\"31kwdN\":[\"フィルターを複製\"],\"34nxyb\":[\"トリガー\"],\"35148H\":[\"すべてのツール\"],\"3Am5DS\":[\"タブ表示\"],\"3BhBCj\":[\"イベント\"],\"3FVg9_\":[\"ローカルカラム\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"実行\"],\"3L0HCz\":[\"検索に一致するプラグインがありません。\"],\"3Nv3JV\":[\"クエリを実行中...\"],\"3TSz9S\":[\"最小化\"],\"3UW8fG\":[\"アップデートは \",[\"0\"],\" によって管理されています\"],\"3YvS-c\":[\"新規タブ\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"ノートブックセル名プロンプト\"],\"3qkggm\":[\"フルスクリーン\"],\"3rBJ1T\":[\"スキーマを表示\"],\"3xZ-xV\":[\"現在のタイムスタンプを挿入\"],\"40Gx0U\":[\"タイムゾーン\"],\"41GP4f\":[\"行を CSV としてコピーまたはエクスポートする際のデフォルト区切り文字を選択します。\"],\"42iaEi\":[\"ANALYZE なしの PostgreSQL はプランナーの推定のみを表示します。\"],\"44cXI8\":[[\"colName\"],\" を昇順で並べ替え\"],\"4AF7FO\":[\"データベースを管理\"],\"4CK17g\":[\"ビュー「\",[\"name\"],\"」を変更してもよろしいですか?\"],\"4DDaw-\":[\"少なくとも 1 つのデータベースを選択してください\"],\"4D_Nvt\":[\"グループの作成に失敗しました\"],\"4RiR6c\":[\"HTML としてエクスポート\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 個の子プロセス\"],\"other\":[\"#\",\" 個の子プロセス\"]}]],\"4VyuY3\":[\"すべてのログを消去してもよろしいですか?\"],\"4WWqS3\":[\"Toggle inline JSON tree\"],\"4cEClj\":[\"セッション\"],\"4cmfYp\":[\"行を複製\"],\"4lIZTB\":[\"フロントエンド開発依存\"],\"4oYjvJ\":[\"クエリを検索…\"],\"4tMxW4\":[\"関連レコードをプレビュー\"],\"4yJcjm\":[\"タイプを選択...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"フィルターパネルを閉じる (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"セミコロン (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のイベント\"],\"other\":[\"#\",\" 件のイベント\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"リスト表示\"],\"5To6Z6\":[\"クエリをコピー\"],\"5gqNQl\":[\"グリッド表示\"],\"5igIzr\":[\"インポートをキャンセルしました\"],\"5nTIup\":[\"ビューを編集中: \",[\"name\"]],\"66bEht\":[\"プロジェクトの状態\"],\"6PIJVc\":[\"起動\"],\"6QvP0l\":[\"JSON としてエクスポート\"],\"6W41Xq\":[\"タスクマネージャ\"],\"6WngBH\":[\"NULL に設定\"],\"6YtxFj\":[\"名前\"],\"6_dCYd\":[\"概要\"],\"6gvoHP\":[\"エラーメッセージをコピー\"],\"6oCVzX\":[\"Kubernetes コンテキストは必須です\"],\"6wQO0f\":[\"データを表示\"],\"6z9W13\":[\"再起動\"],\"71agNy\":[\"AI で未命名セルの名前を生成\"],\"74J3FG\":[\"初期バージョン\"],\"75BWdo\":[\"トリガー定義の読み込みに失敗しました: \"],\"76d3Uz\":[\"イベント\"],\"76gPWk\":[\"了解\"],\"77nSMU\":[\"AI アクティビティ履歴をすべて削除しますか?この操作は元に戻せません。\"],\"79UVYW\":[\"Escで閉じる\"],\"7ABmyQ\":[\"再試行\"],\"7Ap0JP\":[[\"0\"],\" 件中 \",[\"activeFilterCount\"],\" 件が有効\"],\"7E864M\":[\"データベースの種類\"],\"7FqaG1\":[\"AI による EXPLAIN クエリ計画分析の指示をカスタマイズします。\",[\"LANGUAGE\"],\" を出力言語に使用します。\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"混在タイプを検出、TEXT にデフォルト設定\"],\"7RSQQd\":[\"パスワードをキーチェーンに保存\"],\"7VpPHA\":[\"確定\"],\"7e7bPs\":[\"トリガー本体 (SQL)\"],\"7eRaA9\":[\"トリガーを削除\"],\"7l15X4\":[\"失敗\"],\"7sMeHQ\":[\"キー\"],\"7sNhEz\":[\"ユーザー名\"],\"7tATh2\":[\"クエリを実行\"],\"7yb4gk\":[\"失敗: \"],\"8-4V8D\":[\"テーブル\"],\"82G-l5\":[\"Model Context Protocol (MCP) を使うと、AI アシスタント (Claude など) がローカルツールに接続できます。Tabularis は MCP サーバーを公開しており、AI がデータベーススキーマを読み取り、クエリを安全に実行できるようにします。\"],\"83VjWE\":[\"新規ノートブック\"],\"86IgoU\":[\"クエリを実行 (エディタ内)\"],\"86fCgf\":[\"AI によるクエリ結果タブ名生成の指示をカスタマイズします。SQL クエリがユーザーメッセージとして送信されます。\"],\"87a_t_\":[\"ラベル\"],\"8CWirf\":[\"MCP サーバー\"],\"8S8aIX\":[\"接続ヘルスチェック\"],\"8TMaZI\":[\"タイムスタンプ\"],\"8Tg_JR\":[\"カスタム\"],\"8UFKYr\":[\"実行するクエリを選択\"],\"8VKSGV\":[\"SQL を生成\"],\"8Wjy6z\":[\"左側のタブを閉じる\"],\"8ZsakT\":[\"パスワード\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL エディタ\"],\"8bRgTe\":[\"AI プロバイダが未設定です。設定 > AI に移動してください。\"],\"8c_W0h\":[\"以前のバージョン\"],\"8guEQP\":[\"ビューを更新\"],\"8lm5qE\":[\"SQLite の EXPLAIN QUERY PLAN は軽量で、主に構造情報のみを提供します。\"],\"8q_sOc\":[\"削除\"],\"8t-akp\":[\"先頭 \",[\"MAX_PREVIEW_ROWS\"],\" 行を表示中\"],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"接続名\"],\"91gnWY\":[\"ログをエクスポート\"],\"91rtHL\":[\"ビューを新規作成\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"新規グループ\"],\"9DOfTQ\":[\"トリガーを編集中: \",[\"name\"]],\"9JdjEN\":[\"ビューを正常に更新しました\"],\"9NzDFn\":[\"アプリ起動時にウェルカム画面を表示します。\"],\"9OoUS3\":[\"新しい SSH 接続を作成\"],\"9QGRD5\":[\"対象カラム\"],\"9QTny9\":[\"クエリが失敗しました。\"],\"9S-fyV\":[\"プリフライト実行計画\"],\"9SJ_Sx\":[\"システムリソース\"],\"9UQ730\":[\"複製\"],\"9X6cky\":[\"いいえ\"],\"9XUV5V\":[\"クリップボードにデータが見つかりません\"],\"9mMU1R\":[\"時間\"],\"9mvFo_\":[\"時刻\"],\"9npOH9\":[\"ファイルを開く\"],\"9uI_rE\":[\"元に戻す\"],\"9xUjzm\":[\"すべて選択\"],\"9y_02p\":[\"コミュニティとの交流、サポート、機能提案\"],\"A1pPcI\":[\"SSH ホスト\"],\"A1taO8\":[\"Search\"],\"A6C0pv\":[\"総コスト\"],\"A7WG0p\":[\"プラグインが無効\"],\"A7yRz3\":[\"ビュー定義は必須です\"],\"A9Uyp6\":[\"インポートに失敗しました: \"],\"ABEd-z\":[\"Tabularis のアップデートにはパッケージマネージャを使用してください。\"],\"AMdgKV\":[\"実行計画分析プロンプト\"],\"ANSTMe\":[\"現在のプランサマリに大きな問題は検出されませんでした。\"],\"ANzIr7\":[\"クエリ履歴\"],\"AOnaU7\":[\"スキップ\"],\"AVlZoM\":[\"環境変数\"],\"AXTVsE\":[\"完全検証\"],\"AXdRYR\":[\"現在のログ\"],\"Aa-YkQ\":[\"ノートブックをエクスポート\"],\"Ai2U7L\":[\"ホスト\"],\"AidayG\":[\"レベルでフィルター\"],\"AlPiMN\":[\"クリックでページ移動\"],\"An-1rA\":[\"取得行数\"],\"AnV8j-\":[\"カラムを変更\"],\"AvEr_L\":[\"新規コンソール\"],\"AvYbUL\":[\"GitHub でスター\"],\"Aw_eOs\":[\"Tabularis ≥ \",[\"minVersion\"],\" が必要です\"],\"AxPAXW\":[\"結果が見つかりません\"],\"B0mJGb\":[\"生出力\"],\"B1c58n\":[\"カラムを変更\"],\"B3toQF\":[\"オブジェクト\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"接続名は必須です\"],\"BAVvWJ\":[\"ER 図\"],\"BBtVak\":[\"すべて折りたたむ\"],\"BEVzjL\":[\"インポートに失敗しました\"],\"BFxXo5\":[\"すべて実行\"],\"BJe2lZ\":[\"サイドバーを切り替え\"],\"BK3WCj\":[\"レジストリの読み込みに失敗しました\"],\"BKbO3i\":[\"ノートブックを編集\"],\"BMB51y\":[\"コンソールで実行\"],\"BNW_Z4\":[\"例: active_users, order_summary\"],\"BUO_JN\":[\"クエリをコピー\"],\"BYkhHY\":[\"起動時にアップデートを確認\"],\"BbHofF\":[\"接続をエクスポート\"],\"BeSg6-\":[\"デバッグ用にアプリケーションログをメモリに収集します\"],\"BgAyQH\":[\"並べ替えを解除\"],\"BinTJI\":[\"npm エコシステム\"],\"BkFson\":[\"自動ページング\"],\"Bpglf1\":[\"上に移動\"],\"BrGo6h\":[\"ノートブックを検索\"],\"BxiAN_\":[\"クエリを削除\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"フロントエンド依存\"],\"CE-M2e\":[\"情報\"],\"CHIyL8\":[\"フィルターなし —\"],\"CJnUoU\":[\"トリガーを更新\"],\"CLWWRV\":[\"ダウンロード中...\"],\"CUxwxn\":[\"すべてのテーブルを表示\"],\"CWMXbw\":[\"のプロセスを強制的に停止します。このプラグインを使用しているアクティブなデータベース接続は、プラグインが再起動されるまで動作しなくなります。\"],\"CZt6BX\":[\"手動設定\"],\"Ca8ixZ\":[\"削除\"],\"CbJBQS\":[\"更新に失敗しました: \"],\"Cdz-YU\":[\"スタック表示\"],\"CpeQf9\":[\"ループ\"],\"D2wXBw\":[\"自動インクリメント\"],\"D6Ql0c\":[\"生成と説明に使用するモデルを選択します。\"],\"DB8zMK\":[\"適用\"],\"DDXf5E\":[\"SQL 関数\"],\"DEwnwi\":[\"削除\"],\"DNTvdl\":[\"エディタで開く\"],\"DPc2P9\":[\"セルを削除\"],\"DUY8Ba\":[\"破壊的変更\"],\"DVnBSM\":[\"行の高さ\"],\"Dd7YLj\":[\"あとで\"],\"Deej3j\":[\"無効な JSON\"],\"DfKhk_\":[\"更新\"],\"DiRiTz\":[\"パッケージページを開く\"],\"DlRHAD\":[\"EXPLAIN を実行中...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のエラー\"],\"other\":[\"#\",\" 件のエラー\"]}]],\"Dvdihe\":[[\"0\"],\" 上 — 実行前に確認して判断してください。\"],\"DzFLzw\":[\"はい\"],\"E-JUtQ\":[\"承認ゲート\"],\"E0kcnZ\":[\"一般\"],\"E2mje_\":[\"説明するクエリを選択\"],\"EDieyg\":[\"この SSH 接続を削除してもよろしいですか?\"],\"EHZxPj\":[\"Expand\"],\"EL4oDO\":[\"新しいバージョンが利用可能\"],\"EPi4gT\":[[\"field\"],\" で並び替え\"],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"未分類\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"不明\"],\"EhADgB\":[\"カラムを削除\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"最新の状態です\"],\"Em6JFd\":[\"行数をカウント\"],\"EnGiqG\":[[\"0\"],\"件\"],\"Ew1n5z\":[\"プラグインを検索…\"],\"F18WP3\":[\"パラメータ\"],\"F3uc1x\":[\"エクスポートされたファイルには、データベースおよび SSH のパスワードが平文で含まれます。安全な場所に保管してください。\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"F6pfE9\":[\"アクティブ\"],\"F8tXg7\":[\"データプレビュー\"],\"F9-6yK\":[\"デフォルトのコピー形式\"],\"F9lxfG\":[\"削除\"],\"F9nsa2\":[\"履歴ファイルが破損していたためバックアップに移動しました。新しいクエリは通常どおり記録されます。バックアップ ファイル:\"],\"FF_oap\":[\"デフォルト\"],\"FK8rlP\":[\"SSH 接続が設定されていません\"],\"FMRcH8\":[\"最初の行をヘッダーとして扱う\"],\"FNvDMc\":[\"今週\"],\"FQe1FI\":[\"推定行数\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"警告\"],\"FZg3wM\":[\"操作\"],\"Fa_cky\":[\"スキーマ: \",[\"tableName\"]],\"FpEL5o\":[\"SQL エディタに独立したテーマを選択するか、アプリのテーマと同期するかを選びます。\"],\"FsvZQL\":[\"セル \",[\"n\"],\" を編集\"],\"FtwKL9\":[\"タブを切り替え\"],\"FznI3z\":[\"外部キー「\",[\"name\"],\"」を削除しますか?\"],\"G6W8j1\":[\"プレビューに失敗しました: \"],\"G8Q5Zq\":[\"ネームスペースは必須です\"],\"GAohqx\":[\"カラムを削除\"],\"GJR99u\":[\"カラムの削除に失敗しました: \"],\"GKfzzM\":[\"接続を選択...\"],\"GS-Mus\":[\"エクスポート\"],\"GUaLUq\":[\"スキーマの読み込みに失敗しました: \"],\"GXP-Iw\":[\"SQL セルを追加\"],\"Gj1mLb\":[\"セルを並べ替え\"],\"GlbqG2\":[\"ドライバーの初期設定に戻す\"],\"Gs5AlY\":[\"開く\"],\"GtmO8_\":[\"開始\"],\"GxkJXS\":[\"アップロード中...\"],\"H-o4D2\":[\"新規カラムを作成\"],\"H2B-KW\":[\"Ctrl+C / Cmd+C で行をコピーする際のデフォルト形式を選択します。\"],\"H3oH0g\":[\"やり直す\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"折りたたむ\"],\"H9P8CD\":[\"最初のフィルターを追加\"],\"HAQlGl\":[\"AI アクティビティ\"],\"HKNZrs\":[\"インデックス条件\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"#\",\" 行を削除\"],\"other\":[\"#\",\" 行を削除\"]}]],\"HPuCiP\":[\"フォルダパス\"],\"HUs1R3\":[\"この接続に対して開いているタブはありません。\"],\"HV4Isp\":[\"SSH パスワードを入力\"],\"HVC8Hh\":[\"クリップボードにコピーしました\"],\"HWEpq8\":[\"ディスク書き込み/秒\"],\"HY4nP5\":[\"インライン\"],\"HcmoWv\":[\"ビューの保存に失敗しました: \"],\"He8v1Y\":[\"すべて適用から除外\"],\"HehHP1\":[\"デフォルトレイアウト\"],\"HilYn4\":[\"このノートブックは空です。セルを追加して始めましょう。\"],\"HjxVK_\":[\"簡易接続テスト\"],\"HmMnRx\":[\"WKT モード\"],\"HoKCiI\":[\"インストール後にアプリは自動的に再起動します\"],\"HpK_8d\":[\"再読み込み\"],\"Hpi4Jm\":[\"今すぐ参加\"],\"HuA3RU\":[\"タブ\"],\"I128p7\":[\"パイプ (|)\"],\"I3AgqA\":[\"SSH をインラインで設定\"],\"I5VBsr\":[\"アプリと同じ\"],\"I8yrPb\":[\"テーブルを置換\"],\"I92BdB\":[\"グループから削除\"],\"I92fr4\":[\"あとで通知\"],\"I99Miw\":[\"コスト\"],\"IETZIR\":[\"セル名を編集\"],\"IG9wzA\":[\"行の挿入に失敗しました: \"],\"ILleOG\":[\"リソースタイプは \\\"service\\\" または \\\"pod\\\" である必要があります\"],\"IQ3gAw\":[\"ファイルをアップロード\"],\"IUwGEM\":[\"変更を保存\"],\"IUwmLq\":[\"package.json および src-tauri/Cargo.toml に宣言された直接依存です。\"],\"IVrBTT\":[\"オープンソースライブラリ\"],\"I_43p6\":[\"セーフティ\"],\"Iaizf4\":[\"外観\"],\"Il3FBB\":[\"構造化フィルターパネルを切り替え\"],\"IniZRK\":[\"ダウンロード不可 - プレビューのみ読み込み済み\"],\"Isaozb\":[\"確認・調整\"],\"J17_9Z\":[\"トリガーの保存に失敗しました: \"],\"J2Cb95\":[\"このプラグインを経由するアクティブなクエリや接続は中断されます。\"],\"J6v1s_\":[\"デフォルトモデル\"],\"JE-DVk\":[\"インタプリタ\"],\"JEGlfK\":[\"開始\"],\"JKDPqP\":[\"先にコンテキストを選択してください\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"SSH トンネルを使用\"],\"JRz8tw\":[\"MySQL および MariaDB では、サポートされた EXPLAIN ANALYZE または ANALYZE FORMAT バリアントでのみ実測値が得られます。\"],\"JUICth\":[\"PNG、JPG、WebP または SVG · 最大 512 KB\"],\"JY5Oyv\":[\"データベース\"],\"JlFRIB\":[\"接続後に MySQL に送信するセッションタイムゾーンです。\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"拒否\"],\"K3H9p5\":[\"未設定\"],\"K5Dgu_\":[\"データベース\"],\"K8IGKf\":[\"認証方式\"],\"KAYNSW\":[\"メモリに保持するログの件数 (1〜10000)\"],\"KHTGbr\":[\"プリフライト EXPLAIN\"],\"KHvda8\":[\"NOT NULL\"],\"KJKNaZ\":[\"`column` 形式でコピー\"],\"KM5Kc8\":[\"少なくとも 1 つのカラムを選択してください\"],\"KSCnVQ\":[\"種別\"],\"KUjOb9\":[\"実行中\"],\"KXBdwy\":[\"ルーチンを更新\"],\"KXNyX7\":[\"DEFAULT に設定\"],\"Kd70-v\":[\"クリップボードからインポート...\"],\"KhI4oS\":[[\"0\"],\" で参照行を開く\"],\"KhgrNu\":[\"MCP サーバー連携\"],\"KirERL\":[\"タイムアウト\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"インデックスの削除に失敗しました: \"],\"KzeARD\":[\"テーブルの削除に失敗しました: \"],\"L-rMC9\":[\"デフォルトに戻す\"],\"L3HXkQ\":[\"バグ修正\"],\"LCZ7Dy\":[\"名前をコピー\"],\"LFDf6p\":[\"新しいデータベーストリガーを作成します\"],\"LK1m4W\":[\"インデックス\"],\"LMeAoR\":[\"行\"],\"LPCdc-\":[\"クエリタブ名プロンプト\"],\"LPFmga\":[\"すべて適用に含める\"],\"LYzbQ2\":[\"ツール\"],\"Lbis_V\":[\"クイックナビゲーター\"],\"Lcpbe2\":[\"プラグインプロセスを起動できませんでした。下記のエラー詳細を確認してください。\"],\"LhUHHO\":[\"生成 SQL プレビュー\"],\"LihabZ\":[\"EXPLAIN は DML ステートメント (SELECT, INSERT, UPDATE, DELETE) のみサポートされます。CREATE、DROP、ALTER などの DDL は説明できません。\"],\"LnT0hQ\":[\"カラムを追加\"],\"LvutiO\":[\"AI 提案\"],\"M-rHQO\":[\"フルスクリーンを終了\"],\"M0XJba\":[\"この接続のクエリ履歴をすべて削除してもよろしいですか?\"],\"M1co_O\":[\"設定済み\"],\"M73whl\":[\"コンテキスト\"],\"MDa5o0\":[\"例: before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"すべて表示\"],\"MXdOwj\":[\"接続を分離\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"K8s 接続を選択\"],\"Mc1tjS\":[\"ANALYZE を有効にすると、実行行数、時間、ループ、バッファを確認できます。\"],\"Mm4p0T\":[\"+\",[\"0\"],\" 行以上\"],\"Mp0jQ_\":[\"このドライバはテーブル作成時のみ主キーをサポートします\"],\"MqpZwN\":[\"Tabularis プロセス\"],\"MxIx43\":[\"↑↓で移動、Enterで開く\"],\"MygtgQ\":[\"Markdown セルを追加\"],\"N40H-G\":[\"すべて\"],\"N5UQxq\":[\"ポート \",[\"0\"],\" で Ollama を検出できませんでした。起動していますか?\"],\"N6GBcC\":[\"削除の確認\"],\"N6aqHp\":[\"実行クエリ\"],\"N9_S15\":[\"新規テーブルが作成されます\"],\"NBdMa1\":[\"最も遅いステップ\"],\"NC2AI2\":[\"長さ\"],\"NCzNnx\":[\"昇順で並び替え\"],\"NT4Ubs\":[\"カスタムキーを削除し、環境変数に戻します (存在する場合)\"],\"NUjrCO\":[\"検索に一致するお気に入りがありません\"],\"NWJrXh\":[\"トリガー SQL は必須です\"],\"NZUDnP\":[\"ツリー合計: \",[\"0\"]],\"Nc2VQn\":[\"既存に追加\"],\"NgFERn\":[\"お気に入りに追加\"],\"NktMHG\":[\"データベース名\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"テスト\"],\"Nq5QTk\":[\"N 番目を説明\"],\"O2STgu\":[\"エクスポートに失敗しました: \"],\"O8SV8O\":[\"ダウンロード中...\"],\"O9_WW6\":[\"接続\"],\"OGEsKj\":[\"すべてのセルを実行\"],\"OGWdBg\":[\"ビュー名\"],\"OHqT6w\":[\"キーの組み合わせを押してください...\"],\"OXJsaG\":[\"不正なパラメータ名です\"],\"OfhWJH\":[\"リセット\"],\"OlAl5i\":[\"すべて展開\"],\"Osn70z\":[\"デバッグ\"],\"Ou8b_n\":[\"Discord に参加\"],\"P1YGsb\":[\"SQL 生成\"],\"P2m1xb\":[\"エラー時に停止\"],\"P3Qlys\":[\"接続 ID がありません\"],\"P6Y3Yf\":[\"このコマンドをターミナルで実行し、Claude Code を再起動してください。\"],\"PCdj-c\":[\"すべて解除\"],\"PMnFt9\":[\"ディスク読み取り/秒\"],\"PQU2Va\":[\"Enter で候補を確定\"],\"PRnH8G\":[\"/ \",[\"0\"],\" 件中\"],\"PY8UF3\":[\"並列を切り替え(セル \",[\"n\"],\")\"],\"PiH3UR\":[\"コピーしました!\"],\"Pia95d\":[\"カラム名は必須です\"],\"PrElXQ\":[\"更新\"],\"PrixCC\":[\"既存テーブルに行が追加されます\"],\"Pujgbb\":[\"インポート先を設定\"],\"Pw_eQV\":[\"プラグインの起動に失敗\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"保存済みクエリはありません\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"子プロセスはありません\"],\"QCxMC0\":[\"アプリ起動時に自動で新しいバージョンを確認します\"],\"QEazml\":[\"選択を削除\"],\"QHcLEN\":[\"接続済み\"],\"QLHHFO\":[\"読み取り専用モード\"],\"QOvAW3\":[\"新機能\"],\"QULGRi\":[\"有効なクエリが見つかりません\"],\"QZwllF\":[\"参照...\"],\"QbkSr_\":[\"このクエリは EXPLAIN に対応していません。\"],\"QeHFYZ\":[\"EXPLAIN 失敗: \",[\"0\"]],\"Qll2Tb\":[\"降順\"],\"Qoq-GP\":[\"もっと読む\"],\"Qu4Hog\":[\"ノートブックを正常にインポートしました\"],\"R-A2Vd\":[\"表示するデータがありません\"],\"R0Hkb2\":[[\"0\"],\" 個のデータベースを選択中\"],\"R1nHhB\":[\"既に存在します\"],\"R2Iz3m\":[\"トリガー名\"],\"R6oBUl\":[\"コンソールに変換\"],\"R9Khdg\":[\"自動\"],\"RDjuBN\":[\"セットアップ\"],\"RF-HyV\":[\"使用する言語を選択します。「自動」はシステムの言語を使用します。\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"名前をコピー\"],\"RI-HZc\":[[\"0\"],\" キーを入力\"],\"RJrE17\":[\"ビュー「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"スターはプロジェクトを他の人に見つけてもらう助けになります\"],\"Rb3Tdm\":[\"ノートブック名\"],\"RcbKJ3\":[\"更新時\"],\"RkefFq\":[\"承認モーダルを表示する前にクエリに対して EXPLAIN を実行し、ユーザーに実行計画を表示します。\"],\"RnF_hl\":[\"プラグインレジストリを読み込み中...\"],\"Rns7_C\":[\"この操作はすぐには取り消せません\"],\"RoKRqW\":[\"利用可能なプラグイン\"],\"RphpKk\":[\"外観\"],\"Rt8sHM\":[\"ソートまたは一時処理を検出\"],\"RuSW0a\":[\"タイムスタンプの表示とエクスポートに使用するタイムゾーン。「自動」はシステムのタイムゾーンに従います。\"],\"RxzN1M\":[\"有効\"],\"S1veKH\":[\"選択を元に戻す\"],\"S5zeZU\":[\"プレビューを切り替え\"],\"S8Yqbl\":[\"挿入\"],\"SDND4q\":[\"未設定\"],\"SJRy3D\":[\"(自動生成)\"],\"SSwIjo\":[\"EMPTY に設定\"],\"SgvA_r\":[\"Run (Ctrl/Command+F5) を押してテーブルデータを読み込んでください\"],\"SlfejT\":[\"エラー\"],\"SoATkx\":[\"セルをコピー\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"エンドポイント URL\"],\"T7w5CQ\":[\"新規行の作成に失敗しました: \"],\"T9947j\":[\"値 (例: 'text' や 123)\"],\"TCizFv\":[\"タイムゾーンを検索...\"],\"TI33l7\":[\"垂直レイアウトに切り替え\"],\"TK5oex\":[\"プロンプトを保存\"],\"TKQ7K-\":[\"インストール\"],\"TKZreP\":[\"必須\"],\"TMLAx2\":[\"必須\"],\"TO08JI\":[\"外部キー\"],\"TQloo1\":[\"外部キーを作成\"],\"TVKqvO\":[\"行を編集\"],\"TYSdQ3\":[\"SELECTクエリを実行\"],\"TfDFHS\":[\"エディタ内の長い行を横スクロールせず折り返します。\"],\"Tibfjs\":[\"保存された接続がありません — 下で作成してください\"],\"Tj36Dr\":[\"デフォルトに戻す\"],\"Tjg925\":[\"トリガー定義を読み込み中...\"],\"TlZ7Ul\":[\"クエリをロック\"],\"TpwXyg\":[\"タイミングが欠落している場合、サーバーは推定のみのプランを返している可能性があります。\"],\"Tw2M1h\":[\"インストール失敗\"],\"Ty-rm9\":[\"SSH 接続\"],\"Tz0i8g\":[\"設定\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes 接続\"],\"U4uzyV\":[\"新機能\"],\"U8W7sX\":[\"トリガー定義の取得に失敗しました: \"],\"UB112k\":[\"セルが失敗したら実行を停止します\"],\"UCQiqt\":[[\"0\"],\" に対して\"],\"UECR2b\":[[\"0\"],\" が \",[\"1\"],\" 上 — 実行前に確認して判断してください。\"],\"UI85PB\":[\"条件に一致するトリガーがありません\"],\"UNKlAy\":[[\"clientName\"],\" の設定が正常にインストールされました。変更を反映するにはアプリを再起動してください。\"],\"URmyfc\":[\"詳細\"],\"UWQBvp\":[\"SQLテンプレートを生成\"],\"UawTKZ\":[\"任意。このプラグインの実行に使用する実行ファイルを指定します (例: macOS/Linux では python3、Windows では python またはフルパス)。空欄の場合はデフォルトが使用されます。\"],\"Ub8sf5\":[\"SQLite は ALTER TABLE による FK 削除をサポートしていません。\"],\"UbbJ8j\":[\"選択肢が見つかりません\"],\"Ubs68g\":[\"一般\"],\"UftN8J\":[\"これらの接続は MCP からの書き込みを拒否します。他の接続は通常通り動作します。\"],\"UnQNah\":[\"テーブル「\",[\"tableName\"],\"」のカラム「\",[\"0\"],\"」を削除してもよろしいですか?\\n\\n警告: このカラムのすべてのデータが完全に削除されます。この操作は取り消せません。\"],\"UncTTh\":[\"プロセスツリー全体の RSS 合計 — 共有メモリを重複して計算している可能性があります\"],\"UpjgFm\":[\"パラメータを変更\"],\"UsAnu1\":[\"ANALYZE はクエリを実行します。データを変更するステートメントでは注意して使用してください。\"],\"UxKoFf\":[\"ナビゲーション\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"タブサイズ\"],\"UzWGWO\":[\"SQL WHERE 入力に切り替え\"],\"V-chk5\":[\"アクティブな接続の生存確認を行う間隔です。0 にすると無効になります。\"],\"V-pw1j\":[\"テーブル名\"],\"V2T0Uw\":[\"保存されたノートブックはまだありません。\"],\"V3aNwx\":[\"データエディタ\"],\"VGYp2r\":[\"すべてに適用\"],\"VH8S7x\":[\"クリップボードのカラム\"],\"VIAEcS\":[\"データベースの読み込みに失敗しました。認証情報を確認してください。\"],\"VKdztF\":[\"行を追加\"],\"VLiHXI\":[\"分析データ\"],\"VMbmXc\":[\"「\",[\"pluginName\"],\"」を削除してもよろしいですか?プラグインファイルが削除されます。\"],\"VO3weF\":[\"ファイルが読み込まれていません\"],\"VOZlKc\":[\"データベースをインポート\"],\"VPzsIz\":[\"名前を生成中...\"],\"VUul0v\":[\"強制終了中:\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"トリガーの削除に失敗しました: \"],\"VfOb_W\":[\"トリガーが見つかりません\"],\"Vgy9LX\":[\"すべてのクエリ\"],\"Vi2Pqx\":[\"作成者:\"],\"Vl2zn2\":[\"停止\"],\"Vo4uBA\":[\"プラグインのインストール中にエラーが発生しました。詳細は下記を参照してください。\"],\"VqqyOs\":[\"クエリを実行すると結果が表示されます\"],\"VzhDFh\":[\"下記で明示的に許可されていない限り、MCP 経由の SELECT 以外のステートメントをブロックします。\"],\"W3uwpT\":[\"すべてのタブを閉じる\"],\"W4MKLh\":[\"例: 本番環境でリスクがありそう、確認お願いします…\"],\"WA8RND\":[\"テーブル「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"WG8Qgt\":[\"テーブルを削除\"],\"WLnvCZ\":[\"ユーザー名を入力\"],\"WM-__8\":[\"接続を検索...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行を「\",[\"tableName\"],\"」にインポートしました\"],\"other\":[\"#\",\" 行を「\",[\"tableName\"],\"」にインポートしました\"]}]],\"WTfntM\":[\"クエリ「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"WarTN_\":[\"成功\"],\"WcF1uL\":[\"グループ名\"],\"Weq9zb\":[\"一般\"],\"WmPpB1\":[\"実行計画を読み込み中…\"],\"Wu7cK0\":[\"データベースが見つかりません\"],\"WvoUQF\":[\"セル \",[\"n\"],\" を削除\"],\"Ww3pDD\":[\"手動コマンド\"],\"X-20AU\":[\"クエリタブ名プロンプトを入力...\"],\"X-U6_w\":[\"フォントファミリー\"],\"X5fs0g\":[\"最初の接続を作成して始めましょう。\"],\"X7Ayjp\":[\"パスワードをシステムのキーチェーンに保存しました\"],\"X9kySA\":[\"お気に入り\"],\"XJOV1Y\":[\"アクティビティ\"],\"XMCLEL\":[\"トリガーを新規作成\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"クエリ説明\"],\"XVF2Pf\":[\"スキーマを編集\"],\"XW6OYF\":[\"このプラグインにはインタプリタ (例: Python) が必要な場合があります。プラグイン設定からインタプリタのパスを設定してください。\"],\"XZB6Xr\":[\"最大ログエントリ数\"],\"Xcffv2\":[\"エディタに AI Assist と Explain ボタンを表示します\"],\"XeqTSh\":[\"結合タイプ\"],\"XmJfZT\":[\"名前\"],\"XoQfG1\":[\"SSH ユーザー\"],\"XwI0Vw\":[\"自動 (システム)\"],\"XyDlLX\":[\"インデックス名\"],\"Y2P2aK\":[\"読み込むスキーマを選択:\"],\"Y8HYw2\":[\"値\"],\"Y8zX3R\":[\"エディタに挿入\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"検索...\"],\"YWlnMZ\":[\"Ollama ポート\"],\"YYdC3A\":[\"バージョン \",[\"0\"]],\"YYn8b5\":[\"レジストリからプラグインを閲覧・インストールします。\"],\"Y_3yKT\":[\"新しいタブで開く\"],\"YiAQ_Q\":[\"テーブルを更新\"],\"Ysjr9Y\":[\"SQL プレビュー\"],\"YswNf7\":[\"すべてのレベル\"],\"YtNwr6\":[\"接続ごとに保存されるクエリ履歴の最大件数です。\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"読み込み中...\"],\"Z7ZXbT\":[\"承認\"],\"Z8JpBH\":[\"ノートブックとしてエクスポート\"],\"Z8fBIc\":[\"実行行数が推定を超過\"],\"ZC2VJP\":[\"実行\"],\"ZCIS4k\":[\"有効なフィルターなし\"],\"ZF1_UT\":[\"SSL モード\"],\"ZGjBPa\":[\"ログを消去\"],\"ZHQTlM\":[\"インポート元\"],\"ZIFDoJ\":[\"構造かデータのいずれかを選択してください\"],\"ZIZA6o\":[\"承認前に編集\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件の解析警告\"],\"other\":[\"#\",\" 件の解析警告\"]}]],\"ZVn8p2\":[\"エディタの左端に行番号を表示します。\"],\"ZYnwzF\":[\"切断済み\"],\"Za3_fO\":[\"エラー\"],\"Zf7LHg\":[\"コンテキストが見つかりません(kubectl はインストールされていますか?)\"],\"Zfotp5\":[\"大きな推定乖離は通常、古い統計やプランナーがモデル化しきれない述語を示します。\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"スキーマの読み込みに失敗しました\"],\"ZqXGPF\":[\"ビューの削除に失敗しました: \"],\"ZuL73E\":[\"新しいデータベースビューを作成します\"],\"_-bi4r\":[\"参照テーブル\"],\"_AEYGI\":[\"実行履歴はまだありません\"],\"_FdpZc\":[\"ビュー定義の読み込みに失敗しました: \"],\"_FxSdi\":[\"アプリ、バックエンド、ツールで使用している直接依存のオープンソースを閲覧できます。\"],\"_JyTG8\":[\"説明プロンプトを入力...\"],\"_Ltc_k\":[\"詳細\"],\"_Q2Wix\":[\"行\"],\"_TK1zF\":[\"保存された接続\"],\"_bJFBE\":[\"接続タイムアウト\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Tree\"],\"_dqduX\":[\"次のページ\"],\"_fwE6J\":[\"それ以前\"],\"_n04sB\":[\"停止\"],\"_otxbQ\":[\"鍵ファイル\"],\"_pezIT\":[[\"0\"],\" への接続に失敗しました。設定を確認するか、データベースが稼働していることを確認してください。\"],\"_srfkj\":[\"カスタムキーを正常に削除しました\"],\"_t6aFo\":[\"MySQL および MariaDB はサーバーのバージョンに応じて EXPLAIN FORMAT=JSON または表形式 EXPLAIN にフォールバックする場合があります。\"],\"_xTbaM\":[\"カラム\"],\"_yxaaL\":[\"ユニークインデックス\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis は無料のオープンソースプロジェクトです。便利だと感じたら、プロジェクトのサポートやコミュニティへの参加をご検討ください。\"],\"a9CASo\":[\"SQLite はカラムの名前変更のみサポートします。その他の変更にはテーブルの再作成が必要です。\"],\"aAIQg2\":[\"外観\"],\"aC_vCa\":[\"AI で名前を生成\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"ノードを選択して詳細を表示\"],\"aHKcKc\":[\"前のページ\"],\"aI-5wG\":[\"CAを検証\"],\"aJJySV\":[\"例: users\"],\"aQ8swY\":[\"デフォルト値\"],\"aScJP1\":[\"このクエリを実行\"],\"aVNbN8\":[\"フィルター条件\"],\"aWhdMQ\":[\"既存の SSH 接続を使用\"],\"aXYd8V\":[\"タイムアウト\"],\"aX_S_r\":[[\"0\"],\" / \",[\"totalPages\"],\" ページ\"],\"agZcf8\":[\"生成された SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [フィールド]\"],\"alplHn\":[\"AI でクエリ計画を分析中...\"],\"anBcU3\":[\"Tabularis を気に入っていただけたら、コードへの貢献、バグ報告、リポジトリへのスターなどでプロジェクトのサポートをご検討ください。\"],\"arHmj2\":[\"このクエリを履歴から削除してもよろしいですか?\"],\"arKcqW\":[\"古いサーバーでは、指標の少ない推定プランにフォールバックする場合があります。\"],\"arcpYe\":[\"承認が必要\"],\"aurEkh\":[\"プロセスを読み込み中…\"],\"avtdsd\":[\"SQL モード\"],\"az8lvo\":[\"オフ\"],\"b1Ah3z\":[\"フォーカス中\"],\"b392Dr\":[\"すべて展開\"],\"b5S_PU\":[\"データベース名\"],\"bAvovP\":[\"下に移動\"],\"bH3JqY\":[\"テーブルが見つかりません\"],\"bP5JOn\":[\"ワードラップ\"],\"bcOdok\":[\"グループを削除\"],\"bcqeas\":[\"MCP クエリをすべて読み取り専用にする\"],\"bmca5u\":[\"書き込みのみ\"],\"bpCiBU\":[\"MCP からの書き込みを許可\"],\"bqnhqW\":[\"推定が実行行数を超過\"],\"bqpcP7\":[\"データベースをダンプ\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"エラーで失敗\"],\"bw22Gk\":[\"カラムスキーマ\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"主な問題\"],\"cFCKYZ\":[\"拒否\"],\"cFGrCP\":[\"テーブル\"],\"cGeFup\":[\"フォントサイズ\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"テーブルにフォーカス\"],\"cM9NHc\":[\"ダウングレード:\"],\"cO9-2L\":[\"無効\"],\"cSev-j\":[\"フィルター\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行をインポート\"],\"other\":[\"#\",\" 行をインポート\"]}]],\"c_xoSn\":[\"セル \",[\"n\"],\" の名前を変更\"],\"cd0XEW\":[\"クエリを保存\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"グループを分割\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" ステートメント\"],\"d34vwG\":[\"データベースを読み込み\"],\"d6ynQ7\":[\"降順で並び替え\"],\"d8_6_v\":[\"キャンセル\"],\"d8wc1_\":[\"サンプル値\"],\"dBXoCS\":[\"環境変数が検出されていますが、上でキーを設定すれば上書きできます。\"],\"dD7NPy\":[\"アウトライン\"],\"dEgA5A\":[\"キャンセル\"],\"dMtLDE\":[\"終了\"],\"dPJVhW\":[\"インストール失敗\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のセッション\"],\"other\":[\"#\",\" 件のセッション\"]}]],\"dTUzKm\":[\"選択したものを実行 (\",[\"0\"],\")\"],\"dU_iQN\":[\"現在のフィルタに一致するセッションがありません。\"],\"dUh9QW\":[\"プランニング\"],\"dVoir2\":[\"Markdown セル \",[\"n\"],\" を追加\"],\"dZ0d2O\":[\"少なくとも 1 つのテーブルを選択してください\"],\"dhi13U\":[\"画像を選択…\"],\"dli1JX\":[\"変更を送信\"],\"dmYV6f\":[\"ルーチン\"],\"dohZCo\":[\"AI による SQL 生成の指示です。\",[\"SCHEMA\"],\" をデータベース構造のプレースホルダーとして使用します。\"],\"dtxpK2\":[\"分析\"],\"dwW9nJ\":[\"行番号を表示\"],\"dwWVw_\":[\"ウェルカム画面を表示\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"既存時の動作\"],\"dyN4j9\":[\"「プレビューを実行」をクリックすると結果が表示されます\"],\"e07Iz5\":[\"タスクマネージャを開く\"],\"e0NzXu\":[\"このプロジェクトは現在開発中 (WIP) です。主要機能は安定していますが、より大きな構想も進めています。\"],\"e1UKxf\":[\"このクエリを保存\"],\"e34gdU\":[\"MCP サブプロセスがリクエストをタイムアウトさせる前にユーザーの判断を待つ時間。\"],\"e62LQd\":[\"強制終了\"],\"e6QZsM\":[\"エディタテーマ\"],\"e8CirT\":[\"クエリを実行\"],\"eD2kUP\":[\"バッファ読み込み\"],\"eE0JZ4\":[\"バージョン\"],\"eIDch7\":[\"実行計画分析プロンプトを入力...\"],\"eIVolo\":[\"ディスク R/W\"],\"eJOEBy\":[\"エクスポート中...\"],\"eKHY3W\":[\"プラグイン設定\"],\"eMb6Ub\":[\"リソースを選択...\"],\"ePK91l\":[\"編集\"],\"eXweu6\":[\"セルを展開\"],\"ecNsTE\":[\"検索に一致するクエリがありません\"],\"ecUA8p\":[\"今日\"],\"ecpIZP\":[\"鍵が暗号化されている場合はパスフレーズを入力\"],\"esl-Tv\":[\"リソースタイプ\"],\"exyUec\":[\"接続\"],\"f2AJjl\":[\"行を削除\"],\"f4pD-j\":[\"接続テストに失敗しました\"],\"f7sXvi\":[\"パスワードを入力\"],\"fAsxc0\":[\"シーケンシャルスキャン\"],\"fIeFs0\":[\"値を選択...\"],\"fJm92A\":[\"EXPLAIN プランを含むファイル (Postgres JSON またはテキスト形式) を選択して可視化します。\"],\"fOuPPd\":[\"プラグイン\"],\"fXVIZq\":[\"値\"],\"f_b1TA\":[\"実行履歴\"],\"fghnqP\":[\"接続 1〜9 に切り替え\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"カンマ (,)\"],\"fp711N\":[\"ブロック (読み取り専用)\"],\"fpzyLj\":[[\"0\"],\" / \",[\"1\"],\" ページ\"],\"fuA6oy\":[\"ソケットタイムアウト\"],\"fvImQM\":[[\"0\"],\" 件選択中\"],\"fwr_nh\":[\"拡張機能のインストール、プラグインドライバの管理、実行時設定のコントロールを行います。\"],\"g0ZzK4\":[\"有効な JSON\"],\"g11hAR\":[\"新規行\"],\"g8VcMm\":[\"マイ K8s クラスター\"],\"gCFR_O\":[\"並列実行 (すべて実行)\"],\"gEjU98\":[\"接続を開く\"],\"gPQ8z1\":[\"NULL 許可\"],\"gShKPx\":[\"少なくとも 1 つのカラムが必要です\"],\"gSuQrG\":[\"「\",[\"search\"],\"」に一致する接続はありません\"],\"gUypqb\":[\"クエリを再実行\"],\"gZWMnn\":[\"AI 分析\"],\"ghYd73\":[\"対象を選択...\"],\"giAqEC\":[\"新規テーブルを作成\"],\"gnQS8X\":[\"MySQL コネクタが使用する最大パケットサイズです。\"],\"gqV5VL\":[\"組み込み、カスタマイズ不可\"],\"gww_XE\":[\"参照カラム\"],\"gxXPJ9\":[\"インタプリタを設定\"],\"gxutEv\":[\"トリガーを正常に更新しました\"],\"gz6UQ3\":[\"最大化\"],\"h-XNc9\":[\"CSV 区切り文字\"],\"h-kNAk\":[\"例: sales_data\"],\"h3Z_aK\":[\"ここに Markdown を記述...\"],\"h7MgpO\":[\"キーボードショートカット\"],\"h7peZQ\":[\"許可\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 個のシステムプロセスが実行中\"],\"other\":[\"#\",\" 個のシステムプロセスが実行中\"]}]],\"hEZrFh\":[\"SQL ファイルを実行...\"],\"hEipgW\":[\"今すぐアップデートを確認\"],\"hG89Ed\":[\"画像\"],\"hIHcBE\":[\"CSV としてエクスポート\"],\"hItdtk\":[\"フォルダを参照\"],\"hXFVjo\":[\"テーブル名は必須です\"],\"hZ6znB\":[\"ポート\"],\"h_huI6\":[\"再実行\"],\"hbz1rh\":[\"キー\"],\"hdsaJo\":[\"インポート中...\"],\"he3ygx\":[\"コピー\"],\"hfGimp\":[\"ネームスペースを選択...\"],\"hjjSEi\":[\"読み取り専用接続\"],\"hjwN_s\":[\"リソース名\"],\"hlF1mD\":[\"選択範囲をコピー\"],\"hnboBb\":[\"AI によるクエリ計画分析\"],\"hq4-D2\":[\"API キーはシステムのキーチェーンに安全に保管されます。ここでキーを設定すると環境変数より優先されます。\"],\"hqjXdn\":[\"SSH 接続の削除に失敗しました\"],\"hqofAK\":[\"SQL をコピー\"],\"hy6L14\":[\"GitHub で表示\"],\"hyjACX\":[\"セルを折りたたみ/展開\"],\"hz1b5W\":[\"一致する要素が見つかりません\"],\"i1vAVM\":[\"新規テーブルを作成\"],\"i3S5T3\":[\"お気に入りを検索...\"],\"i4_LY_\":[\"書き込み\"],\"i5HBWh\":[\"クエリ履歴をリセットしました\"],\"iAVlge\":[\"AI によるノートブックセル名生成の指示をカスタマイズします。セルの内容 (SQL または Markdown) がユーザーメッセージとして送信されます。\"],\"iE1yAB\":[\"テーブルをフィルター...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"接続\"],\"iSryJ2\":[\"My SSH Server\"],\"iT7UeX\":[\"インデックスを追加\"],\"iUWwuR\":[\"ダウンロードしてインストール\"],\"ia7i08\":[\"先にコンテキスト/ネームスペース/タイプを選択してください\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"保存しました\"],\"igcsfY\":[\"レジストリに利用可能なプラグインがありません。\"],\"ij-Elv\":[\"画像プレビュー\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"説明可能なクエリが \",\"#\",\" 件見つかりました\"],\"other\":[\"説明可能なクエリが \",\"#\",\" 件見つかりました\"]}]],\"ioL38P\":[\"プラグインプロセス、CPU、RAM、ディスク使用量をリアルタイムで監視します\"],\"ixlL_e\":[\"SSH 鍵ファイル (任意)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"モデルを選択\"],\"j3gyYH\":[\"すべて適用\"],\"j5CWO4\":[\"最新\"],\"j9HPuI\":[\"行 #\",[\"0\"]],\"jBtpMP\":[\"すべてのステータス\"],\"jEu4bB\":[\"カラム\"],\"jEyQIs\":[\"ルーチンが見つかりません\"],\"jHc1By\":[\"ビューを削除\"],\"jI6sj4\":[\"コスト、タイミング、行数推定は PostgreSQL や MySQL と比べて得られないことが多いです。\"],\"jIxQCZ\":[\"お使いのプラットフォームでは利用できません\"],\"jKIncn\":[\"データベース名は必須です\"],\"jPSk57\":[\"理由 (任意)\"],\"jUNY_d\":[\"ビュー\"],\"jVqjDo\":[\"不正なノートブックファイル形式です\"],\"jWSZ-A\":[\"プレビューのみ - 完全なデータは読み込まれていません\"],\"jgjIDU\":[\"既存のトリガーの削除に失敗しました: \"],\"jnhuWy\":[\"ソケットタイムアウト (ミリ秒)。\"],\"jpeU_Z\":[\"ノートブック\"],\"jpgB4Y\":[\"接続名は必須です\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"子プロセス\"],\"jx0t66\":[\"子プロセスを折りたたむ\"],\"jxShEf\":[\"ビューを作成\"],\"jz5PKx\":[\"ビュー定義\"],\"k-0mL-\":[\"カラムを追加\"],\"k-XiMX\":[\"Raw\"],\"k2UnVy\":[\"ハッシュ条件\"],\"k5UUX3\":[\"トリガーを正常に作成しました\"],\"kALwhk\":[\"秒\"],\"kBiBq7\":[\"インデックス「\",[\"name\"],\"」を削除しますか?\"],\"kEYasw\":[\"チャートを切り替え\"],\"kI1qVD\":[\"整形\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行 · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" 行 · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"イベントの詳細\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"レジストリ\"],\"kY-q3P\":[[\"label\"],\" は必須です\"],\"kexIdC\":[\"Kubernetes ポートフォワードを使用\"],\"kj2-CR\":[\"エラーの詳細\"],\"krksx_\":[\"成功\"],\"kwY6nh\":[\"閉じる\"],\"kx0s-n\":[\"結果\"],\"kxUEfE\":[\"ルーチン定義の取得に失敗しました: \"],\"l2Op2p\":[\"クエリパラメータ\"],\"l9Ivba\":[\"プラグインプロセスとシステムリソース\"],\"lBdPxu\":[\"アクセントカラー\"],\"lCF0wC\":[\"更新\"],\"lEQRwq\":[\"データ (INSERT)\"],\"lIvS11\":[\"トリガーを再作成\"],\"lKS0ce\":[\"新規テーブルを作成しました\"],\"lOekZ3\":[\"水平レイアウトに切り替え\"],\"lUA1C1\":[\"SSH 鍵のパスフレーズ (任意)\"],\"lVeG20\":[\"Rust 依存\"],\"lXAG6D\":[\"AI によるクエリ説明の指示です。\",[\"LANGUAGE\"],\" を出力言語のプレースホルダーとして使用します。\"],\"lbbYjy\":[\"生の設定ファイルを直接編集します。変更を反映するには再起動が必要です。\"],\"lhKW0m\":[\"SQL セル \",[\"n\"],\" を追加\"],\"lk-wOz\":[\"トリガーを絞り込み...\"],\"lk0x32\":[\"結果ページサイズ (上限)\"],\"lkz6PL\":[\"所要時間\"],\"lmVGeo\":[\"外部キーを追加\"],\"lnnx3E\":[\"Tabularis を Claude Desktop、Cursor などに接続\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"追加\"],\"m2Q_r8\":[\"Detect JSON in text columns\"],\"m2tskz\":[\"成功\"],\"mA-qpe\":[\"すべての実行が完了\"],\"mBhhbA\":[\"ログをクリップボードにエクスポートしました\"],\"mCNdzH\":[\"セルを実行\"],\"mO95sp\":[\"パネルを閉じる\"],\"mP7dLi\":[\"上にフォント名を入力してください\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件ブロック\"],\"other\":[\"#\",\" 件ブロック\"]}]],\"mS74ir\":[\"SSH 接続の保存に失敗しました\"],\"mSqtw8\":[\"プレビューを実行\"],\"mURmfQ\":[\"ビュー定義 (SQL)\"],\"mX_isJ\":[\"垂直\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"構造 (DDL)\"],\"mrk4Cf\":[[\"colName\"],\" を降順で並べ替え\"],\"msJ8t1\":[\"Tabularis ユーザー専用のコミュニティを立ち上げました。質問・情報交換・ロードマップへのフィードバックをお寄せください。\"],\"mtvVdV\":[\"処理行数\"],\"mx4evv\":[\"テーブルを作成\"],\"myXGZW\":[\"ガイド\"],\"mzI_c-\":[\"ダウンロード\"],\"n7JDTx\":[\"プラグインをインストールして有効化するとここに表示されます\"],\"nDDJir\":[\"セッション、クライアント、接続を検索…\"],\"nHP-Kr\":[\"アクティブなセッションがありません。接続を選択してください。\"],\"nKhCjW\":[\"テーブルを選択\"],\"nNmhuY\":[\"インデックスを作成\"],\"nNwvm4\":[\"エラー\"],\"nOVim5\":[\"接続の保存に失敗しました\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"拡張機能が必要: \",[\"0\"]],\"ngO6Pv\":[\"Tab に加えて Enter でもオートコンプリートの候補を確定できるようにします。オフの場合、Enter は常に改行を挿入します。\"],\"nhmF3p\":[\"接続\"],\"noM5A_\":[\"最初の接続を作成\"],\"nohy4m\":[\"MCP アクティビティはまだありません。\"],\"nr-axf\":[\"プラグインを削除\"],\"nsPFX9\":[\"Visual Explain で開く\"],\"nuBbBr\":[\"チャート\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"変更\"],\"o21Y-P\":[\"件\"],\"o3tP_A\":[\"インデックスを削除\"],\"o45L8r\":[\"接続名を入力\"],\"o53XGh\":[\"選択した行をコピー\"],\"o7J4JM\":[\"フィルター\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"レベル\"],\"oGiIL7\":[\"デフォルトプロバイダ\"],\"oJ4rAm\":[\"接続が失われました\"],\"oJlXF2\":[\"ノートブックをインポート\"],\"oMFv82\":[\"垂直分割\"],\"oOFiQg\":[\"パフォーマンス問題を避けるため、クエリごとに取得する行数を制限します。0 に設定すると無効化されます (非推奨)。\"],\"oT9ZD3\":[\"概要を非表示\"],\"oUzLtx\":[\"トリガーを編集するには、いったん削除して再作成する必要があります。「\",[\"name\"],\"」の変更を続行しますか?\"],\"oVRbyk\":[\"チャートを変更(セル \",[\"n\"],\")\"],\"oWfclW\":[\"Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.\"],\"obpbdz\":[\"設定ファイルが見つかりません (手動で作成してください)\"],\"odZgfC\":[\"AI クライアント\"],\"ogZhXn\":[\"ER 図のデフォルトのレイアウト方向を選択します\"],\"ohUJJM\":[\"プラグイン\"],\"ok3hJJ\":[\"インストール済み\"],\"olAdaI\":[\"実行行数\"],\"olWzar\":[\"プラグインプロセスを強制終了\"],\"ovBPCi\":[\"デフォルト\"],\"owzTWN\":[\"プロバイダから AI モデルを更新しました\"],\"oxYi6j\":[\"アプリケーション全体で使用される基本フォントサイズを調整します (10〜20px)。\"],\"p--hsQ\":[\"データベース接続が失われました\"],\"p6NueD\":[\"NEW\"],\"pOYHox\":[\"アクション\"],\"pR9bTR\":[\"BLOB データなし\"],\"pRDT0m\":[\"テーブル\"],\"pS8S5q\":[\"例: users, orders, products\"],\"pSws_M\":[\"テーブル名\"],\"pVLbKZ\":[\"ビューを正常に作成しました\"],\"pWT04I\":[\"確認中...\"],\"pZJ_6D\":[\"インデックス名は必須です\"],\"pddYFG\":[\"ノートブックセル名プロンプトを入力...\"],\"pnpyuD\":[\"ログを有効化\"],\"pqKMPv\":[\"テーブルの作成に失敗しました: \"],\"pqaP1h\":[\"閉じる\"],\"pqarBu\":[\"昇順\"],\"ptuq35\":[\"例: Comic Sans MS\"],\"pzu7v4\":[\"水平\"],\"q-ch8m\":[\"他のすべての接続は読み取り専用のままです。ここでチェックされた接続のみ書き込みを実行できます。\"],\"qIrtcK\":[\"アップデート\"],\"qOqy8G\":[\"設定を確認中...\"],\"qWaVNs\":[\"保存して再起動\"],\"qb3LPX\":[\"ER 図を表示\"],\"qkK0vq\":[\"ビュー名は必須です\"],\"qki9tG\":[\"エラー\"],\"qoIir-\":[\"OpenAI 互換 API のベース URL です。例: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"すべて折りたたむ\"],\"r6ncaO\":[\"タブを閉じる\"],\"rAJlpP\":[\"コンテナポート\"],\"rG3WVm\":[\"SELECT\"],\"rGRCeK\":[\"クエリ履歴を削除\"],\"rNIto7\":[\"リソース名は必須です\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"ノートブックを正常にエクスポートしました\"],\"rY4sEV\":[\"FK を削除\"],\"rbu0nO\":[\"SSH 接続を管理\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件の接続\"],\"other\":[\"#\",\" 件の接続\"]}]],\"rn2_2V\":[\"フィルターを削除\"],\"roABNH\":[\"クエリ履歴はありません\"],\"rtir7c\":[\"不明\"],\"ru0-2W\":[\"アクティブな接続はありません\"],\"rvDPWO\":[\"推定の乖離\"],\"rwWjWg\":[\"リリースノート\"],\"s6m9gy\":[\"トリガー「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"s7uMvM\":[\"接続テスト\"],\"sBOaim\":[\"設定ファイルを保存しました。変更を反映するために今すぐ再起動しますか?\"],\"sCyv9B\":[\"モデルを更新\"],\"sSUqe4\":[\"削除\"],\"sUBkgN\":[\"SQL を生成中...\"],\"sZZG3d\":[\"「\",[\"0\"],\"」をインポートしてもよろしいですか?\\n既存のデータが上書きされる可能性があります。\"],\"sbK5ck\":[\"履歴を検索...\"],\"sq_bS6\":[\"削除時\"],\"suW7-E\":[\"接続タイムアウト (ミリ秒)。\"],\"t-R8-P\":[\"実行\"],\"t1OfVY\":[[\"totalLibraries\"],\" 個のライブラリ\"],\"t2TMzs\":[\"タブを閉じる\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"テーブルを選択...\"],\"t7KRl1\":[\"すべての MCP ツール呼び出しの監査ログと、承認待ちのクエリ。ローカルに保存され、外部には送信されません。\"],\"t9NJIk\":[\"スキャンの多い操作を検出\"],\"tB7xof\":[\"一時またはソート操作\"],\"tBBXTO\":[\"Ping 間隔\"],\"tFrT3w\":[\"自動インストールが失敗する場合は、これをクライアントの設定ファイルに手動で追加してください。\"],\"tJ7UbA\":[\"フォーカス中のものを説明\"],\"tKlWWY\":[\"絵文字\"],\"tMFzq-\":[\"水平分割\"],\"tQhW-D\":[\"ログ設定\"],\"tXFGEx\":[\"保存された Kubernetes 接続がありません。「追加」をクリックして作成してください。\"],\"tXLz_8\":[\"削除\"],\"tXpRby\":[\"データグリッド\"],\"tbysEk\":[\"操作\"],\"tdta9X\":[[\"0\"],\" ページ\"],\"tfDRzk\":[\"保存\"],\"tfEioV\":[\"上から下へすべての SQL セルを実行\"],\"tiAIaJ\":[\"SSH パスワードが未入力です。再入力してください。\"],\"tk22BR\":[\"構造化データを貼り付け、インポート前にスキーマをプレビューします\"],\"tst44n\":[\"イベント\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL ファイルを正常に実行しました\"],\"u6QeR6\":[\"今すぐ再起動\"],\"uAQUqI\":[\"ステータス\"],\"uBAxNB\":[\"エディタ\"],\"uFViPK\":[\"利用可能な SSH 接続がありません\"],\"uHUuhp\":[\"このクエリを説明\"],\"uHfFzS\":[\"エディタのフォントサイズ\"],\"uJ_3K5\":[\"ノートブック「\",[\"0\"],\"」を削除しますか?この操作は元に戻せません。\"],\"uKaNJ3\":[\"Open in JSON Editor\"],\"uQBwTo\":[\"スキーマ\"],\"ub54ff\":[\"プラグインセンター\"],\"ufFyBs\":[\"データベースを正常にエクスポートしました\"],\"upNmR2\":[\"サイドバーエディタで開く\"],\"utMia3\":[\"すべて解除\"],\"uyNaJg\":[\"1件\"],\"v61dnS\":[\"OpenAI 互換プロバイダの正確なモデル名を入力してください。\"],\"v6oeyr\":[\"インストール済み\"],\"v75DGg\":[\"ファイルを参照\"],\"v99dO4\":[\"主キー\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のクエリが見つかりました\"],\"other\":[\"#\",\" 件のクエリが見つかりました\"]}]],\"vCSBPD\":[\"フィルターを追加\"],\"vH7uJj\":[\"並び替え…\"],\"vUOA1-\":[\"モデルを検索...\"],\"vWcB0p\":[\"PostgreSQL の ANALYZE では、利用可能な場合は実行行数、時間、ループ、バッファカウンタが含まれます。\"],\"vXIe7J\":[\"言語\"],\"vYf4Jm\":[\"完全な SQL 関数を入力してください (例: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"優先\"],\"vditm4\":[\"実行計画\"],\"vks_ls\":[\"他のタブを閉じる\"],\"vnAnIp\":[\"\",[\"1\"],\" ではモデル \",[\"0\"],\" が見つかりません。正しく動作しない可能性があります。\"],\"vqoN5u\":[\"構造\"],\"vrAvbP\":[\"グループ「\",[\"0\"],\"」を削除してもよろしいですか?このグループ内の接続は未分類に移動されます。\"],\"vtJ2yO\":[\"エクスプローラー\"],\"vujQJ5\":[\"ローカライズ\"],\"vvJPVL\":[\"概要を表示\"],\"vwI5S4\":[\"成功\"],\"vzH-7Z\":[\"Explain\"],\"w7QmD_\":[\"システムプロンプトを入力...\"],\"w9eMXw\":[\"トリガー\"],\"wCJFlW\":[\"経過時間\"],\"wCfv2R\":[\"接続を追加\"],\"wGfc86\":[\"すべての履歴を削除\"],\"wGwNv4\":[\"アクティブなデータベース\"],\"wJJ-Wy\":[\"インストール中...\"],\"wMe2Qp\":[\"ネームスペース\"],\"wQiel_\":[\"バッファヒット\"],\"wQn-RM\":[\"カラムを追加\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"適用済み\"],\"wTmVhm\":[\"削除\"],\"wZeIWq\":[\"クリップボードからインポート\"],\"w_bY7R\":[\"ログ\"],\"wc_8bA\":[\"承認待ち\"],\"wckWOP\":[\"管理\"],\"wdYcKH\":[\"開いているタブ\"],\"wja8aL\":[\"無題\"],\"wkOAzk\":[\"一致するノートブックがありません。\"],\"wp49Ao\":[\"挿入の処理に失敗しました: \"],\"wqG2hQ\":[\"スキップ (インポートしない)\"],\"wwrAsK\":[\"必須項目をすべて入力してください\"],\"wwu18a\":[\"アイコン\"],\"x2fr_j\":[\"グラフ\"],\"xANKBj\":[\"関数\"],\"xBwjck\":[\"変更を反映するには再起動が必要です。\"],\"xDAtGP\":[\"メッセージ\"],\"xECY01\":[\"プロシージャ\"],\"xGPNgZ\":[\"プロンプトのカスタマイズ\"],\"xNgtS-\":[\"ビューが見つかりません\"],\"xOPa1b\":[\"ポートは 1 から 65535 の範囲で指定してください\"],\"xY9s5E\":[\"タイムアウト\"],\"xaVUr1\":[\"いろはにほへと ちりぬるを わかよたれそ つねならむ\"],\"xbvTzL\":[\"ファイルパス\"],\"xlew5F\":[\"クリア\"],\"xmNyKz\":[\"テスト中...\"],\"xtuh6D\":[\"エクスプローラーを展開\"],\"y-Zdqj\":[\"コンテキストを選択...\"],\"y3HaQk\":[\"タイミング\"],\"yLFey_\":[\"トリガーを作成\"],\"yLianM\":[\"Open JSON viewer\"],\"yQXjG5\":[\"すべて解除\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"トリガーを編集\"],\"y_0uwd\":[\"昨日\"],\"ygCKqB\":[\"停止\"],\"ykCc6r\":[\"データベースを変更(セル \",[\"n\"],\")\"],\"ynVMSc\":[\"すべて選択\"],\"ytdz1d\":[\"AI がデータベース書き込みを要求しています\"],\"yyhzur\":[\"テーブル作成\"],\"yz7wBu\":[\"閉じる\"],\"z0VdfR\":[\"ルーチン\"],\"z407wX\":[\"SSH パスワード\"],\"z5kV0h\":[\"接続\"],\"zBTMzx\":[\"プレビュー\"],\"zCaAKs\":[\"アップデートエラー\"],\"zDAakK\":[\"接続 ID がないため、図を表示できません。\"],\"zGe21h\":[\"このキーは環境変数から読み込まれています\"],\"zGfL5t\":[\"値\"],\"zL6-4A\":[\"実行中のプラグインプロセスはありません\"],\"zLZhCi\":[\"Discord コミュニティが新登場!\"],\"zLlCou\":[\"カラム名をコピー\"],\"zNEL34\":[\"コミュニティに参加\"],\"zNgTlV\":[\"右側のタブを閉じる\"],\"zQz55p\":[\"構造を表示\"],\"zR0FfH\":[[\"target\"],\" にエクスポートしました\"],\"zRZeOc\":[\"テーブル、ビュー、ルーチン、トリガーを検索...\"],\"zUNMsr\":[\"SSH 鍵\"],\"zXMRzb\":[\"SSH ポート\"],\"zZgoXr\":[\"一致するテーブルがありません\"],\"zaWbms\":[\"変更をロールバック\"],\"zgClmU\":[\"設定をインストール\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"値を入力...\"],\"zvzN4C\":[\"アクティブに設定\"],\"zzDlyQ\":[\"成功\"],\"zzMxrp\":[\"config.json を編集\"],\"zz_Wd_\":[\"モード\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/ru/messages.po b/src/locales/ru/messages.po index 43088d39..5d2f45e1 100644 --- a/src/locales/ru/messages.po +++ b/src/locales/ru/messages.po @@ -6,39 +6,5291 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: @lingui/cli\n" "Language: ru\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" +#: src/components/modals/NewRowModal.tsx +msgid "(Auto-generated)" +msgstr "(Генерируется автоматически)" + +#. placeholder {0}: stats.blocked +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# blocked} other {# blocked}}" +msgstr "{0, plural, one {# заблокированное} few {# заблокированных} many {# заблокированных} other {# заблокированных}}" + +#. placeholder {0}: proc.children.length +#. placeholder {0}: stats.child_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# child process} other {# child processes}}" +msgstr "{0, plural, one {# дочерний процесс} few {# дочерних процесса} many {# дочерних процессов} other {# дочерних процессов}}" + +#. placeholder {0}: connections.length +#: src/pages/Connections.tsx +msgid "{0, plural, one {# connection} other {# connections}}" +msgstr "{0, plural, one {# подключение} few {# подключения} many {# подключений} other {# подключения}}" + +#. placeholder {0}: stats.errors +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# error} other {# errors}}" +msgstr "{0, plural, one {# ошибка} few {# ошибки} many {# ошибок} other {# ошибок}}" + +#. placeholder {0}: stats.total +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# event} other {# events}}" +msgstr "{0, plural, one {# событие} few {# события} many {# событий} other {# событий}}" + +#. placeholder {0}: queries.length +#: src/components/modals/ExplainSelectionModal.tsx +msgid "{0, plural, one {# explainable query found} other {# explainable queries found}}" +msgstr "{0, plural, one {# запрос} few {# запроса} many {# запросов} other {# запроса}}" + +#. placeholder {0}: parsed.warnings.length +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# parsing warning} other {# parsing warnings}}" +msgstr "{0, plural, one {# предупреждение при разборе} few {# предупреждения при разборе} many {# предупреждений при разборе} other {# предупреждения при разборе}}" + +#. placeholder {0}: queries.length +#: src/components/modals/QuerySelectionModal.tsx +msgid "{0, plural, one {# query found} other {# queries found}}" +msgstr "{0, plural, one {# запрос} few {# запроса} many {# запросов} other {# запроса}}" + +#. placeholder {0}: result.rows.length +#. placeholder {1}: executionTime != null ? Math.round(executionTime) : "—" +#. placeholder {2}: executionTime != null ? Math.round(executionTime) : "—" +#: src/components/notebook/ResultToolbar.tsx +msgid "{0, plural, one {# row · {1}ms} other {# rows · {2}ms}}" +msgstr "{0, plural, one {# строка · {1}мс} few {# строки · {2}мс} many {# строк · {2}мс} other {# строки · {2}мс}}" + +#. placeholder {0}: result.rows_inserted +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row imported into \"{tableName}\"} other {# rows imported into \"{tableName}\"}}" +msgstr "{0, plural, one {# строка импортирована в «{tableName}»} few {# строки импортированы в «{tableName}»} many {# строк импортировано в «{tableName}»} other {# строки импортированы в «{tableName}»}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row} other {# rows}}" +msgstr "{0, plural, one {# строка} few {# строки} many {# строк} other {# строки}}" + +#. placeholder {0}: visibleSessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "{0, plural, one {# session} other {# sessions}}" +msgstr "{0, plural, one {# сессия} few {# сессии} many {# сессий} other {# сессий}}" + +#. placeholder {0}: systemStats.process_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# system process running} other {# system processes running}}" +msgstr "{0, plural, one {# системный процесс} few {# системных процесса} many {# системных процессов} other {# системных процессов}}" + +#. placeholder {0}: tabs.length +#: src/components/modals/TabSwitcherModal.tsx +msgid "{0, plural, one {# tab} other {# tabs}}" +msgstr "{0, plural, one {# вкладка} few {# вкладки} many {# вкладок} other {# вкладки}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {Import # row} other {Import # rows}}" +msgstr "{0, plural, one {Импортировать # строку} few {Импортировать # строки} many {Импортировать # строк} other {Импортировать # строки}}" + +#. placeholder {0}: progress.statements_executed +#. placeholder {1}: progress.total_statements +#: src/components/modals/ImportDatabaseModal.tsx +msgid "{0} / {1} statements" +msgstr "{0} / {1} операторов" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "{0} API Key" +msgstr "API-ключ {0}" + +#. placeholder {0}: selectedDatabasesState.length +#: src/components/modals/NewConnectionModal.tsx +msgid "{0} database(s) selected" +msgstr "Выбрано баз данных: {0}" + +#. placeholder {0}: filteredItems.length +#: src/components/modals/QuickNavigatorModal.tsx +msgid "{0} elements" +msgstr "{0} элементов" + +#. placeholder {0}: approval.clientHint +#. placeholder {1}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "{0} on {1} — review and decide before it executes." +msgstr "{0} на {1} — проверьте запрос перед выполнением." + +#. placeholder {0}: activeTab.result.rows.length +#. placeholder {0}: entry.result!.rows.length +#. placeholder {0}: entry.result.rows.length +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "{0} rows retrieved" +msgstr "Строк: {0}" + +#. placeholder {0}: selected.size +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "{0} selected" +msgstr "Выбрано: {0}" + +#. placeholder {0}: structuredFilters.length +#: src/components/ui/TableToolbar.tsx +msgid "{activeFilterCount} of {0} active" +msgstr "Активно {activeFilterCount} из {0}" + +#: src/components/ui/DataGrid.tsx +msgid "{deleteRowCount, plural, one {Delete # row} other {Delete # rows}}" +msgstr "{deleteRowCount, plural, one {Удалить # строку} few {Удалить # строки} many {Удалить # строк} other {Удалить # строки}}" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "{label} is required" +msgstr "{label} обязательно" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "{rowCount, plural, one {# row} other {# rows}}" +msgstr "{rowCount, plural, one {# строка} few {# строки} many {# строк} other {# строки}}" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "{totalLibraries} libraries" +msgstr "{totalLibraries} библиотек" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/db.sqlite" +msgstr "/абсолютный/путь/к/db.sqlite" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/folder" +msgstr "/абсолютный/путь/к/папке" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "/path/to/id_rsa" +msgstr "/path/to/id_rsa" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "↑↓ to navigate, Enter to open" +msgstr "↑↓ для навигации, Enter для открытия" + +#. placeholder {0}: previewResult.rows.length - 5 +#: src/components/modals/ViewEditorModal.tsx +msgid "+{0} more rows" +msgstr "+{0} строк" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "1 element" +msgstr "1 элемент" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "A database connection was lost" +msgstr "Соединение с базой данных прервано" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "A new table will be created" +msgstr "Будет создана новая таблица" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "A restart is required to apply changes." +msgstr "Изменения вступят в силу после перезапуска." + +#: src/components/modals/CommunityModal.tsx +msgid "A star helps others discover the project" +msgstr "Звезда помогает другим найти проект" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Accent color" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgid "Accept Suggestion with Enter" +msgstr "Принимать подсказку по Enter" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Actions" +msgstr "" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Actions" +msgstr "Действия" + +#: src/pages/TaskManagerPage.tsx +msgctxt "taskManager" +msgid "Actions" +msgstr "Действия" + +#: src/components/connections/StatusBadge.tsx +msgid "Active" +msgstr "Активно" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/pages/Editor.tsx +msgid "Active database" +msgstr "Активная база данных" + +#: src/pages/TaskManagerPage.tsx +msgid "Active queries and connections through this plugin will be interrupted." +msgstr "Активные запросы и подключения через этот плагин будут прерваны." + +#: src/pages/McpPage.tsx +msgid "Activity" +msgstr "Активность" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual Rows" +msgstr "Реальных строк" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual rows exceed estimate" +msgstr "Реальных строк больше оценки" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Add" +msgstr "Добавить" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Add Column" +msgstr "Добавить столбец" + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Add Column" +msgstr "Добавить столбец" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Add Column" +msgstr "Добавить столбец" + +#: src/pages/Connections.tsx +msgid "Add Connection" +msgstr "Добавить подключение" + +#: src/components/ui/TableToolbar.tsx +msgid "Add filter" +msgstr "Добавить фильтр" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Foreign Key" +msgstr "Добавить внешний ключ" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Index" +msgstr "Добавить индекс" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add Markdown Cell" +msgstr "Добавить Markdown-ячейку" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add SQL Cell" +msgstr "Добавить SQL-ячейку" + +#: src/components/ui/TableToolbar.tsx +msgid "add the first filter" +msgstr "добавить первый фильтр" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Add this to your client config file manually if automatic install fails." +msgstr "Добавьте этот фрагмент в файл конфигурации клиента вручную, если автоматическая установка не сработала." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add to Favorites" +msgstr "Добавить в избранное" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added Markdown cell {n}" +msgstr "Добавлена Markdown-ячейка {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added SQL cell {n}" +msgstr "Добавлена SQL-ячейка {n}" + +#: src/components/settings/AppearanceTab.tsx +msgid "Adjust the base font size used throughout the application (10-20px)." +msgstr "Базовый размер шрифта во всём приложении (10–20 пикселей)." + +#: src/pages/Settings.tsx +msgid "AI" +msgstr "AI" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "AI" +msgstr "AI" + +#: src/components/settings/AiActivityPanel.tsx +#: src/pages/Settings.tsx +msgid "AI Activity" +msgstr "Активность AI" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "AI Analysis" +msgstr "AI-анализ" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "AI CLIENTS" +msgstr "AI-КЛИЕНТЫ" + +#: src/components/settings/AiTab.tsx +msgid "AI models refreshed from providers" +msgstr "Список моделей AI обновлён" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Provider not configured. Please go to Settings > AI." +msgstr "AI-провайдер не настроен. Перейдите в Настройки > AI." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Query Plan Analysis" +msgstr "AI-анализ плана запроса" + +#: src/components/modals/AiApprovalModal.tsx +msgid "AI requested a database write" +msgstr "AI запрашивает запись в базу данных" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "AI Suggest" +msgstr "Предложить (AI)" + +#: src/components/settings/PluginsTab.tsx +msgid "All" +msgstr "Все" + +#: src/components/settings/LogsTab.tsx +msgid "All levels" +msgstr "Все уровни" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All other connections stay read-only. Only the connections checked here may execute writes." +msgstr "Отметьте подключения, которым разрешена запись. Остальные — только для чтения." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All queries" +msgstr "Все запросы" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All statuses" +msgstr "Все статусы" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All tools" +msgstr "Все инструменты" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Allow" +msgstr "Разрешён" + +#: src/components/settings/AppearanceTab.tsx +msgid "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline." +msgstr "Разрешить Enter (в дополнение к Tab) для принятия активной подсказки автодополнения. При отключении Enter всегда вставляет новую строку." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Allow writes from MCP" +msgstr "Разрешить запись из MCP" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Already exists" +msgstr "Уже существует" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Alter View" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "An environment variable is present, but you can override it by setting a key above." +msgstr "Обнаружена переменная окружения, но её можно переопределить, указав ключ выше." + +#: src/components/modals/PluginInstallErrorModal.tsx +msgid "An error occurred while installing the plugin. See the details below." +msgstr "Ошибка при установке плагина. Подробности ниже." + +#: src/components/modals/VisualExplainModal.tsx +msgid "Analyze" +msgstr "Анализ" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Analyze Data" +msgstr "Данные ANALYZE" + +#: src/components/modals/VisualExplainModal.tsx +msgid "ANALYZE executes the query. Use with caution on data-modifying statements." +msgstr "ANALYZE выполняет запрос. Осторожно с операторами изменения данных." + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "Analyzing query plan with AI..." +msgstr "Анализ плана запроса с помощью AI..." + +#: src/components/settings/AiTab.tsx +msgid "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable." +msgstr "API-ключ хранится в системном хранилище ключей. Указанный здесь ключ имеет приоритет над переменной окружения." + +#: src/pages/Settings.tsx +msgid "Appearance" +msgstr "Внешний вид" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Appearance" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Appearance" +msgstr "Внешний вид" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Append rows" +msgstr "Добавить строки" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Append to existing" +msgstr "Добавить в существующую" + +#: src/components/ui/FilterRow.tsx +msgid "Applied" +msgstr "Применено" + +#: src/components/ui/FilterRow.tsx +msgid "Apply" +msgstr "Применить" + +#: src/components/ui/TableToolbar.tsx +msgid "Apply All" +msgstr "Применить все" + +#: src/pages/Editor.tsx +msgid "Apply to all" +msgstr "Применить ко всем" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval gate" +msgstr "Подтверждение операций" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Approval ID" +msgstr "ID подтверждения" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval required" +msgstr "Требовать подтверждение" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Approve" +msgstr "Подтвердить" + +#: src/components/settings/LogsTab.tsx +msgid "Are you sure you want to clear all logs?" +msgstr "Очистить все логи?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to clear all query history for this connection?" +msgstr "Очистить всю историю запросов для этого подключения?" + +#. placeholder {0}: column.name +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "" +"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +"\n" +"WARNING: This will permanently delete all data in this column. This action cannot be undone." +msgstr "" +"Удалить столбец \"{0}\" из таблицы \"{tableName}\"?\n" +"\n" +"ВНИМАНИЕ: Все данные в этом столбце будут безвозвратно удалены. Действие необратимо." + +#. placeholder {0}: group?.name +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete group \"{0}\"? Connections in this group will be moved to ungrouped." +msgstr "Удалить группу «{0}»? Подключения переместятся в раздел без группы." + +#. placeholder {0}: queries.find((q) => q.id === favoriteDeleteConfirm)?.name ?? "" +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete query \"{0}\"?" +msgstr "Удалить запрос \"{0}\"?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete table \"{0}\"?" +msgstr "Удалить таблицу \"{0}\"?" + +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete this connection?" +msgstr "Удалить это подключение?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete this query from history?" +msgstr "Удалить этот запрос из истории?" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Are you sure you want to delete this SSH connection?" +msgstr "Удалить это SSH-подключение?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop trigger \"{0}\"?" +msgstr "Удалить триггер \"{0}\"?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop view \"{0}\"?" +msgstr "Удалить представление \"{0}\"?" + +#. placeholder {0}: file.split(/[\\/]/).pop() +#: src/components/layout/ExplorerSidebar.tsx +msgid "" +"Are you sure you want to import \"{0}\"?\n" +"This may overwrite existing data." +msgstr "" +"Импортировать \"{0}\"?\n" +"Существующие данные могут быть перезаписаны." + +#: src/components/modals/ViewEditorModal.tsx +msgid "Are you sure you want to modify view \"{name}\"?" +msgstr "Изменить представление \"{name}\"?" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Are you sure you want to remove \"{pluginName}\"? This will delete the plugin files." +msgstr "Удалить «{pluginName}»? Файлы плагина будут удалены." + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Asc" +msgstr "По возр." + +#: src/components/modals/CreateTableModal.tsx +msgid "At least one column is required" +msgstr "Требуется хотя бы один столбец" + +#: src/components/modals/CreateIndexModal.tsx +msgid "At least one column must be selected" +msgstr "Выберите хотя бы один столбец" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere." +msgstr "Журнал всех вызовов MCP-инструментов и запросов, ожидающих подтверждения. Хранится локально — никуда не отправляется." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Authentication Type" +msgstr "Тип аутентификации" + +#: src/components/modals/NewRowModal.tsx +msgid "Auto" +msgstr "Авто" + +#: src/components/settings/LocalizationTab.tsx +msgid "Auto (System)" +msgstr "Авто (системный)" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Auto Increment" +msgstr "Автоинкремент" + +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Auto paginated" +msgstr "Автопостраничный вывод" + +#: src/components/settings/InfoTab.tsx +msgid "Automatically check for new versions when the app launches" +msgstr "Автоматически проверять новые версии при запуске приложения" + +#: src/components/settings/PluginsTab.tsx +msgid "Available Plugins" +msgstr "Доступные плагины" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below." +msgstr "Блокировать любые не-SELECT запросы через MCP, если подключение явно не разрешено ниже." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Blocked (read-only)" +msgstr "Заблокировано (только чтение)" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Brand-new Discord community!" +msgstr "Новое сообщество в Discord!" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Breaking Changes" +msgstr "Критические изменения" + +#: src/components/settings/PluginsTab.tsx +msgid "Browse and install plugins from the registry." +msgstr "Просмотр и установка плагинов из реестра." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse file" +msgstr "Выбрать файл" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse folder" +msgstr "Выбрать папку" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Browse the direct open source dependencies used across the app, backend, and tooling." +msgstr "Прямые зависимости приложения, бэкенда и инструментов с открытым исходным кодом." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Browse..." +msgstr "Обзор..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Hit" +msgstr "Попаданий в буфер" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Read" +msgstr "Чтений буфера" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Bug Fixes" +msgstr "Исправления ошибок" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Built-in, not customizable" +msgstr "Встроенное, не настраивается" + +#: src/components/settings/PluginsTab.tsx +msgid "by" +msgstr "от" + +#: src/components/modals/NewConnectionModal.tsx +msgid "CA Certificate" +msgstr "" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "cancel" +msgstr "отменить" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/ConfirmModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/JsonViewerPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Cancel" +msgstr "Отменить" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Cannot display diagram without a connection ID." +msgstr "Отображение диаграммы невозможно без ID подключения." + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "Cargo ecosystem" +msgstr "Экосистема Cargo" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Certificate paths are optional. Leave empty to use system defaults." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Change" +msgstr "Изменить" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed chart (cell {n})" +msgstr "Изменён график (ячейка {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed database (cell {n})" +msgstr "Изменена база данных (ячейка {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed parameters" +msgstr "Изменены параметры" + +#: src/components/notebook/CellChart.tsx +msgid "Chart" +msgstr "График" + +#: src/components/modals/CommunityModal.tsx +msgid "Chat with the community, get help, suggest features" +msgstr "Общайтесь с сообществом, получайте помощь, предлагайте функции" + +#: src/components/settings/InfoTab.tsx +msgid "Check for Updates Now" +msgstr "Проверить обновления сейчас" + +#: src/components/settings/InfoTab.tsx +msgid "Check for updates on startup" +msgstr "Проверять обновления при запуске" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Checking configuration..." +msgstr "Проверка конфигурации..." + +#: src/components/settings/InfoTab.tsx +msgid "Checking..." +msgstr "Проверка..." + +#: src/pages/TaskManagerPage.tsx +msgid "child process" +msgstr "дочерний процесс" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a connection..." +msgstr "Выберите подключение..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a context..." +msgstr "Выберите контекст..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a namespace..." +msgstr "Выберите пространство имён..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a resource..." +msgstr "Выберите ресурс..." + +#: src/components/settings/AppearanceTab.tsx +msgid "Choose an independent theme for the SQL editor, or keep it in sync with the app theme." +msgstr "Выберите отдельную тему для SQL-редактора или синхронизируйте её с темой приложения." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Choose image…" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Choose target..." +msgstr "Выберите цель..." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default delimiter character used when copying or exporting rows as CSV." +msgstr "Разделитель по умолчанию при копировании или экспорте строк в формате CSV." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default format when copying rows with Ctrl+C / Cmd+C." +msgstr "Формат по умолчанию при копировании строк через Ctrl+C / Cmd+C." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default layout direction for ER diagrams" +msgstr "Направление по умолчанию для ER-диаграмм" + +#: src/components/settings/LocalizationTab.tsx +msgid "Choose your preferred language. 'Auto' will use your system language." +msgstr "Выберите язык интерфейса. «Авто» использует язык системы." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Clear" +msgstr "Очистить" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "common" +msgid "Clear" +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Clear" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Clear All History" +msgstr "Очистить всю историю" + +#: src/components/settings/LogsTab.tsx +msgid "Clear Logs" +msgstr "Очистить логи" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Clear Query History" +msgstr "Очистить историю запросов" + +#: src/components/ui/DataGrid.tsx +msgid "Clear sort" +msgstr "Сбросить сортировку" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Click 'Run Preview' to see results" +msgstr "Нажмите «Запустить предпросмотр», чтобы увидеть результаты" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Click another emoji below to change." +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Click Load Databases to fetch available databases." +msgstr "" + +#: src/pages/Editor.tsx +msgid "Click to jump to page" +msgstr "Нажмите для перехода на страницу" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Client" +msgstr "Клиент" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Certificate" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Key" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Clipboard column" +msgstr "Столбец из буфера обмена" + +#: src/components/connections/ActionButtons.tsx +msgid "Clone" +msgstr "Клонировать" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/McpModal.tsx +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx #: src/components/modals/SchemaModal.tsx +#: src/components/modals/VisualExplainModal.tsx +#: src/pages/JsonViewerPage.tsx msgid "Close" +msgstr "Закрыть" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close All Tabs" +msgstr "Закрыть все вкладки" + +#: src/components/ui/TableToolbar.tsx +msgid "Close filter panel (ESC)" +msgstr "Закрыть панель фильтров (ESC)" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Other Tabs" +msgstr "Закрыть остальные вкладки" + +#: src/components/layout/SplitPaneLayout.tsx +msgid "Close panel" +msgstr "Закрыть панель" + +#: src/components/ui/StackedResultItem.tsx +#: src/i18n/registries/shortcutLabels.ts +msgid "Close tab" +msgstr "Закрыть вкладку" + +#: src/components/modals/TabSwitcherModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tab" +msgstr "Закрыть вкладку" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Left" +msgstr "Закрыть вкладки слева" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Right" +msgstr "Закрыть вкладки справа" + +#: src/components/ui/JsonInput.tsx +msgid "Code" +msgstr "Код" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Collapse" +msgstr "Свернуть" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Collapse all" +msgstr "Свернуть все" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Collapse All" +msgstr "Свернуть все" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Collapse Cell" +msgstr "Свернуть ячейку" + +#: src/pages/TaskManagerPage.tsx +msgid "Collapse child processes" +msgstr "Свернуть дочерние процессы" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Collapsed/expanded cells" +msgstr "Ячейки свёрнуты/развёрнуты" + +#: src/components/settings/LogsTab.tsx +msgid "Collect application logs in memory for debugging" +msgstr "Собирать логи приложения в памяти для отладки" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Column name is required" +msgstr "Имя столбца обязательно" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Column Schema" +msgstr "Схема столбцов" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "columns" +msgstr "столбцы" + +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +msgid "Columns" +msgstr "Столбцы" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Comma (,)" +msgstr "Запятая (,)" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Config file not found (create manually)" +msgstr "Файл конфигурации не найден (создайте вручную)" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "config.json" +msgstr "config.json" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Configuration installed successfully for {clientName}! Restart the app to apply." +msgstr "Настройки для {clientName} установлены. Перезапустите приложение." + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Configure destination" +msgstr "Настроить назначение" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Configure Interpreter" +msgstr "Настроить интерпретатор" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSH Inline" +msgstr "Настроить SSH вручную" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSL/TLS for secure database connections (optional)." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Configured" +msgstr "Настроено" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Confirm" +msgstr "Подтвердить" + +#: src/pages/Connections.tsx +msgid "Confirm Delete" +msgstr "Подтверждение удаления" + +#: src/components/connections/ActionButtons.tsx +msgid "Connect" +msgstr "Подключиться" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Connect Tabularis to Claude Desktop, Cursor, and more" +msgstr "Подключить Tabularis к Claude Desktop, Cursor и другим клиентам" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connect Timeout" +msgstr "Таймаут подключения" + +#: src/pages/Editor.tsx +msgid "Connected" +msgstr "Подключено" + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connection" +msgstr "подключение" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Connection" +msgstr "Подключение" + +#: src/components/settings/GeneralTab.tsx +msgid "Connection Health Check" +msgstr "Проверка состояния подключения" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "Connection Lost" +msgstr "Подключение потеряно" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection Name" +msgstr "Название подключения" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Connection name is required" +msgstr "Имя подключения обязательно" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Connection name is required" +msgstr "Название подключения обязательно" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Connection String" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Key" +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection test failed" +msgstr "Проверка подключения не удалась" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connection timeout in milliseconds." +msgstr "Таймаут подключения в миллисекундах." + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connections" +msgstr "подключений" + +#: src/components/layout/Sidebar.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/Connections.tsx +msgid "Connections" +msgstr "Подключения" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Container Port" +msgstr "Порт контейнера" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Context" +msgstr "Контекст" + +#: src/pages/Editor.tsx +msgid "Convert to Console" +msgstr "Преобразовать в консоль" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Copied to clipboard" +msgstr "Скопировано в буфер обмена" + +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copied!" +msgstr "Скопировано!" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copy" +msgstr "Копировать" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as `column`" +msgstr "Копировать как `column`" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as table.column" +msgstr "Копировать как table.column" + +#: src/components/ui/DataGrid.tsx +msgid "Copy Cell" +msgstr "Копировать ячейку" + +#: src/components/ui/DataGrid.tsx +msgid "Copy column name" +msgstr "Копировать имя столбца" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy error message" +msgstr "Скопировать сообщение об ошибке" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Copy name" +msgstr "Скопировать имя" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Copy Name" +msgstr "Копировать имя" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Copy query" +msgstr "Копировать запрос" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy Query" +msgstr "Копировать запрос" + +#: src/components/ui/DataGrid.tsx +msgid "Copy selected row(s)" +msgstr "Копировать выбранные строки" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Copy selection" +msgstr "Копировать выделение" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Copy SQL" +msgstr "Копировать SQL" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Cost" +msgstr "Стоимость" + +#: src/utils/explainPlan.ts +msgid "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL." +msgstr "Стоимость, время и оценки строк зачастую недоступны по сравнению с PostgreSQL и MySQL." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Count rows" +msgstr "Подсчитать строки" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Count Rows" +msgstr "Подсчитать строки" + +#: src/pages/TaskManagerPage.tsx +msgid "CPU" +msgstr "CPU" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create a new database trigger" +msgstr "Создать новый триггер базы данных" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Create a new database view" +msgstr "Создать новое представление базы данных" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk" +msgid "Create Foreign Key" +msgstr "Создать внешний ключ" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex" +msgid "Create Index" +msgstr "Создать индекс" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Create new column" +msgstr "Создать новый столбец" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Create New SSH Connection" +msgstr "Создать новое SSH-подключение" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Create new table" +msgstr "Создать новую таблицу" + +#: src/components/modals/CreateTableModal.tsx +msgid "Create New Table" +msgstr "Создать новую таблицу" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New Trigger" +msgstr "Создать новый триггер" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New View" +msgstr "Создать новое представление" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Create Table" +msgstr "Создать таблицу" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Create Table" +msgstr "Создать таблицу" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create Trigger" +msgstr "Создать триггер" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Create View" +msgstr "Создать представление" + +#: src/pages/Connections.tsx +msgid "Create your first connection" +msgstr "Создайте первое подключение" + +#: src/pages/Connections.tsx +msgid "Create your first connection to get started." +msgstr "Создайте первое подключение, чтобы начать работу." + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "CSV Delimiter" +msgstr "Разделитель CSV" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Ctrl+Tab" +msgstr "Ctrl+Tab" + +#: src/components/settings/LogsTab.tsx +msgid "Current Logs" +msgstr "Текущие логи" + +#: src/components/settings/InfoTab.tsx +msgid "Current Version" +msgstr "Текущая версия" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Custom" +msgstr "" + +#: src/components/settings/FontPicker.tsx +msgid "Custom Font" +msgstr "Пользовательский шрифт" + +#: src/components/settings/AiTab.tsx +msgid "Custom key deleted successfully" +msgstr "Пользовательский ключ удалён" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language." +msgstr "Настройте инструкции для AI-анализа планов EXPLAIN. Используйте {LANGUAGE} для языка вывода." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message." +msgstr "Настройте инструкции для AI-генерации названий ячеек ноутбука. Содержимое ячейки (SQL или Markdown) передаётся как сообщение пользователя." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message." +msgstr "Настройте инструкции для AI-генерации названий вкладок с результатами. SQL-запрос передаётся как сообщение пользователя." + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Data (INSERT)" +msgstr "Данные (INSERT)" + +#: src/components/settings/GeneralTab.tsx +msgid "Data Editor" +msgstr "Редактор данных" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Data Grid" +msgstr "Таблица данных" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "Data Preview" +msgstr "Предпросмотр данных" + +#: src/components/modals/QueryModal.tsx +msgid "Database" +msgstr "База данных" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Database exported successfully" +msgstr "База данных экспортирована" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name" +msgstr "Имя базы данных" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Name" +msgstr "Имя базы данных" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name is required" +msgstr "Название базы данных обязательно" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Type" +msgstr "Тип базы данных" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Databases" +msgstr "Базы данных" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "DDL" +msgstr "DDL" + +#: src/components/settings/LogsTab.tsx +msgid "Debug" +msgstr "Debug" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Default" +msgstr "" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Default" +msgstr "По умолчанию" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Default Copy Format" +msgstr "Формат копирования по умолчанию" + +#: src/components/settings/GeneralTab.tsx +msgid "Default Layout" +msgstr "Расположение по умолчанию" + +#: src/components/settings/AiTab.tsx +msgid "Default Model" +msgstr "Модель по умолчанию" + +#: src/components/settings/AiTab.tsx +msgid "Default Provider" +msgstr "Провайдер по умолчанию" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Default Value" +msgstr "Значение по умолчанию" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Delete" +msgstr "DELETE" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Delete" +msgstr "Удалить" + +#: src/components/modals/ConfirmModal.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Delete" +msgstr "Удалить" + +#: src/components/connections/ActionButtons.tsx +msgctxt "connections" +msgid "Delete" +msgstr "Удалить" + +#: src/pages/Connections.tsx +msgctxt "groups" +msgid "Delete" +msgstr "Удалить" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +msgctxt "sidebar" +msgid "Delete" +msgstr "Удалить" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Delete" +msgstr "Удалить" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Delete Cell" +msgstr "Удалить ячейку" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete column" +msgstr "Удалить столбец" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Delete Column" +msgstr "Удалить столбец" + +#: src/components/settings/AiTab.tsx +msgid "Delete custom key and revert to environment variable (if present)" +msgstr "Удалить пользовательский ключ и вернуться к переменной окружения (если задана)" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete FK" +msgstr "Удалить внешний ключ" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete foreign key \"{name}\"?" +msgstr "Удалить внешний ключ \"{name}\"?" + +#: src/pages/Connections.tsx +msgid "Delete Group" +msgstr "Удалить группу" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Index" +msgstr "Удалить индекс" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete index \"{name}\"?" +msgstr "Удалить индекс \"{name}\"?" + +#. placeholder {0}: pendingDelete?.title ?? "" +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Delete notebook \"{0}\"? This cannot be undone." +msgstr "Удалить блокнот «{0}»? Это действие нельзя отменить." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Query" +msgstr "Удалить запрос" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Delete Row" +msgstr "Удалить строку" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete selected" +msgstr "Удалить выбранные" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Table" +msgstr "Удалить таблицу" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Delete the entire AI activity history? This cannot be undone." +msgstr "Удалить всю историю активности AI? Это действие необратимо." + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Deleted cell {n}" +msgstr "Удалена ячейка {n}" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Denied" +msgstr "Отклонено" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Deny" +msgstr "Отклонить" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Desc" +msgstr "По убыв." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Deselect All" +msgstr "Снять выбор" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Deselect All" +msgstr "Снять выбор" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Deselect All" +msgstr "Снять выбор" + +#: src/components/ui/FilterRow.tsx +msgid "Deselect from Apply All" +msgstr "Убрать из «Применить все»" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Details" +msgstr "Подробности" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Detect JSON in text columns" +msgstr "Определять JSON в текстовых столбцах" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Diff" +msgstr "Сравнение" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Direct dependencies declared in package.json and src-tauri/Cargo.toml." +msgstr "Прямые зависимости из package.json и src-tauri/Cargo.toml." + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Directly edit the raw configuration file. A restart is required to apply changes." +msgstr "Прямое редактирование файла конфигурации. Изменения вступят в силу после перезапуска." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disable" +msgstr "Отключён" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disabled" +msgstr "" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Disconnect" +msgstr "Отключиться" + +#: src/pages/Editor.tsx +msgid "Disconnected" +msgstr "Отключено" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk R/W" +msgstr "Диск R/W" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Read/s" +msgstr "Чтение с диска/с" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Write/s" +msgstr "Запись на диск/с" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgctxt "discordCallout" +msgid "Dismiss" +msgstr "Закрыть" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgctxt "sidebar" +msgid "Dismiss" +msgstr "Закрыть" + +#: src/components/settings/AppearanceTab.tsx +msgid "Display line numbers in the editor gutter." +msgstr "Отображать номера строк на полях редактора." + +#: src/components/settings/GeneralTab.tsx +msgid "Display the welcome screen when the application starts." +msgstr "Показывать экран приветствия при запуске приложения." + +#: src/components/settings/PluginsTab.tsx +msgid "Downgrade to" +msgstr "Откатить до" + +#: src/components/ui/BlobInput.tsx +msgid "Download" +msgstr "Скачать" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Download & Install" +msgstr "Скачать и установить" + +#: src/components/ui/BlobInput.tsx +msgid "Download unavailable - only preview loaded" +msgstr "Загрузка недоступна — загружен только предпросмотр" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Downloading..." +msgstr "Скачивание..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgctxt "update" +msgid "Downloading..." +msgstr "Загрузка..." + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Driver Notes" +msgstr "Примечания драйвера" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop Trigger" +msgstr "Удалить триггер" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop View" +msgstr "Удалить представление" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Dump Database" +msgstr "Экспорт базы данных" + +#: src/components/ui/FilterRow.tsx +msgid "Duplicate filter" +msgstr "Дублировать фильтр" + +#: src/components/ui/DataGrid.tsx +msgid "Duplicate Row" +msgstr "Дублировать строку" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Duration" +msgstr "Длительность" + +#: src/components/modals/ViewEditorModal.tsx +msgid "e.g. active_users, order_summary" +msgstr "например, active_users, order_summary" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. before_insert_user" +msgstr "например, before_insert_user" + +#: src/components/modals/AiApprovalModal.tsx +msgid "e.g. Looks risky on prod, please confirm…" +msgstr "например: Выглядит рискованно на проде, нужно подтверждение…" + +#: src/components/modals/NewConnectionModal.tsx +msgid "e.g. mysql://user:pass@localhost:3306/db" +msgstr "" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "e.g. python3" +msgstr "например, python3" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "e.g. sales_data" +msgstr "например, sales_data" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. users" +msgstr "например, users" + +#: src/components/modals/CreateTableModal.tsx +msgid "e.g. users, orders, products" +msgstr "например, users, orders, products" + +#: src/components/settings/FontPicker.tsx +msgid "e.g., Comic Sans MS" +msgstr "например, Comic Sans MS" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Edit" +msgstr "Изменить" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Edit before approving" +msgstr "Изменить перед подтверждением" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Edit cell name" +msgstr "Изменить название ячейки" + +#: src/pages/Settings.tsx +msgid "Edit config.json" +msgstr "Изменить config.json" + +#: src/components/notebook/NotebookHistoryPanel.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Edit history" +msgstr "История изменений" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Edit Row" +msgstr "Изменить строку" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Edit Schemas" +msgstr "Изменить схемы" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Edit Trigger" +msgstr "Изменить триггер" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Edit View" +msgstr "Изменить представление" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited cell {n}" +msgstr "Изменена ячейка {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited notebook" +msgstr "Блокнот изменён" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing a trigger requires dropping and recreating it. Continue modifying \"{name}\"?" +msgstr "Редактирование триггера требует его удаления и повторного создания. Продолжить изменение \"{name}\"?" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing trigger: {name}" +msgstr "Редактирование триггера: {name}" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Editing view: {name}" +msgstr "Редактирование представления: {name}" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Editor" +msgstr "Редактор" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Family" +msgstr "Шрифт редактора" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Size" +msgstr "Размер шрифта редактора" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Theme" +msgstr "Тема редактора" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Elapsed time" +msgstr "Прошло времени" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Emoji" +msgstr "" + +#: src/utils/explainPlan.ts +msgid "Enable ANALYZE to inspect actual rows, timing, loops, and buffers." +msgstr "Включите ANALYZE для просмотра реальных строк, времени, итераций и буферов." + +#: src/components/settings/LogsTab.tsx +msgid "Enable Logging" +msgstr "Включить логирование" + +#: src/components/settings/PluginsTab.tsx +msgid "Enabled" +msgstr "Включено" + +#: src/components/settings/AiTab.tsx +msgid "Endpoint URL" +msgstr "URL эндпоинта" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Enter {0} Key" +msgstr "Введите ключ {0}" + +#: src/components/ui/GeometryInput.tsx +msgid "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))" +msgstr "Введите полную SQL-функцию (например, ST_GeomFromText('POINT(30 40)', 4326))" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain plan analysis prompt..." +msgstr "Введите промпт для анализа плана выполнения..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain prompt..." +msgstr "Введите промпт для объяснения..." + +#: src/components/settings/FontPicker.tsx +msgid "Enter font name above" +msgstr "Введите название шрифта выше" + +#: src/components/ui/JsonInput.tsx +msgid "Enter JSON..." +msgstr "Введите JSON..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter key passphrase if encrypted" +msgstr "Введите пароль, если ключ зашифрован" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter notebook cell name prompt..." +msgstr "Введите промпт для названия ячейки..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter password" +msgstr "Введите пароль" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter query tab name prompt..." +msgstr "Введите промпт для названия вкладки..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter SSH password" +msgstr "Введите SSH-пароль" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter system prompt..." +msgstr "Введите системный промпт..." + +#: src/components/settings/AiTab.tsx +msgid "Enter the exact model name for your OpenAI-compatible provider." +msgstr "Укажите точное название модели вашего OpenAI-совместимого провайдера." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter username" +msgstr "Введите имя пользователя" + +#: src/components/ui/FieldEditor.tsx +#: src/components/ui/RowEditorSidebar.tsx +msgid "Enter value..." +msgstr "Введите значение..." + +#: src/components/settings/GeneralTab.tsx +msgid "entries" +msgstr "записей" + +#: src/components/settings/AiTab.tsx +msgid "Environment" +msgstr "Окружение" + +#: src/components/settings/GeneralTab.tsx +msgid "ER Diagram" +msgstr "ER-диаграмма" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Error" +msgstr "Ошибка" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Error" +msgstr "Ошибка" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgctxt "common" +msgid "Error" +msgstr "Ошибка" + +#: src/components/settings/LogsTab.tsx +msgctxt "settings" +msgid "Error" +msgstr "Error" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgctxt "settings" +msgid "Error Details" +msgstr "Подробности ошибки" + +#: src/components/modals/QuickNavigatorModal.tsx +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor" +msgid "Esc to close" +msgstr "Esc для закрытия" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Est. Rows" +msgstr "Оценка строк" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate exceeds actual rows" +msgstr "Оценка превышает реальное количество строк" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate Gap" +msgstr "Разрыв оценки" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Event details" +msgstr "Подробности события" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Events" +msgstr "События" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity" +msgid "Events" +msgstr "События" + +#: src/components/modals/TriggerEditorModal.tsx +msgctxt "triggers" +msgid "Events" +msgstr "События" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Execute" +msgstr "Выполнить" + +#: src/components/ui/ResultEntryContent.tsx +#: src/pages/Editor.tsx +msgid "Execute a query to see results" +msgstr "Выполните запрос, чтобы увидеть результаты" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Execute all SQL cells top to bottom" +msgstr "Выполнить все SQL-ячейки сверху вниз" + +#: src/components/notebook/SqlCellResult.tsx +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Executing query..." +msgstr "Выполнение запроса..." + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Execution" +msgstr "Выполнение" + +#: src/components/notebook/CellHistoryPanel.tsx +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Execution History" +msgstr "История выполнения" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Exit Fullscreen" +msgstr "Выйти из полноэкранного режима" + +#: src/components/modals/AiApprovalModal.tsx +msgctxt "aiApproval" +msgid "Expand" +msgstr "Развернуть" + +#: src/components/ui/JsonInput.tsx +msgctxt "jsonInput" +msgid "Expand" +msgstr "Развернуть" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Expand all" +msgstr "Развернуть все" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Expand All" +msgstr "Развернуть все" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Expand Cell" +msgstr "Развернуть ячейку" + +#: src/components/layout/Sidebar.tsx +msgid "Expand Explorer" +msgstr "Развернуть проводник" + +#: src/components/ui/AiDropdownButton.tsx +msgid "Explain" +msgstr "Объяснить" + +#. placeholder {0}: approval.explainError +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN failed: {0}" +msgstr "EXPLAIN завершился с ошибкой: {0}" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain focused" +msgstr "объяснить активный" + +#: src/components/modals/VisualExplainModal.tsx +msgid "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained." +msgstr "EXPLAIN поддерживается только для DML-запросов (SELECT, INSERT, UPDATE, DELETE). DDL-запросы (CREATE, DROP, ALTER) не поддерживаются." + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain Nth" +msgstr "объяснить N-й" + +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +msgid "Explain Plan" +msgstr "План выполнения" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Explain Plan Analysis Prompt" +msgstr "Промпт для анализа плана выполнения" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Explain this query" +msgstr "Объяснить этот запрос" + +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN unavailable for this query." +msgstr "EXPLAIN недоступен для этого запроса." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Explorer" +msgstr "Проводник" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Export" +msgstr "Экспортировать" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as CSV" +msgstr "Экспортировать как CSV" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export as HTML" +msgstr "Экспортировать как HTML" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as JSON" +msgstr "Экспортировать как JSON" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Export as Notebook" +msgstr "Экспортировать как ноутбук" + +#: src/pages/Connections.tsx +msgctxt "connections" +msgid "Export Connections" +msgstr "Экспорт подключений" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export CSV" +msgstr "" + +#: src/components/notebook/NotebookView.tsx +msgid "Export failed" +msgstr "" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Export failed: " +msgstr "Ошибка экспорта: " + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export JSON" +msgstr "" + +#: src/components/settings/LogsTab.tsx +msgid "Export Logs" +msgstr "Экспортировать логи" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export Notebook" +msgstr "Экспортировать ноутбук" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Exported to {target}" +msgstr "Экспортировано в {target}" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Exporting..." +msgstr "Экспорт..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Extra" +msgstr "Дополнительно" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Fail with error" +msgstr "Завершить с ошибкой" + +#: src/components/notebook/RunAllSummary.tsx +msgid "failed" +msgstr "с ошибкой" + +#. placeholder {0}: conn.name +#: src/pages/Connections.tsx +msgid "Failed to connect to {0}. Please check your settings or ensuring the database is running." +msgstr "Не удалось подключиться к {0}. Проверьте настройки или убедитесь, что база данных запущена." + +#: src/pages/Connections.tsx +msgid "Failed to create group" +msgstr "Не удалось создать группу" + +#: src/pages/Editor.tsx +msgid "Failed to create new row: " +msgstr "Не удалось создать новую строку: " + +#: src/components/modals/CreateTableModal.tsx +msgid "Failed to create table: " +msgstr "Не удалось создать таблицу: " + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Failed to delete column: " +msgstr "Не удалось удалить столбец: " + +#: src/pages/Connections.tsx +msgid "Failed to delete group" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete index: " +msgstr "Не удалось удалить индекс: " + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to delete SSH connection" +msgstr "Не удалось удалить SSH-подключение" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete table: " +msgstr "Не удалось удалить таблицу: " + +#: src/pages/Connections.tsx +msgid "Failed to disconnect from database" +msgstr "Не удалось отключиться от базы данных" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to drop existing trigger: " +msgstr "Не удалось удалить существующий триггер: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop trigger: " +msgstr "Не удалось удалить триггер: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop view: " +msgstr "Не удалось удалить представление: " + +#: src/pages/Connections.tsx +msgid "Failed to duplicate connection" +msgstr "Не удалось дублировать подключение" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get routine definition: " +msgstr "Не удалось получить определение подпрограммы: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get trigger definition: " +msgstr "Не удалось получить определение триггера: " + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to insert row: " +msgstr "Не удалось добавить строку: " + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to load databases. Check your credentials." +msgstr "Не удалось загрузить базы данных. Проверьте учётные данные." + +#: src/components/settings/PluginsTab.tsx +msgid "Failed to load registry" +msgstr "Не удалось загрузить реестр" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to load schema: " +msgstr "Не удалось загрузить схему: " + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to load schemas" +msgstr "Не удалось загрузить схемы" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to load trigger definition: " +msgstr "Не удалось загрузить определение триггера: " + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to load view definition: " +msgstr "Не удалось загрузить определение представления: " + +#: src/pages/Connections.tsx +msgid "Failed to move connection" +msgstr "" + +#: src/pages/Editor.tsx +msgid "Failed to process insertions: " +msgstr "Не удалось обработать вставки: " + +#: src/components/settings/AiTab.tsx +msgid "Failed to refresh models" +msgstr "Не удалось обновить модели" + +#: src/pages/Connections.tsx +msgid "Failed to rename group" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to save connection" +msgstr "Не удалось сохранить подключение" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to save SSH connection" +msgstr "Не удалось сохранить SSH-подключение" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to save trigger: " +msgstr "Не удалось сохранить триггер: " + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to save view: " +msgstr "Не удалось сохранить представление: " + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Failed: " +msgstr "Ошибка: " + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Favorites" +msgstr "Избранное" + +#: src/components/modals/NewConnectionModal.tsx +msgid "File Path" +msgstr "Путь к файлу" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Filter" +msgstr "Фильтр" + +#: src/components/settings/LogsTab.tsx +msgid "Filter by level" +msgstr "Фильтр по уровню" + +#: src/components/ui/TableToolbar.tsx +msgid "Filter conditions" +msgstr "Условия фильтрации" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Filter databases..." +msgstr "Фильтр баз данных..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter tables..." +msgstr "Фильтр таблиц..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter triggers..." +msgstr "Фильтр триггеров..." + +#: src/components/ui/TableToolbar.tsx +msgid "Filters" +msgstr "Фильтры" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +msgid "First row as header" +msgstr "Первая строка как заголовок" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "FK Name (Optional)" +msgstr "Имя внешнего ключа (необязательно)" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focus on Table" +msgstr "Фокус на таблице" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focused on" +msgstr "Фокус на" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Folder Path" +msgstr "Путь к папке" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Family" +msgstr "Шрифт" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Size" +msgstr "Размер шрифта" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill" +msgstr "Завершить принудительно" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill Plugin Process" +msgstr "Принудительно завершить процесс плагина" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "foreign keys" +msgstr "внешние ключи" + +#: src/components/ui/JsonInput.tsx +msgid "Format" +msgstr "Форматировать" + +#: src/components/ui/FilterRow.tsx +msgid "from" +msgstr "от" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dependencies" +msgstr "Зависимости фронтенда" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dev Dependencies" +msgstr "Dev-зависимости фронтенда" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Fullscreen" +msgstr "На весь экран" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Functions" +msgstr "Функции" + +#: src/pages/Settings.tsx +msgid "General" +msgstr "Общие" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgctxt "editor" +msgid "General" +msgstr "Общее" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "General" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "General" +msgstr "Общие" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generate name with AI" +msgstr "Сгенерировать название с помощью AI" + +#: src/components/notebook/NotebookOutline.tsx +msgid "Generate names for unnamed cells with AI" +msgstr "Сгенерировать названия для безымянных ячеек с помощью AI" + +#: src/components/ui/AiDropdownButton.tsx +msgctxt "ai" +msgid "Generate SQL" +msgstr "Сгенерировать SQL" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Generate SQL" +msgstr "Сгенерировать SQL" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Generate SQL templates" +msgstr "Сгенерировать SQL-шаблоны" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Generated SQL Preview" +msgstr "Предпросмотр сгенерированного SQL" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generated SQL: {tableName}" +msgstr "Сгенерированный SQL: {tableName}" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generating name..." +msgstr "Генерация названия..." + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generating SQL..." +msgstr "Генерация SQL..." + +#: src/components/modals/WhatsNewModal.tsx +msgid "Got it" +msgstr "Понятно" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Graph" +msgstr "Граф" + +#: src/pages/Connections.tsx +msgid "Grid view" +msgstr "Сетка" + +#: src/pages/Connections.tsx +msgid "Group name" +msgstr "Название группы" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Guided" +msgstr "Пошаговый" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Hash Cond." +msgstr "Условие хеша" + +#: src/components/modals/CommunityModal.tsx +msgid "Help tabularis grow" +msgstr "Помогите Tabularis развиваться" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Hide overview" +msgstr "Скрыть обзор" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Highest Cost" +msgstr "Наибольшая стоимость" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "History" +msgstr "История" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Horizontal" +msgstr "Горизонтально" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Host" +msgstr "Хост" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "How long the MCP subprocess will wait for the user's decision before failing the request." +msgstr "Сколько времени MCP-процесс ожидает решения пользователя перед отменой запроса." + +#: src/components/settings/LogsTab.tsx +msgid "How many logs to keep in memory (1-10000)" +msgstr "Количество логов, хранимых в памяти (1–10000)" + +#: src/components/settings/GeneralTab.tsx +msgid "How often to check if active connections are still alive. Set to 0 to disable." +msgstr "Как часто проверять активные подключения. Установите 0 для отключения." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Icon" +msgstr "" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "If exists" +msgstr "При совпадении" + +#: src/utils/explainPlan.ts +msgid "If timing is missing, the server likely returned an estimate-only plan." +msgstr "Если время отсутствует, сервер вернул только оценочный план." + +#: src/components/settings/InfoTab.tsx +msgid "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo." +msgstr "Если Tabularis вам полезен и вы хотите видеть больше возможностей — поддержите проект: вносите вклад в код, сообщайте об ошибках или поставьте звезду репозиторию." + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Image" +msgstr "" + +#: src/components/ui/BlobInput.tsx +msgid "Image preview" +msgstr "Предпросмотр изображения" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import cancelled" +msgstr "Импорт отменён" + +#: src/pages/Connections.tsx +msgid "Import Connections" +msgstr "Импортировать подключения" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import Database" +msgstr "Импорт базы данных" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed" +msgstr "Импорт не удался" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed: " +msgstr "Ошибка импорта: " + +#: src/i18n/registries/shortcutLabels.ts +msgid "Import from Clipboard" +msgstr "Импортировать из буфера обмена" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Import from Clipboard" +msgstr "Импорт из буфера обмена" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Import from Clipboard..." +msgstr "Импортировать из буфера обмена..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Import Notebook" +msgstr "Импортировать ноутбук" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Importing from" +msgstr "Импорт из" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Importing..." +msgstr "Импорт..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Index Cond." +msgstr "Условие индекса" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index Name" +msgstr "Название индекса" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index name is required" +msgstr "Название индекса обязательно" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "indexes" +msgstr "индексы" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Info" +msgstr "Информация" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Initial version" +msgstr "Начальная версия" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Inline" +msgstr "Встроенно" + +#: src/components/modals/NewRowModal.tsx +msgid "Insert" +msgstr "Вставить" + +#: src/components/ui/DataGrid.tsx +msgid "Insert Current Timestamp" +msgstr "Вставить текущую метку времени" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Insert to Editor" +msgstr "Вставить в редактор" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Inspect structure" +msgstr "Показать структуру" + +#: src/components/settings/PluginsTab.tsx +msgid "Install" +msgstr "Установить" + +#: src/pages/TaskManagerPage.tsx +msgid "Install and enable plugins to see them here" +msgstr "Установите и включите плагины, чтобы увидеть их здесь" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Install Config" +msgstr "Установить конфигурацию" + +#: src/components/settings/PluginsTab.tsx +msgid "Install extensions, manage plugin drivers, and keep runtime settings under control." +msgstr "Устанавливайте расширения, управляйте драйверами плагинов и настройками среды выполнения." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installation Failed" +msgstr "Ошибка установки" + +#: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings" +msgid "Installation Failed" +msgstr "Ошибка установки" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installed" +msgstr "Установлено" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Installed" +msgstr "Установлено" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Installing..." +msgstr "Установка..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language." +msgstr "Инструкции для AI-объяснения запросов. Используйте {LANGUAGE} как заполнитель языка вывода." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure." +msgstr "Инструкции для AI-генерации SQL. Используйте {SCHEMA} как заполнитель структуры базы данных." + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Interpreter" +msgstr "Интерпретатор" + +#: src/components/ui/JsonInput.tsx +msgid "Invalid JSON" +msgstr "Некорректный JSON" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Invalid notebook file format" +msgstr "Недопустимый формат файла ноутбука" + +#: src/components/notebook/ParamsPanel.tsx +msgid "Invalid parameter name" +msgstr "Недопустимое имя параметра" + +#: src/components/modals/CommunityModal.tsx +msgid "Join Discord" +msgstr "Присоединиться к Discord" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Join now" +msgstr "Вступить сейчас" + +#: src/components/modals/CommunityModal.tsx +msgid "Join the Community" +msgstr "Присоединяйтесь к сообществу" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Join Type" +msgstr "Тип соединения" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "Ключ" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Key file" +msgstr "Файл ключа" + +#: src/components/settings/ShortcutsTab.tsx +#: src/pages/Settings.tsx +msgid "Keyboard Shortcuts" +msgstr "Горячие клавиши" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "keys" +msgstr "ключи" + +#: src/pages/TaskManagerPage.tsx +msgid "Kill" +msgstr "Завершить" + +#: src/pages/TaskManagerPage.tsx +msgid "Killing" +msgstr "Завершение" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Kind" +msgstr "Тип" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Kubernetes Connections" +msgstr "Подключения Kubernetes" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Kubernetes context is required" +msgstr "Контекст Kubernetes обязателен" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Kubernetes is not available for this driver." +msgstr "Kubernetes недоступен для этого драйвера." + +#: src/components/notebook/CellChart.tsx +msgid "Label" +msgstr "Метка" + +#: src/components/settings/LocalizationTab.tsx +msgid "Language" +msgstr "Язык" + +#: src/utils/explainPlan.ts +msgid "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well." +msgstr "Большие расхождения в оценках обычно указывают на устаревшую статистику или предикаты, которые планировщик не может смоделировать точно." + +#: src/components/modals/CreateTableModal.tsx +msgid "Len" +msgstr "Длина" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Length" +msgstr "Длина" + +#: src/components/settings/LogsTab.tsx +msgid "Level" +msgstr "Уровень" + +#: src/components/settings/GeneralTab.tsx +msgid "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended)." +msgstr "Ограничивает количество строк, получаемых за один запрос, во избежание проблем с производительностью. Установите 0, чтобы отключить (не рекомендуется)." + +#: src/components/settings/AppearanceTab.tsx +msgid "Line Height" +msgstr "Межстрочный интервал" + +#: src/pages/Connections.tsx +msgid "List view" +msgstr "Список" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Load Databases" +msgstr "Загрузить базы данных" + +#: src/pages/Editor.tsx +msgid "Load row count" +msgstr "Загрузить количество строк" + +#: src/pages/VisualExplainPage.tsx +msgid "Loading explain plan…" +msgstr "Загрузка плана выполнения…" + +#: src/components/settings/PluginsTab.tsx +msgid "Loading plugin registry..." +msgstr "Загрузка реестра плагинов..." + +#: src/pages/TaskManagerPage.tsx +msgid "Loading processes…" +msgstr "Загрузка процессов…" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarRoutineItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "Загрузка схемы..." + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Loading trigger definition..." +msgstr "Загрузка определения триггера..." + +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Loading..." +msgstr "Загрузка..." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Local Column" +msgstr "Локальный столбец" + +#: src/components/settings/LocalizationTab.tsx +#: src/pages/Settings.tsx +msgid "Localization" +msgstr "Локализация" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Lock query" +msgstr "Заблокировать запрос" + +#: src/components/settings/LogsTab.tsx +msgid "Log Settings" +msgstr "Настройки логирования" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Logs" +msgstr "Логи" + +#: src/components/settings/LogsTab.tsx +msgid "Logs exported to clipboard" +msgstr "Логи скопированы в буфер обмена" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Loops" +msgstr "Итерации" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Make all MCP queries read-only" +msgstr "Все MCP-запросы только для чтения" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage" +msgstr "Управление" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Manage Databases" +msgstr "Управление базами данных" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage SSH Connections" +msgstr "Управление SSH-подключениями" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL COMMAND" +msgstr "РУЧНАЯ КОМАНДА" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL CONFIGURATION" +msgstr "РУЧНАЯ НАСТРОЙКА" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Markdown" +msgstr "Markdown" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Max Allowed Packet" +msgstr "Максимальный размер пакета" + +#: src/components/settings/GeneralTab.tsx +msgid "Max History Entries" +msgstr "Максимум записей в истории" + +#: src/components/settings/LogsTab.tsx +msgid "Max Log Entries" +msgstr "Максимум записей в логе" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Maximize" +msgstr "Развернуть" + +#: src/components/settings/GeneralTab.tsx +msgid "Maximum number of query history entries stored per connection." +msgstr "Максимальное количество записей истории запросов для одного подключения." + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Maximum packet size used by the MySQL connector." +msgstr "Максимальный размер пакета для MySQL-коннектора." + +#: src/components/modals/CommunityModal.tsx +msgid "Maybe later" +msgstr "Может быть позже" + +#: src/components/layout/Sidebar.tsx +msgid "MCP Server" +msgstr "MCP-сервер" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MCP Server Integration" +msgstr "Интеграция MCP-сервера" + +#: src/components/settings/LogsTab.tsx +msgid "Message" +msgstr "Сообщение" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Minimize" +msgstr "Свернуть" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Mixed types detected, defaulted to TEXT" +msgstr "Обнаружены смешанные типы, использован TEXT" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Mode" +msgstr "Режим" + +#. placeholder {0}: settings.aiModel +#. placeholder {1}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Model <0>{0} not found in <1>{1}. It may not work correctly." +msgstr "Модель {0} не найдена у провайдера {1}. Она может работать некорректно." + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Modify Column" +msgstr "Изменить столбец" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgctxt "sidebar" +msgid "Modify Column" +msgstr "Изменить столбец" + +#: src/components/settings/InfoTab.tsx +msgid "Monitor plugin processes, CPU, RAM and disk usage in real time" +msgstr "Мониторинг процессов плагинов, CPU, RAM и диска в реальном времени" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Down" +msgstr "Переместить вниз" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Up" +msgstr "Переместить вверх" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "My K8s cluster" +msgstr "Мой кластер K8s" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "My SSH Server" +msgstr "Мой SSH-сервер" + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants." +msgstr "MySQL и MariaDB предоставляют реальные метрики только в поддерживаемых вариантах EXPLAIN ANALYZE или ANALYZE FORMAT." + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version." +msgstr "MySQL и MariaDB могут возвращать EXPLAIN FORMAT=JSON или табличный EXPLAIN в зависимости от версии сервера." + +#: src/components/notebook/ParamsPanel.tsx +msgid "name" +msgstr "имя" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/SchemaModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Name" +msgstr "Имя" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Name is required" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Namespace" +msgstr "Пространство имён" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Namespace is required" +msgstr "Пространство имён обязательно" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Navigation" +msgstr "Навигация" + +#: src/components/ui/DataGrid.tsx +msgid "NEW" +msgstr "НОВАЯ" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New connection" +msgstr "Новое подключение" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "New console" +msgstr "Новая консоль" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/pages/Editor.tsx +msgid "New Console" +msgstr "Новая консоль" + +#: src/components/modals/WhatsNewModal.tsx +msgid "New Features" +msgstr "Новые функции" + +#: src/pages/Connections.tsx +msgid "New Group" +msgstr "Новая группа" + +#: src/pages/Editor.tsx +msgid "New Notebook" +msgstr "Новый ноутбук" + +#: src/components/modals/NewRowModal.tsx +#: src/pages/Editor.tsx +msgid "New Row" +msgstr "Новая строка" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New tab" +msgstr "Новая вкладка" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "New table created" +msgstr "Новая таблица создана" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "New Version Available" +msgstr "Доступна новая версия" + +#: src/pages/Editor.tsx +msgid "New Visual Query" +msgstr "Новый визуальный запрос" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Next page" +msgstr "Следующая страница" + +#: src/components/modals/CreateTableModal.tsx +msgid "NN" +msgstr "NN" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "Нет" + +#: src/pages/Connections.tsx +msgid "No active connections" +msgstr "Нет активных подключений" + +#: src/components/ui/TableToolbar.tsx +msgid "no active filters" +msgstr "нет активных фильтров" + +#: src/pages/Editor.tsx +msgid "No active session. Please select a connection." +msgstr "Нет активной сессии. Выберите подключение." + +#: src/components/ui/BlobInput.tsx +msgid "No BLOB data" +msgstr "Нет данных BLOB" + +#: src/pages/TaskManagerPage.tsx +msgid "No child processes" +msgstr "Нет дочерних процессов" + +#: src/pages/SchemaDiagramPage.tsx +msgid "No Connection ID" +msgstr "Нет ID подключения" + +#: src/pages/Connections.tsx +msgid "No connections match \"{search}\"" +msgstr "Подключения по запросу \"{search}\" не найдены" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No contexts found (is kubectl installed?)" +msgstr "Контексты не найдены (установлен ли kubectl?)" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "No data found in clipboard" +msgstr "В буфере обмена нет данных" + +#: src/components/ui/DataGrid.tsx +msgid "No data to display" +msgstr "Нет данных для отображения" + +#: src/components/modals/QueryModal.tsx +msgid "No database" +msgstr "Нет базы данных" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No databases found" +msgstr "Базы данных не найдены" + +#: src/components/notebook/CellHistoryPanel.tsx +msgid "No execution history yet" +msgstr "История выполнения пуста" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No favorites match your search" +msgstr "Ничего не найдено в избранном" + +#: src/pages/VisualExplainPage.tsx +msgid "No file loaded" +msgstr "Файл не загружен" + +#: src/components/ui/TableToolbar.tsx +msgid "No filters —" +msgstr "Нет фильтров —" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No general settings available for this driver." +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No icons match." +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "No Kubernetes connections saved. Click \"Add\" to create one." +msgstr "Нет сохранённых подключений Kubernetes. Нажмите «Добавить», чтобы создать." + +#: src/components/settings/LogsTab.tsx +msgid "No logs available" +msgstr "Логи отсутствуют" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "No major issues detected in the current plan summary." +msgstr "Серьёзных проблем в текущем плане не обнаружено." + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "No matching elements found" +msgstr "Совпадающие элементы не найдены" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No MCP activity yet." +msgstr "Нет активности MCP." + +#: src/components/settings/AiTab.tsx +msgid "No models found" +msgstr "Модели не найдены" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No notebooks match your search." +msgstr "Нет блокнотов, соответствующих запросу." + +#: src/pages/Editor.tsx +msgid "No open tabs for this connection." +msgstr "Нет открытых вкладок для этого подключения." + +#: src/components/modals/NewRowModal.tsx +msgid "No options found" +msgstr "Варианты не найдены" + +#: src/pages/TaskManagerPage.tsx +msgid "No plugin processes are running" +msgstr "Нет запущенных процессов плагинов" + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins available in the registry." +msgstr "В реестре нет доступных плагинов." + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins match your search." +msgstr "Плагины не найдены." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No preview" +msgstr "" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No queries match your search" +msgstr "Запросы не найдены" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No query history" +msgstr "История запросов пуста" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "No results found" +msgstr "Ничего не найдено" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No routines found" +msgstr "Подпрограммы не найдены" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No saved connections — create one below" +msgstr "Нет сохранённых подключений — создайте ниже" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No saved notebooks yet." +msgstr "Сохранённых блокнотов пока нет." + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No saved queries" +msgstr "Нет сохранённых запросов" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No sessions match the current filters." +msgstr "Сессии не соответствуют текущим фильтрам." + +#: src/components/modals/NewConnectionModal.tsx +msgid "No SSH connections available" +msgstr "Нет доступных SSH-подключений" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "No SSH connections configured yet" +msgstr "SSH-подключения не настроены" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables found" +msgstr "Таблицы не найдены" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables match" +msgstr "Таблицы не найдены" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers found" +msgstr "Триггеры не найдены" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers match your filter" +msgstr "Ни один триггер не соответствует фильтру" + +#: src/pages/Editor.tsx +msgid "No valid queries found" +msgstr "Допустимые запросы не найдены" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No views found" +msgstr "Представления не найдены" + +#: src/components/settings/PluginsTab.tsx +msgid "Not available for your platform" +msgstr "Недоступно для вашей платформы" + +#: src/components/settings/AiTab.tsx +msgid "Not configured" +msgstr "Не настроено" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Not Null" +msgstr "Не null" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Notebook Cell Name Prompt" +msgstr "Промпт для названия ячейки ноутбука" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook exported successfully" +msgstr "Ноутбук экспортирован" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook imported successfully" +msgstr "Ноутбук импортирован" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Notebook name" +msgstr "Имя блокнота" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Notebooks" +msgstr "Блокноты" + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "npm ecosystem" +msgstr "экосистема npm" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "Nullable" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Objects" +msgstr "Объекты" + +#. placeholder {0}: sessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "of {0}" +msgstr "из {0}" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Off" +msgstr "Выключено" + +#: src/components/modals/AlertModal.tsx +#: src/components/modals/ConfirmModal.tsx +msgid "OK" +msgstr "ОК" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Older" +msgstr "Ранее" + +#: src/utils/explainPlan.ts +msgid "Older servers may fall back to estimated plans with fewer metrics." +msgstr "Старые серверы могут возвращать только оценочные планы с меньшим количеством метрик." + +#: src/components/settings/PluginsTab.tsx +msgid "Older versions" +msgstr "Старые версии" + +#. placeholder {0}: ( settings.aiCustomModels?.["ollama"] || availableModels["ollama"] || [] ).length +#: src/components/settings/AiTab.tsx +msgid "Ollama connected ({0} models found)" +msgstr "Ollama подключён (найдено моделей: {0})" + +#. placeholder {0}: settings.aiOllamaPort || 11434 +#: src/components/settings/AiTab.tsx +msgid "Ollama not detected on port {0}. Is it running?" +msgstr "Ollama не обнаружен на порту {0}. Запущен ли он?" + +#: src/components/settings/AiTab.tsx +msgid "Ollama Port" +msgstr "Порт Ollama" + +#. placeholder {0}: trigger.table_name +#: src/components/layout/sidebar/SidebarTriggerItem.tsx +msgid "on {0}" +msgstr "на {0}" + +#. placeholder {0}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "On {0} — review and decide before it executes." +msgstr "На {0} — проверьте запрос перед выполнением." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Delete" +msgstr "При удалении" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Update" +msgstr "При обновлении" + +#: src/components/connections/StatusBadge.tsx +msgctxt "connections" +msgid "Open" +msgstr "Открыть" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Open connections" +msgstr "Открыть подключения" + +#: src/pages/VisualExplainPage.tsx +msgid "Open file" +msgstr "Открыть файл" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Open in Editor" +msgstr "Открыть в редакторе" + +#: src/components/ui/DataGrid.tsx +msgid "Open in JSON Editor" +msgstr "Открыть в JSON-редакторе" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Open in New Tab" +msgstr "Открыть в новой вкладке" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Open in Visual Explain" +msgstr "Открыть в Visual Explain" + +#: src/components/ui/JsonCell.tsx +msgid "Open JSON viewer" +msgstr "Открыть просмотрщик JSON" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Open package page" +msgstr "Открыть страницу пакета" + +#. placeholder {0}: fkForContextPreview.ref_table +#: src/components/ui/DataGrid.tsx +msgid "Open referenced row in {0}" +msgstr "Открыть связанную строку в {0}" + +#: src/components/ui/DataGrid.tsx +msgid "Open Sidebar Editor" +msgstr "Открыть в боковом редакторе" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Open Source Libraries" +msgstr "Библиотеки с открытым исходным кодом" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Open Tabs" +msgstr "Открытые вкладки" + +#: src/components/settings/InfoTab.tsx +msgid "Open Task Manager" +msgstr "Открыть диспетчер задач" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +msgid "Operation" +msgstr "Операция" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default." +msgstr "Необязательно. Укажите исполняемый файл для запуска плагина (например, python3 на macOS/Linux или python либо полный путь на Windows). Оставьте пустым, чтобы использовать значение по умолчанию." + +#: src/components/notebook/NotebookOutline.tsx +msgid "Outline" +msgstr "Структура" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Overview" +msgstr "Обзор" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +#: src/pages/Editor.tsx +msgid "Page {0}" +msgstr "Страница {0}" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {1}: Math.ceil( activeTab.result.pagination.total_rows / activeTab.result.pagination.page_size, ) +#: src/pages/Editor.tsx +msgid "Page {0} of {1}" +msgstr "Страница {0} из {1}" + +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +msgid "Page {0} of {totalPages}" +msgstr "Страница {0} из {totalPages}" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Parallel Execution (Run All)" +msgstr "Параллельное выполнение (Запустить все)" + +#: src/components/notebook/ParamsPanel.tsx +#: src/pages/Editor.tsx +msgid "Parameters" +msgstr "Параметры" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password" +msgstr "Пароль" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password saved in system keychain" +msgstr "Пароль сохранён в системном хранилище ключей" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Paste structured data and preview the schema before importing" +msgstr "Вставьте структурированные данные и проверьте схему перед импортом" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database." +msgstr "Приостанавливать запись (или любой запрос) и запрашивать подтверждение в Tabularis перед отправкой в базу данных." + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Pending approval" +msgstr "Ожидает подтверждения" + +#: src/pages/TaskManagerPage.tsx +msgid "PID" +msgstr "PID" + +#: src/components/settings/GeneralTab.tsx +msgid "Ping Interval" +msgstr "Интервал пинга" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Pipe (|)" +msgstr "Вертикальная черта (|)" + +#: src/components/modals/CreateTableModal.tsx +msgid "PK" +msgstr "PK" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Planning" +msgstr "Планирование" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Please fill in all required fields" +msgstr "Заполните все обязательные поля" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least one table" +msgstr "Выберите хотя бы одну таблицу" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least Structure or Data" +msgstr "Выберите хотя бы структуру или данные" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin" +msgstr "Плагин" + +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Center" +msgstr "Центр плагинов" + +#: src/components/connections/ActionButtons.tsx +#: src/components/connections/ConnectionCard.tsx +#: src/components/connections/ConnectionListItem.tsx +msgid "Plugin disabled" +msgstr "Плагин отключён" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Plugin Failed to Start" +msgstr "Плагин не запустился" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin Processes" +msgstr "Процессы плагинов" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin processes & system resources" +msgstr "Процессы плагинов и системные ресурсы" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Settings" +msgstr "Настройки плагина" + +#: src/pages/Settings.tsx +msgid "Plugins" +msgstr "Плагины" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "PNG, JPG, WebP or SVG · max 512 KB" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Pod" +msgstr "Pod" + +#: src/components/ui/GeometryInput.tsx +msgid "POINT(30 40)" +msgstr "POINT(30 40)" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Port" +msgstr "Порт" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Port must be between 1 and 65535" +msgstr "Порт должен быть в диапазоне от 1 до 65535" + +#: src/utils/explainPlan.ts +msgid "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available." +msgstr "PostgreSQL ANALYZE включает реальные строки, время, итерации и счётчики буферов при наличии." + +#: src/utils/explainPlan.ts +msgid "PostgreSQL without ANALYZE shows planner estimates only." +msgstr "PostgreSQL без ANALYZE показывает только оценки планировщика." + +#: src/components/modals/AiApprovalModal.tsx +msgid "Pre-flight execution plan" +msgstr "Предварительный план выполнения" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pre-flight EXPLAIN" +msgstr "Предварительный EXPLAIN" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Prefer" +msgstr "Предпочтительный" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Preferred" +msgstr "" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Press key combination..." +msgstr "Нажмите сочетание клавиш..." + +#: src/pages/Editor.tsx +msgid "Press Run (Ctrl/Command+F5) to load table data" +msgstr "Нажмите «Запустить» (Ctrl/Command+F5) для загрузки данных таблицы" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Preview" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "Preview" +msgstr "Предпросмотр" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Preview" +msgstr "Предпросмотр" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Preview failed: " +msgstr "Ошибка предпросмотра: " + +#: src/components/ui/BlobInput.tsx +msgid "Preview only - full data not loaded" +msgstr "Только предпросмотр — полные данные не загружены" + +#: src/components/ui/DataGrid.tsx +msgid "Preview related record" +msgstr "" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Previous page" +msgstr "Предыдущая страница" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Primary Key" +msgstr "Первичный ключ" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Procedures" +msgstr "Хранимые процедуры" + +#: src/components/settings/InfoTab.tsx +msgid "Project Status" +msgstr "Статус проекта" + +#: src/components/settings/AiTab.tsx +msgid "Prompt Customization" +msgstr "Настройка промптов" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Provide your connection name" +msgstr "Введите название подключения" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Queries" +msgstr "Запросы" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Query" +msgstr "Запрос" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Explanation" +msgstr "Объяснение запроса" + +#: src/pages/Editor.tsx +msgid "Query failed." +msgstr "Ошибка выполнения запроса." + +#: src/components/settings/GeneralTab.tsx +msgid "Query History" +msgstr "История запросов" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Query history was reset" +msgstr "История запросов сброшена" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Query Parameters" +msgstr "Параметры запроса" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Tab Name Prompt" +msgstr "Промпт для названия вкладки запроса" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Quick connection test" +msgstr "Быстрая проверка подключения" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Quick Navigator" +msgstr "Быстрый навигатор" + +#: src/pages/TaskManagerPage.tsx +msgid "RAM" +msgstr "RAM" + +#: src/components/ui/JsonInput.tsx +msgid "Raw" +msgstr "Сырой" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Raw Output" +msgstr "Сырой вывод" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Raw SQL" +msgstr "Сырой SQL" + +#: src/components/modals/VisualExplainModal.tsx +msgid "Re-run" +msgstr "Перезапустить" + +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Re-run query" +msgstr "Перезапустить запрос" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Read more" +msgstr "Подробнее" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only connections" +msgstr "Подключения только для чтения" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only mode" +msgstr "Режим только для чтения" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Reason (optional)" +msgstr "Причина (необязательно)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Recreate Trigger" +msgstr "Пересоздать триггер" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Redo" +msgstr "Повторить" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Column" +msgstr "Ссылочный столбец" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Table" +msgstr "Ссылочная таблица" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/LogsTab.tsx +#: src/components/settings/PluginsTab.tsx +#: src/pages/SchemaDiagramPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Refresh" +msgstr "Обновить" + +#: src/components/settings/AiTab.tsx +msgid "Refresh Models" +msgstr "Обновить модели" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Routines" +msgstr "Обновить подпрограммы" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Refresh Tables" +msgstr "Обновить таблицы" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Triggers" +msgstr "Обновить триггеры" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Views" +msgstr "Обновить представления" + +#: src/components/settings/PluginsTab.tsx +msgid "Registry" +msgstr "Реестр" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Release Notes" +msgstr "Что нового" + +#: src/pages/VisualExplainPage.tsx +msgid "Reload" +msgstr "Перезагрузить" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Remind Me Later" +msgstr "Напомнить позже" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Remove" +msgstr "" + +#: src/components/modals/PluginRemoveModal.tsx +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Remove" +msgstr "Удалить" + +#: src/components/ui/FilterRow.tsx +msgid "Remove filter" +msgstr "Удалить фильтр" + +#: src/pages/Connections.tsx +msgid "Remove from Group" +msgstr "Убрать из группы" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Remove Plugin" +msgstr "Удалить плагин" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Connections.tsx +#: src/pages/Editor.tsx +msgid "Rename" +msgstr "Переименовать" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Renamed cell {n}" +msgstr "Переименована ячейка {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Reordered cells" +msgstr "Ячейки переупорядочены" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Replace table" +msgstr "Заменить таблицу" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Require" +msgstr "Обязательный" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Required" +msgstr "Обязательно" + +#. placeholder {0}: availableTypes.find((t) => t.name === form.type)?.requires_extension +#. placeholder {0}: exts.join(', ') +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "Requires extension: {0}" +msgstr "Требуется расширение: {0}" + +#: src/components/settings/PluginsTab.tsx +msgid "Requires Tabularis ≥ {minVersion}" +msgstr "Требуется Tabularis ≥ {minVersion}" + +#: src/components/settings/AiTab.tsx +msgid "Reset" +msgstr "Сбросить" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Reset to default" +msgstr "Сбросить по умолчанию" + +#: src/components/settings/AiTab.tsx +msgid "Reset to Default" +msgstr "Сбросить по умолчанию" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Reset to driver default" +msgstr "" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Resize sidebar" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Name" +msgstr "Имя ресурса" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource name is required" +msgstr "Имя ресурса обязательно" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Type" +msgstr "Тип ресурса" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource type must be \"service\" or \"pod\"" +msgstr "Тип ресурса должен быть \"service\" или \"pod\"" + +#: src/pages/TaskManagerPage.tsx +msgid "Restart" +msgstr "Перезапустить" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Restart Now" +msgstr "Перезапустить сейчас" + +#: src/components/settings/GeneralTab.tsx +msgid "Result Page Size (Limit)" +msgstr "Размер страницы результатов (Limit)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Results" +msgstr "Результаты" + +#: src/components/ui/DataGrid.tsx +msgid "Revert Selected" +msgstr "Отменить выбранные изменения" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Review & adjust" +msgstr "Проверить и настроить" + +#: src/pages/Editor.tsx +msgid "Rollback Changes" +msgstr "Откатить изменения" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "routine" +msgstr "процедура" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Routines" +msgstr "Подпрограммы" + +#. placeholder {0}: rowIndex + 1 +#: src/components/ui/RowEditorSidebar.tsx +msgid "Row #{0}" +msgstr "Строка #{0}" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "rows" +msgstr "строки" + +#: src/components/settings/GeneralTab.tsx +msgctxt "settings" +msgid "rows" +msgstr "строк" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Rows Processed" +msgstr "Обработано строк" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Rows returned" +msgstr "Возвращено строк" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Rows will be added to an existing table" +msgstr "Строки будут добавлены в существующую таблицу" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Run" +msgstr "Запустить" + +#: src/components/modals/QuerySelectionModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgctxt "editor" +msgid "Run All" +msgstr "Запустить все" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run All Cells" +msgstr "Выполнить все ячейки" + +#: src/components/notebook/RunAllSummary.tsx +msgid "Run All Complete" +msgstr "Выполнение завершено" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan." +msgstr "Выполнить EXPLAIN перед показом окна подтверждения, чтобы пользователь видел план выполнения." + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Run Cell" +msgstr "Запустить ячейку" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Run in console" +msgstr "Запустить в консоли" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Run Preview" +msgstr "Запустить предпросмотр" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Run queries" +msgstr "Запросы" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query" +msgstr "Выполнить запрос" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Run Query" +msgstr "Выполнить запрос" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query (in editor)" +msgstr "Выполнить запрос (в редакторе)" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Run SELECT query" +msgstr "Выполнить SELECT-запрос" + +#. placeholder {0}: selectedIndices.size +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run Selected ({0})" +msgstr "Запустить выбранные ({0})" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "Run SQL File..." +msgstr "Выполнить SQL-файл..." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Run this command in your terminal, then restart Claude Code." +msgstr "Выполните эту команду в терминале, затем перезапустите Claude Code." + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run this query" +msgstr "Запустить этот запрос" + +#: src/i18n/registries/taskManagerProcessStatus.ts +#: src/pages/TaskManagerPage.tsx +msgid "running" +msgstr "работает" + +#: src/components/explain/VisualExplainView.tsx +msgid "Running EXPLAIN..." +msgstr "Выполнение EXPLAIN..." + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Build and Test" +msgstr "Сборка и тесты Rust" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Dependencies" +msgstr "Зависимости Rust" + +#: src/pages/McpPage.tsx +msgid "Safety" +msgstr "Безопасность" + +#: src/components/settings/ThemePicker.tsx +msgid "Same as App" +msgstr "Как в приложении" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Sample values" +msgstr "Примеры значений" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/Connections.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Save" +msgstr "Сохранить" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Save & Restart" +msgstr "Сохранить и перезапустить" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Save Changes" +msgstr "Сохранить изменения" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Save passwords in Keychain" +msgstr "Сохранять пароли в Keychain" + +#: src/components/settings/AiTab.tsx +msgid "Save Prompt" +msgstr "Сохранить промпт" + +#: src/pages/Editor.tsx +msgid "Save Query" +msgstr "Сохранить запрос" + +#: src/pages/Editor.tsx +msgid "Save this query" +msgstr "Сохранить этот запрос" + +#: src/components/settings/PluginSettingsPage.tsx +msgid "Saved" +msgstr "Сохранено" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Saved Connection" +msgstr "Сохранённое подключение" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Scan-heavy operations detected" +msgstr "Обнаружены интенсивные сканирования" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "Схема: {tableName}" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Schemas" +msgstr "Схемы" + +#: src/components/ui/JsonTreeView.tsx +msgid "Search" +msgstr "Поиск" + +#: src/pages/Connections.tsx +msgid "Search connections..." +msgstr "Поиск подключений..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search emoji…" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Search favorites..." +msgstr "Поиск в избранном..." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Search history..." +msgstr "Поиск в истории..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search icons…" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Search models..." +msgstr "Поиск моделей..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Search notebooks" +msgstr "Поиск блокнотов" + +#: src/components/settings/PluginsTab.tsx +msgid "Search plugins…" +msgstr "Поиск плагинов…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Search query…" +msgstr "Поиск запроса…" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Search session, client, connection…" +msgstr "Поиск по сессии, клиенту, подключению…" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Search tables, views, routines, triggers..." +msgstr "Поиск таблиц, представлений, процедур, триггеров..." + +#: src/components/settings/LocalizationTab.tsx +msgid "Search timezones..." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Loading schema..." +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Search..." +msgstr "Поиск..." + +#: src/components/modals/mcp/McpSafetySection.tsx +#: src/components/settings/GeneralTab.tsx +msgid "seconds" +msgstr "секунд" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Select" +msgstr "Чтение" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select [fields]" +msgstr "SELECT [поля]" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select *" +msgstr "SELECT *" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a context first" +msgstr "Сначала выберите контекст" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a database" +msgstr "Выберите базу данных" + +#: src/pages/VisualExplainPage.tsx +msgid "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it." +msgstr "Выберите файл с планом EXPLAIN (Postgres JSON или текст) для визуализации." + +#: src/components/settings/AiTab.tsx +msgid "Select a model" +msgstr "Выберите модель" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Select a node to view details" +msgstr "Выберите узел для просмотра подробностей" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Select a table..." +msgstr "Выберите таблицу..." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Select All" +msgstr "Выбрать все" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Select All" +msgstr "Выбрать все" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Select All" +msgstr "Выбрать все" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select at least one database" +msgstr "Выберите хотя бы одну базу данных" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select context/namespace/type first" +msgstr "Сначала выберите контекст/пространство имён/тип" + +#: src/components/ui/FilterRow.tsx +msgid "Select for Apply All" +msgstr "Добавить в «Применить все»" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select K8s Connection" +msgstr "Выберите подключение K8s" + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Select Query to Execute" +msgstr "Выбрать запрос для выполнения" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Select Query to Explain" +msgstr "Выбрать запрос для объяснения" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Select schemas to load:" +msgstr "Выберите схемы для загрузки:" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select SSH Connection" +msgstr "Выбрать SSH-подключение" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Select Tables" +msgstr "Выбрать таблицы" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select the databases to include in this connection." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Name" +#: src/components/settings/AiTab.tsx +msgid "Select the model to be used for generation and explanation." +msgstr "Выберите модель для генерации и объяснения запросов." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select type..." +msgstr "Выберите тип..." + +#: src/components/modals/NewRowModal.tsx +msgid "Select Value..." +msgstr "Выберите значение..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Selected emoji" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "NO" +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Semicolon (;)" +msgstr "Точка с запятой (;)" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Separate Connections" +msgstr "Отдельные подключения" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sequential Scans" +msgstr "Последовательные сканирования" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Service" +msgstr "Service" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Session timezone sent to MySQL after connect." +msgstr "Часовой пояс сессии, отправляемый в MySQL после подключения." + +#: src/components/settings/AiActivityPanel.tsx +msgid "Sessions" +msgstr "Сессии" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Set as Active" +msgstr "Сделать активным" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set DEFAULT" +msgstr "Установить DEFAULT" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set EMPTY" +msgstr "Установить EMPTY" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set GENERATED" +msgstr "Установить GENERATED" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set NULL" +msgstr "Установить NULL" + +#: src/components/layout/Sidebar.tsx +msgid "Settings" +msgstr "Настройки" + +#: src/pages/McpPage.tsx +msgid "Setup" +msgstr "Настройка" + +#: src/components/settings/AiTab.tsx +msgid "Show AI Assist and Explain buttons in the editor" +msgstr "Показывать кнопки AI-помощи и объяснения в редакторе" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All" +msgstr "Показать все" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All Tables" +msgstr "Показать все таблицы" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Show Data" +msgstr "Показать данные" + +#: src/components/settings/AppearanceTab.tsx +msgid "Show Line Numbers" +msgstr "Показывать номера строк" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Show overview" +msgstr "Показать обзор" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost." +msgstr "Показывать просмотрщик JSON, когда нетипизированная текстовая ячейка содержит объект или массив JSON. Создаёт небольшие издержки на разбор каждой ячейки." + +#: src/components/settings/GeneralTab.tsx +msgid "Show Welcome Screen" +msgstr "Показывать экран приветствия" + +#. placeholder {0}: all.length +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Showing {RESULT_LIMIT} of {0} — refine search to narrow down." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Nullable" +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "showing first {MAX_PREVIEW_ROWS}" +msgstr "показаны первые {MAX_PREVIEW_ROWS}" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Side by side" +msgstr "Рядом" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Skip (do not import)" +msgstr "Пропустить (не импортировать)" + +#: src/components/notebook/RunAllSummary.tsx +msgid "skipped" +msgstr "пропущено" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Slowest Step" +msgstr "Самый медленный шаг" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket Timeout" +msgstr "Таймаут сокета" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket timeout in milliseconds." +msgstr "Таймаут сокета в миллисекундах." + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort ascending" +msgstr "Сортировать по возрастанию" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} ASC" +msgstr "Сортировать по {colName} ASC" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} DESC" +msgstr "Сортировать по {colName} DESC" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Sort by {field}" +msgstr "Сортировать по {field}" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort by…" +msgstr "Сортировать по…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort descending" +msgstr "Сортировать по убыванию" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sort or temp work detected" +msgstr "Обнаружена сортировка или временные операции" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Split Group" +msgstr "Разделить группу" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Horizontal" +msgstr "Разделить горизонтально" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Vertical" +msgstr "Разделить вертикально" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +#: src/components/ui/TableToolbar.tsx +msgid "SQL" +msgstr "SQL" + +#: src/components/settings/AppearanceTab.tsx +msgid "SQL Editor" +msgstr "SQL-редактор" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "SQL file executed successfully" +msgstr "SQL-файл выполнен" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Functions" +msgstr "SQL-функции" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "SQL Generation" +msgstr "Генерация SQL" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Mode" +msgstr "Режим SQL" + +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQL Preview" +msgstr "Предпросмотр SQL" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "SQLite does not support dropping FKs via ALTER TABLE." +msgstr "SQLite не поддерживает удаление внешних ключей через ALTER TABLE." + +#: src/utils/explainPlan.ts +msgid "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural." +msgstr "SQLite EXPLAIN QUERY PLAN — лёгкий инструмент преимущественно для анализа структуры." + +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQLite only supports renaming columns. Other modifications require recreating the table manually." +msgstr "SQLite поддерживает только переименование столбцов. Другие изменения требуют пересоздания таблицы вручную." + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Connections" +msgstr "SSH-подключения" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Host" +msgstr "SSH-хост" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH is not available for this driver." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Schema: {tableName}" +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key" +msgstr "SSH-ключ" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key File (Optional)" +msgstr "SSH-ключ (необязательно)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key Passphrase (Optional)" +msgstr "Пароль SSH-ключа (необязательно)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Password" +msgstr "SSH-пароль" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH Password missing. Please re-enter." +msgstr "SSH-пароль отсутствует. Введите заново." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Port" +msgstr "SSH-порт" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH User" +msgstr "SSH-пользователь" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSL Mode" +msgstr "Режим SSL" + +#: src/components/ui/GeometryInput.tsx +msgid "ST_GeomFromText('POINT(30 40)', 4326)" +msgstr "ST_GeomFromText('POINT(30 40)', 4326)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Stacked view" +msgstr "Список" + +#: src/components/modals/CommunityModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Star on GitHub" +msgstr "Поставить звезду на GitHub" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Started" +msgstr "Начало" + +#: src/components/settings/GeneralTab.tsx +msgid "Startup" +msgstr "Запуск" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Status" +msgstr "Статус" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Stop" +msgstr "Остановить" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop execution when a cell fails" +msgstr "Прекратить выполнение при ошибке в ячейке" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop on Error" +msgstr "Остановить при ошибке" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "stopped" +msgstr "остановлен" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Structure" +msgstr "Структура" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Structure (DDL)" +msgstr "Структура (DDL)" + +#: src/pages/Editor.tsx +msgid "Submit Changes" +msgstr "Применить изменения" + +#: src/components/notebook/RunAllSummary.tsx +msgid "succeeded" +msgstr "успешно" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Success" +msgstr "Успешно" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Success" +msgstr "Успешно" + +#: src/components/modals/ExportProgressModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Success" +msgstr "Готово" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Success" +msgstr "Готово" + +#: src/pages/TaskManagerPage.tsx +msgid "Sum of RSS across the process tree — may overcount shared memory" +msgstr "Сумма RSS по дереву процессов — общая память может учитываться несколько раз" + +#: src/components/settings/InfoTab.tsx +msgid "Support the Development" +msgstr "Поддержать разработку" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch tab" +msgstr "Переключить вкладку" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch to connection 1–9" +msgstr "Переключиться на подключение 1–9" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Horizontal Layout" +msgstr "Переключить на горизонтальное расположение" + +#: src/components/ui/TableToolbar.tsx +msgid "Switch to SQL WHERE input" +msgstr "Перейти к вводу SQL WHERE" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Vertical Layout" +msgstr "Переключить на вертикальное расположение" + +#: src/pages/TaskManagerPage.tsx +msgid "System Resources" +msgstr "Системные ресурсы" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Tab" +msgstr "Табуляция" + +#: src/components/settings/AppearanceTab.tsx +msgid "Tab Size" +msgstr "Размер отступа" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Tab view" +msgstr "Вкладки" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "table" +msgstr "таблица" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Table" +msgstr "Таблица" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Table name" +msgstr "Название таблицы" + +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Table Name" +msgstr "Название таблицы" + +#: src/components/modals/CreateTableModal.tsx +msgid "Table name is required" +msgstr "Название таблицы обязательно" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Tables" +msgstr "Таблицы" + +#: src/components/modals/CommunityModal.tsx +msgid "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community." +msgstr "Tabularis — бесплатный проект с открытым исходным кодом. Если он вам полезен, поддержите проект и присоединяйтесь к сообществу." + +#: src/pages/TaskManagerPage.tsx +msgid "Tabularis Process" +msgstr "Процесс Tabularis" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Target column" +msgstr "Целевой столбец" + +#: src/components/settings/InfoTab.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Task Manager" +msgstr "Диспетчер задач" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Temp or Sort Ops" +msgstr "Временные операции или сортировка" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Test" +msgstr "Проверить" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Test Connection" +msgstr "Проверить подключение" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Testing..." +msgstr "Проверка..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "The app will restart automatically after installation" +msgstr "Приложение автоматически перезапустится после установки" + +#: src/components/settings/AiTab.tsx +msgid "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1" +msgstr "Базовый URL OpenAI-совместимого API. Примеры: https://api.groq.com/openai/v1, http://localhost:8000/v1" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "The configuration file has been saved. Restart now to apply the changes?" +msgstr "Файл конфигурации сохранён. Перезапустить сейчас?" + +#: src/pages/Connections.tsx +msgid "The exported file will contain your database and SSH passwords in plaintext. Please store it securely." +msgstr "Экспортируемый файл будет содержать пароли к базам данных и SSH в открытом виде. Храните его в надёжном месте!" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:" +msgstr "Файл истории был повреждён и перенесён в резервную копию. Новые запросы будут записываться как обычно. Резервный файл:" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely." +msgstr "Model Context Protocol (MCP) позволяет AI-ассистентам (например, Claude) подключаться к локальным инструментам. Tabularis предоставляет MCP-сервер, через который AI читает схему базы данных и выполняет запросы." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "The plugin process could not be launched. Check the error details below." +msgstr "Процесс плагина не удалось запустить. Подробности ниже." + +#: src/components/settings/AppearanceTab.tsx +msgid "The quick brown fox jumps over the lazy dog" +msgstr "Съешь же ещё этих мягких французских булок, да выпей чаю" + +#: src/components/settings/AppearanceTab.tsx +msgid "Theme Selection" +msgstr "Выбор темы" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "These connections will reject writes from MCP. Other connections behave normally." +msgstr "Отметьте подключения, которые должны быть только для чтения. Остальные работают как обычно." + +#: src/pages/TaskManagerPage.tsx +msgid "This action cannot be undone immediately" +msgstr "Это действие нельзя немедленно отменить" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "This driver only supports primary keys at table creation time" +msgstr "Этот драйвер поддерживает первичные ключи только при создании таблицы" + +#: src/components/settings/AiTab.tsx +msgid "This key is loaded from an environment variable" +msgstr "Этот ключ загружен из переменной окружения" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Month" +msgstr "В этом месяце" + +#: src/components/notebook/NotebookView.tsx +msgid "This notebook is empty. Add a cell to get started." +msgstr "Ноутбук пуст. Добавьте ячейку для начала работы." + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path." +msgstr "Для этого плагина может потребоваться интерпретатор (например, Python). Укажите путь к нему в настройках плагина." + +#: src/components/settings/InfoTab.tsx +msgid "This project is a Work In Progress (WIP). Core features are stable, but we have big plans." +msgstr "Проект находится в активной разработке (WIP). Основные функции стабильны, впереди много интересного." + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Week" +msgstr "На этой неделе" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgctxt "aiActivity" +msgid "Time" +msgstr "Время" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Time" +msgstr "Время" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Timeout" +msgstr "Таймаут" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Timeout" +msgstr "Таймаут" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgctxt "mcp" +msgid "Timeout" +msgstr "Таймаут" + +#: src/components/settings/LogsTab.tsx +msgid "Timestamp" +msgstr "Время" + +#: src/components/settings/LocalizationTab.tsx +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Timezone" +msgstr "Часовой пояс" + +#: src/components/settings/LocalizationTab.tsx +msgid "Timezone used to display timestamps and exports. 'Auto' follows your system timezone." msgstr "" +#: src/components/modals/TriggerEditorModal.tsx +msgid "Timing" +msgstr "Момент срабатывания" + +#: src/components/ui/FilterRow.tsx +msgid "to" +msgstr "до" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Today" +msgstr "Сегодня" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Toggle Chart" +msgstr "Показать/скрыть график" + +#: src/components/ui/JsonCell.tsx +msgid "Toggle inline JSON tree" +msgstr "Показать/скрыть JSON-дерево" + +#: src/components/ui/TextCell.tsx +msgid "Toggle inline text editor" +msgstr "Показать/скрыть текстовый редактор" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Toggle Preview" +msgstr "Переключить предпросмотр" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Toggle sidebar" +msgstr "Показать/скрыть боковую панель" + +#: src/components/ui/TableToolbar.tsx +msgid "Toggle structured filter panel" +msgstr "Открыть/закрыть панель фильтров" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled parallel (cell {n})" +msgstr "Переключён параллельный режим (ячейка {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled stop on error" +msgstr "Переключён останов при ошибке" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Tool" +msgstr "Инструмент" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Top Issues" +msgstr "Основные проблемы" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Total Cost" +msgstr "Общая стоимость" + +#: src/components/ui/JsonInput.tsx +msgid "Tree" +msgstr "Дерево" + +#. placeholder {0}: formatBytes(stats.total_memory_bytes) +#: src/pages/TaskManagerPage.tsx +msgid "Tree total: {0}" +msgstr "Итого по дереву: {0}" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "trigger" +msgstr "триггер" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Body (SQL)" +msgstr "Тело триггера (SQL)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger created successfully" +msgstr "Триггер создан" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Name" +msgstr "Название триггера" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger SQL is required" +msgstr "SQL триггера обязателен" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger updated successfully" +msgstr "Триггер обновлён" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Triggers" +msgstr "Триггеры" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Try again" +msgstr "Попробовать снова" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Try again" +msgstr "Повторить" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx #: src/components/modals/SchemaModal.tsx msgid "Type" +msgstr "Тип" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Undo" +msgstr "Отменить" + +#: src/pages/Connections.tsx +msgid "Ungrouped" +msgstr "Без группы" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Unique Index" +msgstr "Уникальный индекс" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "unknown" +msgstr "неизвестно" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Unknown" +msgstr "Неизвестно" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Unnamed connection" +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Unset" +msgstr "Не задано" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Untitled" +msgstr "Без названия" + +#: src/components/settings/PluginsTab.tsx +msgid "Up to date" +msgstr "Актуально" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Update" +msgstr "UPDATE" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Update" +msgstr "Обновить" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Update" +msgstr "Обновить" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Update Error" +msgstr "Ошибка обновления" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Update failed: " +msgstr "Ошибка обновления: " + +#: src/components/settings/InfoTab.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Updates" +msgstr "Обновления" + +#. placeholder {0}: ({ aur: "AUR", snap: "Snap Store", flatpak: "Flathub" } as Record)[ installationSource ] ?? installationSource +#: src/components/settings/InfoTab.tsx +msgid "Updates managed by {0}" +msgstr "Обновления управляются через {0}" + +#: src/components/ui/BlobInput.tsx +msgid "Upload File" +msgstr "Загрузить файл" + +#: src/components/ui/BlobInput.tsx +msgid "Uploading..." +msgstr "Загрузка..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Existing SSH Connection" +msgstr "Использовать существующее SSH-подключение" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Kubernetes Port-Forward" +msgstr "Использовать проброс портов Kubernetes" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use SSH Tunnel" +msgstr "Использовать SSH-туннель" + +#: src/components/settings/InfoTab.tsx +msgid "Use your package manager to update Tabularis." +msgstr "Для обновления Tabularis используйте менеджер пакетов." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Username" +msgstr "Пользователь" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Using the driver's default icon." +msgstr "" + +#: src/components/ui/JsonInput.tsx +msgid "Valid JSON" +msgstr "Корректный JSON" + +#: src/components/notebook/ParamsPanel.tsx +msgctxt "editor" +msgid "value" +msgstr "значение" + +#: src/components/ui/FilterRow.tsx +msgctxt "toolbar" +msgid "value" +msgstr "значение" + +#: src/components/modals/QueryParamsModal.tsx +msgid "Value (e.g. 'text' or 123)" +msgstr "Значение (например, 'текст' или 123)" + +#: src/components/notebook/CellChart.tsx +msgid "Values" +msgstr "Значения" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify CA" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Full" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Identity" msgstr "" +#: src/components/modals/UpdateNotificationModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Version" +msgstr "Версия" + +#. placeholder {0}: entries[0].version +#: src/components/modals/WhatsNewModal.tsx +msgid "Version {0}" +msgstr "Версия {0}" + +#. placeholder {0}: updateInfo.latestVersion +#: src/components/settings/InfoTab.tsx +msgid "Version {0} is available" +msgstr "Доступна версия {0}" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Vertical" +msgstr "Вертикально" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "view" +msgstr "представление" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View created successfully" +msgstr "Представление создано" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "View Definition" +msgstr "Определение представления" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Definition (SQL)" +msgstr "Определение представления (SQL)" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View definition is required" +msgstr "Определение представления обязательно" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "View details" +msgstr "Подробности" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "View ER Diagram" +msgstr "Открыть ER-диаграмму" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Name" +msgstr "Название представления" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View name is required" +msgstr "Название представления обязательно" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "View on GitHub" +msgstr "Открыть на GitHub" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "View Schema" +msgstr "Просмотреть схему" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View updated successfully" +msgstr "Представление обновлено" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Views" +msgstr "Представления" + +#: src/components/modals/VisualExplainModal.tsx +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +#: src/pages/VisualExplainPage.tsx +msgid "Visual Explain" +msgstr "Визуальный Explain" + +#: src/components/settings/LogsTab.tsx +msgid "Warn" +msgstr "Warn" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap." +msgstr "Мы только что открыли отдельное место для пользователей Tabularis. Получайте помощь, делитесь советами, участвуйте в формировании дорожной карты." + +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "What's New" +msgstr "Что нового" + +#: src/pages/TaskManagerPage.tsx +msgid "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted." +msgstr "принудительно остановит процесс. Все активные подключения к базе данных через этот плагин перестанут работать до его перезапуска." + +#: src/components/ui/GeometryInput.tsx +msgid "WKT Mode" +msgstr "Режим WKT" + +#: src/components/settings/AppearanceTab.tsx +msgid "Word Wrap" +msgstr "Перенос строк" + +#: src/components/settings/AppearanceTab.tsx +msgid "Wrap long lines in the editor instead of scrolling horizontally." +msgstr "Переносить длинные строки в редакторе вместо горизонтальной прокрутки." + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Write" +msgstr "Запись" + +#: src/components/notebook/MarkdownCell.tsx +msgid "Write Markdown here..." +msgstr "Введите Markdown..." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Writes only" +msgstr "Только запись" + #: src/components/modals/SchemaModal.tsx msgid "YES" -msgstr "" +msgstr "Да" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Yesterday" +msgstr "Вчера" + +#: src/components/settings/InfoTab.tsx +msgid "You're up to date" +msgstr "Используется актуальная версия" diff --git a/src/locales/ru/messages.ts b/src/locales/ru/messages.ts index 39f11cf5..176ff7de 100644 --- a/src/locales/ru/messages.ts +++ b/src/locales/ru/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Максимум записей в истории\"],\"-6AWa-\":[\"Импортировать подключения\"],\"-6NyRG\":[\"Клиент\"],\"-K0AvT\":[\"Отключиться\"],\"-PLZfh\":[\"Не удалось обновить модели\"],\"-T5W2e\":[\"Примечания драйвера\"],\"-ZgeeE\":[\"История изменений\"],\"-aYrdc\":[\"Доступна версия \",[\"0\"]],\"-fBGXl\":[\"Наибольшая стоимость\"],\"-jIQDz\":[\"Свернуть ячейку\"],\"-u1eRo\":[\"Нет базы данных\"],\"-yoeVU\":[\"Загрузка схемы...\"],\"-zy2Nq\":[\"Тип\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID подтверждения\"],\"0E5-gF\":[\"Удалить это подключение?\"],\"0HCubq\":[\"Развернуть\"],\"0Kmdvy\":[\"Пользовательский шрифт\"],\"0Nj13E\":[\"Сгенерировать SQL\"],\"0ROgz5\":[\"Введите JSON...\"],\"0SY9sU\":[\"Не удалось отключиться от базы данных\"],\"0b3kL9\":[\"Выберите базу данных\"],\"0caMy7\":[\"История\"],\"0mx5ow\":[\"Запрос\"],\"0n9BtL\":[\"Предпросмотр\"],\"0pHB9N\":[\"Копировать как table.column\"],\"0sQzZK\":[\"Фильтр баз данных...\"],\"0uPP9X\":[\"Имя внешнего ключа (необязательно)\"],\"0wxuek\":[\"Текущая версия\"],\"0x09Aw\":[\"Переключён останов при ошибке\"],\"0yBP6v\":[\"Поддержать разработку\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка\"],\"few\":[\"#\",\" строки\"],\"many\":[\"#\",\" строк\"],\"other\":[\"#\",\" строки\"]}]],\"0yVAoD\":[\"Подсчитать строки\"],\"0zxJ87\":[\"Логи отсутствуют\"],\"1-ETbn\":[\"Визуальный Explain\"],\"1133_z\":[\"Изменить представление\"],\"11fGJ6\":[\"Запросы\"],\"13hIUA\":[\"API-ключ \",[\"0\"]],\"14qNWF\":[\"Выбрать SSH-подключение\"],\"17qHRP\":[\"Новое подключение\"],\"1Dn6bg\":[\"Импортировать из буфера обмена\"],\"1Dnd0I\":[\"Загрузить количество строк\"],\"1FjTLW\":[\"например, python3\"],\"1GOvbo\":[\"Ollama подключён (найдено моделей: \",[\"0\"],\")\"],\"1I6UoR\":[\"Представления\"],\"1U7hS5\":[\"Длина\"],\"1UTmg5\":[\"Максимальный размер пакета\"],\"1b7aSU\":[\"Шрифт редактора\"],\"1ekzlY\":[\"Процессы плагинов\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Выбор темы\"],\"1xVZkL\":[\"Модели не найдены\"],\"26Joci\":[\"Строк: \",[\"0\"]],\"2Bf-Qe\":[\"Новая консоль\"],\"2CrSmP\":[\"Помогите Tabularis развиваться\"],\"2D9F8_\":[\"Не удалось дублировать подключение\"],\"2Eoi_a\":[\"Подробности\"],\"2F4pE5\":[\"Сборка и тесты Rust\"],\"2Fsd9r\":[\"В этом месяце\"],\"2JzKXI\":[\"Установить GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Выбрать все\"],\"2SO5RM\":[\"Kubernetes недоступен для этого драйвера.\"],\"2Uh5GA\":[\"Экосистема Cargo\"],\"2YylFp\":[\"Новый визуальный запрос\"],\"2luuSG\":[\"Повторить\"],\"2wxgft\":[\"Переименовать\"],\"2yG2GC\":[\"Приостанавливать запись (или любой запрос) и запрашивать подтверждение в Tabularis перед отправкой в базу данных.\"],\"30-b5r\":[\"Удалить\"],\"31kwdN\":[\"Дублировать фильтр\"],\"34nxyb\":[\"Триггеры\"],\"35148H\":[\"Все инструменты\"],\"3Am5DS\":[\"Вкладки\"],\"3BhBCj\":[\"События\"],\"3FVg9_\":[\"Локальный столбец\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Запустить\"],\"3L0HCz\":[\"Плагины не найдены.\"],\"3Nv3JV\":[\"Выполнение запроса...\"],\"3TSz9S\":[\"Свернуть\"],\"3UW8fG\":[\"Обновления управляются через \",[\"0\"]],\"3YvS-c\":[\"Новая вкладка\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Промпт для названия ячейки ноутбука\"],\"3qkggm\":[\"На весь экран\"],\"3rBJ1T\":[\"Просмотреть схему\"],\"3xZ-xV\":[\"Вставить текущую метку времени\"],\"40Gx0U\":[\"Часовой пояс\"],\"41GP4f\":[\"Разделитель по умолчанию при копировании или экспорте строк в формате CSV.\"],\"42iaEi\":[\"PostgreSQL без ANALYZE показывает только оценки планировщика.\"],\"44cXI8\":[\"Сортировать по \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Управление базами данных\"],\"4CK17g\":[\"Изменить представление \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Выберите хотя бы одну базу данных\"],\"4D_Nvt\":[\"Не удалось создать группу\"],\"4RiR6c\":[\"Экспортировать как HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" дочерний процесс\"],\"few\":[\"#\",\" дочерних процесса\"],\"many\":[\"#\",\" дочерних процессов\"],\"other\":[\"#\",\" дочерних процессов\"]}]],\"4VyuY3\":[\"Очистить все логи?\"],\"4WWqS3\":[\"Показать/скрыть JSON-дерево\"],\"4cEClj\":[\"Сессии\"],\"4cmfYp\":[\"Дублировать строку\"],\"4lIZTB\":[\"Dev-зависимости фронтенда\"],\"4oYjvJ\":[\"Поиск запроса…\"],\"4tMxW4\":[\"Preview related record\"],\"4yJcjm\":[\"Выберите тип...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Закрыть панель фильтров (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Точка с запятой (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" событие\"],\"few\":[\"#\",\" события\"],\"many\":[\"#\",\" событий\"],\"other\":[\"#\",\" событий\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"Список\"],\"5To6Z6\":[\"Копировать запрос\"],\"5gqNQl\":[\"Сетка\"],\"5igIzr\":[\"Импорт отменён\"],\"5nTIup\":[\"Редактирование представления: \",[\"name\"]],\"66bEht\":[\"Статус проекта\"],\"6PIJVc\":[\"Запуск\"],\"6QvP0l\":[\"Экспортировать как JSON\"],\"6W41Xq\":[\"Диспетчер задач\"],\"6WngBH\":[\"Установить NULL\"],\"6YtxFj\":[\"Имя\"],\"6_dCYd\":[\"Обзор\"],\"6gvoHP\":[\"Скопировать сообщение об ошибке\"],\"6oCVzX\":[\"Контекст Kubernetes обязателен\"],\"6wQO0f\":[\"Показать данные\"],\"6z9W13\":[\"Перезапустить\"],\"71agNy\":[\"Сгенерировать названия для безымянных ячеек с помощью AI\"],\"74J3FG\":[\"Начальная версия\"],\"75BWdo\":[\"Не удалось загрузить определение триггера: \"],\"76d3Uz\":[\"События\"],\"76gPWk\":[\"Понятно\"],\"77nSMU\":[\"Удалить всю историю активности AI? Это действие необратимо.\"],\"79UVYW\":[\"Esc для закрытия\"],\"7ABmyQ\":[\"Попробовать снова\"],\"7Ap0JP\":[\"Активно \",[\"activeFilterCount\"],\" из \",[\"0\"]],\"7E864M\":[\"Тип базы данных\"],\"7FqaG1\":[\"Настройте инструкции для AI-анализа планов EXPLAIN. Используйте \",[\"LANGUAGE\"],\" для языка вывода.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Обнаружены смешанные типы, использован TEXT\"],\"7RSQQd\":[\"Сохранять пароли в Keychain\"],\"7VpPHA\":[\"Подтвердить\"],\"7e7bPs\":[\"Тело триггера (SQL)\"],\"7eRaA9\":[\"Удалить триггер\"],\"7l15X4\":[\"с ошибкой\"],\"7sMeHQ\":[\"Ключ\"],\"7sNhEz\":[\"Пользователь\"],\"7tATh2\":[\"Выполнить запрос\"],\"7yb4gk\":[\"Ошибка: \"],\"8-4V8D\":[\"Таблицы\"],\"82G-l5\":[\"Model Context Protocol (MCP) позволяет AI-ассистентам (например, Claude) подключаться к локальным инструментам. Tabularis предоставляет MCP-сервер, через который AI читает схему базы данных и выполняет запросы.\"],\"83VjWE\":[\"Новый ноутбук\"],\"86IgoU\":[\"Выполнить запрос (в редакторе)\"],\"86fCgf\":[\"Настройте инструкции для AI-генерации названий вкладок с результатами. SQL-запрос передаётся как сообщение пользователя.\"],\"87a_t_\":[\"Метка\"],\"8CWirf\":[\"MCP-сервер\"],\"8S8aIX\":[\"Проверка состояния подключения\"],\"8TMaZI\":[\"Время\"],\"8Tg_JR\":[\"Custom\"],\"8UFKYr\":[\"Выбрать запрос для выполнения\"],\"8VKSGV\":[\"Сгенерировать SQL\"],\"8Wjy6z\":[\"Закрыть вкладки слева\"],\"8ZsakT\":[\"Пароль\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL-редактор\"],\"8bRgTe\":[\"AI-провайдер не настроен. Перейдите в Настройки > AI.\"],\"8c_W0h\":[\"Старые версии\"],\"8guEQP\":[\"Обновить представления\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN — лёгкий инструмент преимущественно для анализа структуры.\"],\"8q_sOc\":[\"Remove\"],\"8t-akp\":[\"показаны первые \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Показать/скрыть текстовый редактор\"],\"8zfThY\":[\"Название подключения\"],\"91gnWY\":[\"Экспортировать логи\"],\"91rtHL\":[\"Создать новое представление\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Новая группа\"],\"9DOfTQ\":[\"Редактирование триггера: \",[\"name\"]],\"9JdjEN\":[\"Представление обновлено\"],\"9NzDFn\":[\"Показывать экран приветствия при запуске приложения.\"],\"9OoUS3\":[\"Создать новое SSH-подключение\"],\"9QGRD5\":[\"Целевой столбец\"],\"9QTny9\":[\"Ошибка выполнения запроса.\"],\"9S-fyV\":[\"Предварительный план выполнения\"],\"9SJ_Sx\":[\"Системные ресурсы\"],\"9UQ730\":[\"Клонировать\"],\"9X6cky\":[\"Нет\"],\"9XUV5V\":[\"В буфере обмена нет данных\"],\"9mMU1R\":[\"Время\"],\"9mvFo_\":[\"Время\"],\"9npOH9\":[\"Открыть файл\"],\"9uI_rE\":[\"Отменить\"],\"9xUjzm\":[\"Выбрать все\"],\"9y_02p\":[\"Общайтесь с сообществом, получайте помощь, предлагайте функции\"],\"A1pPcI\":[\"SSH-хост\"],\"A1taO8\":[\"Поиск\"],\"A6C0pv\":[\"Общая стоимость\"],\"A7WG0p\":[\"Плагин отключён\"],\"A7yRz3\":[\"Определение представления обязательно\"],\"A9Uyp6\":[\"Ошибка импорта: \"],\"ABEd-z\":[\"Для обновления Tabularis используйте менеджер пакетов.\"],\"AMdgKV\":[\"Промпт для анализа плана выполнения\"],\"ANSTMe\":[\"Серьёзных проблем в текущем плане не обнаружено.\"],\"ANzIr7\":[\"История запросов\"],\"AOnaU7\":[\"пропущено\"],\"AVlZoM\":[\"Окружение\"],\"AXTVsE\":[\"Verify Full\"],\"AXdRYR\":[\"Текущие логи\"],\"Aa-YkQ\":[\"Экспортировать ноутбук\"],\"Ai2U7L\":[\"Хост\"],\"AidayG\":[\"Фильтр по уровню\"],\"AlPiMN\":[\"Нажмите для перехода на страницу\"],\"An-1rA\":[\"Возвращено строк\"],\"AnV8j-\":[\"Изменить столбец\"],\"AvEr_L\":[\"Новая консоль\"],\"AvYbUL\":[\"Поставить звезду на GitHub\"],\"Aw_eOs\":[\"Требуется Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Ничего не найдено\"],\"B0mJGb\":[\"Сырой вывод\"],\"B1c58n\":[\"Изменить столбец\"],\"B3toQF\":[\"Объекты\"],\"B5nKny\":[\"/абсолютный/путь/к/папке\"],\"B5xevr\":[\"Имя подключения обязательно\"],\"BAVvWJ\":[\"ER-диаграмма\"],\"BBtVak\":[\"Свернуть все\"],\"BEVzjL\":[\"Импорт не удался\"],\"BFxXo5\":[\"Запустить все\"],\"BJe2lZ\":[\"Показать/скрыть боковую панель\"],\"BK3WCj\":[\"Не удалось загрузить реестр\"],\"BKbO3i\":[\"Блокнот изменён\"],\"BMB51y\":[\"Запустить в консоли\"],\"BNW_Z4\":[\"например, active_users, order_summary\"],\"BUO_JN\":[\"Копировать запрос\"],\"BYkhHY\":[\"Проверять обновления при запуске\"],\"BbHofF\":[\"Экспорт подключений\"],\"BeSg6-\":[\"Собирать логи приложения в памяти для отладки\"],\"BgAyQH\":[\"Сбросить сортировку\"],\"BinTJI\":[\"экосистема npm\"],\"BkFson\":[\"Автопостраничный вывод\"],\"Bpglf1\":[\"Переместить вверх\"],\"BrGo6h\":[\"Поиск блокнотов\"],\"BxiAN_\":[\"Удалить запрос\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Зависимости фронтенда\"],\"CE-M2e\":[\"Информация\"],\"CHIyL8\":[\"Нет фильтров —\"],\"CJnUoU\":[\"Обновить триггеры\"],\"CLWWRV\":[\"Скачивание...\"],\"CUxwxn\":[\"Показать все таблицы\"],\"CWMXbw\":[\"принудительно остановит процесс. Все активные подключения к базе данных через этот плагин перестанут работать до его перезапуска.\"],\"CZt6BX\":[\"РУЧНАЯ НАСТРОЙКА\"],\"Ca8ixZ\":[\"Удалить\"],\"CbJBQS\":[\"Ошибка обновления: \"],\"Cdz-YU\":[\"Список\"],\"CpeQf9\":[\"Итерации\"],\"D2wXBw\":[\"Автоинкремент\"],\"D6Ql0c\":[\"Выберите модель для генерации и объяснения запросов.\"],\"DB8zMK\":[\"Применить\"],\"DDXf5E\":[\"SQL-функции\"],\"DEwnwi\":[\"Удалить\"],\"DNTvdl\":[\"Открыть в редакторе\"],\"DPc2P9\":[\"Удалить ячейку\"],\"DUY8Ba\":[\"Критические изменения\"],\"DVnBSM\":[\"Межстрочный интервал\"],\"Dd7YLj\":[\"Может быть позже\"],\"Deej3j\":[\"Некорректный JSON\"],\"DfKhk_\":[\"Обновить\"],\"DiRiTz\":[\"Открыть страницу пакета\"],\"DlRHAD\":[\"Выполнение EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" ошибка\"],\"few\":[\"#\",\" ошибки\"],\"many\":[\"#\",\" ошибок\"],\"other\":[\"#\",\" ошибок\"]}]],\"Dvdihe\":[\"На \",[\"0\"],\" — проверьте запрос перед выполнением.\"],\"DzFLzw\":[\"Да\"],\"E-JUtQ\":[\"Подтверждение операций\"],\"E0kcnZ\":[\"Общее\"],\"E2mje_\":[\"Выбрать запрос для объяснения\"],\"EDieyg\":[\"Удалить это SSH-подключение?\"],\"EHZxPj\":[\"Развернуть\"],\"EL4oDO\":[\"Доступна новая версия\"],\"EPi4gT\":[\"Сортировать по \",[\"field\"]],\"EWPtMO\":[\"Код\"],\"EWX0mQ\":[\"Без группы\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Неизвестно\"],\"EhADgB\":[\"Удалить столбец\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Используется актуальная версия\"],\"Em6JFd\":[\"Подсчитать строки\"],\"EnGiqG\":[[\"0\"],\" элементов\"],\"Ew1n5z\":[\"Поиск плагинов…\"],\"F18WP3\":[\"Параметры\"],\"F3uc1x\":[\"Экспортируемый файл будет содержать пароли к базам данных и SSH в открытом виде. Храните его в надёжном месте!\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" строка\"],\"few\":[\"#\",\" строки\"],\"many\":[\"#\",\" строк\"],\"other\":[\"#\",\" строки\"]}]],\"F6pfE9\":[\"Активно\"],\"F8tXg7\":[\"Предпросмотр данных\"],\"F9-6yK\":[\"Формат копирования по умолчанию\"],\"F9lxfG\":[\"Удалить\"],\"F9nsa2\":[\"Файл истории был повреждён и перенесён в резервную копию. Новые запросы будут записываться как обычно. Резервный файл:\"],\"FF_oap\":[\"По умолчанию\"],\"FK8rlP\":[\"SSH-подключения не настроены\"],\"FMRcH8\":[\"Первая строка как заголовок\"],\"FNvDMc\":[\"На этой неделе\"],\"FQe1FI\":[\"Оценка строк\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Операция\"],\"Fa_cky\":[\"Схема: \",[\"tableName\"]],\"FpEL5o\":[\"Выберите отдельную тему для SQL-редактора или синхронизируйте её с темой приложения.\"],\"FsvZQL\":[\"Изменена ячейка \",[\"n\"]],\"FtwKL9\":[\"Переключить вкладку\"],\"FznI3z\":[\"Удалить внешний ключ \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Ошибка предпросмотра: \"],\"G8Q5Zq\":[\"Пространство имён обязательно\"],\"GAohqx\":[\"Удалить столбец\"],\"GJR99u\":[\"Не удалось удалить столбец: \"],\"GKfzzM\":[\"Выберите подключение...\"],\"GS-Mus\":[\"Экспортировать\"],\"GUaLUq\":[\"Не удалось загрузить схему: \"],\"GXP-Iw\":[\"Добавить SQL-ячейку\"],\"Gj1mLb\":[\"Ячейки переупорядочены\"],\"GlbqG2\":[\"Reset to driver default\"],\"Gs5AlY\":[\"Открыть\"],\"GtmO8_\":[\"от\"],\"GxkJXS\":[\"Загрузка...\"],\"H-o4D2\":[\"Создать новый столбец\"],\"H2B-KW\":[\"Формат по умолчанию при копировании строк через Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Повторить\"],\"H7mlCc\":[\"/абсолютный/путь/к/db.sqlite\"],\"H86f9p\":[\"Свернуть\"],\"H9P8CD\":[\"добавить первый фильтр\"],\"HAQlGl\":[\"Активность AI\"],\"HKNZrs\":[\"Условие индекса\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Удалить \",\"#\",\" строку\"],\"few\":[\"Удалить \",\"#\",\" строки\"],\"many\":[\"Удалить \",\"#\",\" строк\"],\"other\":[\"Удалить \",\"#\",\" строки\"]}]],\"HPuCiP\":[\"Путь к папке\"],\"HUs1R3\":[\"Нет открытых вкладок для этого подключения.\"],\"HV4Isp\":[\"Введите SSH-пароль\"],\"HVC8Hh\":[\"Скопировано в буфер обмена\"],\"HWEpq8\":[\"Запись на диск/с\"],\"HY4nP5\":[\"Встроенно\"],\"HcmoWv\":[\"Не удалось сохранить представление: \"],\"He8v1Y\":[\"Убрать из «Применить все»\"],\"HehHP1\":[\"Расположение по умолчанию\"],\"HilYn4\":[\"Ноутбук пуст. Добавьте ячейку для начала работы.\"],\"HjxVK_\":[\"Быстрая проверка подключения\"],\"HmMnRx\":[\"Режим WKT\"],\"HoKCiI\":[\"Приложение автоматически перезапустится после установки\"],\"HpK_8d\":[\"Перезагрузить\"],\"Hpi4Jm\":[\"Вступить сейчас\"],\"HuA3RU\":[\"Табуляция\"],\"I128p7\":[\"Вертикальная черта (|)\"],\"I3AgqA\":[\"Настроить SSH вручную\"],\"I5VBsr\":[\"Как в приложении\"],\"I8yrPb\":[\"Заменить таблицу\"],\"I92BdB\":[\"Убрать из группы\"],\"I92fr4\":[\"Напомнить позже\"],\"I99Miw\":[\"Стоимость\"],\"IETZIR\":[\"Изменить название ячейки\"],\"IG9wzA\":[\"Не удалось добавить строку: \"],\"ILleOG\":[\"Тип ресурса должен быть \\\"service\\\" или \\\"pod\\\"\"],\"IQ3gAw\":[\"Загрузить файл\"],\"IUwGEM\":[\"Сохранить изменения\"],\"IUwmLq\":[\"Прямые зависимости из package.json и src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Библиотеки с открытым исходным кодом\"],\"I_43p6\":[\"Безопасность\"],\"Iaizf4\":[\"Appearance\"],\"Il3FBB\":[\"Открыть/закрыть панель фильтров\"],\"IniZRK\":[\"Загрузка недоступна — загружен только предпросмотр\"],\"Isaozb\":[\"Проверить и настроить\"],\"J17_9Z\":[\"Не удалось сохранить триггер: \"],\"J2Cb95\":[\"Активные запросы и подключения через этот плагин будут прерваны.\"],\"J6v1s_\":[\"Модель по умолчанию\"],\"JE-DVk\":[\"Интерпретатор\"],\"JEGlfK\":[\"Начало\"],\"JKDPqP\":[\"Сначала выберите контекст\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Использовать SSH-туннель\"],\"JRz8tw\":[\"MySQL и MariaDB предоставляют реальные метрики только в поддерживаемых вариантах EXPLAIN ANALYZE или ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP or SVG · max 512 KB\"],\"JY5Oyv\":[\"База данных\"],\"JlFRIB\":[\"Часовой пояс сессии, отправляемый в MySQL после подключения.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Отклонено\"],\"K3H9p5\":[\"Не задано\"],\"K5Dgu_\":[\"Базы данных\"],\"K8IGKf\":[\"Тип аутентификации\"],\"KAYNSW\":[\"Количество логов, хранимых в памяти (1–10000)\"],\"KHTGbr\":[\"Предварительный EXPLAIN\"],\"KHvda8\":[\"Не null\"],\"KJKNaZ\":[\"Копировать как `column`\"],\"KM5Kc8\":[\"Выберите хотя бы один столбец\"],\"KSCnVQ\":[\"Тип\"],\"KUjOb9\":[\"работает\"],\"KXBdwy\":[\"Обновить подпрограммы\"],\"KXNyX7\":[\"Установить DEFAULT\"],\"Kd70-v\":[\"Импортировать из буфера обмена...\"],\"KhI4oS\":[\"Открыть связанную строку в \",[\"0\"]],\"KhgrNu\":[\"Интеграция MCP-сервера\"],\"KirERL\":[\"Таймаут\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Не удалось удалить индекс: \"],\"KzeARD\":[\"Не удалось удалить таблицу: \"],\"L-rMC9\":[\"Сбросить по умолчанию\"],\"L3HXkQ\":[\"Исправления ошибок\"],\"LCZ7Dy\":[\"Копировать имя\"],\"LFDf6p\":[\"Создать новый триггер базы данных\"],\"LK1m4W\":[\"индексы\"],\"LMeAoR\":[\"строки\"],\"LPCdc-\":[\"Промпт для названия вкладки запроса\"],\"LPFmga\":[\"Добавить в «Применить все»\"],\"LYzbQ2\":[\"Инструмент\"],\"Lbis_V\":[\"Быстрый навигатор\"],\"Lcpbe2\":[\"Процесс плагина не удалось запустить. Подробности ниже.\"],\"LhUHHO\":[\"Предпросмотр сгенерированного SQL\"],\"LihabZ\":[\"EXPLAIN поддерживается только для DML-запросов (SELECT, INSERT, UPDATE, DELETE). DDL-запросы (CREATE, DROP, ALTER) не поддерживаются.\"],\"LnT0hQ\":[\"Добавить столбец\"],\"LvutiO\":[\"Предложить (AI)\"],\"M-rHQO\":[\"Выйти из полноэкранного режима\"],\"M0XJba\":[\"Очистить всю историю запросов для этого подключения?\"],\"M1co_O\":[\"Настроено\"],\"M73whl\":[\"Контекст\"],\"MDa5o0\":[\"например, before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Показать все\"],\"MXdOwj\":[\"Отдельные подключения\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Выберите подключение K8s\"],\"Mc1tjS\":[\"Включите ANALYZE для просмотра реальных строк, времени, итераций и буферов.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" строк\"],\"Mp0jQ_\":[\"Этот драйвер поддерживает первичные ключи только при создании таблицы\"],\"MqpZwN\":[\"Процесс Tabularis\"],\"MxIx43\":[\"↑↓ для навигации, Enter для открытия\"],\"MygtgQ\":[\"Добавить Markdown-ячейку\"],\"N40H-G\":[\"Все\"],\"N5UQxq\":[\"Ollama не обнаружен на порту \",[\"0\"],\". Запущен ли он?\"],\"N6GBcC\":[\"Подтверждение удаления\"],\"N6aqHp\":[\"Запросы\"],\"N9_S15\":[\"Будет создана новая таблица\"],\"NBdMa1\":[\"Самый медленный шаг\"],\"NC2AI2\":[\"Длина\"],\"NCzNnx\":[\"Сортировать по возрастанию\"],\"NT4Ubs\":[\"Удалить пользовательский ключ и вернуться к переменной окружения (если задана)\"],\"NUjrCO\":[\"Ничего не найдено в избранном\"],\"NWJrXh\":[\"SQL триггера обязателен\"],\"NZUDnP\":[\"Итого по дереву: \",[\"0\"]],\"Nc2VQn\":[\"Добавить в существующую\"],\"NgFERn\":[\"Добавить в избранное\"],\"NktMHG\":[\"Имя базы данных\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Проверить\"],\"Nq5QTk\":[\"объяснить N-й\"],\"O2STgu\":[\"Ошибка экспорта: \"],\"O8SV8O\":[\"Загрузка...\"],\"O9_WW6\":[\"подключение\"],\"OGEsKj\":[\"Выполнить все ячейки\"],\"OGWdBg\":[\"Название представления\"],\"OHqT6w\":[\"Нажмите сочетание клавиш...\"],\"OXJsaG\":[\"Недопустимое имя параметра\"],\"OfhWJH\":[\"Сбросить\"],\"OlAl5i\":[\"Развернуть все\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Присоединиться к Discord\"],\"P1YGsb\":[\"Генерация SQL\"],\"P2m1xb\":[\"Остановить при ошибке\"],\"P3Qlys\":[\"Нет ID подключения\"],\"P6Y3Yf\":[\"Выполните эту команду в терминале, затем перезапустите Claude Code.\"],\"PCdj-c\":[\"Снять выбор\"],\"PMnFt9\":[\"Чтение с диска/с\"],\"PQU2Va\":[\"Принимать подсказку по Enter\"],\"PRnH8G\":[\"из \",[\"0\"]],\"PY8UF3\":[\"Переключён параллельный режим (ячейка \",[\"n\"],\")\"],\"PiH3UR\":[\"Скопировано!\"],\"Pia95d\":[\"Имя столбца обязательно\"],\"PrElXQ\":[\"Обновить\"],\"PrixCC\":[\"Строки будут добавлены в существующую таблицу\"],\"Pujgbb\":[\"Настроить назначение\"],\"Pw_eQV\":[\"Плагин не запустился\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Нет сохранённых запросов\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Нет дочерних процессов\"],\"QCxMC0\":[\"Автоматически проверять новые версии при запуске приложения\"],\"QEazml\":[\"Удалить выбранные\"],\"QHcLEN\":[\"Подключено\"],\"QLHHFO\":[\"Режим только для чтения\"],\"QOvAW3\":[\"Новые функции\"],\"QULGRi\":[\"Допустимые запросы не найдены\"],\"QZwllF\":[\"Обзор...\"],\"QbkSr_\":[\"EXPLAIN недоступен для этого запроса.\"],\"QeHFYZ\":[\"EXPLAIN завершился с ошибкой: \",[\"0\"]],\"Qll2Tb\":[\"По убыв.\"],\"Qoq-GP\":[\"Подробнее\"],\"Qu4Hog\":[\"Ноутбук импортирован\"],\"R-A2Vd\":[\"Нет данных для отображения\"],\"R0Hkb2\":[\"Выбрано баз данных: \",[\"0\"]],\"R1nHhB\":[\"Уже существует\"],\"R2Iz3m\":[\"Название триггера\"],\"R6oBUl\":[\"Преобразовать в консоль\"],\"R9Khdg\":[\"Авто\"],\"RDjuBN\":[\"Настройка\"],\"RF-HyV\":[\"Выберите язык интерфейса. «Авто» использует язык системы.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Скопировать имя\"],\"RI-HZc\":[\"Введите ключ \",[\"0\"]],\"RJrE17\":[\"Удалить представление \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Звезда помогает другим найти проект\"],\"Rb3Tdm\":[\"Имя блокнота\"],\"RcbKJ3\":[\"При обновлении\"],\"RkefFq\":[\"Выполнить EXPLAIN перед показом окна подтверждения, чтобы пользователь видел план выполнения.\"],\"RnF_hl\":[\"Загрузка реестра плагинов...\"],\"Rns7_C\":[\"Это действие нельзя немедленно отменить\"],\"RoKRqW\":[\"Доступные плагины\"],\"RphpKk\":[\"Внешний вид\"],\"Rt8sHM\":[\"Обнаружена сортировка или временные операции\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Включено\"],\"S1veKH\":[\"Отменить выбранные изменения\"],\"S5zeZU\":[\"Переключить предпросмотр\"],\"S8Yqbl\":[\"Вставить\"],\"SDND4q\":[\"Не настроено\"],\"SJRy3D\":[\"(Генерируется автоматически)\"],\"SSwIjo\":[\"Установить EMPTY\"],\"SgvA_r\":[\"Нажмите «Запустить» (Ctrl/Command+F5) для загрузки данных таблицы\"],\"SlfejT\":[\"Ошибка\"],\"SoATkx\":[\"Копировать ячейку\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL эндпоинта\"],\"T7w5CQ\":[\"Не удалось создать новую строку: \"],\"T9947j\":[\"Значение (например, 'текст' или 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Переключить на вертикальное расположение\"],\"TK5oex\":[\"Сохранить промпт\"],\"TKQ7K-\":[\"Установить\"],\"TKZreP\":[\"Обязательный\"],\"TMLAx2\":[\"Обязательно\"],\"TO08JI\":[\"внешние ключи\"],\"TQloo1\":[\"Создать внешний ключ\"],\"TVKqvO\":[\"Изменить строку\"],\"TYSdQ3\":[\"Выполнить SELECT-запрос\"],\"TfDFHS\":[\"Переносить длинные строки в редакторе вместо горизонтальной прокрутки.\"],\"Tibfjs\":[\"Нет сохранённых подключений — создайте ниже\"],\"Tj36Dr\":[\"Сбросить по умолчанию\"],\"Tjg925\":[\"Загрузка определения триггера...\"],\"TlZ7Ul\":[\"Заблокировать запрос\"],\"TpwXyg\":[\"Если время отсутствует, сервер вернул только оценочный план.\"],\"Tw2M1h\":[\"Ошибка установки\"],\"Ty-rm9\":[\"SSH-подключения\"],\"Tz0i8g\":[\"Настройки\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Подключения Kubernetes\"],\"U4uzyV\":[\"Что нового\"],\"U8W7sX\":[\"Не удалось получить определение триггера: \"],\"UB112k\":[\"Прекратить выполнение при ошибке в ячейке\"],\"UCQiqt\":[\"на \",[\"0\"]],\"UECR2b\":[[\"0\"],\" на \",[\"1\"],\" — проверьте запрос перед выполнением.\"],\"UI85PB\":[\"Ни один триггер не соответствует фильтру\"],\"UNKlAy\":[\"Настройки для \",[\"clientName\"],\" установлены. Перезапустите приложение.\"],\"URmyfc\":[\"Подробности\"],\"UWQBvp\":[\"Сгенерировать SQL-шаблоны\"],\"UawTKZ\":[\"Необязательно. Укажите исполняемый файл для запуска плагина (например, python3 на macOS/Linux или python либо полный путь на Windows). Оставьте пустым, чтобы использовать значение по умолчанию.\"],\"Ub8sf5\":[\"SQLite не поддерживает удаление внешних ключей через ALTER TABLE.\"],\"UbbJ8j\":[\"Варианты не найдены\"],\"Ubs68g\":[\"Общие\"],\"UftN8J\":[\"Отметьте подключения, которые должны быть только для чтения. Остальные работают как обычно.\"],\"UnQNah\":[\"Удалить столбец \\\"\",[\"0\"],\"\\\" из таблицы \\\"\",[\"tableName\"],\"\\\"?\\n\\nВНИМАНИЕ: Все данные в этом столбце будут безвозвратно удалены. Действие необратимо.\"],\"UncTTh\":[\"Сумма RSS по дереву процессов — общая память может учитываться несколько раз\"],\"UpjgFm\":[\"Изменены параметры\"],\"UsAnu1\":[\"ANALYZE выполняет запрос. Осторожно с операторами изменения данных.\"],\"UxKoFf\":[\"Навигация\"],\"Uy4iQO\":[\"Рядом\"],\"UzFX5x\":[\"Размер отступа\"],\"UzWGWO\":[\"Перейти к вводу SQL WHERE\"],\"V-chk5\":[\"Как часто проверять активные подключения. Установите 0 для отключения.\"],\"V-pw1j\":[\"Название таблицы\"],\"V2T0Uw\":[\"Сохранённых блокнотов пока нет.\"],\"V3aNwx\":[\"Редактор данных\"],\"VGYp2r\":[\"Применить ко всем\"],\"VH8S7x\":[\"Столбец из буфера обмена\"],\"VIAEcS\":[\"Не удалось загрузить базы данных. Проверьте учётные данные.\"],\"VKdztF\":[\"Добавить строки\"],\"VLiHXI\":[\"Данные ANALYZE\"],\"VMbmXc\":[\"Удалить «\",[\"pluginName\"],\"»? Файлы плагина будут удалены.\"],\"VO3weF\":[\"Файл не загружен\"],\"VOZlKc\":[\"Импорт базы данных\"],\"VPzsIz\":[\"Генерация названия...\"],\"VUul0v\":[\"Завершение\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Не удалось удалить триггер: \"],\"VfOb_W\":[\"Триггеры не найдены\"],\"Vgy9LX\":[\"Все запросы\"],\"Vi2Pqx\":[\"от\"],\"Vl2zn2\":[\"остановлен\"],\"Vo4uBA\":[\"Ошибка при установке плагина. Подробности ниже.\"],\"VqqyOs\":[\"Выполните запрос, чтобы увидеть результаты\"],\"VzhDFh\":[\"Блокировать любые не-SELECT запросы через MCP, если подключение явно не разрешено ниже.\"],\"W3uwpT\":[\"Закрыть все вкладки\"],\"W4MKLh\":[\"например: Выглядит рискованно на проде, нужно подтверждение…\"],\"WA8RND\":[\"Удалить таблицу \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Удалить таблицу\"],\"WLnvCZ\":[\"Введите имя пользователя\"],\"WM-__8\":[\"Поиск подключений...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка импортирована в «\",[\"tableName\"],\"»\"],\"few\":[\"#\",\" строки импортированы в «\",[\"tableName\"],\"»\"],\"many\":[\"#\",\" строк импортировано в «\",[\"tableName\"],\"»\"],\"other\":[\"#\",\" строки импортированы в «\",[\"tableName\"],\"»\"]}]],\"WTfntM\":[\"Удалить запрос \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"успешно\"],\"WcF1uL\":[\"Название группы\"],\"Weq9zb\":[\"Общие\"],\"WmPpB1\":[\"Загрузка плана выполнения…\"],\"Wu7cK0\":[\"Базы данных не найдены\"],\"WvoUQF\":[\"Удалена ячейка \",[\"n\"]],\"Ww3pDD\":[\"РУЧНАЯ КОМАНДА\"],\"X-20AU\":[\"Введите промпт для названия вкладки...\"],\"X-U6_w\":[\"Шрифт\"],\"X5fs0g\":[\"Создайте первое подключение, чтобы начать работу.\"],\"X7Ayjp\":[\"Пароль сохранён в системном хранилище ключей\"],\"X9kySA\":[\"Избранное\"],\"XJOV1Y\":[\"Активность\"],\"XMCLEL\":[\"Создать новый триггер\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Объяснение запроса\"],\"XVF2Pf\":[\"Изменить схемы\"],\"XW6OYF\":[\"Для этого плагина может потребоваться интерпретатор (например, Python). Укажите путь к нему в настройках плагина.\"],\"XZB6Xr\":[\"Максимум записей в логе\"],\"Xcffv2\":[\"Показывать кнопки AI-помощи и объяснения в редакторе\"],\"XeqTSh\":[\"Тип соединения\"],\"XmJfZT\":[\"имя\"],\"XoQfG1\":[\"SSH-пользователь\"],\"XwI0Vw\":[\"Авто (системный)\"],\"XyDlLX\":[\"Название индекса\"],\"Y2P2aK\":[\"Выберите схемы для загрузки:\"],\"Y8HYw2\":[\"значение\"],\"Y8zX3R\":[\"Вставить в редактор\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Поиск...\"],\"YWlnMZ\":[\"Порт Ollama\"],\"YYdC3A\":[\"Версия \",[\"0\"]],\"YYn8b5\":[\"Просмотр и установка плагинов из реестра.\"],\"Y_3yKT\":[\"Открыть в новой вкладке\"],\"YiAQ_Q\":[\"Обновить таблицы\"],\"Ysjr9Y\":[\"Предпросмотр SQL\"],\"YswNf7\":[\"Все уровни\"],\"YtNwr6\":[\"Максимальное количество записей истории запросов для одного подключения.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Загрузка...\"],\"Z7ZXbT\":[\"Подтвердить\"],\"Z8JpBH\":[\"Экспортировать как ноутбук\"],\"Z8fBIc\":[\"Реальных строк больше оценки\"],\"ZC2VJP\":[\"Выполнить\"],\"ZCIS4k\":[\"нет активных фильтров\"],\"ZF1_UT\":[\"Режим SSL\"],\"ZGjBPa\":[\"Очистить логи\"],\"ZHQTlM\":[\"Импорт из\"],\"ZIFDoJ\":[\"Выберите хотя бы структуру или данные\"],\"ZIZA6o\":[\"Изменить перед подтверждением\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" предупреждение при разборе\"],\"few\":[\"#\",\" предупреждения при разборе\"],\"many\":[\"#\",\" предупреждений при разборе\"],\"other\":[\"#\",\" предупреждения при разборе\"]}]],\"ZVn8p2\":[\"Отображать номера строк на полях редактора.\"],\"ZYnwzF\":[\"Отключено\"],\"Za3_fO\":[\"Error\"],\"Zf7LHg\":[\"Контексты не найдены (установлен ли kubectl?)\"],\"Zfotp5\":[\"Большие расхождения в оценках обычно указывают на устаревшую статистику или предикаты, которые планировщик не может смоделировать точно.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Не удалось загрузить схемы\"],\"ZqXGPF\":[\"Не удалось удалить представление: \"],\"ZuL73E\":[\"Создать новое представление базы данных\"],\"_-bi4r\":[\"Ссылочная таблица\"],\"_AEYGI\":[\"История выполнения пуста\"],\"_FdpZc\":[\"Не удалось загрузить определение представления: \"],\"_FxSdi\":[\"Прямые зависимости приложения, бэкенда и инструментов с открытым исходным кодом.\"],\"_JyTG8\":[\"Введите промпт для объяснения...\"],\"_Ltc_k\":[\"Дополнительно\"],\"_Q2Wix\":[\"строк\"],\"_TK1zF\":[\"Сохранённое подключение\"],\"_bJFBE\":[\"Таймаут подключения\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Дерево\"],\"_dqduX\":[\"Следующая страница\"],\"_fwE6J\":[\"Ранее\"],\"_n04sB\":[\"Завершить\"],\"_otxbQ\":[\"Файл ключа\"],\"_pezIT\":[\"Не удалось подключиться к \",[\"0\"],\". Проверьте настройки или убедитесь, что база данных запущена.\"],\"_srfkj\":[\"Пользовательский ключ удалён\"],\"_t6aFo\":[\"MySQL и MariaDB могут возвращать EXPLAIN FORMAT=JSON или табличный EXPLAIN в зависимости от версии сервера.\"],\"_xTbaM\":[\"столбцы\"],\"_yxaaL\":[\"Уникальный индекс\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis — бесплатный проект с открытым исходным кодом. Если он вам полезен, поддержите проект и присоединяйтесь к сообществу.\"],\"a9CASo\":[\"SQLite поддерживает только переименование столбцов. Другие изменения требуют пересоздания таблицы вручную.\"],\"aAIQg2\":[\"Внешний вид\"],\"aC_vCa\":[\"Сгенерировать название с помощью AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Выберите узел для просмотра подробностей\"],\"aHKcKc\":[\"Предыдущая страница\"],\"aI-5wG\":[\"Verify CA\"],\"aJJySV\":[\"например, users\"],\"aQ8swY\":[\"Значение по умолчанию\"],\"aScJP1\":[\"Запустить этот запрос\"],\"aVNbN8\":[\"Условия фильтрации\"],\"aWhdMQ\":[\"Использовать существующее SSH-подключение\"],\"aXYd8V\":[\"Таймаут\"],\"aX_S_r\":[\"Страница \",[\"0\"],\" из \",[\"totalPages\"]],\"agZcf8\":[\"Сгенерированный SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [поля]\"],\"alplHn\":[\"Анализ плана запроса с помощью AI...\"],\"anBcU3\":[\"Если Tabularis вам полезен и вы хотите видеть больше возможностей — поддержите проект: вносите вклад в код, сообщайте об ошибках или поставьте звезду репозиторию.\"],\"arHmj2\":[\"Удалить этот запрос из истории?\"],\"arKcqW\":[\"Старые серверы могут возвращать только оценочные планы с меньшим количеством метрик.\"],\"arcpYe\":[\"Требовать подтверждение\"],\"aurEkh\":[\"Загрузка процессов…\"],\"avtdsd\":[\"Режим SQL\"],\"az8lvo\":[\"Выключено\"],\"b1Ah3z\":[\"Фокус на\"],\"b392Dr\":[\"Развернуть все\"],\"b5S_PU\":[\"Имя базы данных\"],\"bAvovP\":[\"Переместить вниз\"],\"bH3JqY\":[\"Таблицы не найдены\"],\"bP5JOn\":[\"Перенос строк\"],\"bcOdok\":[\"Удалить группу\"],\"bcqeas\":[\"Все MCP-запросы только для чтения\"],\"bmca5u\":[\"Только запись\"],\"bpCiBU\":[\"Разрешить запись из MCP\"],\"bqnhqW\":[\"Оценка превышает реальное количество строк\"],\"bqpcP7\":[\"Экспорт базы данных\"],\"bspG20\":[\"Сравнение\"],\"bu5X4V\":[\"Завершить с ошибкой\"],\"bw22Gk\":[\"Схема столбцов\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Основные проблемы\"],\"cFCKYZ\":[\"Отклонить\"],\"cFGrCP\":[\"таблица\"],\"cGeFup\":[\"Размер шрифта\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Фокус на таблице\"],\"cM9NHc\":[\"Откатить до\"],\"cO9-2L\":[\"Отключён\"],\"cSev-j\":[\"Фильтры\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Импортировать \",\"#\",\" строку\"],\"few\":[\"Импортировать \",\"#\",\" строки\"],\"many\":[\"Импортировать \",\"#\",\" строк\"],\"other\":[\"Импортировать \",\"#\",\" строки\"]}]],\"c_xoSn\":[\"Переименована ячейка \",[\"n\"]],\"cd0XEW\":[\"Сохранить запрос\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Разделить группу\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" операторов\"],\"d34vwG\":[\"Загрузить базы данных\"],\"d6ynQ7\":[\"Сортировать по убыванию\"],\"d8_6_v\":[\"отменить\"],\"d8wc1_\":[\"Примеры значений\"],\"dBXoCS\":[\"Обнаружена переменная окружения, но её можно переопределить, указав ключ выше.\"],\"dD7NPy\":[\"Структура\"],\"dEgA5A\":[\"Отменить\"],\"dMtLDE\":[\"до\"],\"dPJVhW\":[\"Ошибка установки\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" сессия\"],\"few\":[\"#\",\" сессии\"],\"many\":[\"#\",\" сессий\"],\"other\":[\"#\",\" сессий\"]}]],\"dTUzKm\":[\"Запустить выбранные (\",[\"0\"],\")\"],\"dU_iQN\":[\"Сессии не соответствуют текущим фильтрам.\"],\"dUh9QW\":[\"Планирование\"],\"dVoir2\":[\"Добавлена Markdown-ячейка \",[\"n\"]],\"dZ0d2O\":[\"Выберите хотя бы одну таблицу\"],\"dhi13U\":[\"Choose image…\"],\"dli1JX\":[\"Применить изменения\"],\"dmYV6f\":[\"Подпрограммы\"],\"dohZCo\":[\"Инструкции для AI-генерации SQL. Используйте \",[\"SCHEMA\"],\" как заполнитель структуры базы данных.\"],\"dtxpK2\":[\"Анализ\"],\"dwW9nJ\":[\"Показывать номера строк\"],\"dwWVw_\":[\"Показывать экран приветствия\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" вкладка\"],\"few\":[\"#\",\" вкладки\"],\"many\":[\"#\",\" вкладок\"],\"other\":[\"#\",\" вкладки\"]}]],\"dxxY9r\":[\"При совпадении\"],\"dyN4j9\":[\"Нажмите «Запустить предпросмотр», чтобы увидеть результаты\"],\"e07Iz5\":[\"Открыть диспетчер задач\"],\"e0NzXu\":[\"Проект находится в активной разработке (WIP). Основные функции стабильны, впереди много интересного.\"],\"e1UKxf\":[\"Сохранить этот запрос\"],\"e34gdU\":[\"Сколько времени MCP-процесс ожидает решения пользователя перед отменой запроса.\"],\"e62LQd\":[\"Завершить принудительно\"],\"e6QZsM\":[\"Тема редактора\"],\"e8CirT\":[\"Выполнить запрос\"],\"eD2kUP\":[\"Чтений буфера\"],\"eE0JZ4\":[\"Версия\"],\"eIDch7\":[\"Введите промпт для анализа плана выполнения...\"],\"eIVolo\":[\"Диск R/W\"],\"eJOEBy\":[\"Экспорт...\"],\"eKHY3W\":[\"Настройки плагина\"],\"eMb6Ub\":[\"Выберите ресурс...\"],\"ePK91l\":[\"Изменить\"],\"eXweu6\":[\"Развернуть ячейку\"],\"ecNsTE\":[\"Запросы не найдены\"],\"ecUA8p\":[\"Сегодня\"],\"ecpIZP\":[\"Введите пароль, если ключ зашифрован\"],\"esl-Tv\":[\"Тип ресурса\"],\"exyUec\":[\"Подключение\"],\"f2AJjl\":[\"Удалить строку\"],\"f4pD-j\":[\"Проверка подключения не удалась\"],\"f7sXvi\":[\"Введите пароль\"],\"fAsxc0\":[\"Последовательные сканирования\"],\"fIeFs0\":[\"Выберите значение...\"],\"fJm92A\":[\"Выберите файл с планом EXPLAIN (Postgres JSON или текст) для визуализации.\"],\"fOuPPd\":[\"Плагин\"],\"fXVIZq\":[\"Значения\"],\"f_b1TA\":[\"История выполнения\"],\"fghnqP\":[\"Переключиться на подключение 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Запятая (,)\"],\"fp711N\":[\"Заблокировано (только чтение)\"],\"fpzyLj\":[\"Страница \",[\"0\"],\" из \",[\"1\"]],\"fuA6oy\":[\"Таймаут сокета\"],\"fvImQM\":[\"Выбрано: \",[\"0\"]],\"fwr_nh\":[\"Устанавливайте расширения, управляйте драйверами плагинов и настройками среды выполнения.\"],\"g0ZzK4\":[\"Корректный JSON\"],\"g11hAR\":[\"Новая строка\"],\"g8VcMm\":[\"Мой кластер K8s\"],\"gCFR_O\":[\"Параллельное выполнение (Запустить все)\"],\"gEjU98\":[\"Открыть подключения\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Требуется хотя бы один столбец\"],\"gSuQrG\":[\"Подключения по запросу \\\"\",[\"search\"],\"\\\" не найдены\"],\"gUypqb\":[\"Перезапустить запрос\"],\"gZWMnn\":[\"AI-анализ\"],\"ghYd73\":[\"Выберите цель...\"],\"giAqEC\":[\"Создать новую таблицу\"],\"gnQS8X\":[\"Максимальный размер пакета для MySQL-коннектора.\"],\"gqV5VL\":[\"Встроенное, не настраивается\"],\"gww_XE\":[\"Ссылочный столбец\"],\"gxXPJ9\":[\"Настроить интерпретатор\"],\"gxutEv\":[\"Триггер обновлён\"],\"gz6UQ3\":[\"Развернуть\"],\"h-XNc9\":[\"Разделитель CSV\"],\"h-kNAk\":[\"например, sales_data\"],\"h3Z_aK\":[\"Введите Markdown...\"],\"h7MgpO\":[\"Горячие клавиши\"],\"h7peZQ\":[\"Разрешён\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" системный процесс\"],\"few\":[\"#\",\" системных процесса\"],\"many\":[\"#\",\" системных процессов\"],\"other\":[\"#\",\" системных процессов\"]}]],\"hEZrFh\":[\"Выполнить SQL-файл...\"],\"hEipgW\":[\"Проверить обновления сейчас\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Экспортировать как CSV\"],\"hItdtk\":[\"Выбрать папку\"],\"hXFVjo\":[\"Название таблицы обязательно\"],\"hZ6znB\":[\"Порт\"],\"h_huI6\":[\"Перезапустить\"],\"hbz1rh\":[\"ключи\"],\"hdsaJo\":[\"Импорт...\"],\"he3ygx\":[\"Копировать\"],\"hfGimp\":[\"Выберите пространство имён...\"],\"hjjSEi\":[\"Подключения только для чтения\"],\"hjwN_s\":[\"Имя ресурса\"],\"hlF1mD\":[\"Копировать выделение\"],\"hnboBb\":[\"AI-анализ плана запроса\"],\"hq4-D2\":[\"API-ключ хранится в системном хранилище ключей. Указанный здесь ключ имеет приоритет над переменной окружения.\"],\"hqjXdn\":[\"Не удалось удалить SSH-подключение\"],\"hqofAK\":[\"Копировать SQL\"],\"hy6L14\":[\"Открыть на GitHub\"],\"hyjACX\":[\"Ячейки свёрнуты/развёрнуты\"],\"hz1b5W\":[\"Совпадающие элементы не найдены\"],\"i1vAVM\":[\"Создать новую таблицу\"],\"i3S5T3\":[\"Поиск в избранном...\"],\"i4_LY_\":[\"Запись\"],\"i5HBWh\":[\"История запросов сброшена\"],\"iAVlge\":[\"Настройте инструкции для AI-генерации названий ячеек ноутбука. Содержимое ячейки (SQL или Markdown) передаётся как сообщение пользователя.\"],\"iE1yAB\":[\"Фильтр таблиц...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Подключиться\"],\"iSryJ2\":[\"Мой SSH-сервер\"],\"iT7UeX\":[\"Добавить индекс\"],\"iUWwuR\":[\"Скачать и установить\"],\"ia7i08\":[\"Сначала выберите контекст/пространство имён/тип\"],\"ibepZK\":[\"Сырой SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Сохранено\"],\"igcsfY\":[\"В реестре нет доступных плагинов.\"],\"ij-Elv\":[\"Предпросмотр изображения\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" запрос\"],\"few\":[\"#\",\" запроса\"],\"many\":[\"#\",\" запросов\"],\"other\":[\"#\",\" запроса\"]}]],\"ioL38P\":[\"Мониторинг процессов плагинов, CPU, RAM и диска в реальном времени\"],\"ixlL_e\":[\"SSH-ключ (необязательно)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Выберите модель\"],\"j3gyYH\":[\"Применить все\"],\"j5CWO4\":[\"Актуально\"],\"j9HPuI\":[\"Строка #\",[\"0\"]],\"jBtpMP\":[\"Все статусы\"],\"jEu4bB\":[\"Столбцы\"],\"jEyQIs\":[\"Подпрограммы не найдены\"],\"jHc1By\":[\"Удалить представление\"],\"jI6sj4\":[\"Стоимость, время и оценки строк зачастую недоступны по сравнению с PostgreSQL и MySQL.\"],\"jIxQCZ\":[\"Недоступно для вашей платформы\"],\"jKIncn\":[\"Название базы данных обязательно\"],\"jPSk57\":[\"Причина (необязательно)\"],\"jUNY_d\":[\"представление\"],\"jVqjDo\":[\"Недопустимый формат файла ноутбука\"],\"jWSZ-A\":[\"Только предпросмотр — полные данные не загружены\"],\"jgjIDU\":[\"Не удалось удалить существующий триггер: \"],\"jnhuWy\":[\"Таймаут сокета в миллисекундах.\"],\"jpeU_Z\":[\"Блокноты\"],\"jpgB4Y\":[\"Название подключения обязательно\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"дочерний процесс\"],\"jx0t66\":[\"Свернуть дочерние процессы\"],\"jxShEf\":[\"Создать представление\"],\"jz5PKx\":[\"Определение представления\"],\"k-0mL-\":[\"Добавить столбец\"],\"k-XiMX\":[\"Сырой\"],\"k2UnVy\":[\"Условие хеша\"],\"k5UUX3\":[\"Триггер создан\"],\"kALwhk\":[\"секунд\"],\"kBiBq7\":[\"Удалить индекс \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Показать/скрыть график\"],\"kI1qVD\":[\"Форматировать\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка · \",[\"1\"],\"мс\"],\"few\":[\"#\",\" строки · \",[\"2\"],\"мс\"],\"many\":[\"#\",\" строк · \",[\"2\"],\"мс\"],\"other\":[\"#\",\" строки · \",[\"2\"],\"мс\"]}]],\"kJDmsI\":[\"Подробности события\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Реестр\"],\"kY-q3P\":[[\"label\"],\" обязательно\"],\"kexIdC\":[\"Использовать проброс портов Kubernetes\"],\"kj2-CR\":[\"Подробности ошибки\"],\"krksx_\":[\"Готово\"],\"kwY6nh\":[\"Закрыть\"],\"kx0s-n\":[\"Результаты\"],\"kxUEfE\":[\"Не удалось получить определение подпрограммы: \"],\"l2Op2p\":[\"Параметры запроса\"],\"l9Ivba\":[\"Процессы плагинов и системные ресурсы\"],\"lBdPxu\":[\"Accent color\"],\"lCF0wC\":[\"Обновить\"],\"lEQRwq\":[\"Данные (INSERT)\"],\"lIvS11\":[\"Пересоздать триггер\"],\"lKS0ce\":[\"Новая таблица создана\"],\"lOekZ3\":[\"Переключить на горизонтальное расположение\"],\"lUA1C1\":[\"Пароль SSH-ключа (необязательно)\"],\"lVeG20\":[\"Зависимости Rust\"],\"lXAG6D\":[\"Инструкции для AI-объяснения запросов. Используйте \",[\"LANGUAGE\"],\" как заполнитель языка вывода.\"],\"lbbYjy\":[\"Прямое редактирование файла конфигурации. Изменения вступят в силу после перезапуска.\"],\"lhKW0m\":[\"Добавлена SQL-ячейка \",[\"n\"]],\"lk-wOz\":[\"Фильтр триггеров...\"],\"lk0x32\":[\"Размер страницы результатов (Limit)\"],\"lkz6PL\":[\"Длительность\"],\"lmVGeo\":[\"Добавить внешний ключ\"],\"lnnx3E\":[\"Подключить Tabularis к Claude Desktop, Cursor и другим клиентам\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Добавить\"],\"m2Q_r8\":[\"Определять JSON в текстовых столбцах\"],\"m2tskz\":[\"Успешно\"],\"mA-qpe\":[\"Выполнение завершено\"],\"mBhhbA\":[\"Логи скопированы в буфер обмена\"],\"mCNdzH\":[\"Запустить ячейку\"],\"mO95sp\":[\"Закрыть панель\"],\"mP7dLi\":[\"Введите название шрифта выше\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" заблокированное\"],\"few\":[\"#\",\" заблокированных\"],\"many\":[\"#\",\" заблокированных\"],\"other\":[\"#\",\" заблокированных\"]}]],\"mS74ir\":[\"Не удалось сохранить SSH-подключение\"],\"mSqtw8\":[\"Запустить предпросмотр\"],\"mURmfQ\":[\"Определение представления (SQL)\"],\"mX_isJ\":[\"Вертикально\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Структура (DDL)\"],\"mrk4Cf\":[\"Сортировать по \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Мы только что открыли отдельное место для пользователей Tabularis. Получайте помощь, делитесь советами, участвуйте в формировании дорожной карты.\"],\"mtvVdV\":[\"Обработано строк\"],\"mx4evv\":[\"Создать таблицу\"],\"myXGZW\":[\"Пошаговый\"],\"mzI_c-\":[\"Скачать\"],\"n7JDTx\":[\"Установите и включите плагины, чтобы увидеть их здесь\"],\"nDDJir\":[\"Поиск по сессии, клиенту, подключению…\"],\"nHP-Kr\":[\"Нет активной сессии. Выберите подключение.\"],\"nKhCjW\":[\"Выбрать таблицы\"],\"nNmhuY\":[\"Создать индекс\"],\"nNwvm4\":[\"Ошибка\"],\"nOVim5\":[\"Не удалось сохранить подключение\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Требуется расширение: \",[\"0\"]],\"ngO6Pv\":[\"Разрешить Enter (в дополнение к Tab) для принятия активной подсказки автодополнения. При отключении Enter всегда вставляет новую строку.\"],\"nhmF3p\":[\"подключений\"],\"noM5A_\":[\"Создайте первое подключение\"],\"nohy4m\":[\"Нет активности MCP.\"],\"nr-axf\":[\"Удалить плагин\"],\"nsPFX9\":[\"Открыть в Visual Explain\"],\"nuBbBr\":[\"График\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Изменить\"],\"o21Y-P\":[\"записей\"],\"o3tP_A\":[\"Удалить индекс\"],\"o45L8r\":[\"Введите название подключения\"],\"o53XGh\":[\"Копировать выбранные строки\"],\"o7J4JM\":[\"Фильтр\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Уровень\"],\"oGiIL7\":[\"Провайдер по умолчанию\"],\"oJ4rAm\":[\"Подключение потеряно\"],\"oJlXF2\":[\"Импортировать ноутбук\"],\"oMFv82\":[\"Разделить вертикально\"],\"oOFiQg\":[\"Ограничивает количество строк, получаемых за один запрос, во избежание проблем с производительностью. Установите 0, чтобы отключить (не рекомендуется).\"],\"oT9ZD3\":[\"Скрыть обзор\"],\"oUzLtx\":[\"Редактирование триггера требует его удаления и повторного создания. Продолжить изменение \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Изменён график (ячейка \",[\"n\"],\")\"],\"oWfclW\":[\"Показывать просмотрщик JSON, когда нетипизированная текстовая ячейка содержит объект или массив JSON. Создаёт небольшие издержки на разбор каждой ячейки.\"],\"obpbdz\":[\"Файл конфигурации не найден (создайте вручную)\"],\"odZgfC\":[\"AI-КЛИЕНТЫ\"],\"ogZhXn\":[\"Направление по умолчанию для ER-диаграмм\"],\"ohUJJM\":[\"Плагины\"],\"ok3hJJ\":[\"Установлено\"],\"olAdaI\":[\"Реальных строк\"],\"olWzar\":[\"Принудительно завершить процесс плагина\"],\"ovBPCi\":[\"Default\"],\"owzTWN\":[\"Список моделей AI обновлён\"],\"oxYi6j\":[\"Базовый размер шрифта во всём приложении (10–20 пикселей).\"],\"p--hsQ\":[\"Соединение с базой данных прервано\"],\"p6NueD\":[\"НОВАЯ\"],\"pOYHox\":[\"Действия\"],\"pR9bTR\":[\"Нет данных BLOB\"],\"pRDT0m\":[\"Таблица\"],\"pS8S5q\":[\"например, users, orders, products\"],\"pSws_M\":[\"Название таблицы\"],\"pVLbKZ\":[\"Представление создано\"],\"pWT04I\":[\"Проверка...\"],\"pZJ_6D\":[\"Название индекса обязательно\"],\"pddYFG\":[\"Введите промпт для названия ячейки...\"],\"pnpyuD\":[\"Включить логирование\"],\"pqKMPv\":[\"Не удалось создать таблицу: \"],\"pqaP1h\":[\"Закрыть\"],\"pqarBu\":[\"По возр.\"],\"ptuq35\":[\"например, Comic Sans MS\"],\"pzu7v4\":[\"Горизонтально\"],\"q-ch8m\":[\"Отметьте подключения, которым разрешена запись. Остальные — только для чтения.\"],\"qIrtcK\":[\"Обновления\"],\"qOqy8G\":[\"Проверка конфигурации...\"],\"qWaVNs\":[\"Сохранить и перезапустить\"],\"qb3LPX\":[\"Открыть ER-диаграмму\"],\"qkK0vq\":[\"Название представления обязательно\"],\"qki9tG\":[\"Ошибка\"],\"qoIir-\":[\"Базовый URL OpenAI-совместимого API. Примеры: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Свернуть все\"],\"r6ncaO\":[\"Закрыть вкладку\"],\"rAJlpP\":[\"Порт контейнера\"],\"rG3WVm\":[\"Чтение\"],\"rGRCeK\":[\"Очистить историю запросов\"],\"rNIto7\":[\"Имя ресурса обязательно\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Ноутбук экспортирован\"],\"rY4sEV\":[\"Удалить внешний ключ\"],\"rbu0nO\":[\"Управление SSH-подключениями\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" подключение\"],\"few\":[\"#\",\" подключения\"],\"many\":[\"#\",\" подключений\"],\"other\":[\"#\",\" подключения\"]}]],\"rn2_2V\":[\"Удалить фильтр\"],\"roABNH\":[\"История запросов пуста\"],\"rtir7c\":[\"неизвестно\"],\"ru0-2W\":[\"Нет активных подключений\"],\"rvDPWO\":[\"Разрыв оценки\"],\"rwWjWg\":[\"Что нового\"],\"s6m9gy\":[\"Удалить триггер \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Проверить подключение\"],\"sBOaim\":[\"Файл конфигурации сохранён. Перезапустить сейчас?\"],\"sCyv9B\":[\"Обновить модели\"],\"sSUqe4\":[\"Удалить\"],\"sUBkgN\":[\"Генерация SQL...\"],\"sZZG3d\":[\"Импортировать \\\"\",[\"0\"],\"\\\"?\\nСуществующие данные могут быть перезаписаны.\"],\"sbK5ck\":[\"Поиск в истории...\"],\"sq_bS6\":[\"При удалении\"],\"suW7-E\":[\"Таймаут подключения в миллисекундах.\"],\"t-R8-P\":[\"Выполнение\"],\"t1OfVY\":[[\"totalLibraries\"],\" библиотек\"],\"t2TMzs\":[\"Закрыть вкладку\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Выберите таблицу...\"],\"t7KRl1\":[\"Журнал всех вызовов MCP-инструментов и запросов, ожидающих подтверждения. Хранится локально — никуда не отправляется.\"],\"t9NJIk\":[\"Обнаружены интенсивные сканирования\"],\"tB7xof\":[\"Временные операции или сортировка\"],\"tBBXTO\":[\"Интервал пинга\"],\"tFrT3w\":[\"Добавьте этот фрагмент в файл конфигурации клиента вручную, если автоматическая установка не сработала.\"],\"tJ7UbA\":[\"объяснить активный\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Разделить горизонтально\"],\"tQhW-D\":[\"Настройки логирования\"],\"tXFGEx\":[\"Нет сохранённых подключений Kubernetes. Нажмите «Добавить», чтобы создать.\"],\"tXLz_8\":[\"Удалить\"],\"tXpRby\":[\"Таблица данных\"],\"tbysEk\":[\"Действия\"],\"tdta9X\":[\"Страница \",[\"0\"]],\"tfDRzk\":[\"Сохранить\"],\"tfEioV\":[\"Выполнить все SQL-ячейки сверху вниз\"],\"tiAIaJ\":[\"SSH-пароль отсутствует. Введите заново.\"],\"tk22BR\":[\"Вставьте структурированные данные и проверьте схему перед импортом\"],\"tst44n\":[\"События\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL-файл выполнен\"],\"u6QeR6\":[\"Перезапустить сейчас\"],\"uAQUqI\":[\"Статус\"],\"uBAxNB\":[\"Редактор\"],\"uFViPK\":[\"Нет доступных SSH-подключений\"],\"uHUuhp\":[\"Объяснить этот запрос\"],\"uHfFzS\":[\"Размер шрифта редактора\"],\"uJ_3K5\":[\"Удалить блокнот «\",[\"0\"],\"»? Это действие нельзя отменить.\"],\"uKaNJ3\":[\"Открыть в JSON-редакторе\"],\"uQBwTo\":[\"Схемы\"],\"ub54ff\":[\"Центр плагинов\"],\"ufFyBs\":[\"База данных экспортирована\"],\"upNmR2\":[\"Открыть в боковом редакторе\"],\"utMia3\":[\"Снять выбор\"],\"uyNaJg\":[\"1 элемент\"],\"v61dnS\":[\"Укажите точное название модели вашего OpenAI-совместимого провайдера.\"],\"v6oeyr\":[\"Установлено\"],\"v75DGg\":[\"Выбрать файл\"],\"v99dO4\":[\"Первичный ключ\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" запрос\"],\"few\":[\"#\",\" запроса\"],\"many\":[\"#\",\" запросов\"],\"other\":[\"#\",\" запроса\"]}]],\"vCSBPD\":[\"Добавить фильтр\"],\"vH7uJj\":[\"Сортировать по…\"],\"vUOA1-\":[\"Поиск моделей...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE включает реальные строки, время, итерации и счётчики буферов при наличии.\"],\"vXIe7J\":[\"Язык\"],\"vYf4Jm\":[\"Введите полную SQL-функцию (например, ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Предпочтительный\"],\"vditm4\":[\"План выполнения\"],\"vks_ls\":[\"Закрыть остальные вкладки\"],\"vnAnIp\":[\"Модель \",[\"0\"],\" не найдена у провайдера \",[\"1\"],\". Она может работать некорректно.\"],\"vqoN5u\":[\"Структура\"],\"vrAvbP\":[\"Удалить группу «\",[\"0\"],\"»? Подключения переместятся в раздел без группы.\"],\"vtJ2yO\":[\"Проводник\"],\"vujQJ5\":[\"Локализация\"],\"vvJPVL\":[\"Показать обзор\"],\"vwI5S4\":[\"Готово\"],\"vzH-7Z\":[\"Объяснить\"],\"w7QmD_\":[\"Введите системный промпт...\"],\"w9eMXw\":[\"триггер\"],\"wCJFlW\":[\"Прошло времени\"],\"wCfv2R\":[\"Добавить подключение\"],\"wGfc86\":[\"Очистить всю историю\"],\"wGwNv4\":[\"Активная база данных\"],\"wJJ-Wy\":[\"Установка...\"],\"wMe2Qp\":[\"Пространство имён\"],\"wQiel_\":[\"Попаданий в буфер\"],\"wQn-RM\":[\"Добавить столбец\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Применено\"],\"wTmVhm\":[\"Удалить\"],\"wZeIWq\":[\"Импорт из буфера обмена\"],\"w_bY7R\":[\"Логи\"],\"wc_8bA\":[\"Ожидает подтверждения\"],\"wckWOP\":[\"Управление\"],\"wdYcKH\":[\"Открытые вкладки\"],\"wja8aL\":[\"Без названия\"],\"wkOAzk\":[\"Нет блокнотов, соответствующих запросу.\"],\"wp49Ao\":[\"Не удалось обработать вставки: \"],\"wqG2hQ\":[\"Пропустить (не импортировать)\"],\"wwrAsK\":[\"Заполните все обязательные поля\"],\"wwu18a\":[\"Icon\"],\"x2fr_j\":[\"Граф\"],\"xANKBj\":[\"Функции\"],\"xBwjck\":[\"Изменения вступят в силу после перезапуска.\"],\"xDAtGP\":[\"Сообщение\"],\"xECY01\":[\"Хранимые процедуры\"],\"xGPNgZ\":[\"Настройка промптов\"],\"xNgtS-\":[\"Представления не найдены\"],\"xOPa1b\":[\"Порт должен быть в диапазоне от 1 до 65535\"],\"xY9s5E\":[\"Таймаут\"],\"xaVUr1\":[\"Съешь же ещё этих мягких французских булок, да выпей чаю\"],\"xbvTzL\":[\"Путь к файлу\"],\"xlew5F\":[\"Очистить\"],\"xmNyKz\":[\"Проверка...\"],\"xtuh6D\":[\"Развернуть проводник\"],\"y-Zdqj\":[\"Выберите контекст...\"],\"y3HaQk\":[\"Момент срабатывания\"],\"yLFey_\":[\"Создать триггер\"],\"yLianM\":[\"Открыть просмотрщик JSON\"],\"yQXjG5\":[\"Снять выбор\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Изменить триггер\"],\"y_0uwd\":[\"Вчера\"],\"ygCKqB\":[\"Остановить\"],\"ykCc6r\":[\"Изменена база данных (ячейка \",[\"n\"],\")\"],\"ynVMSc\":[\"Выбрать все\"],\"ytdz1d\":[\"AI запрашивает запись в базу данных\"],\"yyhzur\":[\"Создать таблицу\"],\"yz7wBu\":[\"Закрыть\"],\"z0VdfR\":[\"процедура\"],\"z407wX\":[\"SSH-пароль\"],\"z5kV0h\":[\"Подключения\"],\"zBTMzx\":[\"Предпросмотр\"],\"zCaAKs\":[\"Ошибка обновления\"],\"zDAakK\":[\"Отображение диаграммы невозможно без ID подключения.\"],\"zGe21h\":[\"Этот ключ загружен из переменной окружения\"],\"zGfL5t\":[\"значение\"],\"zL6-4A\":[\"Нет запущенных процессов плагинов\"],\"zLZhCi\":[\"Новое сообщество в Discord!\"],\"zLlCou\":[\"Копировать имя столбца\"],\"zNEL34\":[\"Присоединяйтесь к сообществу\"],\"zNgTlV\":[\"Закрыть вкладки справа\"],\"zQz55p\":[\"Показать структуру\"],\"zR0FfH\":[\"Экспортировано в \",[\"target\"]],\"zRZeOc\":[\"Поиск таблиц, представлений, процедур, триггеров...\"],\"zUNMsr\":[\"SSH-ключ\"],\"zXMRzb\":[\"SSH-порт\"],\"zZgoXr\":[\"Таблицы не найдены\"],\"zaWbms\":[\"Откатить изменения\"],\"zgClmU\":[\"Установить конфигурацию\"],\"zga9sT\":[\"ОК\"],\"zgk5iK\":[\"Введите значение...\"],\"zvzN4C\":[\"Сделать активным\"],\"zzDlyQ\":[\"Успешно\"],\"zzMxrp\":[\"Изменить config.json\"],\"zz_Wd_\":[\"Режим\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/zh/messages.po b/src/locales/zh/messages.po index 5c57efe5..01f5fe6e 100644 --- a/src/locales/zh/messages.po +++ b/src/locales/zh/messages.po @@ -6,39 +6,5291 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: @lingui/cli\n" "Language: zh\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" +#: src/components/modals/NewRowModal.tsx +msgid "(Auto-generated)" +msgstr "(自动生成)" + +#. placeholder {0}: stats.blocked +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# blocked} other {# blocked}}" +msgstr "{0, plural, other {# 个被阻止}}" + +#. placeholder {0}: proc.children.length +#. placeholder {0}: stats.child_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# child process} other {# child processes}}" +msgstr "{0, plural, one {# 个子进程} other {# 个子进程}}" + +#. placeholder {0}: connections.length +#: src/pages/Connections.tsx +msgid "{0, plural, one {# connection} other {# connections}}" +msgstr "{0, plural, one {# 个连接} other {# 个连接}}" + +#. placeholder {0}: stats.errors +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# error} other {# errors}}" +msgstr "{0, plural, other {# 个错误}}" + +#. placeholder {0}: stats.total +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "{0, plural, one {# event} other {# events}}" +msgstr "{0, plural, other {# 个事件}}" + +#. placeholder {0}: queries.length +#: src/components/modals/ExplainSelectionModal.tsx +msgid "{0, plural, one {# explainable query found} other {# explainable queries found}}" +msgstr "" + +#. placeholder {0}: parsed.warnings.length +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# parsing warning} other {# parsing warnings}}" +msgstr "{0, plural, one {# 条解析警告} other {# 条解析警告}}" + +#. placeholder {0}: queries.length +#: src/components/modals/QuerySelectionModal.tsx +msgid "{0, plural, one {# query found} other {# queries found}}" +msgstr "{0, plural, one {找到 # 个查询} other {找到 # 个查询}}" + +#. placeholder {0}: result.rows.length +#. placeholder {1}: executionTime != null ? Math.round(executionTime) : "—" +#. placeholder {2}: executionTime != null ? Math.round(executionTime) : "—" +#: src/components/notebook/ResultToolbar.tsx +msgid "{0, plural, one {# row · {1}ms} other {# rows · {2}ms}}" +msgstr "{0, plural, one {# 行 · {1}毫秒} other {# 行 · {2}毫秒}}" + +#. placeholder {0}: result.rows_inserted +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row imported into \"{tableName}\"} other {# rows imported into \"{tableName}\"}}" +msgstr "{0, plural, one {已将 # 行导入到 \"{tableName}\"} other {已将 # 行导入到 \"{tableName}\"}}" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {# row} other {# rows}}" +msgstr "{0, plural, one {# 行} other {# 行}}" + +#. placeholder {0}: visibleSessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "{0, plural, one {# session} other {# sessions}}" +msgstr "{0, plural, other {# 个会话}}" + +#. placeholder {0}: systemStats.process_count +#: src/pages/TaskManagerPage.tsx +msgid "{0, plural, one {# system process running} other {# system processes running}}" +msgstr "{0, plural, one {# 个系统进程正在运行} other {# 个系统进程正在运行}}" + +#. placeholder {0}: tabs.length +#: src/components/modals/TabSwitcherModal.tsx +msgid "{0, plural, one {# tab} other {# tabs}}" +msgstr "" + +#. placeholder {0}: parsed.rowCount +#: src/components/modals/ClipboardImportModal.tsx +msgid "{0, plural, one {Import # row} other {Import # rows}}" +msgstr "{0, plural, one {导入 # 行} other {导入 # 行}}" + +#. placeholder {0}: progress.statements_executed +#. placeholder {1}: progress.total_statements +#: src/components/modals/ImportDatabaseModal.tsx +msgid "{0} / {1} statements" +msgstr "{0} / {1} 语句" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "{0} API Key" +msgstr "{0} API 密钥" + +#. placeholder {0}: selectedDatabasesState.length +#: src/components/modals/NewConnectionModal.tsx +msgid "{0} database(s) selected" +msgstr "已选择 {0} 个数据库" + +#. placeholder {0}: filteredItems.length +#: src/components/modals/QuickNavigatorModal.tsx +msgid "{0} elements" +msgstr "{0} 个元素" + +#. placeholder {0}: approval.clientHint +#. placeholder {1}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "{0} on {1} — review and decide before it executes." +msgstr "{0} 在 {1} 上 — 请审核后再执行。" + +#. placeholder {0}: activeTab.result.rows.length +#. placeholder {0}: entry.result!.rows.length +#. placeholder {0}: entry.result.rows.length +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "{0} rows retrieved" +msgstr "已检索 {0} 行" + +#. placeholder {0}: selected.size +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "{0} selected" +msgstr "已选 {0} 列" + +#. placeholder {0}: structuredFilters.length +#: src/components/ui/TableToolbar.tsx +msgid "{activeFilterCount} of {0} active" +msgstr "{activeFilterCount} / {0} 已激活" + +#: src/components/ui/DataGrid.tsx +msgid "{deleteRowCount, plural, one {Delete # row} other {Delete # rows}}" +msgstr "{deleteRowCount, plural, one {删除 # 行} other {删除 # 行}}" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "{label} is required" +msgstr "{label} 是必需的" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "{rowCount, plural, one {# row} other {# rows}}" +msgstr "{rowCount, plural, one {# 行} other {# 行}}" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "{totalLibraries} libraries" +msgstr "{totalLibraries} 个库" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/db.sqlite" +msgstr "/absolute/path/to/db.sqlite" + +#: src/components/modals/NewConnectionModal.tsx +msgid "/absolute/path/to/folder" +msgstr "/absolute/path/to/folder" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "/path/to/id_rsa" +msgstr "/path/to/id_rsa" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "↑↓ to navigate, Enter to open" +msgstr "↑↓ 导航,Enter 打开" + +#. placeholder {0}: previewResult.rows.length - 5 +#: src/components/modals/ViewEditorModal.tsx +msgid "+{0} more rows" +msgstr "还有 {0} 行" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "1 element" +msgstr "1 个元素" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "A database connection was lost" +msgstr "" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "A new table will be created" +msgstr "将创建一个新表" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "A restart is required to apply changes." +msgstr "" + +#: src/components/modals/CommunityModal.tsx +msgid "A star helps others discover the project" +msgstr "一个 Star 可以帮助其他人发现这个项目" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Accent color" +msgstr "强调色" + +#: src/components/settings/AppearanceTab.tsx +msgid "Accept Suggestion with Enter" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Actions" +msgstr "" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Actions" +msgstr "操作" + +#: src/pages/TaskManagerPage.tsx +msgctxt "taskManager" +msgid "Actions" +msgstr "操作" + +#: src/components/connections/StatusBadge.tsx +msgid "Active" +msgstr "活动" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/pages/Editor.tsx +msgid "Active database" +msgstr "当前数据库" + +#: src/pages/TaskManagerPage.tsx +msgid "Active queries and connections through this plugin will be interrupted." +msgstr "通过此插件的活动查询和连接将被中断。" + +#: src/pages/McpPage.tsx +msgid "Activity" +msgstr "活动" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual Rows" +msgstr "实际行数" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Actual rows exceed estimate" +msgstr "实际行数高于估算" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Add" +msgstr "添加" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Add Column" +msgstr "添加列" + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Add Column" +msgstr "添加列" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Add Column" +msgstr "添加列" + +#: src/pages/Connections.tsx +msgid "Add Connection" +msgstr "添加连接" + +#: src/components/ui/TableToolbar.tsx +msgid "Add filter" +msgstr "添加筛选器" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Foreign Key" +msgstr "添加外键" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add Index" +msgstr "添加索引" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add Markdown Cell" +msgstr "添加 Markdown 单元格" + +#: src/components/notebook/AddCellButton.tsx +msgid "Add SQL Cell" +msgstr "添加 SQL 单元格" + +#: src/components/ui/TableToolbar.tsx +msgid "add the first filter" +msgstr "添加第一个筛选器" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Add this to your client config file manually if automatic install fails." +msgstr "如果自动安装失败,请将此添加到您的客户端配置文件中。" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Add to Favorites" +msgstr "添加到收藏" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added Markdown cell {n}" +msgstr "添加了 Markdown 单元格 {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Added SQL cell {n}" +msgstr "添加了 SQL 单元格 {n}" + +#: src/components/settings/AppearanceTab.tsx +msgid "Adjust the base font size used throughout the application (10-20px)." +msgstr "调整整个应用使用的基础字体大小(10-20px)。" + +#: src/pages/Settings.tsx +msgid "AI" +msgstr "AI" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "AI" +msgstr "自增" + +#: src/components/settings/AiActivityPanel.tsx +#: src/pages/Settings.tsx +msgid "AI Activity" +msgstr "AI 活动" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "AI Analysis" +msgstr "AI 分析" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "AI CLIENTS" +msgstr "AI 客户端" + +#: src/components/settings/AiTab.tsx +msgid "AI models refreshed from providers" +msgstr "已从提供商刷新 AI 模型" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Provider not configured. Please go to Settings > AI." +msgstr "未配置 AI 提供商。请前往 设置 > AI。" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "AI Query Plan Analysis" +msgstr "AI 执行计划分析" + +#: src/components/modals/AiApprovalModal.tsx +msgid "AI requested a database write" +msgstr "AI 请求执行数据库写入" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "AI Suggest" +msgstr "AI 建议" + +#: src/components/settings/PluginsTab.tsx +msgid "All" +msgstr "全部" + +#: src/components/settings/LogsTab.tsx +msgid "All levels" +msgstr "所有级别" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All other connections stay read-only. Only the connections checked here may execute writes." +msgstr "其余连接保持只读。仅勾选的连接可以执行写入。" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "All queries" +msgstr "所有查询" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All statuses" +msgstr "所有状态" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "All tools" +msgstr "所有工具" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Allow" +msgstr "允许" + +#: src/components/settings/AppearanceTab.tsx +msgid "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline." +msgstr "" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Allow writes from MCP" +msgstr "允许 MCP 写入" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Already exists" +msgstr "已存在" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Alter View" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "An environment variable is present, but you can override it by setting a key above." +msgstr "检测到环境变量,但您可以通过在上方设置密钥来覆盖它。" + +#: src/components/modals/PluginInstallErrorModal.tsx +msgid "An error occurred while installing the plugin. See the details below." +msgstr "安装插件时发生错误。请参阅下面的详细信息。" + +#: src/components/modals/VisualExplainModal.tsx +msgid "Analyze" +msgstr "分析" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Analyze Data" +msgstr "分析数据" + +#: src/components/modals/VisualExplainModal.tsx +msgid "ANALYZE executes the query. Use with caution on data-modifying statements." +msgstr "ANALYZE 会实际执行查询。对数据修改语句请谨慎使用。" + +#: src/components/modals/visual-explain/ExplainAiAnalysis.tsx +msgid "Analyzing query plan with AI..." +msgstr "正在使用 AI 分析执行计划..." + +#: src/components/settings/AiTab.tsx +msgid "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable." +msgstr "API 密钥安全存储在您的系统密钥链中。在此设置密钥将覆盖环境变量。" + +#: src/pages/Settings.tsx +msgid "Appearance" +msgstr "外观" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Appearance" +msgstr "外观" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Appearance" +msgstr "外观" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Append rows" +msgstr "追加行" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Append to existing" +msgstr "追加到现有表" + +#: src/components/ui/FilterRow.tsx +msgid "Applied" +msgstr "已应用" + +#: src/components/ui/FilterRow.tsx +msgid "Apply" +msgstr "应用" + +#: src/components/ui/TableToolbar.tsx +msgid "Apply All" +msgstr "全部应用" + +#: src/pages/Editor.tsx +msgid "Apply to all" +msgstr "应用到全部" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval gate" +msgstr "审批门" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Approval ID" +msgstr "审批 ID" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Approval required" +msgstr "需要审批" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Approve" +msgstr "批准" + +#: src/components/settings/LogsTab.tsx +msgid "Are you sure you want to clear all logs?" +msgstr "确定要清除所有日志吗?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to clear all query history for this connection?" +msgstr "确定要清除此连接的所有查询历史吗?" + +#. placeholder {0}: column.name +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "" +"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +"\n" +"WARNING: This will permanently delete all data in this column. This action cannot be undone." +msgstr "" +"确定要从表 \"{tableName}\" 中删除列 \"{0}\" 吗?\n" +"\n" +"警告:这将永久删除此列中的所有数据。此操作无法撤销。" + +#. placeholder {0}: group?.name +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete group \"{0}\"? Connections in this group will be moved to ungrouped." +msgstr "确定要删除分组 \"{0}\" 吗?此分组中的连接将移至未分组。" + +#. placeholder {0}: queries.find((q) => q.id === favoriteDeleteConfirm)?.name ?? "" +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete query \"{0}\"?" +msgstr "确定要删除查询 \"{0}\" 吗?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete table \"{0}\"?" +msgstr "确定要删除表 \"{0}\" 吗?" + +#: src/pages/Connections.tsx +msgid "Are you sure you want to delete this connection?" +msgstr "确定要删除此连接吗?" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to delete this query from history?" +msgstr "确定要从历史中删除此查询吗?" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Are you sure you want to delete this SSH connection?" +msgstr "确定要删除此 SSH 连接吗?" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop trigger \"{0}\"?" +msgstr "" + +#. placeholder {0}: contextMenu.id +#: src/components/layout/ExplorerSidebar.tsx +msgid "Are you sure you want to drop view \"{0}\"?" +msgstr "确定要删除视图 \"{0}\" 吗?" + +#. placeholder {0}: file.split(/[\\/]/).pop() +#: src/components/layout/ExplorerSidebar.tsx +msgid "" +"Are you sure you want to import \"{0}\"?\n" +"This may overwrite existing data." +msgstr "" +"确定要导入 \"{0}\" 吗?\n" +"这可能会覆盖现有数据。" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Are you sure you want to modify view \"{name}\"?" +msgstr "确定要修改视图 \"{name}\" 吗?" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Are you sure you want to remove \"{pluginName}\"? This will delete the plugin files." +msgstr "确定要移除 \"{pluginName}\" 吗?这将删除插件文件。" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Asc" +msgstr "升序" + +#: src/components/modals/CreateTableModal.tsx +msgid "At least one column is required" +msgstr "至少需要一列" + +#: src/components/modals/CreateIndexModal.tsx +msgid "At least one column must be selected" +msgstr "必须选择至少一列" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere." +msgstr "MCP 工具调用的审计日志,以及等待批准的查询。仅本地存储。" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Authentication Type" +msgstr "认证类型" + +#: src/components/modals/NewRowModal.tsx +msgid "Auto" +msgstr "自动" + +#: src/components/settings/LocalizationTab.tsx +msgid "Auto (System)" +msgstr "自动(系统)" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Auto Increment" +msgstr "自增" + +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Auto paginated" +msgstr "自动分页" + +#: src/components/settings/InfoTab.tsx +msgid "Automatically check for new versions when the app launches" +msgstr "应用启动时自动检查新版本" + +#: src/components/settings/PluginsTab.tsx +msgid "Available Plugins" +msgstr "可用插件" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below." +msgstr "通过 MCP 阻止任何非 SELECT 语句,除非连接被显式允许。" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Blocked (read-only)" +msgstr "已阻止 (只读)" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Brand-new Discord community!" +msgstr "全新的 Discord 社区!" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Breaking Changes" +msgstr "重大变更" + +#: src/components/settings/PluginsTab.tsx +msgid "Browse and install plugins from the registry." +msgstr "浏览并安装注册表中的插件。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse file" +msgstr "浏览文件" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Browse folder" +msgstr "浏览文件夹" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Browse the direct open source dependencies used across the app, backend, and tooling." +msgstr "查看应用、后端和工具链直接使用的开源依赖。" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Browse..." +msgstr "浏览..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Hit" +msgstr "缓冲区命中" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Buffers Read" +msgstr "缓冲区读取" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Bug Fixes" +msgstr "错误修复" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Built-in, not customizable" +msgstr "内置,不可自定义" + +#: src/components/settings/PluginsTab.tsx +msgid "by" +msgstr "作者" + +#: src/components/modals/NewConnectionModal.tsx +msgid "CA Certificate" +msgstr "" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "cancel" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/ConfirmModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/JsonViewerPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Cancel" +msgstr "取消" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Cannot display diagram without a connection ID." +msgstr "无法在没有连接 ID 的情况下显示图表。" + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "Cargo ecosystem" +msgstr "Cargo 生态" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Certificate paths are optional. Leave empty to use system defaults." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Change" +msgstr "更改" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed chart (cell {n})" +msgstr "更改了图表(单元格 {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed database (cell {n})" +msgstr "更改了数据库(单元格 {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Changed parameters" +msgstr "更改了参数" + +#: src/components/notebook/CellChart.tsx +msgid "Chart" +msgstr "图表" + +#: src/components/modals/CommunityModal.tsx +msgid "Chat with the community, get help, suggest features" +msgstr "与社区聊天、获取帮助、建议功能" + +#: src/components/settings/InfoTab.tsx +msgid "Check for Updates Now" +msgstr "立即检查更新" + +#: src/components/settings/InfoTab.tsx +msgid "Check for updates on startup" +msgstr "启动时检查更新" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Checking configuration..." +msgstr "检查配置中..." + +#: src/components/settings/InfoTab.tsx +msgid "Checking..." +msgstr "检查中..." + +#: src/pages/TaskManagerPage.tsx +msgid "child process" +msgstr "子进程" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a connection..." +msgstr "选择连接..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a context..." +msgstr "选择上下文..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a namespace..." +msgstr "选择命名空间..." + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Choose a resource..." +msgstr "选择资源..." + +#: src/components/settings/AppearanceTab.tsx +msgid "Choose an independent theme for the SQL editor, or keep it in sync with the app theme." +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Choose image…" +msgstr "选择图片…" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Choose target..." +msgstr "选择目标..." + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default delimiter character used when copying or exporting rows as CSV." +msgstr "选择复制或导出行为 CSV 时使用的默认分隔符。" + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default format when copying rows with Ctrl+C / Cmd+C." +msgstr "选择使用 Ctrl+C / Cmd+C 复制行时的默认格式。" + +#: src/components/settings/GeneralTab.tsx +msgid "Choose the default layout direction for ER diagrams" +msgstr "选择 ER 图的默认布局方向" + +#: src/components/settings/LocalizationTab.tsx +msgid "Choose your preferred language. 'Auto' will use your system language." +msgstr "选择您的首选语言。自动\"将使用您的系统语言。" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Clear" +msgstr "清空" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "common" +msgid "Clear" +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Clear" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Clear All History" +msgstr "清除所有历史" + +#: src/components/settings/LogsTab.tsx +msgid "Clear Logs" +msgstr "清除日志" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Clear Query History" +msgstr "清除查询历史" + +#: src/components/ui/DataGrid.tsx +msgid "Clear sort" +msgstr "清除排序" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Click 'Run Preview' to see results" +msgstr "点击\"运行预览\"查看结果" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Click another emoji below to change." +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Click Load Databases to fetch available databases." +msgstr "" + +#: src/pages/Editor.tsx +msgid "Click to jump to page" +msgstr "点击跳转到页面" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Client" +msgstr "客户端" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Certificate" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Client Key" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Clipboard column" +msgstr "剪贴板列" + +#: src/components/connections/ActionButtons.tsx +msgid "Clone" +msgstr "克隆" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +#: src/components/modals/McpModal.tsx +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx #: src/components/modals/SchemaModal.tsx +#: src/components/modals/VisualExplainModal.tsx +#: src/pages/JsonViewerPage.tsx msgid "Close" +msgstr "关闭" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close All Tabs" +msgstr "关闭所有标签" + +#: src/components/ui/TableToolbar.tsx +msgid "Close filter panel (ESC)" +msgstr "关闭筛选面板 (ESC)" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Other Tabs" +msgstr "关闭其他标签" + +#: src/components/layout/SplitPaneLayout.tsx +msgid "Close panel" +msgstr "关闭面板" + +#: src/components/ui/StackedResultItem.tsx +#: src/i18n/registries/shortcutLabels.ts +msgid "Close tab" +msgstr "关闭标签" + +#: src/components/modals/TabSwitcherModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tab" +msgstr "关闭标签" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Left" +msgstr "关闭左侧标签" + +#: src/components/ui/MultiResultPanel.tsx +#: src/pages/Editor.tsx +msgid "Close Tabs to Right" +msgstr "关闭右侧标签" + +#: src/components/ui/JsonInput.tsx +msgid "Code" +msgstr "代码" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Collapse" +msgstr "收起" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Collapse all" +msgstr "" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Collapse All" +msgstr "全部折叠" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Collapse Cell" +msgstr "折叠单元格" + +#: src/pages/TaskManagerPage.tsx +msgid "Collapse child processes" +msgstr "折叠子进程" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Collapsed/expanded cells" +msgstr "折叠/展开单元格" + +#: src/components/settings/LogsTab.tsx +msgid "Collect application logs in memory for debugging" +msgstr "在内存中收集应用日志以进行调试" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Column name is required" +msgstr "列名称是必需的" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Column Schema" +msgstr "列结构" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "columns" +msgstr "列" + +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +msgid "Columns" +msgstr "列" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Comma (,)" +msgstr "逗号 (,)" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Config file not found (create manually)" +msgstr "未找到配置文件(请手动创建)" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "config.json" +msgstr "" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Configuration installed successfully for {clientName}! Restart the app to apply." +msgstr "{clientName} 的配置安装成功!重启应用以应用更改。" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Configure destination" +msgstr "配置目标" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Configure Interpreter" +msgstr "配置解释器" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSH Inline" +msgstr "配置内联 SSH" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Configure SSL/TLS for secure database connections (optional)." +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Configured" +msgstr "已配置" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Confirm" +msgstr "确认" + +#: src/pages/Connections.tsx +msgid "Confirm Delete" +msgstr "确认删除" + +#: src/components/connections/ActionButtons.tsx +msgid "Connect" +msgstr "连接" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Connect Tabularis to Claude Desktop, Cursor, and more" +msgstr "将 Tabularis 连接到 Claude Desktop、Cursor 等" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connect Timeout" +msgstr "连接超时" + +#: src/pages/Editor.tsx +msgid "Connected" +msgstr "已连接" + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connection" +msgstr "连接" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Connection" +msgstr "连接" + +#: src/components/settings/GeneralTab.tsx +msgid "Connection Health Check" +msgstr "" + +#: src/components/ConnectionHealthMonitor.tsx +msgid "Connection Lost" +msgstr "" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection Name" +msgstr "连接名称" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Connection name is required" +msgstr "连接名称为必填项" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "Connection name is required" +msgstr "连接名称是必需的" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Connection String" +msgstr "" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Connection test failed" +msgstr "连接测试失败" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Connection timeout in milliseconds." +msgstr "连接超时时间,单位为毫秒。" + +#: src/components/layout/sidebar/ConnectionGroupFolder.tsx +msgid "connections" +msgstr "连接" + +#: src/components/layout/Sidebar.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/Connections.tsx +msgid "Connections" +msgstr "连接" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Container Port" +msgstr "容器端口" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Context" +msgstr "上下文" + +#: src/pages/Editor.tsx +msgid "Convert to Console" +msgstr "转换为控制台" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Copied to clipboard" +msgstr "已复制到剪贴板" + +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copied!" +msgstr "已复制!" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Copy" +msgstr "复制" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as `column`" +msgstr "复制为 `列`" + +#: src/components/ui/DataGrid.tsx +msgid "Copy as table.column" +msgstr "复制为 表.列" + +#: src/components/ui/DataGrid.tsx +msgid "Copy Cell" +msgstr "复制单元格" + +#: src/components/ui/DataGrid.tsx +msgid "Copy column name" +msgstr "复制列名" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy error message" +msgstr "复制错误信息" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Copy name" +msgstr "复制名称" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Copy Name" +msgstr "复制名称" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Copy query" +msgstr "复制查询" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Copy Query" +msgstr "复制查询" + +#: src/components/ui/DataGrid.tsx +msgid "Copy selected row(s)" +msgstr "复制选中的行" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Copy selection" +msgstr "复制选区" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Copy SQL" +msgstr "复制 SQL" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Cost" +msgstr "成本" + +#: src/utils/explainPlan.ts +msgid "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL." +msgstr "与 PostgreSQL 和 MySQL 相比,成本、耗时和行数估算通常不可用。" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Count rows" +msgstr "统计行数" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Count Rows" +msgstr "统计行数" + +#: src/pages/TaskManagerPage.tsx +msgid "CPU" +msgstr "CPU" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create a new database trigger" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Create a new database view" +msgstr "创建新的数据库视图" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk" +msgid "Create Foreign Key" +msgstr "创建外键" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex" +msgid "Create Index" +msgstr "创建索引" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Create new column" +msgstr "创建新列" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Create New SSH Connection" +msgstr "创建新的 SSH 连接" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +msgid "Create new table" +msgstr "创建新表" + +#: src/components/modals/CreateTableModal.tsx +msgid "Create New Table" +msgstr "创建新表" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Create New View" +msgstr "创建新视图" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Create Table" +msgstr "创建表" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Create Table" +msgstr "创建表" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Create Trigger" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Create View" +msgstr "创建视图" + +#: src/pages/Connections.tsx +msgid "Create your first connection" +msgstr "创建您的第一个连接" + +#: src/pages/Connections.tsx +msgid "Create your first connection to get started." +msgstr "创建您的第一个连接以开始使用。" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "CSV Delimiter" +msgstr "CSV 分隔符" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Ctrl+Tab" +msgstr "Ctrl+Tab" + +#: src/components/settings/LogsTab.tsx +msgid "Current Logs" +msgstr "当前日志数" + +#: src/components/settings/InfoTab.tsx +msgid "Current Version" +msgstr "当前版本" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Custom" +msgstr "自定义" + +#: src/components/settings/FontPicker.tsx +msgid "Custom Font" +msgstr "自定义字体" + +#: src/components/settings/AiTab.tsx +msgid "Custom key deleted successfully" +msgstr "自定义密钥删除成功" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language." +msgstr "自定义 AI EXPLAIN 计划分析的指令。使用 {LANGUAGE} 作为输出语言的占位符。" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message." +msgstr "自定义 AI Notebook 单元格名称生成的指令。单元格内容(SQL 或 Markdown)作为用户消息发送。" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message." +msgstr "自定义 AI 查询结果标签页名称生成的指令。SQL 查询作为用户消息发送。" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Data (INSERT)" +msgstr "数据 (INSERT)" + +#: src/components/settings/GeneralTab.tsx +msgid "Data Editor" +msgstr "数据编辑器" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Data Grid" +msgstr "数据网格" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "Data Preview" +msgstr "数据预览" + +#: src/components/modals/QueryModal.tsx +msgid "Database" +msgstr "数据库" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Database exported successfully" +msgstr "数据库导出成功" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name" +msgstr "数据库名称" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Name" +msgstr "数据库名称" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database name is required" +msgstr "数据库名称是必需的" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Database Type" +msgstr "数据库类型" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Databases" +msgstr "数据库" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "DDL" +msgstr "DDL" + +#: src/components/settings/LogsTab.tsx +msgid "Debug" +msgstr "调试" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Default" +msgstr "默认" + +#: src/components/modals/CreateTableModal.tsx +msgctxt "createTable" +msgid "Default" +msgstr "默认值" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Default Copy Format" +msgstr "默认复制格式" + +#: src/components/settings/GeneralTab.tsx +msgid "Default Layout" +msgstr "默认布局" + +#: src/components/settings/AiTab.tsx +msgid "Default Model" +msgstr "默认模型" + +#: src/components/settings/AiTab.tsx +msgid "Default Provider" +msgstr "默认提供商" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Default Value" +msgstr "默认值" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Delete" +msgstr "DELETE" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Delete" +msgstr "删除" + +#: src/components/modals/ConfirmModal.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Delete" +msgstr "删除" + +#: src/components/connections/ActionButtons.tsx +msgctxt "connections" +msgid "Delete" +msgstr "删除" + +#: src/pages/Connections.tsx +msgctxt "groups" +msgid "Delete" +msgstr "删除" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +msgctxt "sidebar" +msgid "Delete" +msgstr "删除" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Delete" +msgstr "删除" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Delete Cell" +msgstr "删除单元格" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete column" +msgstr "删除列" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Delete Column" +msgstr "删除列" + +#: src/components/settings/AiTab.tsx +msgid "Delete custom key and revert to environment variable (if present)" +msgstr "删除自定义密钥并恢复到环境变量(如果有)" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete FK" +msgstr "删除外键" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete foreign key \"{name}\"?" +msgstr "删除外键 \"{name}\"?" + +#: src/pages/Connections.tsx +msgid "Delete Group" +msgstr "删除分组" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Index" +msgstr "删除索引" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete index \"{name}\"?" +msgstr "删除索引 \"{name}\"?" + +#. placeholder {0}: pendingDelete?.title ?? "" +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Delete notebook \"{0}\"? This cannot be undone." +msgstr "删除笔记本“{0}”?此操作无法撤销。" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Query" +msgstr "删除查询" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Delete Row" +msgstr "删除行" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Delete selected" +msgstr "删除所选" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Delete Table" +msgstr "删除表" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Delete the entire AI activity history? This cannot be undone." +msgstr "删除全部 AI 活动历史?此操作不可撤销。" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Deleted cell {n}" +msgstr "删除了单元格 {n}" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/i18n/registries/aiActivityStatus.ts +msgid "Denied" +msgstr "已拒绝" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Deny" +msgstr "拒绝" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Desc" +msgstr "降序" + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Deselect All" +msgstr "取消全选" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Deselect All" +msgstr "取消全选" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Deselect All" +msgstr "取消全选" + +#: src/components/ui/FilterRow.tsx +msgid "Deselect from Apply All" +msgstr "从全部应用中取消选择" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Details" +msgstr "详情" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Detect JSON in text columns" +msgstr "在文本列中检测 JSON" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Diff" +msgstr "" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Direct dependencies declared in package.json and src-tauri/Cargo.toml." +msgstr "直接依赖声明于 package.json 和 src-tauri/Cargo.toml。" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Directly edit the raw configuration file. A restart is required to apply changes." +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disable" +msgstr "禁用" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Disabled" +msgstr "" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Disconnect" +msgstr "断开连接" + +#: src/pages/Editor.tsx +msgid "Disconnected" +msgstr "已断开" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk R/W" +msgstr "磁盘 R/W" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Read/s" +msgstr "磁盘读取/s" + +#: src/pages/TaskManagerPage.tsx +msgid "Disk Write/s" +msgstr "磁盘写入/s" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgctxt "discordCallout" +msgid "Dismiss" +msgstr "关闭" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgctxt "sidebar" +msgid "Dismiss" +msgstr "关闭" + +#: src/components/settings/AppearanceTab.tsx +msgid "Display line numbers in the editor gutter." +msgstr "" + +#: src/components/settings/GeneralTab.tsx +msgid "Display the welcome screen when the application starts." +msgstr "应用程序启动时显示欢迎屏幕。" + +#: src/components/settings/PluginsTab.tsx +msgid "Downgrade to" +msgstr "降级到" + +#: src/components/ui/BlobInput.tsx +msgid "Download" +msgstr "下载" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Download & Install" +msgstr "下载并安装" + +#: src/components/ui/BlobInput.tsx +msgid "Download unavailable - only preview loaded" +msgstr "下载不可用 - 仅加载了预览" + +#: src/components/ui/BlobInput.tsx +msgctxt "blobInput" +msgid "Downloading..." +msgstr "下载中..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgctxt "update" +msgid "Downloading..." +msgstr "下载中..." + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Driver Notes" +msgstr "驱动说明" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Drop View" +msgstr "删除视图" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Dump Database" +msgstr "导出数据库" + +#: src/components/ui/FilterRow.tsx +msgid "Duplicate filter" +msgstr "复制筛选器" + +#: src/components/ui/DataGrid.tsx +msgid "Duplicate Row" +msgstr "复制行" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Duration" +msgstr "耗时" + +#: src/components/modals/ViewEditorModal.tsx +msgid "e.g. active_users, order_summary" +msgstr "例如:active_users, order_summary" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. before_insert_user" +msgstr "" + +#: src/components/modals/AiApprovalModal.tsx +msgid "e.g. Looks risky on prod, please confirm…" +msgstr "例如:在生产环境中风险较大,请确认…" + +#: src/components/modals/NewConnectionModal.tsx +msgid "e.g. mysql://user:pass@localhost:3306/db" +msgstr "" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "e.g. python3" +msgstr "例如:python3" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +msgid "e.g. sales_data" +msgstr "例如:销售数据" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "e.g. users" +msgstr "" + +#: src/components/modals/CreateTableModal.tsx +msgid "e.g. users, orders, products" +msgstr "例如:users, orders, products" + +#: src/components/settings/FontPicker.tsx +msgid "e.g., Comic Sans MS" +msgstr "例如:微软雅黑" + +#: src/components/connections/ActionButtons.tsx +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Edit" +msgstr "编辑" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Edit before approving" +msgstr "批准前编辑" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Edit cell name" +msgstr "编辑单元格名称" + +#: src/pages/Settings.tsx +msgid "Edit config.json" +msgstr "" + +#: src/components/notebook/NotebookHistoryPanel.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Edit history" +msgstr "编辑历史" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Edit Row" +msgstr "编辑行" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Edit Schemas" +msgstr "编辑模式" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Edit Trigger" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Edit View" +msgstr "编辑视图" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited cell {n}" +msgstr "编辑了单元格 {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Edited notebook" +msgstr "编辑了笔记本" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing a trigger requires dropping and recreating it. Continue modifying \"{name}\"?" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Editing trigger: {name}" +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Editing view: {name}" +msgstr "正在编辑视图:{name}" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Editor" +msgstr "编辑器" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Family" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Font Size" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgid "Editor Theme" +msgstr "" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Elapsed time" +msgstr "已用时间" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Emoji" +msgstr "表情" + +#: src/utils/explainPlan.ts +msgid "Enable ANALYZE to inspect actual rows, timing, loops, and buffers." +msgstr "启用 ANALYZE 后可查看实际行数、耗时、循环次数和缓冲区信息。" + +#: src/components/settings/LogsTab.tsx +msgid "Enable Logging" +msgstr "启用日志" + +#: src/components/settings/PluginsTab.tsx +msgid "Enabled" +msgstr "已启用" + +#: src/components/settings/AiTab.tsx +msgid "Endpoint URL" +msgstr "端点 URL" + +#. placeholder {0}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Enter {0} Key" +msgstr "输入 {0} 密钥" + +#: src/components/ui/GeometryInput.tsx +msgid "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))" +msgstr "输入完整的 SQL 函数(例如 ST_GeomFromText('POINT(30 40)', 4326))" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain plan analysis prompt..." +msgstr "输入执行计划分析提示词..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter explain prompt..." +msgstr "输入解释提示词..." + +#: src/components/settings/FontPicker.tsx +msgid "Enter font name above" +msgstr "在上方输入字体名称" + +#: src/components/ui/JsonInput.tsx +msgid "Enter JSON..." +msgstr "输入 JSON..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter key passphrase if encrypted" +msgstr "如果加密请输入密钥密码" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter notebook cell name prompt..." +msgstr "输入单元格名称提示词..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter password" +msgstr "输入密码" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter query tab name prompt..." +msgstr "输入查询标签页名称提示词..." + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Enter SSH password" +msgstr "输入 SSH 密码" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Enter system prompt..." +msgstr "输入系统提示词..." + +#: src/components/settings/AiTab.tsx +msgid "Enter the exact model name for your OpenAI-compatible provider." +msgstr "输入您的 OpenAI 兼容提供商的确切模型名称。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Enter username" +msgstr "输入用户名" + +#: src/components/ui/FieldEditor.tsx +#: src/components/ui/RowEditorSidebar.tsx +msgid "Enter value..." +msgstr "输入值..." + +#: src/components/settings/GeneralTab.tsx +msgid "entries" +msgstr "条目" + +#: src/components/settings/AiTab.tsx +msgid "Environment" +msgstr "环境变量" + +#: src/components/settings/GeneralTab.tsx +msgid "ER Diagram" +msgstr "ER 图" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Error" +msgstr "错误" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Error" +msgstr "错误" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/layout/sidebar/SidebarColumnItem.tsx +#: src/components/modals/ErrorModal.tsx +#: src/components/modals/ExportProgressModal.tsx +#: src/components/modals/GenerateSQLModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgctxt "common" +msgid "Error" +msgstr "错误" + +#: src/components/settings/LogsTab.tsx +msgctxt "settings" +msgid "Error" +msgstr "错误" + +#: src/components/modals/PluginInstallErrorModal.tsx +#: src/components/modals/PluginStartErrorModal.tsx +msgctxt "settings" +msgid "Error Details" +msgstr "错误详情" + +#: src/components/modals/QuickNavigatorModal.tsx +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor" +msgid "Esc to close" +msgstr "Esc 关闭" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Est. Rows" +msgstr "预估行数" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate exceeds actual rows" +msgstr "估算高于实际行数" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Estimate Gap" +msgstr "估算偏差" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Event details" +msgstr "事件详情" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Events" +msgstr "事件" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity" +msgid "Events" +msgstr "事件数" + +#: src/components/modals/TriggerEditorModal.tsx +msgctxt "triggers" +msgid "Events" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Execute" +msgstr "执行" + +#: src/components/ui/ResultEntryContent.tsx +#: src/pages/Editor.tsx +msgid "Execute a query to see results" +msgstr "执行查询以查看结果" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Execute all SQL cells top to bottom" +msgstr "从上到下执行所有 SQL 单元格" + +#: src/components/notebook/SqlCellResult.tsx +#: src/components/ui/ResultEntryContent.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Editor.tsx +msgid "Executing query..." +msgstr "执行查询中..." + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Execution" +msgstr "执行时间" + +#: src/components/notebook/CellHistoryPanel.tsx +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Execution History" +msgstr "执行历史" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Exit Fullscreen" +msgstr "退出全屏" + +#: src/components/modals/AiApprovalModal.tsx +msgctxt "aiApproval" +msgid "Expand" +msgstr "展开" + +#: src/components/ui/JsonInput.tsx +msgctxt "jsonInput" +msgid "Expand" +msgstr "展开" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Expand all" +msgstr "" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Expand All" +msgstr "全部展开" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Expand Cell" +msgstr "展开单元格" + +#: src/components/layout/Sidebar.tsx +msgid "Expand Explorer" +msgstr "展开浏览器" + +#: src/components/ui/AiDropdownButton.tsx +msgid "Explain" +msgstr "解释" + +#. placeholder {0}: approval.explainError +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN failed: {0}" +msgstr "EXPLAIN 失败: {0}" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain focused" +msgstr "" + +#: src/components/modals/VisualExplainModal.tsx +msgid "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained." +msgstr "EXPLAIN 仅支持 DML 语句(SELECT、INSERT、UPDATE、DELETE)。DDL 语句(如 CREATE、DROP、ALTER)无法进行分析。" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "explain Nth" +msgstr "" + +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +msgid "Explain Plan" +msgstr "执行计划" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Explain Plan Analysis Prompt" +msgstr "执行计划分析提示词" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Explain this query" +msgstr "" + +#: src/components/modals/AiApprovalModal.tsx +msgid "EXPLAIN unavailable for this query." +msgstr "此查询无法 EXPLAIN。" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Explorer" +msgstr "浏览器" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Export" +msgstr "导出" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as CSV" +msgstr "导出为 CSV" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export as HTML" +msgstr "导出为 HTML" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Export as JSON" +msgstr "导出为 JSON" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Export as Notebook" +msgstr "导出为 Notebook" + +#: src/pages/Connections.tsx +msgctxt "connections" +msgid "Export Connections" +msgstr "导出连接" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export CSV" +msgstr "" + +#: src/components/notebook/NotebookView.tsx +msgid "Export failed" +msgstr "" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Export failed: " +msgstr "导出失败:" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Export JSON" +msgstr "" + +#: src/components/settings/LogsTab.tsx +msgid "Export Logs" +msgstr "导出日志" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Export Notebook" +msgstr "导出笔记本" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Exported to {target}" +msgstr "已导出到 {target}" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Exporting..." +msgstr "导出中..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Extra" +msgstr "其他" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Fail with error" +msgstr "报错" + +#: src/components/notebook/RunAllSummary.tsx +msgid "failed" +msgstr "失败" + +#. placeholder {0}: conn.name +#: src/pages/Connections.tsx +msgid "Failed to connect to {0}. Please check your settings or ensuring the database is running." +msgstr "连接到 {0} 失败。请检查您的设置或确保数据库正在运行。" + +#: src/pages/Connections.tsx +msgid "Failed to create group" +msgstr "创建分组失败" + +#: src/pages/Editor.tsx +msgid "Failed to create new row: " +msgstr "创建新行失败:" + +#: src/components/modals/CreateTableModal.tsx +msgid "Failed to create table: " +msgstr "创建表失败:" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgid "Failed to delete column: " +msgstr "删除列失败:" + +#: src/pages/Connections.tsx +msgid "Failed to delete group" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete index: " +msgstr "删除索引失败:" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to delete SSH connection" +msgstr "删除 SSH 连接失败" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to delete table: " +msgstr "删除表失败:" + +#: src/pages/Connections.tsx +msgid "Failed to disconnect from database" +msgstr "断开数据库连接失败" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to drop existing trigger: " +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop trigger: " +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to drop view: " +msgstr "删除视图失败:" + +#: src/pages/Connections.tsx +msgid "Failed to duplicate connection" +msgstr "复制连接失败" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get routine definition: " +msgstr "获取存储过程定义失败:" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Failed to get trigger definition: " +msgstr "" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to insert row: " +msgstr "插入行失败:" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to load databases. Check your credentials." +msgstr "加载数据库失败。请检查您的凭据。" + +#: src/components/settings/PluginsTab.tsx +msgid "Failed to load registry" +msgstr "加载注册表失败" + +#: src/components/modals/NewRowModal.tsx +msgid "Failed to load schema: " +msgstr "加载模式失败:" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Failed to load schemas" +msgstr "加载模式失败" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to load trigger definition: " +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to load view definition: " +msgstr "加载视图定义失败:" + +#: src/pages/Connections.tsx +msgid "Failed to move connection" +msgstr "" + +#: src/pages/Editor.tsx +msgid "Failed to process insertions: " +msgstr "处理插入失败:" + +#: src/components/settings/AiTab.tsx +msgid "Failed to refresh models" +msgstr "刷新模型失败" + +#: src/pages/Connections.tsx +msgid "Failed to rename group" +msgstr "" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Failed to save connection" +msgstr "保存连接失败" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Failed to save SSH connection" +msgstr "保存 SSH 连接失败" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Failed to save trigger: " +msgstr "" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Failed to save view: " +msgstr "保存视图失败:" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Failed: " +msgstr "失败:" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Favorites" +msgstr "收藏" + +#: src/components/modals/NewConnectionModal.tsx +msgid "File Path" +msgstr "文件路径" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Filter" +msgstr "过滤条件" + +#: src/components/settings/LogsTab.tsx +msgid "Filter by level" +msgstr "按级别筛选" + +#: src/components/ui/TableToolbar.tsx +msgid "Filter conditions" +msgstr "筛选条件" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Filter databases..." +msgstr "筛选数据库..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter tables..." +msgstr "筛选表..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Filter triggers..." +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Filters" +msgstr "筛选器" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +msgid "First row as header" +msgstr "第一行作为标题" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "FK Name (Optional)" +msgstr "FK 名称(可选)" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focus on Table" +msgstr "聚焦于表" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Focused on" +msgstr "聚焦于" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Folder Path" +msgstr "文件夹路径" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Family" +msgstr "字体" + +#: src/components/settings/AppearanceTab.tsx +msgid "Font Size" +msgstr "字体大小" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill" +msgstr "强制终止" + +#: src/pages/TaskManagerPage.tsx +msgid "Force Kill Plugin Process" +msgstr "强制终止插件进程" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "foreign keys" +msgstr "外键" + +#: src/components/ui/JsonInput.tsx +msgid "Format" +msgstr "格式化" + +#: src/components/ui/FilterRow.tsx +msgid "from" +msgstr "从" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dependencies" +msgstr "前端依赖" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Frontend Dev Dependencies" +msgstr "前端开发依赖" + +#: src/pages/SchemaDiagramPage.tsx +msgid "Fullscreen" +msgstr "全屏" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Functions" +msgstr "函数" + +#: src/pages/Settings.tsx +msgid "General" +msgstr "通用" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgctxt "editor" +msgid "General" +msgstr "基本信息" + +#: src/components/modals/NewConnectionModal.tsx +msgctxt "newConnection" +msgid "General" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "General" +msgstr "" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generate name with AI" +msgstr "使用 AI 生成名称" + +#: src/components/notebook/NotebookOutline.tsx +msgid "Generate names for unnamed cells with AI" +msgstr "使用 AI 为未命名单元格生成名称" + +#: src/components/ui/AiDropdownButton.tsx +msgctxt "ai" +msgid "Generate SQL" +msgstr "生成 SQL" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Generate SQL" +msgstr "生成 SQL" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Generate SQL templates" +msgstr "生成 SQL 模板" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Generated SQL Preview" +msgstr "" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generated SQL: {tableName}" +msgstr "生成的 SQL:{tableName}" + +#: src/components/notebook/CellNameAiButton.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Generating name..." +msgstr "正在生成名称..." + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Generating SQL..." +msgstr "生成 SQL 中..." + +#: src/components/modals/WhatsNewModal.tsx +msgid "Got it" +msgstr "知道了" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Graph" +msgstr "图形" + +#: src/pages/Connections.tsx +msgid "Grid view" +msgstr "网格视图" + +#: src/pages/Connections.tsx +msgid "Group name" +msgstr "分组名称" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Guided" +msgstr "" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Hash Cond." +msgstr "哈希条件" + +#: src/components/modals/CommunityModal.tsx +msgid "Help tabularis grow" +msgstr "帮助 Tabularis 成长" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Hide overview" +msgstr "隐藏概览" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Highest Cost" +msgstr "最高成本" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "History" +msgstr "历史" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Horizontal" +msgstr "水平" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Host" +msgstr "主机" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "How long the MCP subprocess will wait for the user's decision before failing the request." +msgstr "MCP 子进程等待用户决定的时间。" + +#: src/components/settings/LogsTab.tsx +msgid "How many logs to keep in memory (1-10000)" +msgstr "在内存中保留的日志数量(1-10000)" + +#: src/components/settings/GeneralTab.tsx +msgid "How often to check if active connections are still alive. Set to 0 to disable." +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Icon" +msgstr "图标" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "If exists" +msgstr "如果存在" + +#: src/utils/explainPlan.ts +msgid "If timing is missing, the server likely returned an estimate-only plan." +msgstr "如果缺少耗时信息,服务器很可能返回的是仅估算的计划。" + +#: src/components/settings/InfoTab.tsx +msgid "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo." +msgstr "如果您喜欢 Tabularis 并希望看到更多功能,请考虑通过贡献代码、报告错误或 Star 项目来支持该项目。" + +#: src/i18n/registries/connectionAppearanceTabs.ts +msgid "Image" +msgstr "图片" + +#: src/components/ui/BlobInput.tsx +msgid "Image preview" +msgstr "图片预览" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import cancelled" +msgstr "导入已取消" + +#: src/pages/Connections.tsx +msgid "Import Connections" +msgstr "导入连接" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import Database" +msgstr "导入数据库" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed" +msgstr "导入失败" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Import failed: " +msgstr "导入失败:" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Import from Clipboard" +msgstr "" + +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Import from Clipboard" +msgstr "从剪贴板导入" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Import from Clipboard..." +msgstr "从剪贴板导入..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgid "Import Notebook" +msgstr "导入笔记本" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "Importing from" +msgstr "从以下文件导入" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Importing..." +msgstr "导入中..." + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Index Cond." +msgstr "索引条件" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index Name" +msgstr "索引名称" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Index name is required" +msgstr "索引名称是必需的" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "indexes" +msgstr "索引" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Info" +msgstr "信息" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Initial version" +msgstr "初始版本" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Inline" +msgstr "内联" + +#: src/components/modals/NewRowModal.tsx +msgid "Insert" +msgstr "插入" + +#: src/components/ui/DataGrid.tsx +msgid "Insert Current Timestamp" +msgstr "插入当前时间戳" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Insert to Editor" +msgstr "插入到编辑器" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Inspect structure" +msgstr "查看结构" + +#: src/components/settings/PluginsTab.tsx +msgid "Install" +msgstr "安装" + +#: src/pages/TaskManagerPage.tsx +msgid "Install and enable plugins to see them here" +msgstr "安装并启用插件以在此处查看它们" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Install Config" +msgstr "安装配置" + +#: src/components/settings/PluginsTab.tsx +msgid "Install extensions, manage plugin drivers, and keep runtime settings under control." +msgstr "安装扩展、管理插件驱动,并控制运行时设置。" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installation Failed" +msgstr "安装失败" + +#: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings" +msgid "Installation Failed" +msgstr "安装失败" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Installed" +msgstr "已安装" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Installed" +msgstr "已安装" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Installing..." +msgstr "安装中..." + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language." +msgstr "AI 查询解释的指令。使用 {LANGUAGE} 作为输出语言的占位符。" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure." +msgstr "AI SQL 生成的指令。使用 {SCHEMA} 作为数据库结构的占位符。" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Interpreter" +msgstr "解释器" + +#: src/components/ui/JsonInput.tsx +msgid "Invalid JSON" +msgstr "JSON 格式错误" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Invalid notebook file format" +msgstr "无效的笔记本文件格式" + +#: src/components/notebook/ParamsPanel.tsx +msgid "Invalid parameter name" +msgstr "参数名称无效" + +#: src/components/modals/CommunityModal.tsx +msgid "Join Discord" +msgstr "加入 Discord" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "Join now" +msgstr "立即加入" + +#: src/components/modals/CommunityModal.tsx +msgid "Join the Community" +msgstr "加入社区" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Join Type" +msgstr "连接类型" + +#: src/components/modals/SchemaModal.tsx +msgid "Key" +msgstr "键" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Key file" +msgstr "密钥文件" + +#: src/components/settings/ShortcutsTab.tsx +#: src/pages/Settings.tsx +msgid "Keyboard Shortcuts" +msgstr "键盘快捷键" + +#: src/components/layout/sidebar/SidebarTableItem.tsx +msgid "keys" +msgstr "键" + +#: src/pages/TaskManagerPage.tsx +msgid "Kill" +msgstr "终止" + +#: src/pages/TaskManagerPage.tsx +msgid "Killing" +msgstr "终止" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Kind" +msgstr "类型" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Kubernetes Connections" +msgstr "Kubernetes 连接" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Kubernetes context is required" +msgstr "Kubernetes 上下文为必填项" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Kubernetes is not available for this driver." +msgstr "此驱动不支持 Kubernetes。" + +#: src/components/notebook/CellChart.tsx +msgid "Label" +msgstr "标签" + +#: src/components/settings/LocalizationTab.tsx +msgid "Language" +msgstr "语言" + +#: src/utils/explainPlan.ts +msgid "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well." +msgstr "估算与实际差距过大通常意味着统计信息过旧,或存在规划器难以建模的谓词。" + +#: src/components/modals/CreateTableModal.tsx +msgid "Len" +msgstr "长度" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Length" +msgstr "长度" + +#: src/components/settings/LogsTab.tsx +msgid "Level" +msgstr "级别" + +#: src/components/settings/GeneralTab.tsx +msgid "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended)." +msgstr "限制每次查询获取的行数,以防止性能问题。设置为 0 可禁用(不推荐)。" + +#: src/components/settings/AppearanceTab.tsx +msgid "Line Height" +msgstr "" + +#: src/pages/Connections.tsx +msgid "List view" +msgstr "列表视图" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Load Databases" +msgstr "加载数据库" + +#: src/pages/Editor.tsx +msgid "Load row count" +msgstr "加载行数" + +#: src/pages/VisualExplainPage.tsx +msgid "Loading explain plan…" +msgstr "正在加载执行计划…" + +#: src/components/settings/PluginsTab.tsx +msgid "Loading plugin registry..." +msgstr "加载插件注册表..." + +#: src/pages/TaskManagerPage.tsx +msgid "Loading processes…" +msgstr "加载进程中..." + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/QueryHistorySection.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarRoutineItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +#: src/components/layout/sidebar/SidebarTableItem.tsx +#: src/components/layout/sidebar/SidebarViewItem.tsx +#: src/components/modals/SchemaModal.tsx +msgid "Loading schema..." +msgstr "加载模式中..." + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Loading trigger definition..." +msgstr "" + +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/ConfigJsonModal.tsx +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Loading..." +msgstr "加载中..." + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Local Column" +msgstr "本地列" + +#: src/components/settings/LocalizationTab.tsx +#: src/pages/Settings.tsx +msgid "Localization" +msgstr "本地化" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Lock query" +msgstr "锁定查询" + +#: src/components/settings/LogsTab.tsx +msgid "Log Settings" +msgstr "日志设置" + +#: src/components/settings/LogsTab.tsx +#: src/pages/Settings.tsx +msgid "Logs" +msgstr "日志" + +#: src/components/settings/LogsTab.tsx +msgid "Logs exported to clipboard" +msgstr "日志已导出到剪贴板" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgid "Loops" +msgstr "循环" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Make all MCP queries read-only" +msgstr "将所有 MCP 查询设为只读" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage" +msgstr "管理" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Manage Databases" +msgstr "管理数据库" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Manage SSH Connections" +msgstr "管理 SSH 连接" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL COMMAND" +msgstr "手动命令" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MANUAL CONFIGURATION" +msgstr "手动配置" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Markdown" +msgstr "Markdown" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Max Allowed Packet" +msgstr "最大允许数据包" + +#: src/components/settings/GeneralTab.tsx +msgid "Max History Entries" +msgstr "最大历史条目" + +#: src/components/settings/LogsTab.tsx +msgid "Max Log Entries" +msgstr "最大日志条目数" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Maximize" +msgstr "最大化" + +#: src/components/settings/GeneralTab.tsx +msgid "Maximum number of query history entries stored per connection." +msgstr "每个连接存储的查询历史最大条目数。" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Maximum packet size used by the MySQL connector." +msgstr "MySQL 连接器使用的最大数据包大小。" + +#: src/components/modals/CommunityModal.tsx +msgid "Maybe later" +msgstr "稍后再说" + +#: src/components/layout/Sidebar.tsx +msgid "MCP Server" +msgstr "MCP 服务器" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "MCP Server Integration" +msgstr "MCP 服务器集成" + +#: src/components/settings/LogsTab.tsx +msgid "Message" +msgstr "消息" + +#: src/components/modals/ClipboardImport/DataPreview.tsx +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Minimize" +msgstr "最小化" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Mixed types detected, defaulted to TEXT" +msgstr "检测到混合类型,默认为 TEXT" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Mode" +msgstr "模式" + +#. placeholder {0}: settings.aiModel +#. placeholder {1}: getProviderLabel(settings.aiProvider) +#: src/components/settings/AiTab.tsx +msgid "Model <0>{0} not found in <1>{1}. It may not work correctly." +msgstr "在 {1} 中未找到模型 {0}。它可能无法正常工作。" + +#: src/components/modals/ModifyColumnModal.tsx +msgctxt "modifyColumn" +msgid "Modify Column" +msgstr "修改列" + +#: src/components/layout/sidebar/SidebarColumnItem.tsx +msgctxt "sidebar" +msgid "Modify Column" +msgstr "修改列" + +#: src/components/settings/InfoTab.tsx +msgid "Monitor plugin processes, CPU, RAM and disk usage in real time" +msgstr "实时监控插件进程、CPU、RAM 和磁盘使用情况" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Down" +msgstr "下移" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Move Up" +msgstr "上移" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "My K8s cluster" +msgstr "我的 K8s 集群" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "My SSH Server" +msgstr "我的 SSH 服务器" + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants." +msgstr "MySQL 和 MariaDB 仅在支持的 EXPLAIN ANALYZE 或 ANALYZE FORMAT 变体中提供实际指标。" + +#: src/utils/explainPlan.ts +msgid "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version." +msgstr "MySQL 和 MariaDB 会根据服务器版本回退到 EXPLAIN FORMAT=JSON 或表格版 EXPLAIN。" + +#: src/components/notebook/ParamsPanel.tsx +msgid "name" +msgstr "名称" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/SchemaModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Name" +msgstr "名称" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Name is required" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Namespace" +msgstr "命名空间" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Namespace is required" +msgstr "命名空间为必填项" + +#: src/i18n/registries/shortcutCategories.ts +msgid "Navigation" +msgstr "导航" + +#: src/components/ui/DataGrid.tsx +msgid "NEW" +msgstr "新建" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New connection" +msgstr "新建连接" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "New console" +msgstr "新建控制台" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/pages/Editor.tsx +msgid "New Console" +msgstr "新建控制台" + +#: src/components/modals/WhatsNewModal.tsx +msgid "New Features" +msgstr "新功能" + +#: src/pages/Connections.tsx +msgid "New Group" +msgstr "新建分组" + +#: src/pages/Editor.tsx +msgid "New Notebook" +msgstr "新建笔记本" + +#: src/components/modals/NewRowModal.tsx +#: src/pages/Editor.tsx +msgid "New Row" +msgstr "新建行" + +#: src/i18n/registries/shortcutLabels.ts +msgid "New tab" +msgstr "新建标签" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "New table created" +msgstr "新表已创建" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "New Version Available" +msgstr "有新版本可用" + +#: src/pages/Editor.tsx +msgid "New Visual Query" +msgstr "新建可视化查询" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Next page" +msgstr "下一页" + +#: src/components/modals/CreateTableModal.tsx +msgid "NN" +msgstr "非空" + +#: src/components/modals/SchemaModal.tsx +msgid "NO" +msgstr "否" + +#: src/pages/Connections.tsx +msgid "No active connections" +msgstr "无活动连接" + +#: src/components/ui/TableToolbar.tsx +msgid "no active filters" +msgstr "无激活筛选器" + +#: src/pages/Editor.tsx +msgid "No active session. Please select a connection." +msgstr "无活动会话。请选择一个连接。" + +#: src/components/ui/BlobInput.tsx +msgid "No BLOB data" +msgstr "无 BLOB 数据" + +#: src/pages/TaskManagerPage.tsx +msgid "No child processes" +msgstr "无子进程" + +#: src/pages/SchemaDiagramPage.tsx +msgid "No Connection ID" +msgstr "无连接 ID" + +#: src/pages/Connections.tsx +msgid "No connections match \"{search}\"" +msgstr "无匹配 \"{search}\" 的连接" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No contexts found (is kubectl installed?)" +msgstr "未找到上下文(是否已安装 kubectl?)" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "No data found in clipboard" +msgstr "剪贴板中没有数据" + +#: src/components/ui/DataGrid.tsx +msgid "No data to display" +msgstr "无数据显示" + +#: src/components/modals/QueryModal.tsx +msgid "No database" +msgstr "无数据库" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No databases found" +msgstr "未找到数据库" + +#: src/components/notebook/CellHistoryPanel.tsx +msgid "No execution history yet" +msgstr "暂无执行历史" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No favorites match your search" +msgstr "没有匹配的收藏" + +#: src/pages/VisualExplainPage.tsx +msgid "No file loaded" +msgstr "未加载文件" + +#: src/components/ui/TableToolbar.tsx +msgid "No filters —" +msgstr "无筛选器 —" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No general settings available for this driver." +msgstr "" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No icons match." +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "No Kubernetes connections saved. Click \"Add\" to create one." +msgstr "没有已保存的 Kubernetes 连接。点击“添加”创建一个。" + +#: src/components/settings/LogsTab.tsx +msgid "No logs available" +msgstr "无日志可用" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "No major issues detected in the current plan summary." +msgstr "当前执行计划摘要中未检测到明显问题。" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "No matching elements found" +msgstr "未找到匹配的元素" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No MCP activity yet." +msgstr "暂无 MCP 活动。" + +#: src/components/settings/AiTab.tsx +msgid "No models found" +msgstr "未找到模型" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No notebooks match your search." +msgstr "没有匹配的笔记本。" + +#: src/pages/Editor.tsx +msgid "No open tabs for this connection." +msgstr "此连接无打开的标签。" + +#: src/components/modals/NewRowModal.tsx +msgid "No options found" +msgstr "未找到选项" + +#: src/pages/TaskManagerPage.tsx +msgid "No plugin processes are running" +msgstr "无插件进程在运行" + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins available in the registry." +msgstr "注册表中无可用插件。" + +#: src/components/settings/PluginsTab.tsx +msgid "No plugins match your search." +msgstr "没有匹配的插件。" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "No preview" +msgstr "" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No queries match your search" +msgstr "没有匹配的查询" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "No query history" +msgstr "暂无查询历史" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "No results found" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No routines found" +msgstr "未找到存储过程" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No saved connections — create one below" +msgstr "没有已保存的连接 — 在下方创建一个" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "No saved notebooks yet." +msgstr "暂无已保存的笔记本。" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "No saved queries" +msgstr "无已保存查询" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "No sessions match the current filters." +msgstr "没有会话匹配当前筛选条件。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "No SSH connections available" +msgstr "无 SSH 连接可用" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "No SSH connections configured yet" +msgstr "尚未配置 SSH 连接" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables found" +msgstr "未找到表" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No tables match" +msgstr "无匹配的表" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers found" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No triggers match your filter" +msgstr "" + +#: src/pages/Editor.tsx +msgid "No valid queries found" +msgstr "未找到有效查询" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "No views found" +msgstr "未找到视图" + +#: src/components/settings/PluginsTab.tsx +msgid "Not available for your platform" +msgstr "您的平台不可用" + +#: src/components/settings/AiTab.tsx +msgid "Not configured" +msgstr "未配置" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "Not Null" +msgstr "非空" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Notebook Cell Name Prompt" +msgstr "Notebook 单元格名称提示词" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook exported successfully" +msgstr "笔记本导出成功" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Notebook imported successfully" +msgstr "笔记本导入成功" + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Notebook name" +msgstr "笔记本名称" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Notebooks" +msgstr "笔记本" + +#: src/i18n/registries/openSourceLibrariesEcosystem.ts +msgid "npm ecosystem" +msgstr "npm 生态" + +#: src/components/modals/SchemaModal.tsx +msgid "Nullable" +msgstr "可为空" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Objects" +msgstr "对象" + +#. placeholder {0}: sessions.length +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "of {0}" +msgstr "共 {0}" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Off" +msgstr "关闭" + +#: src/components/modals/AlertModal.tsx +#: src/components/modals/ConfirmModal.tsx +msgid "OK" +msgstr "OK" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Older" +msgstr "更早" + +#: src/utils/explainPlan.ts +msgid "Older servers may fall back to estimated plans with fewer metrics." +msgstr "较旧的服务器可能会回退到仅估算、指标更少的执行计划。" + +#: src/components/settings/PluginsTab.tsx +msgid "Older versions" +msgstr "旧版本" + +#. placeholder {0}: ( settings.aiCustomModels?.["ollama"] || availableModels["ollama"] || [] ).length +#: src/components/settings/AiTab.tsx +msgid "Ollama connected ({0} models found)" +msgstr "Ollama 已连接(找到 {0} 个模型)" + +#. placeholder {0}: settings.aiOllamaPort || 11434 +#: src/components/settings/AiTab.tsx +msgid "Ollama not detected on port {0}. Is it running?" +msgstr "未在端口 {0} 上检测到 Ollama。是否正在运行?" + +#: src/components/settings/AiTab.tsx +msgid "Ollama Port" +msgstr "Ollama 端口" + +#. placeholder {0}: trigger.table_name +#: src/components/layout/sidebar/SidebarTriggerItem.tsx +msgid "on {0}" +msgstr "" + +#. placeholder {0}: approval.connectionName +#: src/components/modals/AiApprovalModal.tsx +msgid "On {0} — review and decide before it executes." +msgstr "在 {0} 上 — 请审核后再执行。" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Delete" +msgstr "删除时" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "On Update" +msgstr "更新时" + +#: src/components/connections/StatusBadge.tsx +msgctxt "connections" +msgid "Open" +msgstr "打开" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Open connections" +msgstr "打开连接" + +#: src/pages/VisualExplainPage.tsx +msgid "Open file" +msgstr "打开文件" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Open in Editor" +msgstr "在编辑器中打开" + +#: src/components/ui/DataGrid.tsx +msgid "Open in JSON Editor" +msgstr "在 JSON 编辑器中打开" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Open in New Tab" +msgstr "在新标签中打开" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Open in Visual Explain" +msgstr "在 Visual Explain 中打开" + +#: src/components/ui/JsonCell.tsx +msgid "Open JSON viewer" +msgstr "打开 JSON 查看器" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +msgid "Open package page" +msgstr "打开包页面" + +#. placeholder {0}: fkForContextPreview.ref_table +#: src/components/ui/DataGrid.tsx +msgid "Open referenced row in {0}" +msgstr "在 {0} 中打开引用的行" + +#: src/components/ui/DataGrid.tsx +msgid "Open Sidebar Editor" +msgstr "打开侧边栏编辑器" + +#: src/components/modals/OpenSourceLibrariesModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Open Source Libraries" +msgstr "开源库" + +#: src/components/modals/TabSwitcherModal.tsx +msgid "Open Tabs" +msgstr "打开的标签" + +#: src/components/settings/InfoTab.tsx +msgid "Open Task Manager" +msgstr "打开任务管理器" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +msgid "Operation" +msgstr "操作" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +msgid "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default." +msgstr "可选。指定用于运行此插件的可执行文件(例如 macOS/Linux 上的 python3,Windows 上的 python 或完整路径)。留空使用默认值。" + +#: src/components/notebook/NotebookOutline.tsx +msgid "Outline" +msgstr "大纲" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Overview" +msgstr "概览" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +#: src/pages/Editor.tsx +msgid "Page {0}" +msgstr "第 {0} 页" + +#. placeholder {0}: activeTab.result.pagination.page +#. placeholder {1}: Math.ceil( activeTab.result.pagination.total_rows / activeTab.result.pagination.page_size, ) +#: src/pages/Editor.tsx +msgid "Page {0} of {1}" +msgstr "第 {0} 页,共 {1} 页" + +#. placeholder {0}: pagination.page +#: src/components/ui/PaginationControls.tsx +msgid "Page {0} of {totalPages}" +msgstr "第 {0} 页,共 {totalPages} 页" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Parallel Execution (Run All)" +msgstr "并行执行(全部运行)" + +#: src/components/notebook/ParamsPanel.tsx +#: src/pages/Editor.tsx +msgid "Parameters" +msgstr "参数" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password" +msgstr "密码" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Password saved in system keychain" +msgstr "密码已保存到系统密钥链" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Paste structured data and preview the schema before importing" +msgstr "粘贴结构化数据,导入前预览模式" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database." +msgstr "在执行前暂停写入(或所有查询)并要求用户在 Tabularis 中批准。" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Pending approval" +msgstr "待审批" + +#: src/pages/TaskManagerPage.tsx +msgid "PID" +msgstr "PID" + +#: src/components/settings/GeneralTab.tsx +msgid "Ping Interval" +msgstr "" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Pipe (|)" +msgstr "管道符 (|)" + +#: src/components/modals/CreateTableModal.tsx +msgid "PK" +msgstr "主键" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Planning" +msgstr "规划时间" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Please fill in all required fields" +msgstr "请填写所有必需字段" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least one table" +msgstr "请至少选择一个表" + +#: src/i18n/registries/dumpErrorKeys.ts +msgid "Please select at least Structure or Data" +msgstr "请至少选择结构或数据" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin" +msgstr "插件" + +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Center" +msgstr "插件中心" + +#: src/components/connections/ActionButtons.tsx +#: src/components/connections/ConnectionCard.tsx +#: src/components/connections/ConnectionListItem.tsx +msgid "Plugin disabled" +msgstr "插件已禁用" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "Plugin Failed to Start" +msgstr "插件启动失败" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin Processes" +msgstr "插件进程" + +#: src/pages/TaskManagerPage.tsx +msgid "Plugin processes & system resources" +msgstr "插件进程和系统资源" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Plugin Settings" +msgstr "插件设置" + +#: src/pages/Settings.tsx +msgid "Plugins" +msgstr "插件" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "PNG, JPG, WebP or SVG · max 512 KB" +msgstr "PNG、JPG、WebP 或 SVG · 最大 512 KB" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Pod" +msgstr "Pod" + +#: src/components/ui/GeometryInput.tsx +msgid "POINT(30 40)" +msgstr "POINT(30 40)" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Port" +msgstr "端口" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Port must be between 1 and 65535" +msgstr "端口必须介于 1 和 65535 之间" + +#: src/utils/explainPlan.ts +msgid "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available." +msgstr "PostgreSQL 的 ANALYZE 会在可用时包含实际行数、耗时、循环次数和缓冲区计数。" + +#: src/utils/explainPlan.ts +msgid "PostgreSQL without ANALYZE shows planner estimates only." +msgstr "未启用 ANALYZE 的 PostgreSQL 仅显示规划器估算值。" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Pre-flight execution plan" +msgstr "预先执行计划" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Pre-flight EXPLAIN" +msgstr "预先 EXPLAIN" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Prefer" +msgstr "首选" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Preferred" +msgstr "" + +#: src/components/settings/ShortcutsTab.tsx +msgid "Press key combination..." +msgstr "按下组合键..." + +#: src/pages/Editor.tsx +msgid "Press Run (Ctrl/Command+F5) to load table data" +msgstr "按运行(Ctrl/Command+F5)加载表数据" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Preview" +msgstr "" + +#: src/components/settings/AppearanceTab.tsx +msgctxt "settings" +msgid "Preview" +msgstr "预览" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views" +msgid "Preview" +msgstr "预览" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Preview failed: " +msgstr "预览失败:" + +#: src/components/ui/BlobInput.tsx +msgid "Preview only - full data not loaded" +msgstr "仅预览 - 未加载完整数据" + +#: src/components/ui/DataGrid.tsx +msgid "Preview related record" +msgstr "预览相关记录" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Previous page" +msgstr "上一页" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Primary Key" +msgstr "主键" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Procedures" +msgstr "存储过程" + +#: src/components/settings/InfoTab.tsx +msgid "Project Status" +msgstr "项目状态" + +#: src/components/settings/AiTab.tsx +msgid "Prompt Customization" +msgstr "提示词自定义" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Provide your connection name" +msgstr "输入您的连接名称" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Queries" +msgstr "查询" + +#: src/components/modals/AiApprovalModal.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Query" +msgstr "查询" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Explanation" +msgstr "查询解释" + +#: src/pages/Editor.tsx +msgid "Query failed." +msgstr "查询失败。" + +#: src/components/settings/GeneralTab.tsx +msgid "Query History" +msgstr "查询历史" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Query history was reset" +msgstr "查询历史已重置" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Query Parameters" +msgstr "查询参数" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "Query Tab Name Prompt" +msgstr "查询标签页名称提示词" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "Quick connection test" +msgstr "快速连接测试" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Quick Navigator" +msgstr "快速导航" + +#: src/pages/TaskManagerPage.tsx +msgid "RAM" +msgstr "内存" + +#: src/components/ui/JsonInput.tsx +msgid "Raw" +msgstr "原始" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Raw Output" +msgstr "原始输出" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Raw SQL" +msgstr "" + +#: src/components/modals/VisualExplainModal.tsx +msgid "Re-run" +msgstr "重新运行" + +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +msgid "Re-run query" +msgstr "重新执行查询" + +#: src/components/modals/WhatsNewModal.tsx +msgid "Read more" +msgstr "了解更多" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only connections" +msgstr "只读连接" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Read-only mode" +msgstr "只读模式" + +#: src/components/modals/AiApprovalModal.tsx +msgid "Reason (optional)" +msgstr "理由 (可选)" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Recreate Trigger" +msgstr "" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Redo" +msgstr "重做" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Column" +msgstr "引用列" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "Referenced Table" +msgstr "引用表" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +#: src/components/settings/LogsTab.tsx +#: src/components/settings/PluginsTab.tsx +#: src/pages/SchemaDiagramPage.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Refresh" +msgstr "刷新" + +#: src/components/settings/AiTab.tsx +msgid "Refresh Models" +msgstr "刷新模型" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Routines" +msgstr "刷新存储过程" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Refresh Tables" +msgstr "刷新表" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Triggers" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Refresh Views" +msgstr "刷新视图" + +#: src/components/settings/PluginsTab.tsx +msgid "Registry" +msgstr "注册表" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Release Notes" +msgstr "发布说明" + +#: src/pages/VisualExplainPage.tsx +msgid "Reload" +msgstr "重新加载" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Remind Me Later" +msgstr "稍后提醒我" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgctxt "connectionAppearance" +msgid "Remove" +msgstr "移除" + +#: src/components/modals/PluginRemoveModal.tsx +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Remove" +msgstr "移除" + +#: src/components/ui/FilterRow.tsx +msgid "Remove filter" +msgstr "移除筛选器" + +#: src/pages/Connections.tsx +msgid "Remove from Group" +msgstr "从分组中移除" + +#: src/components/modals/PluginRemoveModal.tsx +msgid "Remove Plugin" +msgstr "移除插件" + +#: src/components/layout/sidebar/NotebooksSection.tsx +#: src/components/ui/MultiResultPanel.tsx +#: src/components/ui/StackedResultItem.tsx +#: src/pages/Connections.tsx +#: src/pages/Editor.tsx +msgid "Rename" +msgstr "重命名" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Renamed cell {n}" +msgstr "重命名了单元格 {n}" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Reordered cells" +msgstr "重新排序单元格" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Replace table" +msgstr "替换表" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Require" +msgstr "要求" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/NewRowModal.tsx +msgid "Required" +msgstr "必需" + +#. placeholder {0}: availableTypes.find((t) => t.name === form.type)?.requires_extension +#. placeholder {0}: exts.join(', ') +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "Requires extension: {0}" +msgstr "" + +#: src/components/settings/PluginsTab.tsx +msgid "Requires Tabularis ≥ {minVersion}" +msgstr "需要 Tabularis ≥ {minVersion}" + +#: src/components/settings/AiTab.tsx +msgid "Reset" +msgstr "重置" + +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +msgid "Reset to default" +msgstr "重置为默认" + +#: src/components/settings/AiTab.tsx +msgid "Reset to Default" +msgstr "重置为默认" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Reset to driver default" +msgstr "重置为驱动默认" + +#: src/components/ui/RowEditorSidebar.tsx +msgid "Resize sidebar" +msgstr "" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Name" +msgstr "资源名称" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource name is required" +msgstr "资源名称为必填项" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Resource Type" +msgstr "资源类型" + +#: src/i18n/registries/k8sErrorKeys.ts +msgid "Resource type must be \"service\" or \"pod\"" +msgstr "资源类型必须为 \"service\" 或 \"pod\"" + +#: src/pages/TaskManagerPage.tsx +msgid "Restart" +msgstr "重启" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Restart Now" +msgstr "" + +#: src/components/settings/GeneralTab.tsx +msgid "Result Page Size (Limit)" +msgstr "结果页面大小(限制)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Results" +msgstr "" + +#: src/components/ui/DataGrid.tsx +msgid "Revert Selected" +msgstr "还原选中" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Review & adjust" +msgstr "查看并调整" + +#: src/pages/Editor.tsx +msgid "Rollback Changes" +msgstr "回滚更改" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "routine" +msgstr "例程" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Routines" +msgstr "存储过程" + +#. placeholder {0}: rowIndex + 1 +#: src/components/ui/RowEditorSidebar.tsx +msgid "Row #{0}" +msgstr "行 #{0}" + +#: src/components/modals/ClipboardImport/ParseSummary.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "rows" +msgstr "行" + +#: src/components/settings/GeneralTab.tsx +msgctxt "settings" +msgid "rows" +msgstr "行" + +#: src/components/modals/ExportProgressModal.tsx +msgid "Rows Processed" +msgstr "已处理行数" + +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Rows returned" +msgstr "返回的行数" + +#: src/components/modals/ClipboardImport/ModeToggle.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Rows will be added to an existing table" +msgstr "行将追加到现有表" + +#: src/components/modals/QueryParamsModal.tsx +#: src/pages/Editor.tsx +msgid "Run" +msgstr "运行" + +#: src/components/modals/QuerySelectionModal.tsx +#: src/components/notebook/NotebookToolbar.tsx +msgctxt "editor" +msgid "Run All" +msgstr "全部运行" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run All Cells" +msgstr "运行所有单元格" + +#: src/components/notebook/RunAllSummary.tsx +msgid "Run All Complete" +msgstr "全部运行完成" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan." +msgstr "在显示审批模态之前运行 EXPLAIN,以便用户查看执行计划。" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Run Cell" +msgstr "运行单元格" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Run in console" +msgstr "在控制台中运行" + +#: src/components/modals/ViewEditorModal.tsx +msgid "Run Preview" +msgstr "运行预览" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Run queries" +msgstr "执行查询数" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query" +msgstr "运行查询" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Run Query" +msgstr "运行查询" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Run query (in editor)" +msgstr "运行查询(编辑器中)" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Run SELECT query" +msgstr "执行 SELECT 查询" + +#. placeholder {0}: selectedIndices.size +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run Selected ({0})" +msgstr "执行选中 ({0})" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "Run SQL File..." +msgstr "运行 SQL 文件..." + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "Run this command in your terminal, then restart Claude Code." +msgstr "在终端中运行此命令,然后重启 Claude Code。" + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Run this query" +msgstr "执行此查询" + +#: src/i18n/registries/taskManagerProcessStatus.ts +#: src/pages/TaskManagerPage.tsx +msgid "running" +msgstr "运行中" + +#: src/components/explain/VisualExplainView.tsx +msgid "Running EXPLAIN..." +msgstr "正在执行 EXPLAIN..." + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Build and Test" +msgstr "Rust 构建与测试" + +#: src/i18n/registries/openSourceLibrariesSections.ts +msgid "Rust Dependencies" +msgstr "Rust 依赖" + +#: src/pages/McpPage.tsx +msgid "Safety" +msgstr "安全" + +#: src/components/settings/ThemePicker.tsx +msgid "Same as App" +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Sample values" +msgstr "示例值" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/PluginSettingsModal.tsx +#: src/components/modals/QueryParamsModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/PluginSettingsPage.tsx +#: src/components/settings/ShortcutsTab.tsx +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/pages/Connections.tsx +#: src/pages/JsonViewerPage.tsx +msgid "Save" +msgstr "保存" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "Save & Restart" +msgstr "" + +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +#: src/components/modals/ViewEditorModal.tsx +msgid "Save Changes" +msgstr "保存更改" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Save passwords in Keychain" +msgstr "在密钥链中保存密码" + +#: src/components/settings/AiTab.tsx +msgid "Save Prompt" +msgstr "保存提示词" + +#: src/pages/Editor.tsx +msgid "Save Query" +msgstr "保存查询" + +#: src/pages/Editor.tsx +msgid "Save this query" +msgstr "保存此查询" + +#: src/components/settings/PluginSettingsPage.tsx +msgid "Saved" +msgstr "已保存" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Saved Connection" +msgstr "已保存的连接" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Scan-heavy operations detected" +msgstr "检测到高扫描操作" + +#: src/components/modals/SchemaModal.tsx +msgid "Schema: {tableName}" +msgstr "模式:{tableName}" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Schemas" +msgstr "模式" + +#: src/components/ui/JsonTreeView.tsx +msgid "Search" +msgstr "搜索" + +#: src/pages/Connections.tsx +msgid "Search connections..." +msgstr "搜索连接..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search emoji…" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Search favorites..." +msgstr "搜索收藏..." + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "Search history..." +msgstr "搜索历史..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Search icons…" +msgstr "" + +#: src/components/settings/AiTab.tsx +msgid "Search models..." +msgstr "搜索模型..." + +#: src/components/layout/sidebar/NotebooksSection.tsx +msgid "Search notebooks" +msgstr "搜索笔记本" + +#: src/components/settings/PluginsTab.tsx +msgid "Search plugins…" +msgstr "搜索插件…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Search query…" +msgstr "搜索查询…" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Search session, client, connection…" +msgstr "搜索会话、客户端、连接…" + +#: src/components/modals/QuickNavigatorModal.tsx +msgid "Search tables, views, routines, triggers..." +msgstr "搜索表、视图、例程、触发器..." + +#: src/components/settings/LocalizationTab.tsx +msgid "Search timezones..." +msgstr "" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/ClipboardImportModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Search..." +msgstr "搜索..." + +#: src/components/modals/mcp/McpSafetySection.tsx +#: src/components/settings/GeneralTab.tsx +msgid "seconds" +msgstr "" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Select" +msgstr "读取" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select [fields]" +msgstr "SELECT [字段]" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Select *" +msgstr "SELECT *" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a context first" +msgstr "请先选择上下文" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select a database" +msgstr "选择一个数据库" + +#: src/pages/VisualExplainPage.tsx +msgid "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it." +msgstr "选择一个包含 EXPLAIN 计划(PostgreSQL JSON 或文本格式)的文件以进行可视化。" + +#: src/components/settings/AiTab.tsx +msgid "Select a model" +msgstr "选择一个模型" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +msgid "Select a node to view details" +msgstr "选择节点查看详情" + +#: src/components/modals/ClipboardImportModal.tsx +msgid "Select a table..." +msgstr "选择一个表..." + +#: src/components/modals/DumpDatabaseModal.tsx +msgctxt "dump" +msgid "Select All" +msgstr "全选" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor" +msgid "Select All" +msgstr "全选" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/modals/NewConnectionModal.tsx +msgctxt "sidebar" +msgid "Select All" +msgstr "全选" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select at least one database" +msgstr "请至少选择一个数据库" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select context/namespace/type first" +msgstr "请先选择上下文/命名空间/类型" + +#: src/components/ui/FilterRow.tsx +msgid "Select for Apply All" +msgstr "选择用于全部应用" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select K8s Connection" +msgstr "选择 K8s 连接" + +#: src/components/modals/QuerySelectionModal.tsx +msgid "Select Query to Execute" +msgstr "选择要执行的查询" + +#: src/components/modals/ExplainSelectionModal.tsx +msgid "Select Query to Explain" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Key" +#: src/components/layout/ExplorerSidebar.tsx +msgid "Select schemas to load:" +msgstr "选择要加载的模式:" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select SSH Connection" +msgstr "选择 SSH 连接" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Select Tables" +msgstr "选择表" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select the databases to include in this connection." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Loading schema..." +#: src/components/settings/AiTab.tsx +msgid "Select the model to be used for generation and explanation." +msgstr "选择用于生成和解释的模型。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Select type..." +msgstr "选择类型..." + +#: src/components/modals/NewRowModal.tsx +msgid "Select Value..." +msgstr "选择值..." + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Selected emoji" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Name" +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Semicolon (;)" +msgstr "分号 (;)" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Separate Connections" +msgstr "分离连接" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sequential Scans" +msgstr "顺序扫描" + +#: src/components/modals/K8sConnectionsModal.tsx +#: src/components/modals/NewConnectionModal.tsx +msgid "Service" +msgstr "Service" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Session timezone sent to MySQL after connect." +msgstr "连接建立后发送给 MySQL 的会话时区。" + +#: src/components/settings/AiActivityPanel.tsx +msgid "Sessions" +msgstr "会话" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Set as Active" +msgstr "设为激活" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set DEFAULT" +msgstr "设为 DEFAULT" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set EMPTY" +msgstr "设为空" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set GENERATED" +msgstr "设为 GENERATED" + +#: src/components/ui/DataGrid.tsx +#: src/components/ui/FieldEditor.tsx +msgid "Set NULL" +msgstr "设为 NULL" + +#: src/components/layout/Sidebar.tsx +msgid "Settings" +msgstr "设置" + +#: src/pages/McpPage.tsx +msgid "Setup" +msgstr "设置" + +#: src/components/settings/AiTab.tsx +msgid "Show AI Assist and Explain buttons in the editor" +msgstr "在编辑器中显示 AI 辅助和解释按钮" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All" +msgstr "显示全部" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Show All Tables" +msgstr "显示所有表" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "Show Data" +msgstr "显示数据" + +#: src/components/settings/AppearanceTab.tsx +msgid "Show Line Numbers" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "NO" +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Show overview" +msgstr "显示概览" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost." +msgstr "当未带类型的文本单元格包含 JSON 对象或数组时显示 JSON 查看器入口。每单元格会增加少量解析开销。" + +#: src/components/settings/GeneralTab.tsx +msgid "Show Welcome Screen" +msgstr "显示欢迎屏幕" + +#. placeholder {0}: all.length +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Showing {RESULT_LIMIT} of {0} — refine search to narrow down." msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Nullable" +#: src/components/modals/ClipboardImport/DataPreview.tsx +msgid "showing first {MAX_PREVIEW_ROWS}" +msgstr "前 {MAX_PREVIEW_ROWS} 行" + +#: src/components/ui/JsonExpansionEditor.tsx +#: src/components/ui/JsonInput.tsx +#: src/components/ui/TextExpansionEditor.tsx +#: src/components/ui/TextInput.tsx +msgid "Side by side" msgstr "" -#: src/components/modals/SchemaModal.tsx -msgid "Schema: {tableName}" +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Skip (do not import)" +msgstr "跳过(不导入)" + +#: src/components/notebook/RunAllSummary.tsx +msgid "skipped" +msgstr "已跳过" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Slowest Step" +msgstr "最慢步骤" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket Timeout" +msgstr "Socket 超时" + +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Socket timeout in milliseconds." +msgstr "Socket 超时时间,单位为毫秒。" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort ascending" +msgstr "升序排列" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} ASC" +msgstr "按 {colName} 升序排序" + +#: src/components/ui/DataGrid.tsx +msgid "Sort by {colName} DESC" +msgstr "按 {colName} 降序排序" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "Sort by {field}" +msgstr "按 {field} 排序" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort by…" +msgstr "排序方式…" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Sort descending" +msgstr "降序排列" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Sort or temp work detected" +msgstr "检测到排序或临时操作" + +#: src/components/layout/sidebar/ConnectionGroupItem.tsx +msgid "Split Group" +msgstr "分割组" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Horizontal" +msgstr "水平分割" + +#: src/components/layout/sidebar/OpenConnectionItem.tsx +msgid "Split Vertical" +msgstr "垂直分割" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookToolbar.tsx +#: src/components/notebook/NotebookView.tsx +#: src/components/ui/TableToolbar.tsx +msgid "SQL" +msgstr "SQL" + +#: src/components/settings/AppearanceTab.tsx +msgid "SQL Editor" +msgstr "" + +#: src/components/modals/ImportDatabaseModal.tsx +msgid "SQL file executed successfully" +msgstr "SQL 文件执行成功" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Functions" +msgstr "SQL 函数" + +#: src/i18n/registries/aiPromptKinds.ts +msgid "SQL Generation" +msgstr "SQL 生成" + +#: src/components/ui/GeometryInput.tsx +msgid "SQL Mode" +msgstr "SQL 模式" + +#: src/components/modals/CreateForeignKeyModal.tsx +#: src/components/modals/CreateIndexModal.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQL Preview" +msgstr "SQL 预览" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgid "SQLite does not support dropping FKs via ALTER TABLE." +msgstr "SQLite 不支持通过 ALTER TABLE 删除外键。" + +#: src/utils/explainPlan.ts +msgid "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural." +msgstr "SQLite 的 EXPLAIN QUERY PLAN 很轻量,主要用于展示结构。" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "SQLite only supports renaming columns. Other modifications require recreating the table manually." +msgstr "SQLite 仅支持重命名列。其他修改需要手动重建表。" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Connections" +msgstr "SSH 连接" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Host" +msgstr "SSH 主机" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH is not available for this driver." +msgstr "" + +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key" +msgstr "SSH 密钥" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key File (Optional)" +msgstr "SSH 密钥文件(可选)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Key Passphrase (Optional)" +msgstr "SSH 密钥密码(可选)" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Password" +msgstr "SSH 密码" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSH Password missing. Please re-enter." +msgstr "SSH 密码缺失。请重新输入。" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH Port" +msgstr "SSH 端口" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "SSH User" +msgstr "SSH 用户" + +#: src/components/modals/NewConnectionModal.tsx +msgid "SSL Mode" +msgstr "SSL 模式" + +#: src/components/ui/GeometryInput.tsx +msgid "ST_GeomFromText('POINT(30 40)', 4326)" +msgstr "ST_GeomFromText('POINT(30 40)', 4326)" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Stacked view" +msgstr "" + +#: src/components/modals/CommunityModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Star on GitHub" +msgstr "在 GitHub 上 Star" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgid "Started" +msgstr "开始时间" + +#: src/components/settings/GeneralTab.tsx +msgid "Startup" +msgstr "启动" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Status" +msgstr "状态" + +#: src/components/modals/DumpDatabaseModal.tsx +#: src/pages/Editor.tsx +msgid "Stop" +msgstr "停止" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop execution when a cell fails" +msgstr "当单元格失败时停止执行" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Stop on Error" +msgstr "出错时停止" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "stopped" +msgstr "已停止" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/Sidebar.tsx +msgid "Structure" +msgstr "结构" + +#: src/components/modals/DumpDatabaseModal.tsx +msgid "Structure (DDL)" +msgstr "结构 (DDL)" + +#: src/pages/Editor.tsx +msgid "Submit Changes" +msgstr "提交更改" + +#: src/components/notebook/RunAllSummary.tsx +msgid "succeeded" +msgstr "成功" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Success" +msgstr "成功" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Success" +msgstr "成功" + +#: src/components/modals/ExportProgressModal.tsx +#: src/components/settings/AiTab.tsx +#: src/components/settings/LogsTab.tsx +msgctxt "common" +msgid "Success" +msgstr "成功" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgctxt "mcp" +msgid "Success" +msgstr "成功" + +#: src/pages/TaskManagerPage.tsx +msgid "Sum of RSS across the process tree — may overcount shared memory" +msgstr "整个进程树的 RSS 总和 — 可能重复计算共享内存" + +#: src/components/settings/InfoTab.tsx +msgid "Support the Development" +msgstr "支持开发" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch tab" +msgstr "切换标签" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Switch to connection 1–9" +msgstr "切换到连接 1–9" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Horizontal Layout" +msgstr "切换到水平布局" + +#: src/components/ui/TableToolbar.tsx +msgid "Switch to SQL WHERE input" +msgstr "切换到 SQL WHERE 输入" + +#: src/components/ui/SchemaDiagram.tsx +msgid "Switch to Vertical Layout" +msgstr "切换到垂直布局" + +#: src/pages/TaskManagerPage.tsx +msgid "System Resources" +msgstr "系统资源" + +#: src/components/settings/GeneralTab.tsx +#: src/pages/Editor.tsx +msgid "Tab" +msgstr "制表符" + +#: src/components/settings/AppearanceTab.tsx +msgid "Tab Size" +msgstr "" + +#: src/components/ui/MultiResultPanel.tsx +msgid "Tab view" +msgstr "" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "table" +msgstr "表" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Table" +msgstr "表" + +#: src/components/modals/ClipboardImport/TableNameInput.tsx +#: src/components/modals/ClipboardImportModal.tsx +msgid "Table name" +msgstr "表名" + +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/TriggerEditorModal.tsx +msgid "Table Name" +msgstr "表名称" + +#: src/components/modals/CreateTableModal.tsx +msgid "Table name is required" +msgstr "表名称是必需的" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Tables" +msgstr "表" + +#: src/components/modals/CommunityModal.tsx +msgid "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community." +msgstr "Tabularis 是一个免费的开源项目。如果您觉得有用,请考虑支持该项目并与社区联系。" + +#: src/pages/TaskManagerPage.tsx +msgid "Tabularis Process" +msgstr "Tabularis 进程" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +msgid "Target column" +msgstr "目标列" + +#: src/components/settings/InfoTab.tsx +#: src/pages/TaskManagerPage.tsx +msgid "Task Manager" +msgstr "任务管理器" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Temp or Sort Ops" +msgstr "临时或排序操作" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Test" +msgstr "测试" + +#: src/components/modals/NewConnectionModal.tsx +#: src/components/modals/SshConnectionsModal.tsx +msgid "Test Connection" +msgstr "测试连接" + +#: src/components/modals/K8sConnectionsModal.tsx +msgid "Testing..." +msgstr "测试中..." + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "The app will restart automatically after installation" +msgstr "安装后应用将自动重启" + +#: src/components/settings/AiTab.tsx +msgid "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1" +msgstr "您的 OpenAI 兼容 API 的基础 URL。例如:https://api.groq.com/openai/v1, http://localhost:8000/v1" + +#: src/components/modals/ConfigJsonModal.tsx +msgid "The configuration file has been saved. Restart now to apply the changes?" +msgstr "" + +#: src/pages/Connections.tsx +msgid "The exported file will contain your database and SSH passwords in plaintext. Please store it securely." +msgstr "导出的文件将包含您的数据库和 SSH 明文密码。请妥善保管该文件。" + +#: src/components/layout/sidebar/QueryHistorySection.tsx +msgid "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:" +msgstr "历史文件已损坏并被移至备份。新的查询将正常记录。备份文件:" + +#: src/components/modals/McpModal.tsx +#: src/pages/McpPage.tsx +msgid "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely." +msgstr "模型上下文协议 (MCP) 允许 AI 助手(如 Claude)连接到您的本地工具。Tabularis 暴露了一个 MCP 服务器,让 AI 可以安全地读取数据库模式并执行查询。" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "The plugin process could not be launched. Check the error details below." +msgstr "无法启动插件进程。请参阅下面的错误详细信息。" + +#: src/components/settings/AppearanceTab.tsx +msgid "The quick brown fox jumps over the lazy dog" +msgstr "The quick brown fox jumps over the lazy dog" + +#: src/components/settings/AppearanceTab.tsx +msgid "Theme Selection" +msgstr "主题选择" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "These connections will reject writes from MCP. Other connections behave normally." +msgstr "这些连接将拒绝来自 MCP 的写入。其他连接行为不变。" + +#: src/pages/TaskManagerPage.tsx +msgid "This action cannot be undone immediately" +msgstr "此操作无法立即撤销" + +#: src/components/modals/ModifyColumnModal.tsx +msgid "This driver only supports primary keys at table creation time" +msgstr "此驱动程序仅在表创建时支持主键" + +#: src/components/settings/AiTab.tsx +msgid "This key is loaded from an environment variable" +msgstr "此密钥从环境变量加载" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Month" +msgstr "本月" + +#: src/components/notebook/NotebookView.tsx +msgid "This notebook is empty. Add a cell to get started." +msgstr "此笔记本为空。添加一个单元格以开始。" + +#: src/components/modals/PluginStartErrorModal.tsx +msgid "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path." +msgstr "此插件可能需要解释器(如 Python)。使用插件设置配置解释器路径。" + +#: src/components/settings/InfoTab.tsx +msgid "This project is a Work In Progress (WIP). Core features are stable, but we have big plans." +msgstr "此项目是正在进行的工作 (WIP)。核心功能已稳定,但我们有更大的计划。" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "This Week" +msgstr "本周" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgctxt "aiActivity" +msgid "Time" +msgstr "时间" + +#: src/components/modals/visual-explain/ExplainNodeDetails.tsx +#: src/components/modals/visual-explain/ExplainTableView.tsx +#: src/components/ui/ExplainPlanNode.tsx +msgctxt "editor" +msgid "Time" +msgstr "时间" + +#: src/i18n/registries/aiActivityStatus.ts +msgid "Timeout" +msgstr "超时" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgctxt "aiActivity" +msgid "Timeout" +msgstr "超时" + +#: src/components/modals/mcp/McpSafetySection.tsx +msgctxt "mcp" +msgid "Timeout" +msgstr "超时" + +#: src/components/settings/LogsTab.tsx +msgid "Timestamp" +msgstr "时间戳" + +#: src/components/settings/LocalizationTab.tsx +#: src/i18n/registries/pluginBuiltinSettings.ts +msgid "Timezone" +msgstr "时区" + +#: src/components/settings/LocalizationTab.tsx +msgid "Timezone used to display timestamps and exports. 'Auto' follows your system timezone." +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Timing" +msgstr "" + +#: src/components/ui/FilterRow.tsx +msgid "to" +msgstr "到" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Today" +msgstr "今天" + +#: src/components/notebook/ResultToolbar.tsx +msgid "Toggle Chart" +msgstr "显示/隐藏图表" + +#: src/components/ui/JsonCell.tsx +msgid "Toggle inline JSON tree" +msgstr "展开/收起 JSON 树" + +#: src/components/ui/TextCell.tsx +msgid "Toggle inline text editor" +msgstr "" + +#: src/components/notebook/NotebookCellHeader.tsx +msgid "Toggle Preview" +msgstr "切换预览" + +#: src/i18n/registries/shortcutLabels.ts +msgid "Toggle sidebar" +msgstr "切换侧边栏" + +#: src/components/ui/TableToolbar.tsx +msgid "Toggle structured filter panel" +msgstr "切换结构化筛选面板" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled parallel (cell {n})" +msgstr "切换了并行(单元格 {n})" + +#: src/i18n/registries/notebookHistoryChange.ts +msgid "Toggled stop on error" +msgstr "切换了出错时停止" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +#: src/components/settings/ai-activity/EventDetailModal.tsx +msgid "Tool" +msgstr "工具" + +#: src/components/modals/visual-explain/ExplainOverviewBar.tsx +msgid "Top Issues" +msgstr "关键问题" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgid "Total Cost" +msgstr "总成本" + +#: src/components/ui/JsonInput.tsx +msgid "Tree" +msgstr "树形" + +#. placeholder {0}: formatBytes(stats.total_memory_bytes) +#: src/pages/TaskManagerPage.tsx +msgid "Tree total: {0}" +msgstr "树总计:{0}" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "trigger" +msgstr "触发器" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Body (SQL)" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger created successfully" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger Name" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger SQL is required" +msgstr "" + +#: src/components/modals/TriggerEditorModal.tsx +msgid "Trigger updated successfully" +msgstr "" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Triggers" msgstr "" +#: src/components/modals/ClipboardImportModal.tsx +msgctxt "clipboardImport" +msgid "Try again" +msgstr "重试" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "Try again" +msgstr "重试" + +#: src/components/modals/ClipboardImport/SchemaEditor.tsx +#: src/components/modals/CreateTableModal.tsx +#: src/components/modals/ModifyColumnModal.tsx #: src/components/modals/SchemaModal.tsx msgid "Type" +msgstr "类型" + +#: src/components/notebook/NotebookToolbar.tsx +msgid "Undo" +msgstr "撤销" + +#: src/pages/Connections.tsx +msgid "Ungrouped" +msgstr "未分组" + +#: src/components/modals/CreateIndexModal.tsx +msgid "Unique Index" +msgstr "唯一索引" + +#: src/i18n/registries/taskManagerProcessStatus.ts +msgid "unknown" +msgstr "未知" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Unknown" +msgstr "未知" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Unnamed connection" +msgstr "" + +#: src/components/ui/TableToolbar.tsx +msgid "Unset" +msgstr "取消设置" + +#: src/components/notebook/NotebookCellHeader.tsx +#: src/components/notebook/NotebookView.tsx +msgid "Untitled" +msgstr "未命名" + +#: src/components/settings/PluginsTab.tsx +msgid "Up to date" +msgstr "已是最新" + +#: src/components/modals/GenerateSQLModal.tsx +msgid "Update" +msgstr "UPDATE" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings" +msgid "Update" +msgstr "更新" + +#: src/components/modals/SshConnectionsModal.tsx +msgctxt "sshConnections" +msgid "Update" +msgstr "更新" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "Update Error" +msgstr "更新错误" + +#: src/components/ui/DataGrid.tsx +#: src/pages/Editor.tsx +msgid "Update failed: " +msgstr "更新失败:" + +#: src/components/settings/InfoTab.tsx +#: src/components/settings/PluginsTab.tsx +msgid "Updates" +msgstr "更新" + +#. placeholder {0}: ({ aur: "AUR", snap: "Snap Store", flatpak: "Flathub" } as Record)[ installationSource ] ?? installationSource +#: src/components/settings/InfoTab.tsx +msgid "Updates managed by {0}" +msgstr "更新由 {0} 管理" + +#: src/components/ui/BlobInput.tsx +msgid "Upload File" +msgstr "上传文件" + +#: src/components/ui/BlobInput.tsx +msgid "Uploading..." +msgstr "上传中..." + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Existing SSH Connection" +msgstr "使用现有 SSH 连接" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use Kubernetes Port-Forward" +msgstr "使用 Kubernetes 端口转发" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Use SSH Tunnel" +msgstr "使用 SSH 隧道" + +#: src/components/settings/InfoTab.tsx +msgid "Use your package manager to update Tabularis." +msgstr "使用您的包管理器更新 Tabularis。" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Username" +msgstr "用户名" + +#: src/components/modals/NewConnectionModal/AppearanceSection.tsx +msgid "Using the driver's default icon." +msgstr "" + +#: src/components/ui/JsonInput.tsx +msgid "Valid JSON" +msgstr "JSON 格式正确" + +#: src/components/notebook/ParamsPanel.tsx +msgctxt "editor" +msgid "value" +msgstr "值" + +#: src/components/ui/FilterRow.tsx +msgctxt "toolbar" +msgid "value" +msgstr "值" + +#: src/components/modals/QueryParamsModal.tsx +msgid "Value (e.g. 'text' or 123)" +msgstr "值(例如 'text' 或 123)" + +#: src/components/notebook/CellChart.tsx +msgid "Values" +msgstr "数值" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify CA" +msgstr "验证 CA" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Full" +msgstr "完全验证" + +#: src/components/modals/NewConnectionModal.tsx +msgid "Verify Identity" +msgstr "" + +#: src/components/modals/UpdateNotificationModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "Version" +msgstr "版本" + +#. placeholder {0}: entries[0].version +#: src/components/modals/WhatsNewModal.tsx +msgid "Version {0}" +msgstr "版本 {0}" + +#. placeholder {0}: updateInfo.latestVersion +#: src/components/settings/InfoTab.tsx +msgid "Version {0} is available" +msgstr "版本 {0} 可用" + +#: src/components/settings/GeneralTab.tsx +#: src/components/ui/SchemaDiagram.tsx +msgid "Vertical" +msgstr "垂直" + +#: src/i18n/registries/quickNavigatorType.ts +msgid "view" +msgstr "视图" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View created successfully" +msgstr "视图创建成功" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar" +msgid "View Definition" +msgstr "视图定义" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Definition (SQL)" +msgstr "视图定义 (SQL)" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View definition is required" +msgstr "视图定义是必需的" + +#: src/components/settings/ai-activity/AiActivityEventsTab.tsx +msgid "View details" +msgstr "查看详情" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgid "View ER Diagram" +msgstr "查看 ER 图" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View Name" +msgstr "视图名称" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View name is required" +msgstr "视图名称是必需的" + +#: src/components/modals/UpdateNotificationModal.tsx +msgid "View on GitHub" +msgstr "在 GitHub 上查看" + +#: src/components/layout/ExplorerSidebar.tsx +msgid "View Schema" +msgstr "查看模式" + +#: src/components/modals/ViewEditorModal.tsx +msgid "View updated successfully" +msgstr "视图更新成功" + +#: src/components/layout/ExplorerSidebar.tsx +#: src/components/layout/sidebar/SidebarDatabaseItem.tsx +#: src/components/layout/sidebar/SidebarSchemaItem.tsx +msgid "Views" +msgstr "视图" + +#: src/components/modals/VisualExplainModal.tsx +#: src/components/notebook/NotebookAiButtons.tsx +#: src/pages/Editor.tsx +#: src/pages/VisualExplainPage.tsx +msgid "Visual Explain" +msgstr "可视化执行计划" + +#: src/components/settings/LogsTab.tsx +msgid "Warn" +msgstr "警告" + +#: src/components/layout/sidebar/DiscordCommunityCallout.tsx +msgid "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap." +msgstr "我们为 Tabularis 用户开设了专属社区:获取帮助、分享技巧、共建路线图。" + +#: src/components/modals/WhatsNewModal.tsx +#: src/components/settings/InfoTab.tsx +msgid "What's New" +msgstr "新功能" + +#: src/pages/TaskManagerPage.tsx +msgid "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted." +msgstr "将强制停止其进程。使用此插件的任何活动数据库连接将停止工作,直到插件重新启动。" + +#: src/components/ui/GeometryInput.tsx +msgid "WKT Mode" +msgstr "WKT 模式" + +#: src/components/settings/AppearanceTab.tsx +msgid "Word Wrap" msgstr "" +#: src/components/settings/AppearanceTab.tsx +msgid "Wrap long lines in the editor instead of scrolling horizontally." +msgstr "" + +#: src/i18n/registries/aiActivityQueryKind.ts +msgid "Write" +msgstr "写入" + +#: src/components/notebook/MarkdownCell.tsx +msgid "Write Markdown here..." +msgstr "在此编写 Markdown..." + +#: src/components/modals/mcp/McpSafetySection.tsx +msgid "Writes only" +msgstr "仅写入" + #: src/components/modals/SchemaModal.tsx msgid "YES" -msgstr "" +msgstr "是" + +#: src/i18n/registries/sidebarDateGroups.ts +msgid "Yesterday" +msgstr "昨天" + +#: src/components/settings/InfoTab.tsx +msgid "You're up to date" +msgstr "已是最新版本" diff --git a/src/locales/zh/messages.ts b/src/locales/zh/messages.ts index 39f11cf5..e8065a50 100644 --- a/src/locales/zh/messages.ts +++ b/src/locales/zh/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"6YtxFj\":[\"Name\"],\"7sMeHQ\":[\"Key\"],\"9X6cky\":[\"NO\"],\"DzFLzw\":[\"YES\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"gPQ8z1\":[\"Nullable\"],\"yz7wBu\":[\"Close\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"最大历史条目\"],\"-6AWa-\":[\"导入连接\"],\"-6NyRG\":[\"客户端\"],\"-K0AvT\":[\"断开连接\"],\"-PLZfh\":[\"刷新模型失败\"],\"-T5W2e\":[\"驱动说明\"],\"-ZgeeE\":[\"编辑历史\"],\"-aYrdc\":[\"版本 \",[\"0\"],\" 可用\"],\"-fBGXl\":[\"最高成本\"],\"-jIQDz\":[\"折叠单元格\"],\"-u1eRo\":[\"无数据库\"],\"-yoeVU\":[\"加载模式中...\"],\"-zy2Nq\":[\"类型\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"审批 ID\"],\"0E5-gF\":[\"确定要删除此连接吗?\"],\"0HCubq\":[\"展开\"],\"0Kmdvy\":[\"自定义字体\"],\"0Nj13E\":[\"生成 SQL\"],\"0ROgz5\":[\"输入 JSON...\"],\"0SY9sU\":[\"断开数据库连接失败\"],\"0b3kL9\":[\"选择一个数据库\"],\"0caMy7\":[\"历史\"],\"0mx5ow\":[\"查询\"],\"0n9BtL\":[\"预览\"],\"0pHB9N\":[\"复制为 表.列\"],\"0sQzZK\":[\"筛选数据库...\"],\"0uPP9X\":[\"FK 名称(可选)\"],\"0wxuek\":[\"当前版本\"],\"0x09Aw\":[\"切换了出错时停止\"],\"0yBP6v\":[\"支持开发\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"0yVAoD\":[\"统计行数\"],\"0zxJ87\":[\"无日志可用\"],\"1-ETbn\":[\"可视化执行计划\"],\"1133_z\":[\"编辑视图\"],\"11fGJ6\":[\"查询\"],\"13hIUA\":[[\"0\"],\" API 密钥\"],\"14qNWF\":[\"选择 SSH 连接\"],\"17qHRP\":[\"新建连接\"],\"1Dn6bg\":[\"Import from Clipboard\"],\"1Dnd0I\":[\"加载行数\"],\"1FjTLW\":[\"例如:python3\"],\"1GOvbo\":[\"Ollama 已连接(找到 \",[\"0\"],\" 个模型)\"],\"1I6UoR\":[\"视图\"],\"1U7hS5\":[\"长度\"],\"1UTmg5\":[\"最大允许数据包\"],\"1b7aSU\":[\"Editor Font Family\"],\"1ekzlY\":[\"插件进程\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"主题选择\"],\"1xVZkL\":[\"未找到模型\"],\"26Joci\":[\"已检索 \",[\"0\"],\" 行\"],\"2Bf-Qe\":[\"新建控制台\"],\"2CrSmP\":[\"帮助 Tabularis 成长\"],\"2D9F8_\":[\"复制连接失败\"],\"2Eoi_a\":[\"查看详情\"],\"2F4pE5\":[\"Rust 构建与测试\"],\"2Fsd9r\":[\"本月\"],\"2JzKXI\":[\"设为 GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"全选\"],\"2SO5RM\":[\"此驱动不支持 Kubernetes。\"],\"2Uh5GA\":[\"Cargo 生态\"],\"2YylFp\":[\"新建可视化查询\"],\"2luuSG\":[\"重试\"],\"2wxgft\":[\"重命名\"],\"2yG2GC\":[\"在执行前暂停写入(或所有查询)并要求用户在 Tabularis 中批准。\"],\"30-b5r\":[\"删除\"],\"31kwdN\":[\"复制筛选器\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"所有工具\"],\"3Am5DS\":[\"Tab view\"],\"3BhBCj\":[\"事件数\"],\"3FVg9_\":[\"本地列\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"运行\"],\"3L0HCz\":[\"没有匹配的插件。\"],\"3Nv3JV\":[\"执行查询中...\"],\"3TSz9S\":[\"最小化\"],\"3UW8fG\":[\"更新由 \",[\"0\"],\" 管理\"],\"3YvS-c\":[\"新建标签\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook 单元格名称提示词\"],\"3qkggm\":[\"全屏\"],\"3rBJ1T\":[\"查看模式\"],\"3xZ-xV\":[\"插入当前时间戳\"],\"40Gx0U\":[\"时区\"],\"41GP4f\":[\"选择复制或导出行为 CSV 时使用的默认分隔符。\"],\"42iaEi\":[\"未启用 ANALYZE 的 PostgreSQL 仅显示规划器估算值。\"],\"44cXI8\":[\"按 \",[\"colName\"],\" 升序排序\"],\"4AF7FO\":[\"管理数据库\"],\"4CK17g\":[\"确定要修改视图 \\\"\",[\"name\"],\"\\\" 吗?\"],\"4DDaw-\":[\"请至少选择一个数据库\"],\"4D_Nvt\":[\"创建分组失败\"],\"4RiR6c\":[\"导出为 HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个子进程\"],\"other\":[\"#\",\" 个子进程\"]}]],\"4VyuY3\":[\"确定要清除所有日志吗?\"],\"4WWqS3\":[\"展开/收起 JSON 树\"],\"4cEClj\":[\"会话\"],\"4cmfYp\":[\"复制行\"],\"4lIZTB\":[\"前端开发依赖\"],\"4oYjvJ\":[\"搜索查询…\"],\"4tMxW4\":[\"预览相关记录\"],\"4yJcjm\":[\"选择类型...\"],\"52O82A\":[\"非空\"],\"570t6W\":[\"关闭筛选面板 (ESC)\"],\"592-gw\":[\"自增\"],\"5FvuZv\":[\"分号 (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个事件\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"列表视图\"],\"5To6Z6\":[\"复制查询\"],\"5gqNQl\":[\"网格视图\"],\"5igIzr\":[\"导入已取消\"],\"5nTIup\":[\"正在编辑视图:\",[\"name\"]],\"66bEht\":[\"项目状态\"],\"6PIJVc\":[\"启动\"],\"6QvP0l\":[\"导出为 JSON\"],\"6W41Xq\":[\"任务管理器\"],\"6WngBH\":[\"设为 NULL\"],\"6YtxFj\":[\"名称\"],\"6_dCYd\":[\"概览\"],\"6gvoHP\":[\"复制错误信息\"],\"6oCVzX\":[\"Kubernetes 上下文为必填项\"],\"6wQO0f\":[\"显示数据\"],\"6z9W13\":[\"重启\"],\"71agNy\":[\"使用 AI 为未命名单元格生成名称\"],\"74J3FG\":[\"初始版本\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"知道了\"],\"77nSMU\":[\"删除全部 AI 活动历史?此操作不可撤销。\"],\"79UVYW\":[\"Esc 关闭\"],\"7ABmyQ\":[\"重试\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" / \",[\"0\"],\" 已激活\"],\"7E864M\":[\"数据库类型\"],\"7FqaG1\":[\"自定义 AI EXPLAIN 计划分析的指令。使用 \",[\"LANGUAGE\"],\" 作为输出语言的占位符。\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"检测到混合类型,默认为 TEXT\"],\"7RSQQd\":[\"在密钥链中保存密码\"],\"7VpPHA\":[\"确认\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"失败\"],\"7sMeHQ\":[\"键\"],\"7sNhEz\":[\"用户名\"],\"7tATh2\":[\"运行查询\"],\"7yb4gk\":[\"失败:\"],\"8-4V8D\":[\"表\"],\"82G-l5\":[\"模型上下文协议 (MCP) 允许 AI 助手(如 Claude)连接到您的本地工具。Tabularis 暴露了一个 MCP 服务器,让 AI 可以安全地读取数据库模式并执行查询。\"],\"83VjWE\":[\"新建笔记本\"],\"86IgoU\":[\"运行查询(编辑器中)\"],\"86fCgf\":[\"自定义 AI 查询结果标签页名称生成的指令。SQL 查询作为用户消息发送。\"],\"87a_t_\":[\"标签\"],\"8CWirf\":[\"MCP 服务器\"],\"8S8aIX\":[\"Connection Health Check\"],\"8TMaZI\":[\"时间戳\"],\"8Tg_JR\":[\"自定义\"],\"8UFKYr\":[\"选择要执行的查询\"],\"8VKSGV\":[\"生成 SQL\"],\"8Wjy6z\":[\"关闭左侧标签\"],\"8ZsakT\":[\"密码\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL Editor\"],\"8bRgTe\":[\"未配置 AI 提供商。请前往 设置 > AI。\"],\"8c_W0h\":[\"旧版本\"],\"8guEQP\":[\"刷新视图\"],\"8lm5qE\":[\"SQLite 的 EXPLAIN QUERY PLAN 很轻量,主要用于展示结构。\"],\"8q_sOc\":[\"移除\"],\"8t-akp\":[\"前 \",[\"MAX_PREVIEW_ROWS\"],\" 行\"],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"连接名称\"],\"91gnWY\":[\"导出日志\"],\"91rtHL\":[\"创建新视图\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"新建分组\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"视图更新成功\"],\"9NzDFn\":[\"应用程序启动时显示欢迎屏幕。\"],\"9OoUS3\":[\"创建新的 SSH 连接\"],\"9QGRD5\":[\"目标列\"],\"9QTny9\":[\"查询失败。\"],\"9S-fyV\":[\"预先执行计划\"],\"9SJ_Sx\":[\"系统资源\"],\"9UQ730\":[\"克隆\"],\"9X6cky\":[\"否\"],\"9XUV5V\":[\"剪贴板中没有数据\"],\"9mMU1R\":[\"时间\"],\"9mvFo_\":[\"时间\"],\"9npOH9\":[\"打开文件\"],\"9uI_rE\":[\"撤销\"],\"9xUjzm\":[\"全选\"],\"9y_02p\":[\"与社区聊天、获取帮助、建议功能\"],\"A1pPcI\":[\"SSH 主机\"],\"A1taO8\":[\"搜索\"],\"A6C0pv\":[\"总成本\"],\"A7WG0p\":[\"插件已禁用\"],\"A7yRz3\":[\"视图定义是必需的\"],\"A9Uyp6\":[\"导入失败:\"],\"ABEd-z\":[\"使用您的包管理器更新 Tabularis。\"],\"AMdgKV\":[\"执行计划分析提示词\"],\"ANSTMe\":[\"当前执行计划摘要中未检测到明显问题。\"],\"ANzIr7\":[\"查询历史\"],\"AOnaU7\":[\"已跳过\"],\"AVlZoM\":[\"环境变量\"],\"AXTVsE\":[\"完全验证\"],\"AXdRYR\":[\"当前日志数\"],\"Aa-YkQ\":[\"导出笔记本\"],\"Ai2U7L\":[\"主机\"],\"AidayG\":[\"按级别筛选\"],\"AlPiMN\":[\"点击跳转到页面\"],\"An-1rA\":[\"返回的行数\"],\"AnV8j-\":[\"修改列\"],\"AvEr_L\":[\"新建控制台\"],\"AvYbUL\":[\"在 GitHub 上 Star\"],\"Aw_eOs\":[\"需要 Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No results found\"],\"B0mJGb\":[\"原始输出\"],\"B1c58n\":[\"修改列\"],\"B3toQF\":[\"对象\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"连接名称为必填项\"],\"BAVvWJ\":[\"ER 图\"],\"BBtVak\":[\"全部折叠\"],\"BEVzjL\":[\"导入失败\"],\"BFxXo5\":[\"全部运行\"],\"BJe2lZ\":[\"切换侧边栏\"],\"BK3WCj\":[\"加载注册表失败\"],\"BKbO3i\":[\"编辑了笔记本\"],\"BMB51y\":[\"在控制台中运行\"],\"BNW_Z4\":[\"例如:active_users, order_summary\"],\"BUO_JN\":[\"复制查询\"],\"BYkhHY\":[\"启动时检查更新\"],\"BbHofF\":[\"导出连接\"],\"BeSg6-\":[\"在内存中收集应用日志以进行调试\"],\"BgAyQH\":[\"清除排序\"],\"BinTJI\":[\"npm 生态\"],\"BkFson\":[\"自动分页\"],\"Bpglf1\":[\"上移\"],\"BrGo6h\":[\"搜索笔记本\"],\"BxiAN_\":[\"删除查询\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"前端依赖\"],\"CE-M2e\":[\"信息\"],\"CHIyL8\":[\"无筛选器 —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"下载中...\"],\"CUxwxn\":[\"显示所有表\"],\"CWMXbw\":[\"将强制停止其进程。使用此插件的任何活动数据库连接将停止工作,直到插件重新启动。\"],\"CZt6BX\":[\"手动配置\"],\"Ca8ixZ\":[\"删除\"],\"CbJBQS\":[\"更新失败:\"],\"Cdz-YU\":[\"Stacked view\"],\"CpeQf9\":[\"循环\"],\"D2wXBw\":[\"自增\"],\"D6Ql0c\":[\"选择用于生成和解释的模型。\"],\"DB8zMK\":[\"应用\"],\"DDXf5E\":[\"SQL 函数\"],\"DEwnwi\":[\"删除\"],\"DNTvdl\":[\"在编辑器中打开\"],\"DPc2P9\":[\"删除单元格\"],\"DUY8Ba\":[\"重大变更\"],\"DVnBSM\":[\"Line Height\"],\"Dd7YLj\":[\"稍后再说\"],\"Deej3j\":[\"JSON 格式错误\"],\"DfKhk_\":[\"更新\"],\"DiRiTz\":[\"打开包页面\"],\"DlRHAD\":[\"正在执行 EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个错误\"]}]],\"Dvdihe\":[\"在 \",[\"0\"],\" 上 — 请审核后再执行。\"],\"DzFLzw\":[\"是\"],\"E-JUtQ\":[\"审批门\"],\"E0kcnZ\":[\"基本信息\"],\"E2mje_\":[\"Select Query to Explain\"],\"EDieyg\":[\"确定要删除此 SSH 连接吗?\"],\"EHZxPj\":[\"展开\"],\"EL4oDO\":[\"有新版本可用\"],\"EPi4gT\":[\"按 \",[\"field\"],\" 排序\"],\"EWPtMO\":[\"代码\"],\"EWX0mQ\":[\"未分组\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"未知\"],\"EhADgB\":[\"删除列\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"已是最新版本\"],\"Em6JFd\":[\"统计行数\"],\"EnGiqG\":[[\"0\"],\" 个元素\"],\"Ew1n5z\":[\"搜索插件…\"],\"F18WP3\":[\"参数\"],\"F3uc1x\":[\"导出的文件将包含您的数据库和 SSH 明文密码。请妥善保管该文件。\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"F6pfE9\":[\"活动\"],\"F8tXg7\":[\"数据预览\"],\"F9-6yK\":[\"默认复制格式\"],\"F9lxfG\":[\"移除\"],\"F9nsa2\":[\"历史文件已损坏并被移至备份。新的查询将正常记录。备份文件:\"],\"FF_oap\":[\"默认值\"],\"FK8rlP\":[\"尚未配置 SSH 连接\"],\"FMRcH8\":[\"第一行作为标题\"],\"FNvDMc\":[\"本周\"],\"FQe1FI\":[\"预估行数\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"警告\"],\"FZg3wM\":[\"操作\"],\"Fa_cky\":[\"模式:\",[\"tableName\"]],\"FpEL5o\":[\"Choose an independent theme for the SQL editor, or keep it in sync with the app theme.\"],\"FsvZQL\":[\"编辑了单元格 \",[\"n\"]],\"FtwKL9\":[\"切换标签\"],\"FznI3z\":[\"删除外键 \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"预览失败:\"],\"G8Q5Zq\":[\"命名空间为必填项\"],\"GAohqx\":[\"删除列\"],\"GJR99u\":[\"删除列失败:\"],\"GKfzzM\":[\"选择连接...\"],\"GS-Mus\":[\"导出\"],\"GUaLUq\":[\"加载模式失败:\"],\"GXP-Iw\":[\"添加 SQL 单元格\"],\"Gj1mLb\":[\"重新排序单元格\"],\"GlbqG2\":[\"重置为驱动默认\"],\"Gs5AlY\":[\"打开\"],\"GtmO8_\":[\"从\"],\"GxkJXS\":[\"上传中...\"],\"H-o4D2\":[\"创建新列\"],\"H2B-KW\":[\"选择使用 Ctrl+C / Cmd+C 复制行时的默认格式。\"],\"H3oH0g\":[\"重做\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"收起\"],\"H9P8CD\":[\"添加第一个筛选器\"],\"HAQlGl\":[\"AI 活动\"],\"HKNZrs\":[\"索引条件\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"删除 \",\"#\",\" 行\"],\"other\":[\"删除 \",\"#\",\" 行\"]}]],\"HPuCiP\":[\"文件夹路径\"],\"HUs1R3\":[\"此连接无打开的标签。\"],\"HV4Isp\":[\"输入 SSH 密码\"],\"HVC8Hh\":[\"已复制到剪贴板\"],\"HWEpq8\":[\"磁盘写入/s\"],\"HY4nP5\":[\"内联\"],\"HcmoWv\":[\"保存视图失败:\"],\"He8v1Y\":[\"从全部应用中取消选择\"],\"HehHP1\":[\"默认布局\"],\"HilYn4\":[\"此笔记本为空。添加一个单元格以开始。\"],\"HjxVK_\":[\"快速连接测试\"],\"HmMnRx\":[\"WKT 模式\"],\"HoKCiI\":[\"安装后应用将自动重启\"],\"HpK_8d\":[\"重新加载\"],\"Hpi4Jm\":[\"立即加入\"],\"HuA3RU\":[\"制表符\"],\"I128p7\":[\"管道符 (|)\"],\"I3AgqA\":[\"配置内联 SSH\"],\"I5VBsr\":[\"Same as App\"],\"I8yrPb\":[\"替换表\"],\"I92BdB\":[\"从分组中移除\"],\"I92fr4\":[\"稍后提醒我\"],\"I99Miw\":[\"成本\"],\"IETZIR\":[\"编辑单元格名称\"],\"IG9wzA\":[\"插入行失败:\"],\"ILleOG\":[\"资源类型必须为 \\\"service\\\" 或 \\\"pod\\\"\"],\"IQ3gAw\":[\"上传文件\"],\"IUwGEM\":[\"保存更改\"],\"IUwmLq\":[\"直接依赖声明于 package.json 和 src-tauri/Cargo.toml。\"],\"IVrBTT\":[\"开源库\"],\"I_43p6\":[\"安全\"],\"Iaizf4\":[\"外观\"],\"Il3FBB\":[\"切换结构化筛选面板\"],\"IniZRK\":[\"下载不可用 - 仅加载了预览\"],\"Isaozb\":[\"查看并调整\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"通过此插件的活动查询和连接将被中断。\"],\"J6v1s_\":[\"默认模型\"],\"JE-DVk\":[\"解释器\"],\"JEGlfK\":[\"开始时间\"],\"JKDPqP\":[\"请先选择上下文\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"使用 SSH 隧道\"],\"JRz8tw\":[\"MySQL 和 MariaDB 仅在支持的 EXPLAIN ANALYZE 或 ANALYZE FORMAT 变体中提供实际指标。\"],\"JUICth\":[\"PNG、JPG、WebP 或 SVG · 最大 512 KB\"],\"JY5Oyv\":[\"数据库\"],\"JlFRIB\":[\"连接建立后发送给 MySQL 的会话时区。\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"已拒绝\"],\"K3H9p5\":[\"取消设置\"],\"K5Dgu_\":[\"数据库\"],\"K8IGKf\":[\"认证类型\"],\"KAYNSW\":[\"在内存中保留的日志数量(1-10000)\"],\"KHTGbr\":[\"预先 EXPLAIN\"],\"KHvda8\":[\"非空\"],\"KJKNaZ\":[\"复制为 `列`\"],\"KM5Kc8\":[\"必须选择至少一列\"],\"KSCnVQ\":[\"类型\"],\"KUjOb9\":[\"运行中\"],\"KXBdwy\":[\"刷新存储过程\"],\"KXNyX7\":[\"设为 DEFAULT\"],\"Kd70-v\":[\"从剪贴板导入...\"],\"KhI4oS\":[\"在 \",[\"0\"],\" 中打开引用的行\"],\"KhgrNu\":[\"MCP 服务器集成\"],\"KirERL\":[\"超时\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"删除索引失败:\"],\"KzeARD\":[\"删除表失败:\"],\"L-rMC9\":[\"重置为默认\"],\"L3HXkQ\":[\"错误修复\"],\"LCZ7Dy\":[\"复制名称\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"索引\"],\"LMeAoR\":[\"行\"],\"LPCdc-\":[\"查询标签页名称提示词\"],\"LPFmga\":[\"选择用于全部应用\"],\"LYzbQ2\":[\"工具\"],\"Lbis_V\":[\"快速导航\"],\"Lcpbe2\":[\"无法启动插件进程。请参阅下面的错误详细信息。\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN 仅支持 DML 语句(SELECT、INSERT、UPDATE、DELETE)。DDL 语句(如 CREATE、DROP、ALTER)无法进行分析。\"],\"LnT0hQ\":[\"添加列\"],\"LvutiO\":[\"AI 建议\"],\"M-rHQO\":[\"退出全屏\"],\"M0XJba\":[\"确定要清除此连接的所有查询历史吗?\"],\"M1co_O\":[\"已配置\"],\"M73whl\":[\"上下文\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"显示全部\"],\"MXdOwj\":[\"分离连接\"],\"MZ4T5z\":[\"主键\"],\"MZX6eL\":[\"选择 K8s 连接\"],\"Mc1tjS\":[\"启用 ANALYZE 后可查看实际行数、耗时、循环次数和缓冲区信息。\"],\"Mm4p0T\":[\"还有 \",[\"0\"],\" 行\"],\"Mp0jQ_\":[\"此驱动程序仅在表创建时支持主键\"],\"MqpZwN\":[\"Tabularis 进程\"],\"MxIx43\":[\"↑↓ 导航,Enter 打开\"],\"MygtgQ\":[\"添加 Markdown 单元格\"],\"N40H-G\":[\"全部\"],\"N5UQxq\":[\"未在端口 \",[\"0\"],\" 上检测到 Ollama。是否正在运行?\"],\"N6GBcC\":[\"确认删除\"],\"N6aqHp\":[\"执行查询数\"],\"N9_S15\":[\"将创建一个新表\"],\"NBdMa1\":[\"最慢步骤\"],\"NC2AI2\":[\"长度\"],\"NCzNnx\":[\"升序排列\"],\"NT4Ubs\":[\"删除自定义密钥并恢复到环境变量(如果有)\"],\"NUjrCO\":[\"没有匹配的收藏\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"树总计:\",[\"0\"]],\"Nc2VQn\":[\"追加到现有表\"],\"NgFERn\":[\"添加到收藏\"],\"NktMHG\":[\"数据库名称\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"测试\"],\"Nq5QTk\":[\"explain Nth\"],\"O2STgu\":[\"导出失败:\"],\"O8SV8O\":[\"下载中...\"],\"O9_WW6\":[\"连接\"],\"OGEsKj\":[\"运行所有单元格\"],\"OGWdBg\":[\"视图名称\"],\"OHqT6w\":[\"按下组合键...\"],\"OXJsaG\":[\"参数名称无效\"],\"OfhWJH\":[\"重置\"],\"OlAl5i\":[\"Expand all\"],\"Osn70z\":[\"调试\"],\"Ou8b_n\":[\"加入 Discord\"],\"P1YGsb\":[\"SQL 生成\"],\"P2m1xb\":[\"出错时停止\"],\"P3Qlys\":[\"无连接 ID\"],\"P6Y3Yf\":[\"在终端中运行此命令,然后重启 Claude Code。\"],\"PCdj-c\":[\"取消全选\"],\"PMnFt9\":[\"磁盘读取/s\"],\"PQU2Va\":[\"Accept Suggestion with Enter\"],\"PRnH8G\":[\"共 \",[\"0\"]],\"PY8UF3\":[\"切换了并行(单元格 \",[\"n\"],\")\"],\"PiH3UR\":[\"已复制!\"],\"Pia95d\":[\"列名称是必需的\"],\"PrElXQ\":[\"更新\"],\"PrixCC\":[\"行将追加到现有表\"],\"Pujgbb\":[\"配置目标\"],\"Pw_eQV\":[\"插件启动失败\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"无已保存查询\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"无子进程\"],\"QCxMC0\":[\"应用启动时自动检查新版本\"],\"QEazml\":[\"删除所选\"],\"QHcLEN\":[\"已连接\"],\"QLHHFO\":[\"只读模式\"],\"QOvAW3\":[\"新功能\"],\"QULGRi\":[\"未找到有效查询\"],\"QZwllF\":[\"浏览...\"],\"QbkSr_\":[\"此查询无法 EXPLAIN。\"],\"QeHFYZ\":[\"EXPLAIN 失败: \",[\"0\"]],\"Qll2Tb\":[\"降序\"],\"Qoq-GP\":[\"了解更多\"],\"Qu4Hog\":[\"笔记本导入成功\"],\"R-A2Vd\":[\"无数据显示\"],\"R0Hkb2\":[\"已选择 \",[\"0\"],\" 个数据库\"],\"R1nHhB\":[\"已存在\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"转换为控制台\"],\"R9Khdg\":[\"自动\"],\"RDjuBN\":[\"设置\"],\"RF-HyV\":[\"选择您的首选语言。自动\\\"将使用您的系统语言。\"],\"RGhYAo\":[\"内存\"],\"RGpZyz\":[\"复制名称\"],\"RI-HZc\":[\"输入 \",[\"0\"],\" 密钥\"],\"RJrE17\":[\"确定要删除视图 \\\"\",[\"0\"],\"\\\" 吗?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"一个 Star 可以帮助其他人发现这个项目\"],\"Rb3Tdm\":[\"笔记本名称\"],\"RcbKJ3\":[\"更新时\"],\"RkefFq\":[\"在显示审批模态之前运行 EXPLAIN,以便用户查看执行计划。\"],\"RnF_hl\":[\"加载插件注册表...\"],\"Rns7_C\":[\"此操作无法立即撤销\"],\"RoKRqW\":[\"可用插件\"],\"RphpKk\":[\"外观\"],\"Rt8sHM\":[\"检测到排序或临时操作\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"已启用\"],\"S1veKH\":[\"还原选中\"],\"S5zeZU\":[\"切换预览\"],\"S8Yqbl\":[\"插入\"],\"SDND4q\":[\"未配置\"],\"SJRy3D\":[\"(自动生成)\"],\"SSwIjo\":[\"设为空\"],\"SgvA_r\":[\"按运行(Ctrl/Command+F5)加载表数据\"],\"SlfejT\":[\"错误\"],\"SoATkx\":[\"复制单元格\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"端点 URL\"],\"T7w5CQ\":[\"创建新行失败:\"],\"T9947j\":[\"值(例如 'text' 或 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"切换到垂直布局\"],\"TK5oex\":[\"保存提示词\"],\"TKQ7K-\":[\"安装\"],\"TKZreP\":[\"要求\"],\"TMLAx2\":[\"必需\"],\"TO08JI\":[\"外键\"],\"TQloo1\":[\"创建外键\"],\"TVKqvO\":[\"编辑行\"],\"TYSdQ3\":[\"执行 SELECT 查询\"],\"TfDFHS\":[\"Wrap long lines in the editor instead of scrolling horizontally.\"],\"Tibfjs\":[\"没有已保存的连接 — 在下方创建一个\"],\"Tj36Dr\":[\"重置为默认\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"锁定查询\"],\"TpwXyg\":[\"如果缺少耗时信息,服务器很可能返回的是仅估算的计划。\"],\"Tw2M1h\":[\"安装失败\"],\"Ty-rm9\":[\"SSH 连接\"],\"Tz0i8g\":[\"设置\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes 连接\"],\"U4uzyV\":[\"新功能\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"当单元格失败时停止执行\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" 在 \",[\"1\"],\" 上 — 请审核后再执行。\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[[\"clientName\"],\" 的配置安装成功!重启应用以应用更改。\"],\"URmyfc\":[\"详情\"],\"UWQBvp\":[\"生成 SQL 模板\"],\"UawTKZ\":[\"可选。指定用于运行此插件的可执行文件(例如 macOS/Linux 上的 python3,Windows 上的 python 或完整路径)。留空使用默认值。\"],\"Ub8sf5\":[\"SQLite 不支持通过 ALTER TABLE 删除外键。\"],\"UbbJ8j\":[\"未找到选项\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"这些连接将拒绝来自 MCP 的写入。其他连接行为不变。\"],\"UnQNah\":[\"确定要从表 \\\"\",[\"tableName\"],\"\\\" 中删除列 \\\"\",[\"0\"],\"\\\" 吗?\\n\\n警告:这将永久删除此列中的所有数据。此操作无法撤销。\"],\"UncTTh\":[\"整个进程树的 RSS 总和 — 可能重复计算共享内存\"],\"UpjgFm\":[\"更改了参数\"],\"UsAnu1\":[\"ANALYZE 会实际执行查询。对数据修改语句请谨慎使用。\"],\"UxKoFf\":[\"导航\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tab Size\"],\"UzWGWO\":[\"切换到 SQL WHERE 输入\"],\"V-chk5\":[\"How often to check if active connections are still alive. Set to 0 to disable.\"],\"V-pw1j\":[\"表名\"],\"V2T0Uw\":[\"暂无已保存的笔记本。\"],\"V3aNwx\":[\"数据编辑器\"],\"VGYp2r\":[\"应用到全部\"],\"VH8S7x\":[\"剪贴板列\"],\"VIAEcS\":[\"加载数据库失败。请检查您的凭据。\"],\"VKdztF\":[\"追加行\"],\"VLiHXI\":[\"分析数据\"],\"VMbmXc\":[\"确定要移除 \\\"\",[\"pluginName\"],\"\\\" 吗?这将删除插件文件。\"],\"VO3weF\":[\"未加载文件\"],\"VOZlKc\":[\"导入数据库\"],\"VPzsIz\":[\"正在生成名称...\"],\"VUul0v\":[\"终止\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"所有查询\"],\"Vi2Pqx\":[\"作者\"],\"Vl2zn2\":[\"已停止\"],\"Vo4uBA\":[\"安装插件时发生错误。请参阅下面的详细信息。\"],\"VqqyOs\":[\"执行查询以查看结果\"],\"VzhDFh\":[\"通过 MCP 阻止任何非 SELECT 语句,除非连接被显式允许。\"],\"W3uwpT\":[\"关闭所有标签\"],\"W4MKLh\":[\"例如:在生产环境中风险较大,请确认…\"],\"WA8RND\":[\"确定要删除表 \\\"\",[\"0\"],\"\\\" 吗?\"],\"WG8Qgt\":[\"删除表\"],\"WLnvCZ\":[\"输入用户名\"],\"WM-__8\":[\"搜索连接...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"已将 \",\"#\",\" 行导入到 \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"已将 \",\"#\",\" 行导入到 \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"确定要删除查询 \\\"\",[\"0\"],\"\\\" 吗?\"],\"WarTN_\":[\"成功\"],\"WcF1uL\":[\"分组名称\"],\"Weq9zb\":[\"通用\"],\"WmPpB1\":[\"正在加载执行计划…\"],\"Wu7cK0\":[\"未找到数据库\"],\"WvoUQF\":[\"删除了单元格 \",[\"n\"]],\"Ww3pDD\":[\"手动命令\"],\"X-20AU\":[\"输入查询标签页名称提示词...\"],\"X-U6_w\":[\"字体\"],\"X5fs0g\":[\"创建您的第一个连接以开始使用。\"],\"X7Ayjp\":[\"密码已保存到系统密钥链\"],\"X9kySA\":[\"收藏\"],\"XJOV1Y\":[\"活动\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"查询解释\"],\"XVF2Pf\":[\"编辑模式\"],\"XW6OYF\":[\"此插件可能需要解释器(如 Python)。使用插件设置配置解释器路径。\"],\"XZB6Xr\":[\"最大日志条目数\"],\"Xcffv2\":[\"在编辑器中显示 AI 辅助和解释按钮\"],\"XeqTSh\":[\"连接类型\"],\"XmJfZT\":[\"名称\"],\"XoQfG1\":[\"SSH 用户\"],\"XwI0Vw\":[\"自动(系统)\"],\"XyDlLX\":[\"索引名称\"],\"Y2P2aK\":[\"选择要加载的模式:\"],\"Y8HYw2\":[\"值\"],\"Y8zX3R\":[\"插入到编辑器\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"搜索...\"],\"YWlnMZ\":[\"Ollama 端口\"],\"YYdC3A\":[\"版本 \",[\"0\"]],\"YYn8b5\":[\"浏览并安装注册表中的插件。\"],\"Y_3yKT\":[\"在新标签中打开\"],\"YiAQ_Q\":[\"刷新表\"],\"Ysjr9Y\":[\"SQL 预览\"],\"YswNf7\":[\"所有级别\"],\"YtNwr6\":[\"每个连接存储的查询历史最大条目数。\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"加载中...\"],\"Z7ZXbT\":[\"批准\"],\"Z8JpBH\":[\"导出为 Notebook\"],\"Z8fBIc\":[\"实际行数高于估算\"],\"ZC2VJP\":[\"执行\"],\"ZCIS4k\":[\"无激活筛选器\"],\"ZF1_UT\":[\"SSL 模式\"],\"ZGjBPa\":[\"清除日志\"],\"ZHQTlM\":[\"从以下文件导入\"],\"ZIFDoJ\":[\"请至少选择结构或数据\"],\"ZIZA6o\":[\"批准前编辑\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 条解析警告\"],\"other\":[\"#\",\" 条解析警告\"]}]],\"ZVn8p2\":[\"Display line numbers in the editor gutter.\"],\"ZYnwzF\":[\"已断开\"],\"Za3_fO\":[\"错误\"],\"Zf7LHg\":[\"未找到上下文(是否已安装 kubectl?)\"],\"Zfotp5\":[\"估算与实际差距过大通常意味着统计信息过旧,或存在规划器难以建模的谓词。\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"加载模式失败\"],\"ZqXGPF\":[\"删除视图失败:\"],\"ZuL73E\":[\"创建新的数据库视图\"],\"_-bi4r\":[\"引用表\"],\"_AEYGI\":[\"暂无执行历史\"],\"_FdpZc\":[\"加载视图定义失败:\"],\"_FxSdi\":[\"查看应用、后端和工具链直接使用的开源依赖。\"],\"_JyTG8\":[\"输入解释提示词...\"],\"_Ltc_k\":[\"其他\"],\"_Q2Wix\":[\"行\"],\"_TK1zF\":[\"已保存的连接\"],\"_bJFBE\":[\"连接超时\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"树形\"],\"_dqduX\":[\"下一页\"],\"_fwE6J\":[\"更早\"],\"_n04sB\":[\"终止\"],\"_otxbQ\":[\"密钥文件\"],\"_pezIT\":[\"连接到 \",[\"0\"],\" 失败。请检查您的设置或确保数据库正在运行。\"],\"_srfkj\":[\"自定义密钥删除成功\"],\"_t6aFo\":[\"MySQL 和 MariaDB 会根据服务器版本回退到 EXPLAIN FORMAT=JSON 或表格版 EXPLAIN。\"],\"_xTbaM\":[\"列\"],\"_yxaaL\":[\"唯一索引\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis 是一个免费的开源项目。如果您觉得有用,请考虑支持该项目并与社区联系。\"],\"a9CASo\":[\"SQLite 仅支持重命名列。其他修改需要手动重建表。\"],\"aAIQg2\":[\"外观\"],\"aC_vCa\":[\"使用 AI 生成名称\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"选择节点查看详情\"],\"aHKcKc\":[\"上一页\"],\"aI-5wG\":[\"验证 CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"默认值\"],\"aScJP1\":[\"执行此查询\"],\"aVNbN8\":[\"筛选条件\"],\"aWhdMQ\":[\"使用现有 SSH 连接\"],\"aXYd8V\":[\"超时\"],\"aX_S_r\":[\"第 \",[\"0\"],\" 页,共 \",[\"totalPages\"],\" 页\"],\"agZcf8\":[\"生成的 SQL:\",[\"tableName\"]],\"ajqPzi\":[\"SELECT [字段]\"],\"alplHn\":[\"正在使用 AI 分析执行计划...\"],\"anBcU3\":[\"如果您喜欢 Tabularis 并希望看到更多功能,请考虑通过贡献代码、报告错误或 Star 项目来支持该项目。\"],\"arHmj2\":[\"确定要从历史中删除此查询吗?\"],\"arKcqW\":[\"较旧的服务器可能会回退到仅估算、指标更少的执行计划。\"],\"arcpYe\":[\"需要审批\"],\"aurEkh\":[\"加载进程中...\"],\"avtdsd\":[\"SQL 模式\"],\"az8lvo\":[\"关闭\"],\"b1Ah3z\":[\"聚焦于\"],\"b392Dr\":[\"全部展开\"],\"b5S_PU\":[\"数据库名称\"],\"bAvovP\":[\"下移\"],\"bH3JqY\":[\"未找到表\"],\"bP5JOn\":[\"Word Wrap\"],\"bcOdok\":[\"删除分组\"],\"bcqeas\":[\"将所有 MCP 查询设为只读\"],\"bmca5u\":[\"仅写入\"],\"bpCiBU\":[\"允许 MCP 写入\"],\"bqnhqW\":[\"估算高于实际行数\"],\"bqpcP7\":[\"导出数据库\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"报错\"],\"bw22Gk\":[\"列结构\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"关键问题\"],\"cFCKYZ\":[\"拒绝\"],\"cFGrCP\":[\"表\"],\"cGeFup\":[\"字体大小\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"聚焦于表\"],\"cM9NHc\":[\"降级到\"],\"cO9-2L\":[\"禁用\"],\"cSev-j\":[\"筛选器\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"导入 \",\"#\",\" 行\"],\"other\":[\"导入 \",\"#\",\" 行\"]}]],\"c_xoSn\":[\"重命名了单元格 \",[\"n\"]],\"cd0XEW\":[\"保存查询\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"分割组\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" 语句\"],\"d34vwG\":[\"加载数据库\"],\"d6ynQ7\":[\"降序排列\"],\"d8_6_v\":[\"cancel\"],\"d8wc1_\":[\"示例值\"],\"dBXoCS\":[\"检测到环境变量,但您可以通过在上方设置密钥来覆盖它。\"],\"dD7NPy\":[\"大纲\"],\"dEgA5A\":[\"取消\"],\"dMtLDE\":[\"到\"],\"dPJVhW\":[\"安装失败\"],\"dQvGiF\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个会话\"]}]],\"dTUzKm\":[\"执行选中 (\",[\"0\"],\")\"],\"dU_iQN\":[\"没有会话匹配当前筛选条件。\"],\"dUh9QW\":[\"规划时间\"],\"dVoir2\":[\"添加了 Markdown 单元格 \",[\"n\"]],\"dZ0d2O\":[\"请至少选择一个表\"],\"dhi13U\":[\"选择图片…\"],\"dli1JX\":[\"提交更改\"],\"dmYV6f\":[\"存储过程\"],\"dohZCo\":[\"AI SQL 生成的指令。使用 \",[\"SCHEMA\"],\" 作为数据库结构的占位符。\"],\"dtxpK2\":[\"分析\"],\"dwW9nJ\":[\"Show Line Numbers\"],\"dwWVw_\":[\"显示欢迎屏幕\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"如果存在\"],\"dyN4j9\":[\"点击\\\"运行预览\\\"查看结果\"],\"e07Iz5\":[\"打开任务管理器\"],\"e0NzXu\":[\"此项目是正在进行的工作 (WIP)。核心功能已稳定,但我们有更大的计划。\"],\"e1UKxf\":[\"保存此查询\"],\"e34gdU\":[\"MCP 子进程等待用户决定的时间。\"],\"e62LQd\":[\"强制终止\"],\"e6QZsM\":[\"Editor Theme\"],\"e8CirT\":[\"运行查询\"],\"eD2kUP\":[\"缓冲区读取\"],\"eE0JZ4\":[\"版本\"],\"eIDch7\":[\"输入执行计划分析提示词...\"],\"eIVolo\":[\"磁盘 R/W\"],\"eJOEBy\":[\"导出中...\"],\"eKHY3W\":[\"插件设置\"],\"eMb6Ub\":[\"选择资源...\"],\"ePK91l\":[\"编辑\"],\"eXweu6\":[\"展开单元格\"],\"ecNsTE\":[\"没有匹配的查询\"],\"ecUA8p\":[\"今天\"],\"ecpIZP\":[\"如果加密请输入密钥密码\"],\"esl-Tv\":[\"资源类型\"],\"exyUec\":[\"连接\"],\"f2AJjl\":[\"删除行\"],\"f4pD-j\":[\"连接测试失败\"],\"f7sXvi\":[\"输入密码\"],\"fAsxc0\":[\"顺序扫描\"],\"fIeFs0\":[\"选择值...\"],\"fJm92A\":[\"选择一个包含 EXPLAIN 计划(PostgreSQL JSON 或文本格式)的文件以进行可视化。\"],\"fOuPPd\":[\"插件\"],\"fXVIZq\":[\"数值\"],\"f_b1TA\":[\"执行历史\"],\"fghnqP\":[\"切换到连接 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"逗号 (,)\"],\"fp711N\":[\"已阻止 (只读)\"],\"fpzyLj\":[\"第 \",[\"0\"],\" 页,共 \",[\"1\"],\" 页\"],\"fuA6oy\":[\"Socket 超时\"],\"fvImQM\":[\"已选 \",[\"0\"],\" 列\"],\"fwr_nh\":[\"安装扩展、管理插件驱动,并控制运行时设置。\"],\"g0ZzK4\":[\"JSON 格式正确\"],\"g11hAR\":[\"新建行\"],\"g8VcMm\":[\"我的 K8s 集群\"],\"gCFR_O\":[\"并行执行(全部运行)\"],\"gEjU98\":[\"打开连接\"],\"gPQ8z1\":[\"可为空\"],\"gShKPx\":[\"至少需要一列\"],\"gSuQrG\":[\"无匹配 \\\"\",[\"search\"],\"\\\" 的连接\"],\"gUypqb\":[\"重新执行查询\"],\"gZWMnn\":[\"AI 分析\"],\"ghYd73\":[\"选择目标...\"],\"giAqEC\":[\"创建新表\"],\"gnQS8X\":[\"MySQL 连接器使用的最大数据包大小。\"],\"gqV5VL\":[\"内置,不可自定义\"],\"gww_XE\":[\"引用列\"],\"gxXPJ9\":[\"配置解释器\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"最大化\"],\"h-XNc9\":[\"CSV 分隔符\"],\"h-kNAk\":[\"例如:销售数据\"],\"h3Z_aK\":[\"在此编写 Markdown...\"],\"h7MgpO\":[\"键盘快捷键\"],\"h7peZQ\":[\"允许\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个系统进程正在运行\"],\"other\":[\"#\",\" 个系统进程正在运行\"]}]],\"hEZrFh\":[\"运行 SQL 文件...\"],\"hEipgW\":[\"立即检查更新\"],\"hG89Ed\":[\"图片\"],\"hIHcBE\":[\"导出为 CSV\"],\"hItdtk\":[\"浏览文件夹\"],\"hXFVjo\":[\"表名称是必需的\"],\"hZ6znB\":[\"端口\"],\"h_huI6\":[\"重新运行\"],\"hbz1rh\":[\"键\"],\"hdsaJo\":[\"导入中...\"],\"he3ygx\":[\"复制\"],\"hfGimp\":[\"选择命名空间...\"],\"hjjSEi\":[\"只读连接\"],\"hjwN_s\":[\"资源名称\"],\"hlF1mD\":[\"复制选区\"],\"hnboBb\":[\"AI 执行计划分析\"],\"hq4-D2\":[\"API 密钥安全存储在您的系统密钥链中。在此设置密钥将覆盖环境变量。\"],\"hqjXdn\":[\"删除 SSH 连接失败\"],\"hqofAK\":[\"复制 SQL\"],\"hy6L14\":[\"在 GitHub 上查看\"],\"hyjACX\":[\"折叠/展开单元格\"],\"hz1b5W\":[\"未找到匹配的元素\"],\"i1vAVM\":[\"创建新表\"],\"i3S5T3\":[\"搜索收藏...\"],\"i4_LY_\":[\"写入\"],\"i5HBWh\":[\"查询历史已重置\"],\"iAVlge\":[\"自定义 AI Notebook 单元格名称生成的指令。单元格内容(SQL 或 Markdown)作为用户消息发送。\"],\"iE1yAB\":[\"筛选表...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"连接\"],\"iSryJ2\":[\"我的 SSH 服务器\"],\"iT7UeX\":[\"添加索引\"],\"iUWwuR\":[\"下载并安装\"],\"ia7i08\":[\"请先选择上下文/命名空间/类型\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"已保存\"],\"igcsfY\":[\"注册表中无可用插件。\"],\"ij-Elv\":[\"图片预览\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" explainable query found\"],\"other\":[\"#\",\" explainable queries found\"]}]],\"ioL38P\":[\"实时监控插件进程、CPU、RAM 和磁盘使用情况\"],\"ixlL_e\":[\"SSH 密钥文件(可选)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"选择一个模型\"],\"j3gyYH\":[\"全部应用\"],\"j5CWO4\":[\"已是最新\"],\"j9HPuI\":[\"行 #\",[\"0\"]],\"jBtpMP\":[\"所有状态\"],\"jEu4bB\":[\"列\"],\"jEyQIs\":[\"未找到存储过程\"],\"jHc1By\":[\"删除视图\"],\"jI6sj4\":[\"与 PostgreSQL 和 MySQL 相比,成本、耗时和行数估算通常不可用。\"],\"jIxQCZ\":[\"您的平台不可用\"],\"jKIncn\":[\"数据库名称是必需的\"],\"jPSk57\":[\"理由 (可选)\"],\"jUNY_d\":[\"视图\"],\"jVqjDo\":[\"无效的笔记本文件格式\"],\"jWSZ-A\":[\"仅预览 - 未加载完整数据\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket 超时时间,单位为毫秒。\"],\"jpeU_Z\":[\"笔记本\"],\"jpgB4Y\":[\"连接名称是必需的\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"子进程\"],\"jx0t66\":[\"折叠子进程\"],\"jxShEf\":[\"创建视图\"],\"jz5PKx\":[\"视图定义\"],\"k-0mL-\":[\"添加列\"],\"k-XiMX\":[\"原始\"],\"k2UnVy\":[\"哈希条件\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"seconds\"],\"kBiBq7\":[\"删除索引 \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"显示/隐藏图表\"],\"kI1qVD\":[\"格式化\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行 · \",[\"1\"],\"毫秒\"],\"other\":[\"#\",\" 行 · \",[\"2\"],\"毫秒\"]}]],\"kJDmsI\":[\"事件详情\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"注册表\"],\"kY-q3P\":[[\"label\"],\" 是必需的\"],\"kexIdC\":[\"使用 Kubernetes 端口转发\"],\"kj2-CR\":[\"错误详情\"],\"krksx_\":[\"成功\"],\"kwY6nh\":[\"关闭\"],\"kx0s-n\":[\"Results\"],\"kxUEfE\":[\"获取存储过程定义失败:\"],\"l2Op2p\":[\"查询参数\"],\"l9Ivba\":[\"插件进程和系统资源\"],\"lBdPxu\":[\"强调色\"],\"lCF0wC\":[\"刷新\"],\"lEQRwq\":[\"数据 (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"新表已创建\"],\"lOekZ3\":[\"切换到水平布局\"],\"lUA1C1\":[\"SSH 密钥密码(可选)\"],\"lVeG20\":[\"Rust 依赖\"],\"lXAG6D\":[\"AI 查询解释的指令。使用 \",[\"LANGUAGE\"],\" 作为输出语言的占位符。\"],\"lbbYjy\":[\"Directly edit the raw configuration file. A restart is required to apply changes.\"],\"lhKW0m\":[\"添加了 SQL 单元格 \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"结果页面大小(限制)\"],\"lkz6PL\":[\"耗时\"],\"lmVGeo\":[\"添加外键\"],\"lnnx3E\":[\"将 Tabularis 连接到 Claude Desktop、Cursor 等\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"添加\"],\"m2Q_r8\":[\"在文本列中检测 JSON\"],\"m2tskz\":[\"成功\"],\"mA-qpe\":[\"全部运行完成\"],\"mBhhbA\":[\"日志已导出到剪贴板\"],\"mCNdzH\":[\"运行单元格\"],\"mO95sp\":[\"关闭面板\"],\"mP7dLi\":[\"在上方输入字体名称\"],\"mQCWzt\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个被阻止\"]}]],\"mS74ir\":[\"保存 SSH 连接失败\"],\"mSqtw8\":[\"运行预览\"],\"mURmfQ\":[\"视图定义 (SQL)\"],\"mX_isJ\":[\"垂直\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"结构 (DDL)\"],\"mrk4Cf\":[\"按 \",[\"colName\"],\" 降序排序\"],\"msJ8t1\":[\"我们为 Tabularis 用户开设了专属社区:获取帮助、分享技巧、共建路线图。\"],\"mtvVdV\":[\"已处理行数\"],\"mx4evv\":[\"创建表\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"下载\"],\"n7JDTx\":[\"安装并启用插件以在此处查看它们\"],\"nDDJir\":[\"搜索会话、客户端、连接…\"],\"nHP-Kr\":[\"无活动会话。请选择一个连接。\"],\"nKhCjW\":[\"选择表\"],\"nNmhuY\":[\"创建索引\"],\"nNwvm4\":[\"错误\"],\"nOVim5\":[\"保存连接失败\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Requires extension: \",[\"0\"]],\"ngO6Pv\":[\"Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.\"],\"nhmF3p\":[\"连接\"],\"noM5A_\":[\"创建您的第一个连接\"],\"nohy4m\":[\"暂无 MCP 活动。\"],\"nr-axf\":[\"移除插件\"],\"nsPFX9\":[\"在 Visual Explain 中打开\"],\"nuBbBr\":[\"图表\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"更改\"],\"o21Y-P\":[\"条目\"],\"o3tP_A\":[\"删除索引\"],\"o45L8r\":[\"输入您的连接名称\"],\"o53XGh\":[\"复制选中的行\"],\"o7J4JM\":[\"过滤条件\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"级别\"],\"oGiIL7\":[\"默认提供商\"],\"oJ4rAm\":[\"Connection Lost\"],\"oJlXF2\":[\"导入笔记本\"],\"oMFv82\":[\"垂直分割\"],\"oOFiQg\":[\"限制每次查询获取的行数,以防止性能问题。设置为 0 可禁用(不推荐)。\"],\"oT9ZD3\":[\"隐藏概览\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"更改了图表(单元格 \",[\"n\"],\")\"],\"oWfclW\":[\"当未带类型的文本单元格包含 JSON 对象或数组时显示 JSON 查看器入口。每单元格会增加少量解析开销。\"],\"obpbdz\":[\"未找到配置文件(请手动创建)\"],\"odZgfC\":[\"AI 客户端\"],\"ogZhXn\":[\"选择 ER 图的默认布局方向\"],\"ohUJJM\":[\"插件\"],\"ok3hJJ\":[\"已安装\"],\"olAdaI\":[\"实际行数\"],\"olWzar\":[\"强制终止插件进程\"],\"ovBPCi\":[\"默认\"],\"owzTWN\":[\"已从提供商刷新 AI 模型\"],\"oxYi6j\":[\"调整整个应用使用的基础字体大小(10-20px)。\"],\"p--hsQ\":[\"A database connection was lost\"],\"p6NueD\":[\"新建\"],\"pOYHox\":[\"操作\"],\"pR9bTR\":[\"无 BLOB 数据\"],\"pRDT0m\":[\"表\"],\"pS8S5q\":[\"例如:users, orders, products\"],\"pSws_M\":[\"表名称\"],\"pVLbKZ\":[\"视图创建成功\"],\"pWT04I\":[\"检查中...\"],\"pZJ_6D\":[\"索引名称是必需的\"],\"pddYFG\":[\"输入单元格名称提示词...\"],\"pnpyuD\":[\"启用日志\"],\"pqKMPv\":[\"创建表失败:\"],\"pqaP1h\":[\"关闭\"],\"pqarBu\":[\"升序\"],\"ptuq35\":[\"例如:微软雅黑\"],\"pzu7v4\":[\"水平\"],\"q-ch8m\":[\"其余连接保持只读。仅勾选的连接可以执行写入。\"],\"qIrtcK\":[\"更新\"],\"qOqy8G\":[\"检查配置中...\"],\"qWaVNs\":[\"Save & Restart\"],\"qb3LPX\":[\"查看 ER 图\"],\"qkK0vq\":[\"视图名称是必需的\"],\"qki9tG\":[\"错误\"],\"qoIir-\":[\"您的 OpenAI 兼容 API 的基础 URL。例如:https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Collapse all\"],\"r6ncaO\":[\"关闭标签\"],\"rAJlpP\":[\"容器端口\"],\"rG3WVm\":[\"读取\"],\"rGRCeK\":[\"清除查询历史\"],\"rNIto7\":[\"资源名称为必填项\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"笔记本导出成功\"],\"rY4sEV\":[\"删除外键\"],\"rbu0nO\":[\"管理 SSH 连接\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个连接\"],\"other\":[\"#\",\" 个连接\"]}]],\"rn2_2V\":[\"移除筛选器\"],\"roABNH\":[\"暂无查询历史\"],\"rtir7c\":[\"未知\"],\"ru0-2W\":[\"无活动连接\"],\"rvDPWO\":[\"估算偏差\"],\"rwWjWg\":[\"发布说明\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"测试连接\"],\"sBOaim\":[\"The configuration file has been saved. Restart now to apply the changes?\"],\"sCyv9B\":[\"刷新模型\"],\"sSUqe4\":[\"删除\"],\"sUBkgN\":[\"生成 SQL 中...\"],\"sZZG3d\":[\"确定要导入 \\\"\",[\"0\"],\"\\\" 吗?\\n这可能会覆盖现有数据。\"],\"sbK5ck\":[\"搜索历史...\"],\"sq_bS6\":[\"删除时\"],\"suW7-E\":[\"连接超时时间,单位为毫秒。\"],\"t-R8-P\":[\"执行时间\"],\"t1OfVY\":[[\"totalLibraries\"],\" 个库\"],\"t2TMzs\":[\"关闭标签\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"选择一个表...\"],\"t7KRl1\":[\"MCP 工具调用的审计日志,以及等待批准的查询。仅本地存储。\"],\"t9NJIk\":[\"检测到高扫描操作\"],\"tB7xof\":[\"临时或排序操作\"],\"tBBXTO\":[\"Ping Interval\"],\"tFrT3w\":[\"如果自动安装失败,请将此添加到您的客户端配置文件中。\"],\"tJ7UbA\":[\"explain focused\"],\"tKlWWY\":[\"表情\"],\"tMFzq-\":[\"水平分割\"],\"tQhW-D\":[\"日志设置\"],\"tXFGEx\":[\"没有已保存的 Kubernetes 连接。点击“添加”创建一个。\"],\"tXLz_8\":[\"删除\"],\"tXpRby\":[\"数据网格\"],\"tbysEk\":[\"操作\"],\"tdta9X\":[\"第 \",[\"0\"],\" 页\"],\"tfDRzk\":[\"保存\"],\"tfEioV\":[\"从上到下执行所有 SQL 单元格\"],\"tiAIaJ\":[\"SSH 密码缺失。请重新输入。\"],\"tk22BR\":[\"粘贴结构化数据,导入前预览模式\"],\"tst44n\":[\"事件\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL 文件执行成功\"],\"u6QeR6\":[\"Restart Now\"],\"uAQUqI\":[\"状态\"],\"uBAxNB\":[\"编辑器\"],\"uFViPK\":[\"无 SSH 连接可用\"],\"uHUuhp\":[\"Explain this query\"],\"uHfFzS\":[\"Editor Font Size\"],\"uJ_3K5\":[\"删除笔记本“\",[\"0\"],\"”?此操作无法撤销。\"],\"uKaNJ3\":[\"在 JSON 编辑器中打开\"],\"uQBwTo\":[\"模式\"],\"ub54ff\":[\"插件中心\"],\"ufFyBs\":[\"数据库导出成功\"],\"upNmR2\":[\"打开侧边栏编辑器\"],\"utMia3\":[\"取消全选\"],\"uyNaJg\":[\"1 个元素\"],\"v61dnS\":[\"输入您的 OpenAI 兼容提供商的确切模型名称。\"],\"v6oeyr\":[\"已安装\"],\"v75DGg\":[\"浏览文件\"],\"v99dO4\":[\"主键\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"找到 \",\"#\",\" 个查询\"],\"other\":[\"找到 \",\"#\",\" 个查询\"]}]],\"vCSBPD\":[\"添加筛选器\"],\"vH7uJj\":[\"排序方式…\"],\"vUOA1-\":[\"搜索模型...\"],\"vWcB0p\":[\"PostgreSQL 的 ANALYZE 会在可用时包含实际行数、耗时、循环次数和缓冲区计数。\"],\"vXIe7J\":[\"语言\"],\"vYf4Jm\":[\"输入完整的 SQL 函数(例如 ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"首选\"],\"vditm4\":[\"执行计划\"],\"vks_ls\":[\"关闭其他标签\"],\"vnAnIp\":[\"在 \",[\"1\"],\" 中未找到模型 \",[\"0\"],\"。它可能无法正常工作。\"],\"vqoN5u\":[\"结构\"],\"vrAvbP\":[\"确定要删除分组 \\\"\",[\"0\"],\"\\\" 吗?此分组中的连接将移至未分组。\"],\"vtJ2yO\":[\"浏览器\"],\"vujQJ5\":[\"本地化\"],\"vvJPVL\":[\"显示概览\"],\"vwI5S4\":[\"成功\"],\"vzH-7Z\":[\"解释\"],\"w7QmD_\":[\"输入系统提示词...\"],\"w9eMXw\":[\"触发器\"],\"wCJFlW\":[\"已用时间\"],\"wCfv2R\":[\"添加连接\"],\"wGfc86\":[\"清除所有历史\"],\"wGwNv4\":[\"当前数据库\"],\"wJJ-Wy\":[\"安装中...\"],\"wMe2Qp\":[\"命名空间\"],\"wQiel_\":[\"缓冲区命中\"],\"wQn-RM\":[\"添加列\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"已应用\"],\"wTmVhm\":[\"删除\"],\"wZeIWq\":[\"从剪贴板导入\"],\"w_bY7R\":[\"日志\"],\"wc_8bA\":[\"待审批\"],\"wckWOP\":[\"管理\"],\"wdYcKH\":[\"打开的标签\"],\"wja8aL\":[\"未命名\"],\"wkOAzk\":[\"没有匹配的笔记本。\"],\"wp49Ao\":[\"处理插入失败:\"],\"wqG2hQ\":[\"跳过(不导入)\"],\"wwrAsK\":[\"请填写所有必需字段\"],\"wwu18a\":[\"图标\"],\"x2fr_j\":[\"图形\"],\"xANKBj\":[\"函数\"],\"xBwjck\":[\"A restart is required to apply changes.\"],\"xDAtGP\":[\"消息\"],\"xECY01\":[\"存储过程\"],\"xGPNgZ\":[\"提示词自定义\"],\"xNgtS-\":[\"未找到视图\"],\"xOPa1b\":[\"端口必须介于 1 和 65535 之间\"],\"xY9s5E\":[\"超时\"],\"xaVUr1\":[\"The quick brown fox jumps over the lazy dog\"],\"xbvTzL\":[\"文件路径\"],\"xlew5F\":[\"清空\"],\"xmNyKz\":[\"测试中...\"],\"xtuh6D\":[\"展开浏览器\"],\"y-Zdqj\":[\"选择上下文...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"打开 JSON 查看器\"],\"yQXjG5\":[\"取消全选\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"昨天\"],\"ygCKqB\":[\"停止\"],\"ykCc6r\":[\"更改了数据库(单元格 \",[\"n\"],\")\"],\"ynVMSc\":[\"全选\"],\"ytdz1d\":[\"AI 请求执行数据库写入\"],\"yyhzur\":[\"创建表\"],\"yz7wBu\":[\"关闭\"],\"z0VdfR\":[\"例程\"],\"z407wX\":[\"SSH 密码\"],\"z5kV0h\":[\"连接\"],\"zBTMzx\":[\"预览\"],\"zCaAKs\":[\"更新错误\"],\"zDAakK\":[\"无法在没有连接 ID 的情况下显示图表。\"],\"zGe21h\":[\"此密钥从环境变量加载\"],\"zGfL5t\":[\"值\"],\"zL6-4A\":[\"无插件进程在运行\"],\"zLZhCi\":[\"全新的 Discord 社区!\"],\"zLlCou\":[\"复制列名\"],\"zNEL34\":[\"加入社区\"],\"zNgTlV\":[\"关闭右侧标签\"],\"zQz55p\":[\"查看结构\"],\"zR0FfH\":[\"已导出到 \",[\"target\"]],\"zRZeOc\":[\"搜索表、视图、例程、触发器...\"],\"zUNMsr\":[\"SSH 密钥\"],\"zXMRzb\":[\"SSH 端口\"],\"zZgoXr\":[\"无匹配的表\"],\"zaWbms\":[\"回滚更改\"],\"zgClmU\":[\"安装配置\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"输入值...\"],\"zvzN4C\":[\"设为激活\"],\"zzDlyQ\":[\"成功\"],\"zzMxrp\":[\"Edit config.json\"],\"zz_Wd_\":[\"模式\"]}")as Messages; \ No newline at end of file From fbba927a2501a74b88943b66cfb46fee3a7ed55e Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 11:37:42 +0200 Subject: [PATCH 13/22] =?UTF-8?q?refactor(i18n):=20remove=20i18next=20?= =?UTF-8?q?=E2=80=94=20native-only=20lingui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Native-only gate: no i18next refs in src, no i18next deps, build green. Main bundle drops ~470 kB (2361 -> 1892 kB gzip 624 -> 475). - Delete src/i18n/config.ts + src/i18n/locales/*.json (old i18next runtime). - Relocate SUPPORTED_LANGUAGES/AppLanguage + add detectLocale() to lingui.ts; main.tsx activates the detected locale, drops the i18next side-effect import. - Port PluginSlotProvider plugin translations from i18next addResourceBundle to Lingui i18n.load (flat keys = message ids); usePluginTranslation returns the runtime i18n._ (plugins are pre-built, can't use the t macro). - Remove 7 i18next packages; .tolgeerc -> PO catalogs; vite manualChunks -> @lingui/*; refresh the open-source-libraries listing. - Tests: vitest.config now applies the Lingui macro plugin; setup.ts mocks @lingui/react(/macro) so components render source English without a provider (replaces the dead react-i18next mock). Cuts the suite's pre-existing (since Task 3) failures from 188 to 69 assertion drifts, fixed next. --- .tolgeerc.json | 19 + package.json | 7 - pnpm-lock.yaml | 109 -- .../AppearanceSection.test.tsx | 5 - src/components/settings/LocalizationTab.tsx | 2 +- src/contexts/PluginSlotProvider.tsx | 18 +- src/contexts/SettingsContext.ts | 2 +- src/contexts/SettingsProvider.tsx | 3 +- src/hooks/usePluginApi.ts | 13 +- src/i18n/config.ts | 124 -- src/i18n/language.ts | 2 +- src/i18n/lingui.ts | 28 + src/i18n/locales/de.json | 1450 --------------- src/i18n/locales/en.json | 1550 ----------------- src/i18n/locales/es.json | 1415 --------------- src/i18n/locales/fr.json | 1450 --------------- src/i18n/locales/it.json | 1438 --------------- src/i18n/locales/ja.json | 1473 ---------------- src/i18n/locales/ru.json | 1518 ---------------- src/i18n/locales/zh.json | 1392 --------------- src/i18n/registries/pluginBuiltinSettings.ts | 2 +- src/main.tsx | 5 +- src/utils/openSourceLibraries.ts | 5 +- tests/setup.ts | 58 +- vite.config.ts | 2 +- vitest.config.ts | 4 +- 26 files changed, 114 insertions(+), 11980 deletions(-) create mode 100644 .tolgeerc.json delete mode 100644 src/i18n/config.ts delete mode 100644 src/i18n/locales/de.json delete mode 100644 src/i18n/locales/en.json delete mode 100644 src/i18n/locales/es.json delete mode 100644 src/i18n/locales/fr.json delete mode 100644 src/i18n/locales/it.json delete mode 100644 src/i18n/locales/ja.json delete mode 100644 src/i18n/locales/ru.json delete mode 100644 src/i18n/locales/zh.json diff --git a/.tolgeerc.json b/.tolgeerc.json new file mode 100644 index 00000000..a4606f7b --- /dev/null +++ b/.tolgeerc.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://docs.tolgee.io/cli-schema.json", + "apiUrl": "https://app.tolgee.io", + "format": "PO", + "patterns": ["./src/**/*.ts?(x)"], + "push": { + "files": [ + { "path": "src/locales/en/messages.po", "language": "en" }, + { "path": "src/locales/de/messages.po", "language": "de" }, + { "path": "src/locales/es/messages.po", "language": "es" }, + { "path": "src/locales/fr/messages.po", "language": "fr" }, + { "path": "src/locales/it/messages.po", "language": "it" }, + { "path": "src/locales/ja/messages.po", "language": "ja" }, + { "path": "src/locales/ru/messages.po", "language": "ru" }, + { "path": "src/locales/zh/messages.po", "language": "zh" } + ], + "forceMode": "OVERRIDE" + } +} diff --git a/package.json b/package.json index a09977b9..94e21506 100644 --- a/package.json +++ b/package.json @@ -51,12 +51,6 @@ "clsx": "^2.1.1", "dagre": "^0.8.5", "emoji-picker-react": "^4.19.1", - "i18next": "^25.10.10", - "i18next-browser-languagedetector": "^8.2.1", - "i18next-chained-backend": "^5.0.5", - "i18next-http-backend": "^4.0.0", - "i18next-localstorage-backend": "^4.3.1", - "i18next-resources-to-backend": "^1.2.1", "json-edit-react": "^1.29.1", "lucide-react": "^0.563.0", "monaco-editor": "^0.55.1", @@ -64,7 +58,6 @@ "react": "^19.2.4", "react-colorful": "^5.7.0", "react-dom": "^19.2.4", - "react-i18next": "^16.6.6", "react-markdown": "^10.1.0", "react-router-dom": "^7.13.2", "recharts": "^3.8.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4fb85c00..2827ae2e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -68,24 +68,6 @@ importers: emoji-picker-react: specifier: ^4.19.1 version: 4.19.1(react@19.2.4) - i18next: - specifier: ^25.10.10 - version: 25.10.10(typescript@5.9.3) - i18next-browser-languagedetector: - specifier: ^8.2.1 - version: 8.2.1 - i18next-chained-backend: - specifier: ^5.0.5 - version: 5.0.5 - i18next-http-backend: - specifier: ^4.0.0 - version: 4.0.0 - i18next-localstorage-backend: - specifier: ^4.3.1 - version: 4.3.1 - i18next-resources-to-backend: - specifier: ^1.2.1 - version: 1.2.1 json-edit-react: specifier: ^1.29.1 version: 1.29.1(react@19.2.4) @@ -107,9 +89,6 @@ importers: react-dom: specifier: ^19.2.4 version: 19.2.4(react@19.2.4) - react-i18next: - specifier: ^16.6.6 - version: 16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react-markdown: specifier: ^10.1.0 version: 10.1.0(@types/react@19.2.14)(react@19.2.4) @@ -2239,9 +2218,6 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - html-parse-stringify@3.0.1: - resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} - html-url-attributes@3.0.1: resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} @@ -2253,30 +2229,6 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - i18next-browser-languagedetector@8.2.1: - resolution: {integrity: sha512-bZg8+4bdmaOiApD7N7BPT9W8MLZG+nPTOFlLiJiT8uzKXFjhxw4v2ierCXOwB5sFDMtuA5G4kgYZ0AznZxQ/cw==} - - i18next-chained-backend@5.0.5: - resolution: {integrity: sha512-ThdtKUcNdk/zrSuzQyz2t4uH1McomKXP/t7GOf9Cm1oabDlJ6ZbQQJkLB9VlUErL9+45baFHv/ipzgi9MOotUg==} - - i18next-http-backend@4.0.0: - resolution: {integrity: sha512-EgSjO3Q1G6f2Q5oy7u9mmxuesE0oSfzAD97NFBjC8EmkK4guBSYLljM0Fng3DarMWIIkU70jfo4+mUzmyVISTA==} - engines: {node: '>=18'} - - i18next-localstorage-backend@4.3.1: - resolution: {integrity: sha512-ry8WNBanUs55rsRZs9+xaZWRxCoTEMMOf+2vNSfzzJqDPbHaf0eMFMrtYp/2ocxU6Xrxfwz17Fdz0rSs3Kw39Q==} - - i18next-resources-to-backend@1.2.1: - resolution: {integrity: sha512-okHbVA+HZ7n1/76MsfhPqDou0fptl2dAlhRDu2ideXloRRduzHsqDOznJBef+R3DFZnbvWoBW+KxJ7fnFjd6Yw==} - - i18next@25.10.10: - resolution: {integrity: sha512-cqUW2Z3EkRx7NqSyywjkgCLK7KLCL6IFVFcONG7nVYIJ3ekZ1/N5jUsihHV6Bq37NfhgtczxJcxduELtjTwkuQ==} - peerDependencies: - typescript: ^5 || ^6 - peerDependenciesMeta: - typescript: - optional: true - ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -2918,22 +2870,6 @@ packages: peerDependencies: react: ^19.2.4 - react-i18next@16.6.6: - resolution: {integrity: sha512-ZgL2HUoW34UKUkOV7uSQFE1CDnRPD+tCR3ywSuWH7u2iapnz86U8Bi3Vrs620qNDzCf1F47NxglCEkchCTDOHw==} - peerDependencies: - i18next: '>= 25.10.9' - react: '>= 16.8.0' - react-dom: '*' - react-native: '*' - typescript: ^5 || ^6 - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - typescript: - optional: true - react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -3428,10 +3364,6 @@ packages: jsdom: optional: true - void-elements@3.1.0: - resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} - engines: {node: '>=0.10.0'} - w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -5394,10 +5326,6 @@ snapshots: html-escaper@2.0.2: {} - html-parse-stringify@3.0.1: - dependencies: - void-elements: 3.1.0 - html-url-attributes@3.0.1: {} http-proxy-agent@7.0.2: @@ -5414,30 +5342,6 @@ snapshots: transitivePeerDependencies: - supports-color - i18next-browser-languagedetector@8.2.1: - dependencies: - '@babel/runtime': 7.29.2 - - i18next-chained-backend@5.0.5: - dependencies: - '@babel/runtime': 7.29.2 - - i18next-http-backend@4.0.0: {} - - i18next-localstorage-backend@4.3.1: - dependencies: - '@babel/runtime': 7.29.2 - - i18next-resources-to-backend@1.2.1: - dependencies: - '@babel/runtime': 7.29.2 - - i18next@25.10.10(typescript@5.9.3): - dependencies: - '@babel/runtime': 7.29.2 - optionalDependencies: - typescript: 5.9.3 - ieee754@1.2.1: {} ignore@5.3.2: {} @@ -6137,17 +6041,6 @@ snapshots: react: 19.2.4 scheduler: 0.27.0 - react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): - dependencies: - '@babel/runtime': 7.29.2 - html-parse-stringify: 3.0.1 - i18next: 25.10.10(typescript@5.9.3) - react: 19.2.4 - use-sync-external-store: 1.6.0(react@19.2.4) - optionalDependencies: - react-dom: 19.2.4(react@19.2.4) - typescript: 5.9.3 - react-is@17.0.2: {} react-is@18.3.1: {} @@ -6671,8 +6564,6 @@ snapshots: transitivePeerDependencies: - msw - void-elements@3.1.0: {} - w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 diff --git a/src/components/modals/NewConnectionModal/AppearanceSection.test.tsx b/src/components/modals/NewConnectionModal/AppearanceSection.test.tsx index 72ea549e..f64c9fc7 100644 --- a/src/components/modals/NewConnectionModal/AppearanceSection.test.tsx +++ b/src/components/modals/NewConnectionModal/AppearanceSection.test.tsx @@ -2,11 +2,6 @@ import { describe, it, expect, vi } from "vitest"; import { render, screen, fireEvent, waitFor } from "@testing-library/react"; import { AppearanceSection } from "./AppearanceSection"; -// Mock react-i18next so the section renders predictably regardless of locale files -vi.mock("react-i18next", () => ({ - useTranslation: () => ({ t: (k: string) => k, i18n: { language: "en" } }), -})); - vi.mock("@tauri-apps/plugin-dialog", () => ({ open: vi.fn().mockResolvedValue("/tmp/picked.png"), })); diff --git a/src/components/settings/LocalizationTab.tsx b/src/components/settings/LocalizationTab.tsx index 4086a089..92357e01 100644 --- a/src/components/settings/LocalizationTab.tsx +++ b/src/components/settings/LocalizationTab.tsx @@ -1,7 +1,7 @@ import { useMemo } from "react"; import { useLingui } from "@lingui/react/macro"; import { useSettings } from "../../hooks/useSettings"; -import { SUPPORTED_LANGUAGES, type AppLanguage } from "../../i18n/config"; +import { SUPPORTED_LANGUAGES, type AppLanguage } from "../../i18n/lingui"; import { SettingSection, SettingRow, SettingButtonGroup } from "./SettingControls"; import { Select } from "../ui/Select"; diff --git a/src/contexts/PluginSlotProvider.tsx b/src/contexts/PluginSlotProvider.tsx index c26ef413..7284f0bd 100644 --- a/src/contexts/PluginSlotProvider.tsx +++ b/src/contexts/PluginSlotProvider.tsx @@ -2,7 +2,7 @@ import { useState, useCallback, useMemo, useEffect, useRef } from "react"; import * as React from "react"; import * as ReactJSXRuntime from "react/jsx-runtime"; import { invoke } from "@tauri-apps/api/core"; -import i18n from "i18next"; +import { i18n } from "../i18n/lingui"; import { PluginSlotContext } from "./PluginSlotContext"; import type { PluginSlotRegistryType } from "./PluginSlotContext"; @@ -37,22 +37,26 @@ function exposePluginGlobals() { } /** - * Loads translation files for a plugin and registers them in i18next. + * Loads translation files for a plugin and merges them into the Lingui catalog. * Tries the current language first, then falls back to 'en'. * Missing locale files are silently skipped. - * Each plugin's translations are registered under its own namespace (plugin id). + * Plugin keys are used verbatim as Lingui message ids, so plugins should namespace + * them (e.g. ".key") to avoid clashing with host or other-plugin messages. */ +const loadedPluginLocales = new Set(); async function loadPluginTranslations(pluginId: string): Promise { - const langs = Array.from(new Set([i18n.language?.split("-")[0], "en"])).filter(Boolean) as string[]; + const langs = Array.from(new Set([i18n.locale?.split("-")[0], "en"])).filter(Boolean) as string[]; for (const lang of langs) { - if (i18n.hasResourceBundle(lang, pluginId)) continue; + const cacheKey = `${lang}:${pluginId}`; + if (loadedPluginLocales.has(cacheKey)) continue; try { const raw = await invoke("read_plugin_file", { pluginId, filePath: `locales/${lang}.json`, }); - const translations = JSON.parse(raw) as Record; - i18n.addResourceBundle(lang, pluginId, translations, true, true); + const translations = JSON.parse(raw) as Record; + i18n.load(lang, translations); + loadedPluginLocales.add(cacheKey); } catch { // Locale file absent or invalid — silently skip. } diff --git a/src/contexts/SettingsContext.ts b/src/contexts/SettingsContext.ts index 2e0ab53c..565b71c6 100644 --- a/src/contexts/SettingsContext.ts +++ b/src/contexts/SettingsContext.ts @@ -1,5 +1,5 @@ import { createContext } from "react"; -import type { AppLanguage } from "../i18n/config"; +import type { AppLanguage } from "../i18n/lingui"; export type { AppLanguage }; export type CopyFormat = "csv" | "json" | "sql-insert"; diff --git a/src/contexts/SettingsProvider.tsx b/src/contexts/SettingsProvider.tsx index bfd0c9ec..2378cdca 100644 --- a/src/contexts/SettingsProvider.tsx +++ b/src/contexts/SettingsProvider.tsx @@ -6,8 +6,7 @@ import { type Settings, } from "./SettingsContext"; import { getFontCSS } from "../utils/settings"; -import { dynamicActivate } from "../i18n/lingui"; -import { SUPPORTED_LANGUAGES } from "../i18n/config"; +import { dynamicActivate, SUPPORTED_LANGUAGES } from "../i18n/lingui"; // Resolve the "auto" language setting to a supported locale via the browser // language, falling back to English. diff --git a/src/hooks/usePluginApi.ts b/src/hooks/usePluginApi.ts index d39c692c..9e206b48 100644 --- a/src/hooks/usePluginApi.ts +++ b/src/hooks/usePluginApi.ts @@ -2,7 +2,7 @@ import { useState, useCallback, useContext, useMemo } from "react"; import { invoke } from "@tauri-apps/api/core"; import { message } from "@tauri-apps/plugin-dialog"; import { openUrl as openExternal } from "@tauri-apps/plugin-opener"; -import { useLingui } from "@lingui/react/macro"; +import { useLingui } from "@lingui/react"; import { ThemeContext } from "../contexts/ThemeContext"; import { DatabaseContext } from "../contexts/DatabaseContext"; @@ -143,13 +143,14 @@ export function usePluginSetting(pluginId: string) { } /** - * Hook for plugin components to access their own translations. - * Uses the plugin ID as the i18next namespace, which must be pre-loaded - * by the Tabularis plugin loader before the component mounts. + * Hook for plugin components to access their own translations. Returns a runtime + * translate function; the plugin's locale files are merged into the Lingui catalog + * by the loader before the component mounts. Keys are looked up verbatim as message + * ids, so plugins should namespace them (e.g. ".key"). */ export function usePluginTranslation(_pluginId: string) { - const { t } = useLingui(); - return t; + const { i18n } = useLingui(); + return (id: string, values?: Record) => i18n._(id, values); } /** diff --git a/src/i18n/config.ts b/src/i18n/config.ts deleted file mode 100644 index 8cee666d..00000000 --- a/src/i18n/config.ts +++ /dev/null @@ -1,124 +0,0 @@ -import i18n, { type ReadCallback } from 'i18next'; -import { initReactI18next } from 'react-i18next'; -import LanguageDetector from 'i18next-browser-languagedetector'; -import ChainedBackend from 'i18next-chained-backend'; -import HttpBackend from 'i18next-http-backend'; -import LocalStorageBackend from 'i18next-localstorage-backend'; -import resourcesToBackend from 'i18next-resources-to-backend'; - -import en from './locales/en.json'; -import it from './locales/it.json'; -import es from './locales/es.json'; -import zh from './locales/zh.json'; -import fr from './locales/fr.json'; -import de from './locales/de.json'; -import ja from './locales/ja.json'; -import ru from './locales/ru.json'; - -/** - * Single source of truth for supported languages. - * To add a new language: import the locale above, then add an entry here. - */ -export const SUPPORTED_LANGUAGES = [ - { id: "en", label: "English", translation: en }, - { id: "it", label: "Italiano", translation: it }, - { id: "es", label: "Español", translation: es }, - { id: "zh", label: "中文", translation: zh }, - { id: "fr", label: "Français", translation: fr }, - { id: "de", label: "Deutsch", translation: de }, - { id: "ja", label: "日本語", translation: ja }, - { id: "ru", label: "Русский", translation: ru }, -] as const; - -export type AppLanguage = "auto" | (typeof SUPPORTED_LANGUAGES)[number]["id"]; - -// Tolgee Content Delivery (public CDN) — serves /.json -const TOLGEE_CDN_BASE = "https://cdn.tolg.ee/04ebb496deb39eaaf4703e8565ff6e62"; - -const bundledResources: Record = - Object.fromEntries(SUPPORTED_LANGUAGES.map(({ id, translation }) => [id, translation])); - -export const OTA_ENABLED_KEY = "tabularis.i18n.otaEnabled"; -export const OTA_INTERVAL_MIN_KEY = "tabularis.i18n.otaIntervalMinutes"; -const DEFAULT_OTA_INTERVAL_MIN = 15; - -function readOtaEnabled(): boolean { - try { - return localStorage.getItem(OTA_ENABLED_KEY) !== "0"; - } catch { - return true; - } -} - -function readOtaIntervalMs(): number { - try { - const raw = Number(localStorage.getItem(OTA_INTERVAL_MIN_KEY)); - const minutes = Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_OTA_INTERVAL_MIN; - return minutes * 60 * 1000; - } catch { - return DEFAULT_OTA_INTERVAL_MIN * 60 * 1000; - } -} - -function bundledLoader( - language: string, - _namespace: string, - callback: ReadCallback, -): void { - const resources = bundledResources[language]; - if (resources) callback(null, resources); - else callback(new Error(`no bundled translations for "${language}"`), null); -} - -const otaEnabled = readOtaEnabled(); - -// Backend precedence (first to resolve wins; CDN results are cached back into localStorage): -// localStorage cache -> Tolgee CDN -> bundled JSON. CDN thus overrides the bundle when reachable. -const backends = otaEnabled - ? [LocalStorageBackend, HttpBackend, resourcesToBackend(bundledLoader)] - : [resourcesToBackend(bundledLoader)]; -const backendOptions = otaEnabled - ? [ - { expirationTime: readOtaIntervalMs(), defaultVersion: "v1" }, - { loadPath: `${TOLGEE_CDN_BASE}/{{lng}}.json` }, - {}, - ] - : [{}]; - -i18n - .use(LanguageDetector) - .use(ChainedBackend) - .use(initReactI18next) - .init({ - fallbackLng: "en", - supportedLngs: SUPPORTED_LANGUAGES.map(({ id }) => id), - load: "languageOnly", // "de-DE" -> "de": the CDN only has "de.json" - nonExplicitSupportedLngs: true, - returnEmptyString: false, // empty translation -> fall back to en, not blank - interpolation: { - escapeValue: false, - }, - backend: { - backends, - backendOptions, - }, - detection: { - order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag', 'path', 'subdomain'], - caches: ['localStorage', 'cookie'], - }, - react: { - useSuspense: false, - }, - }); - -export async function refreshTranslationsFromCdn(): Promise { - if (!otaEnabled) return; - try { - localStorage.removeItem(`i18next_res_${i18n.language}-translation`); - } catch { - /* ignore */ - } - await i18n.reloadResources(); -} - -export default i18n; diff --git a/src/i18n/language.ts b/src/i18n/language.ts index 5b30bd28..1f6cba77 100644 --- a/src/i18n/language.ts +++ b/src/i18n/language.ts @@ -1,4 +1,4 @@ -import { SUPPORTED_LANGUAGES, type AppLanguage } from "./config"; +import { SUPPORTED_LANGUAGES, type AppLanguage } from "./lingui"; export function getAiExplanationLanguage(language: AppLanguage): string { const fallBackLanguage = "English"; diff --git a/src/i18n/lingui.ts b/src/i18n/lingui.ts index ec93ead0..321cc595 100644 --- a/src/i18n/lingui.ts +++ b/src/i18n/lingui.ts @@ -6,6 +6,34 @@ export { i18n }; /** The `t` macro function returned by `useLingui()` (tagged template + descriptor). */ export type LinguiT = ReturnType["t"]; +export const SUPPORTED_LANGUAGES = [ + { id: "en", label: "English" }, + { id: "it", label: "Italiano" }, + { id: "es", label: "Español" }, + { id: "zh", label: "中文" }, + { id: "fr", label: "Français" }, + { id: "de", label: "Deutsch" }, + { id: "ja", label: "日本語" }, + { id: "ru", label: "Русский" }, +] as const; + +export type AppLanguage = "auto" | (typeof SUPPORTED_LANGUAGES)[number]["id"]; + +const STORAGE_KEY = "tabularis.language"; + +/** Persisted choice, else the browser language, else English. */ +export function detectLocale(): string { + const saved = (() => { + try { + return localStorage.getItem(STORAGE_KEY); + } catch { + return null; + } + })(); + const cand = saved ?? navigator.language.split("-")[0]; + return SUPPORTED_LANGUAGES.some((l) => l.id === cand) ? cand : "en"; +} + export async function dynamicActivate(locale: string): Promise { const { messages } = await import(`../locales/${locale}/messages.ts`); i18n.load(locale, messages); diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json deleted file mode 100644 index 4f31085f..00000000 --- a/src/i18n/locales/de.json +++ /dev/null @@ -1,1450 +0,0 @@ -{ - "toolbar": { - "filters": "Filter", - "toggleFilterPanel": "Strukturiertes Filterpanel ein-/ausblenden", - "filterConditions": "Filterbedingungen", - "activeOf": "{{active}} von {{total}} aktiv", - "noFilters": "Keine Filter —", - "addFirstFilter": "den ersten Filter hinzufügen", - "noActiveFilters": "keine aktiven Filter", - "closePanelEsc": "Filterpanel schließen (ESC)", - "unset": "Nicht gesetzt", - "sql": "SQL", - "addFilter": "Filter hinzufügen", - "applyAll": "Alle anwenden", - "apply": "Anwenden", - "applied": "Angewendet", - "switchToSql": "Zum SQL-WHERE-Eingabefeld wechseln", - "duplicateFilter": "Filter duplizieren", - "removeFilter": "Filter entfernen", - "deselectFromApplyAll": "Von \"Alle anwenden\" abwählen", - "selectForApplyAll": "Für \"Alle anwenden\" auswählen", - "valuePlaceholder": "Wert", - "fromPlaceholder": "von", - "toPlaceholder": "bis" - }, - "common": { - "save": "Speichern", - "close": "Schließen", - "cancel": "Abbrechen", - "delete": "Löschen", - "edit": "Bearbeiten", - "loading": "Wird geladen...", - "search": "Suchen...", - "noResults": "Keine Ergebnisse gefunden", - "error": "Fehler", - "success": "Erfolg", - "ok": "OK" - }, - "sidebar": { - "connections": "Verbindungen", - "settings": "Einstellungen", - "savedQueries": "Gespeicherte Abfragen", - "tables": "Tabellen", - "newConsole": "Neue Konsole", - "newVisualQuery": "Neue visuelle Abfrage", - "refresh": "Aktualisieren", - "refreshTables": "Tabellen aktualisieren", - "refreshViews": "Ansichten aktualisieren", - "createView": "Neue Ansicht erstellen", - "views": "Ansichten", - "noViews": "Keine Ansichten gefunden", - "editView": "Ansicht bearbeiten", - "viewDefinition": "Ansichtsdefinition", - "dropView": "Ansicht löschen", - "dropViewConfirm": "Möchtest du die Ansicht \"{{view}}\" wirklich löschen?", - "failGetViewDefinition": "Abrufen der Ansichtsdefinition fehlgeschlagen: ", - "failDropView": "Löschen der Ansicht fehlgeschlagen: ", - "explorer": "Explorer", - "sqlEditor": "SQL-Editor", - "loadingSchema": "Schema wird geladen...", - "noSavedQueries": "Keine gespeicherten Abfragen", - "searchFavorites": "Favoriten durchsuchen...", - "noFavoritesSearchResults": "Keine Favoriten entsprechen deiner Suche", - "execute": "Ausführen", - "edit": "Bearbeiten", - "delete": "Löschen", - "confirmDeleteQuery": "Möchtest du die Abfrage \"{{name}}\" wirklich löschen?", - "confirmDeleteTitle": "Abfrage löschen", - "noTables": "Keine Tabellen gefunden", - "columns": "Spalten", - "keys": "Schlüssel", - "foreignKeys": "Fremdschlüssel", - "indexes": "Indizes", - "deleteColumn": "Spalte löschen", - "deleteColumnConfirm": "Möchtest du die Spalte \"{{column}}\" aus der Tabelle \"{{table}}\" wirklich löschen?\n\nWARNUNG: Dadurch werden alle Daten in dieser Spalte dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.", - "failDeleteColumn": "Löschen der Spalte fehlgeschlagen: ", - "failDeleteIndex": "Löschen des Index fehlgeschlagen: ", - "modifyColumn": "Spalte ändern", - "copyName": "Namen kopieren", - "openInEditor": "Im Editor öffnen", - "closePanel": "Panel schließen", - "setAsActive": "Als aktiv festlegen", - "deleteTable": "Tabelle löschen", - "deleteTableConfirm": "Möchtest du die Tabelle \"{{table}}\" wirklich löschen?", - "failDeleteTable": "Löschen der Tabelle fehlgeschlagen: ", - "showData": "Daten anzeigen", - "countRows": "Zeilen zählen", - "viewSchema": "Schema anzeigen", - "viewERDiagram": "ER-Diagramm anzeigen", - "generateSQL": "SQL generieren", - "addColumn": "Spalte hinzufügen", - "addIndex": "Index hinzufügen", - "deleteIndex": "Index löschen", - "deleteIndexConfirm": "Index \"{{name}}\" löschen?", - "addFk": "Fremdschlüssel hinzufügen", - "deleteFk": "FK löschen", - "deleteFkConfirm": "Fremdschlüssel \"{{name}}\" löschen?", - "sqliteFkError": "SQLite unterstützt das Löschen von Fremdschlüsseln via ALTER TABLE nicht.", - "mcpServer": "MCP-Server", - "routines": "Routinen", - "functions": "Funktionen", - "procedures": "Prozeduren", - "noRoutines": "Keine Routinen gefunden", - "refreshRoutines": "Routinen aktualisieren", - "objectSummary": "Objekte", - "databases": "Datenbanken", - "failGetRoutineDefinition": "Abrufen der Routinen-Definition fehlgeschlagen: ", - "schemas": "Schemata", - "noSchemas": "Keine Schemata gefunden", - "loadingSchemas": "Schemata werden geladen...", - "schemaLoadError": "Schemata konnten nicht geladen werden", - "errorDetails": "Details", - "copyError": "Fehlermeldung kopieren", - "retry": "Erneut versuchen", - "expandExplorer": "Explorer ausklappen", - "selectSchemas": "Schemata auswählen", - "selectSchemasHint": "Wähle die zu ladenden Schemata aus:", - "selectAll": "Alle auswählen", - "deselectAll": "Alle abwählen", - "confirmSelection": "Bestätigen", - "editSchemas": "Schemata bearbeiten", - "selectConnection": "Verbindung auswählen", - "disconnect": "Trennen", - "switchConnection": "Verbindung wechseln", - "noOtherConnections": "Keine anderen Verbindungen", - "openConnections": "Geöffnet", - "availableConnections": "Verfügbar", - "splitVertical": "Vertikal teilen", - "splitHorizontal": "Horizontal teilen", - "separateConnections": "Verbindungen trennen", - "splitGroup": "Gruppe teilen", - "filterTables": "Tabellen filtern...", - "noTablesMatch": "Keine passende Tabelle", - "filterDatabases": "Datenbanken filtern...", - "manageDatabases": "Datenbanken verwalten", - "structure": "Struktur", - "favorites": "Favoriten", - "queryHistory": "Verlauf", - "noQueryHistory": "Kein Abfrageverlauf", - "noHistorySearchResults": "Keine Abfragen entsprechen deiner Suche", - "searchHistory": "Verlauf durchsuchen...", - "clearAllHistory": "Gesamten Verlauf löschen", - "historyRecoveredTitle": "Abfrageverlauf zurückgesetzt", - "historyRecoveredBody": "Die Verlaufsdatei war beschädigt und wurde beiseitegelegt. Neue Abfragen werden wie gewohnt aufgezeichnet. Sicherungsdatei:", - "historyRecoveredDismiss": "Schließen", - "confirmDeleteHistoryEntry": "Möchtest du diese Abfrage wirklich aus dem Verlauf löschen?", - "confirmClearHistory": "Möchtest du den gesamten Abfrageverlauf für diese Verbindung wirklich löschen?", - "confirmClearHistoryTitle": "Abfrageverlauf löschen", - "addToFavorites": "Zu Favoriten hinzufügen", - "insertToEditor": "In Editor einfügen", - "openInNewTab": "In neuem Tab öffnen", - "copyQuery": "Abfrage kopieren", - "runQuery": "Abfrage ausführen", - "dateGroupToday": "Heute", - "dateGroupYesterday": "Gestern", - "dateGroupThisWeek": "Diese Woche", - "dateGroupThisMonth": "Diesen Monat", - "dateGroupOlder": "Älter", - "notebooks": { - "tab": "Notebooks", - "search": "Notebooks suchen", - "refresh": "Aktualisieren", - "empty": "Noch keine gespeicherten Notebooks.", - "noSearchResults": "Keine Notebooks entsprechen der Suche.", - "open": "Öffnen", - "rename": "Umbenennen", - "delete": "Löschen", - "deleteConfirm": "Notebook \"{{title}}\" löschen? Dies kann nicht rückgängig gemacht werden.", - "renamePlaceholder": "Notebook-Name" - } - }, - "mcp": { - "title": "MCP-Server-Integration", - "subtitle": "Verbinde Tabularis mit Claude Desktop, Cursor und mehr", - "description": "Das Model Context Protocol (MCP) ermöglicht KI-Assistenten (wie Claude), sich mit deinen lokalen Tools zu verbinden. Tabularis stellt einen MCP-Server bereit, über den KI dein Datenbankschema lesen und Abfragen sicher ausführen kann.", - "checking": "Konfiguration wird geprüft...", - "notFound": "Konfigurationsdatei nicht gefunden (manuell erstellen)", - "installed": "Installiert", - "install": "Konfiguration installieren", - "manualConfig": "MANUELLE KONFIGURATION", - "manualText": "Füge dies manuell zur Konfigurationsdatei deines Clients hinzu, falls die automatische Installation fehlschlägt.", - "successTitle": "Erfolg", - "successMsg": "Konfiguration für {{client}} erfolgreich installiert! Starte die App neu, um sie anzuwenden.", - "errorTitle": "Installation fehlgeschlagen", - "clients": "KI-CLIENTS", - "manualCommand": "MANUELLER BEFEHL", - "manualCommandText": "Führe diesen Befehl im Terminal aus und starte anschließend Claude Code neu.", - "tabs": { - "setup": "Einrichtung", - "activity": "Aktivität", - "safety": "Sicherheit" - }, - "safety": { - "readOnlyTitle": "Nur-Lese-Modus", - "readOnlyDefault": "Alle MCP-Abfragen nur lesen", - "readOnlyDefaultDesc": "Blockiere jede Nicht-SELECT-Anweisung über MCP, außer für die unten erlaubten Verbindungen.", - "readOnlyList": "Nur-Lese-Verbindungen", - "readOnlyListDesc": "Diese Verbindungen lehnen Schreibvorgänge ab. Andere verhalten sich normal.", - "allowList": "Schreibvorgänge erlauben", - "allowListDesc": "Andere bleiben nur lesbar. Nur markierte dürfen schreiben.", - "approvalTitle": "Freigabe", - "approvalMode": "Freigabe erforderlich", - "approvalModeDesc": "Pausiert Schreibvorgänge (oder jede Abfrage) und fragt den Nutzer vor der Ausführung.", - "modeOff": "Aus", - "modeWritesOnly": "Nur Schreibvorgänge", - "modeAll": "Alle Abfragen", - "approvalTimeout": "Zeitlimit", - "approvalTimeoutDesc": "Wie lange gewartet wird, bevor abgebrochen wird.", - "preflightExplain": "Vorab-EXPLAIN", - "preflightExplainDesc": "Führt vor dem Modal ein EXPLAIN aus, damit der Plan sichtbar ist." - } - }, - "connections": { - "title": "Verbindungen", - "addConnection": "Verbindung hinzufügen", - "noConnections": "Keine aktiven Verbindungen", - "createFirst": "Erstelle deine erste Verbindung", - "active": "Aktiv", - "disconnect": "Trennen", - "connect": "Verbinden", - "edit": "Bearbeiten", - "delete": "Löschen", - "clone": "Klonen", - "confirmDelete": "Möchtest du diese Verbindung wirklich löschen?", - "deleteTitle": "Löschen bestätigen", - "failConnect": "Verbindung zu {{name}} fehlgeschlagen. Bitte prüfe deine Einstellungen oder stelle sicher, dass die Datenbank läuft.", - "failDisconnect": "Trennen von der Datenbank fehlgeschlagen", - "failDuplicate": "Duplizieren der Verbindung fehlgeschlagen", - "open": "Öffnen", - "pluginDisabled": "Plugin deaktiviert", - "connectionCount_one": "{{count}} Verbindung(en)", - "connectionCount_other": "{{count}} Verbindung(en)", - "noConnectionsHint": "Erstelle deine erste Verbindung, um loszulegen.", - "searchPlaceholder": "Verbindungen suchen...", - "noSearchResults": "Keine Verbindung entspricht \"{{query}}\"", - "gridView": "Rasteransicht", - "listView": "Listenansicht", - "export": "Verbindungen exportieren", - "import": "Verbindungen importieren", - "exportTitle": "Verbindungen exportieren", - "exportWarning": "Die exportierte Datei enthält deine Datenbank- und SSH-Passwörter im Klartext. Bewahre sie sicher auf." - }, - "connectionAppearance": { - "section": "Darstellung", - "accentColor": "Akzentfarbe", - "customColor": "Benutzerdefiniert", - "resetColor": "Auf Treiber-Standard zurücksetzen", - "icon": "Symbol", - "tabs": { - "default": "Standard", - "pack": "Symbol", - "emoji": "Emoji", - "image": "Bild" - }, - "chooseImage": "Bild auswählen…", - "removeImage": "Entfernen", - "imageHint": "PNG, JPG, WebP oder SVG · max. 512 KB" - }, - "settings": { - "general": "Allgemein", - "info": "Info", - "dataEditor": "Dateneditor", - "pageSize": "Ergebnisse pro Seite (Limit)", - "pageSizeDesc": "Begrenzt die Anzahl der pro Abfrage geladenen Zeilen, um Performance-Probleme zu vermeiden. Setze den Wert auf 0, um die Begrenzung zu deaktivieren (nicht empfohlen).", - "rows": "Zeilen", - "copyFormat": "Standard-Kopierformat", - "copyFormatDesc": "Wähle das Standardformat beim Kopieren von Zeilen mit Ctrl+C / Cmd+C.", - "csvDelimiter": "CSV-Trennzeichen", - "csvDelimiterDesc": "Wähle das Standard-Trennzeichen für das Kopieren oder Exportieren von Zeilen als CSV.", - "delimiterComma": "Komma (,)", - "delimiterSemicolon": "Semikolon (;)", - "delimiterTab": "Tabulator", - "delimiterPipe": "Pipe (|)", - "detectJsonInTextColumns": "JSON in Text-Spalten erkennen", - "detectJsonInTextColumnsDesc": "Zeigt JSON-Viewer-Bedienelemente, wenn eine nicht typisierte Text-Zelle ein JSON-Objekt oder -Array enthält. Verursacht kleine Parse-Kosten pro Zelle.", - "appearance": "Darstellung", - "localization": "Lokalisierung", - "themeSelection": "Themaauswahl", - "fontFamily": "Schriftfamilie", - "fonts": { - "custom": "Benutzerdefinierte Schrift", - "customPlaceholder": "z. B. Comic Sans MS", - "enterFontName": "Schriftnamen oben eingeben" - }, - "fontSize": "Schriftgröße", - "fontSizeLabel": "Schriftgröße", - "fontSizeDesc": "Passt die in der gesamten Anwendung verwendete Grundschriftgröße an (10-20 px).", - "preview": "Vorschau", - "fontPreviewText": "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern", - "appearance_general": "Allgemein", - "appearance_sqlEditor": "SQL-Editor", - "appearance_editorTheme": "Editor-Thema", - "appearance_editorThemeDesc": "Wähle ein unabhängiges Thema für den SQL-Editor oder halte es mit dem App-Thema synchron.", - "appearance_sameAsApp": "Wie App", - "appearance_editorFontFamily": "Editor-Schriftfamilie", - "appearance_editorFontSize": "Editor-Schriftgröße", - "appearance_editorLineHeight": "Zeilenhöhe", - "appearance_editorTabSize": "Tabgröße", - "appearance_editorWordWrap": "Zeilenumbruch", - "appearance_editorWordWrapDesc": "Lange Zeilen im Editor umbrechen statt horizontal zu scrollen.", - "appearance_editorShowLineNumbers": "Zeilennummern anzeigen", - "appearance_editorShowLineNumbersDesc": "Zeigt Zeilennummern im Rand des Editors an.", - "appearance_editorAcceptSuggestionOnEnter": "Vorschlag mit Eingabetaste übernehmen", - "appearance_editorAcceptSuggestionOnEnterDesc": "Erlaubt der Eingabetaste (zusätzlich zu Tab), den aktiven Autovervollständigungsvorschlag zu übernehmen. Bei deaktivierter Option fügt Enter immer einen Zeilenumbruch ein.", - "editConfigJson": "config.json bearbeiten", - "editConfigJsonDesc": "Bearbeite die rohe Konfigurationsdatei direkt. Ein Neustart ist erforderlich, um Änderungen anzuwenden.", - "configJsonModal": { - "title": "config.json", - "saveAndRestart": "Speichern und neu starten", - "restartNow": "Jetzt neu starten", - "restartRequired": "Ein Neustart ist erforderlich, um Änderungen anzuwenden.", - "restartMessage": "Die Konfigurationsdatei wurde gespeichert. Jetzt neu starten, um die Änderungen anzuwenden?" - }, - "language": "Sprache", - "languageDesc": "Wähle deine bevorzugte Sprache. \"Auto\" verwendet die Systemsprache.", - "auto": "Auto (System)", - "projectStatus": "Projektstatus", - "roadmapDesc": "Dieses Projekt ist Work in Progress (WIP). Die Kernfunktionen sind stabil, aber wir haben große Pläne.", - "support": "Entwicklung unterstützen", - "supportDesc": "Wenn dir tabularis gefällt und du mehr Funktionen sehen möchtest, unterstütze das Projekt durch Code-Beiträge, Bug-Reports oder einen Stern auf GitHub.", - "version": "Version", - "starOnGithub": "Auf GitHub mit Stern markieren", - "ai": { - "tab": "KI", - "title": "KI-Konfiguration", - "description": "Konfiguriere KI-Anbieter, um SQL-Generierung aus natürlicher Sprache zu aktivieren. Schlüssel werden sicher im System-Keychain gespeichert.", - "enable": "KI-Funktionen aktivieren", - "enableDesc": "Zeigt die Schaltflächen AI Assist und Explain im Editor an", - "defaultProvider": "Standard-Anbieter", - "defaultModel": "Standard-Modell", - "configuration": "Konfiguration", - "selectProviderFirst": "Wähle zuerst einen Anbieter", - "modelDesc": "Wähle das Modell, das für Generierung und Erklärung verwendet werden soll.", - "manageKeys": "API-Schlüssel verwalten", - "apiKey": "{{provider}} API-Schlüssel", - "configured": "Konfiguriert", - "notConfigured": "Nicht konfiguriert", - "enterKey": "{{provider}}-Schlüssel eingeben", - "keyStoredSecurely": "Der API-Schlüssel wird sicher im System-Keychain gespeichert. Ein hier gesetzter Schlüssel überschreibt die Umgebungsvariable.", - "fromEnv": "Umgebung", - "fromEnvTooltip": "Dieser Schlüssel wird aus einer Umgebungsvariable geladen", - "envVariableDetected": "Eine Umgebungsvariable ist vorhanden, aber du kannst sie überschreiben, indem du oben einen Schlüssel setzt.", - "reset": "Zurücksetzen", - "changeKey": "Ändern", - "resetKey": "Benutzerdefinierten Schlüssel löschen und auf Umgebungsvariable zurücksetzen (falls vorhanden)", - "keyResetSuccess": "Benutzerdefinierter Schlüssel erfolgreich gelöscht", - "promptCustomization": "Prompt-Anpassung", - "systemPrompt": "SQL-Generierung", - "systemPromptDesc": "Anweisungen für KI-gestützte SQL-Generierung. Verwende {{SCHEMA}} als Platzhalter für die Datenbankstruktur.", - "enterSystemPrompt": "System-Prompt eingeben...", - "resetDefault": "Auf Standard zurücksetzen", - "savePrompt": "Prompt speichern", - "explainPrompt": "Abfrageerklärung", - "explainPromptDesc": "Anweisungen für KI-gestützte Abfrageerklärungen. Verwende {{LANGUAGE}} als Platzhalter für die Ausgabesprache.", - "enterExplainPrompt": "Explain-Prompt eingeben...", - "cellnamePrompt": "Notebook-Zellnamen-Prompt", - "cellnamePromptDesc": "Passe die Anweisungen für die KI-Namensgenerierung von Notebook-Zellen an. Der Zelleninhalt (SQL oder Markdown) wird als Benutzernachricht gesendet.", - "enterCellnamePrompt": "Prompt für Notebook-Zellnamen eingeben...", - "tabrenamePrompt": "Prompt für Abfrage-Tabnamen", - "tabrenamePromptDesc": "Passe die Anweisungen für die KI-Namensgenerierung von Abfrage-Ergebnis-Tabs an. Die SQL-Abfrage wird als Benutzernachricht gesendet.", - "enterTabrenamePrompt": "Prompt für Abfrage-Tabnamen eingeben...", - "explainplanPrompt": "Prompt für Explain-Plan-Analyse", - "explainplanPromptDesc": "Passe die Anweisungen für die KI-Analyse von EXPLAIN-Abfrageplänen an. Verwende {{LANGUAGE}} für die Ausgabesprache.", - "enterExplainplanPrompt": "Prompt für Explain-Plan-Analyse eingeben...", - "keySaved": "API-Schlüssel sicher gespeichert", - "promptSaved": "System-Prompt erfolgreich gespeichert", - "explainPromptSaved": "Explain-Prompt erfolgreich gespeichert", - "promptReset": "System-Prompt auf Standard zurückgesetzt", - "explainPromptReset": "Explain-Prompt auf Standard zurückgesetzt", - "modelPlaceholder": "Modell auswählen", - "searchPlaceholder": "Modelle suchen...", - "noResults": "Keine Modelle gefunden", - "refresh": "Modelle aktualisieren", - "refreshSuccess": "KI-Modelle von Anbietern aktualisiert", - "refreshError": "Aktualisierung der Modelle fehlgeschlagen", - "ollamaConnected": "Ollama verbunden ({{count}} Modelle gefunden)", - "ollamaNotDetected": "Ollama wurde auf Port {{port}} nicht erkannt. Läuft es?", - "ollamaPort": "Ollama-Port", - "modelNotFound": "Modell {{model}} wurde in {{provider}} nicht gefunden. Es funktioniert möglicherweise nicht korrekt.", - "customOpenaiEndpoint": "Benutzerdefinierter Endpoint", - "endpointUrl": "Endpoint-URL", - "endpointUrlDesc": "Die Basis-URL deiner OpenAI-kompatiblen API. Beispiele: https://api.groq.com/openai/v1, http://localhost:8000/v1", - "customOpenaiModelPlaceholder": "z. B. llama3-70b-8192, mixtral-8x7b", - "customOpenaiModelDesc": "Gib den Modellnamen deines OpenAI-kompatiblen Dienstes ein.", - "customOpenaiModelHelp": "Gib den exakten Modellnamen für deinen OpenAI-kompatiblen Anbieter ein." - }, - "updates": "Updates", - "openSourceLibraries": "Open-Source-Bibliotheken", - "openSourceLibrariesDesc": "Durchsuche die direkten Open-Source-Abhängigkeiten, die in App, Backend und Tooling verwendet werden.", - "openSourceLibrariesSource": "Direkte Abhängigkeiten, deklariert in package.json und src-tauri/Cargo.toml.", - "openSourceLibrariesTotal": "{{count}} Bibliotheken", - "openSourceLibrariesOpenProject": "Paketseite öffnen", - "openSourceLibrariesSections": { - "npm-runtime": "Frontend-Abhängigkeiten", - "npm-tooling": "Frontend-Entwicklungsabhängigkeiten", - "cargo-runtime": "Rust-Abhängigkeiten", - "cargo-tooling": "Rust-Build und Tests" - }, - "openSourceLibrariesEcosystem": { - "npm": "npm-Ökosystem", - "cargo": "Cargo-Ökosystem" - }, - "autoCheckUpdates": "Beim Start nach Updates suchen", - "autoCheckUpdatesDesc": "Automatisch nach neuen Versionen suchen, wenn die App gestartet wird", - "checkNow": "Jetzt nach Updates suchen", - "checking": "Prüfung läuft...", - "currentVersion": "Aktuelle Version", - "logs": "Logs", - "logSettings": "Log-Einstellungen", - "enableLogging": "Logging aktivieren", - "enableLoggingDesc": "Anwendungslogs zur Fehlersuche im Speicher sammeln", - "maxLogEntries": "Maximale Log-Einträge", - "maxLogEntriesDesc": "Wie viele Logs im Speicher behalten werden sollen (1-10000)", - "currentLogCount": "Aktuelle Logs", - "clearLogs": "Logs löschen", - "clearLogsConfirm": "Möchtest du wirklich alle Logs löschen?", - "exportLogs": "Logs exportieren", - "exportLogsSuccess": "Logs in die Zwischenablage exportiert", - "noLogs": "Keine Logs verfügbar", - "refreshLogs": "Aktualisieren", - "logLevel": "Level", - "logMessage": "Nachricht", - "logTimestamp": "Zeitstempel", - "filterByLevel": "Nach Level filtern", - "allLevels": "Alle Level", - "debug": "Debug", - "warn": "Warnung", - "error": "Fehler", - "connectionHealthCheck": "Verbindungszustandsprüfung", - "pingInterval": "Ping-Intervall", - "pingIntervalDesc": "Wie oft geprüft werden soll, ob aktive Verbindungen noch erreichbar sind. Setze 0, um die Prüfung zu deaktivieren.", - "seconds": "Sekunden", - "entries": "Einträge", - "queryHistory": "Abfrageverlauf", - "queryHistoryMaxEntries": "Maximale Verlaufseinträge", - "queryHistoryMaxEntriesDesc": "Maximale Anzahl an Abfrageverlaufseinträgen pro Verbindung.", - "startup": "Start", - "showWelcome": "Willkommensbildschirm anzeigen", - "showWelcomeDesc": "Willkommensbildschirm beim Start der Anwendung anzeigen.", - "erDiagram": "ER-Diagramm", - "erDiagramDefaultLayout": "Standard-Layout", - "erDiagramDefaultLayoutDesc": "Wähle die Standard-Layout-Richtung für ER-Diagramme", - "plugins": { - "title": "Plugins", - "overviewTitle": "Plugin-Center", - "overviewDesc": "Installiere Erweiterungen, verwalte Plugin-Treiber und behalte Laufzeiteinstellungen im Blick.", - "installedMetric": "Installiert", - "enabledMetric": "Aktiviert", - "registryMetric": "Registry", - "updatesMetric": "Updates", - "available": "Verfügbare Plugins", - "availableDesc": "Durchsuche und installiere Plugins aus dem Registry.", - "refresh": "Aktualisieren", - "loadingRegistry": "Plugin-Registry wird geladen...", - "registryError": "Laden des Registry fehlgeschlagen", - "installed": "Installiert", - "by": "von", - "platformNotSupported": "Für deine Plattform nicht verfügbar", - "update": "Aktualisieren", - "install": "Installieren", - "upToDate": "Aktuell", - "downgrade": "Herabstufen auf", - "olderVersions": "Ältere Versionen", - "noPlugins": "Keine Plugins im Registry verfügbar.", - "searchPlaceholder": "Plugins suchen…", - "filterAll": "Alle", - "filterInstalled": "Installiert", - "filterUpdates": "Updates", - "searchNoResults": "Keine Plugins entsprechen der Suche.", - "requiresVersion": "Erfordert Tabularis ≥ {{version}}", - "remove": "Entfernen", - "removeTitle": "Plugin entfernen", - "confirmRemove": "Möchtest du \"{{name}}\" wirklich entfernen? Dadurch werden die Plugin-Dateien gelöscht.", - "installError": { - "title": "Installation fehlgeschlagen", - "subtitle": "Bei der Installation des Plugins ist ein Fehler aufgetreten. Siehe Details unten.", - "details": "Fehlerdetails", - "copy": "Kopieren", - "copied": "Kopiert!" - }, - "startError": { - "title": "Plugin konnte nicht gestartet werden", - "subtitle": "Der Plugin-Prozess konnte nicht gestartet werden. Prüfe die Fehlerdetails unten.", - "interpreterHint": "Dieses Plugin benötigt möglicherweise einen Interpreter (z. B. Python). Verwende die Plugin-Einstellungen, um den Interpreter-Pfad zu konfigurieren.", - "details": "Fehlerdetails", - "copy": "Kopieren", - "copied": "Kopiert!", - "configure": "Interpreter konfigurieren" - }, - "pluginSettings": { - "title": "Plugin-Einstellungen", - "interpreter": "Interpreter", - "interpreterDesc": "Optional. Gib die ausführbare Datei an, die zum Starten dieses Plugins verwendet wird (z. B. python3 unter macOS/Linux, python oder ein vollständiger Pfad unter Windows). Leer lassen, um den Standard zu verwenden.", - "interpreterPlaceholder": "z. B. python3", - "browse": "Durchsuchen...", - "fieldRequired": "{{label}} ist erforderlich", - "saved": "Gespeichert", - "resetToDefault": "Auf Standard zurücksetzen", - "builtin": { - "mysql": { - "maxAllowedPacket": { - "label": "Max Allowed Packet", - "description": "Maximale Paketgröße, die vom MySQL-Connector verwendet wird." - }, - "socketTimeout": { - "label": "Socket-Timeout", - "description": "Socket-Timeout in Millisekunden." - }, - "connectTimeout": { - "label": "Verbindungs-Timeout", - "description": "Verbindungs-Timeout in Millisekunden." - }, - "timezone": { - "label": "Zeitzone", - "description": "Sitzungszeitzone, die nach dem Verbindungsaufbau an MySQL gesendet wird." - } - } - } - } - }, - "shortcuts": { - "title": "Tastenkürzel", - "categories": { - "editor": "Editor", - "navigation": "Navigation", - "data_grid": "Datenraster" - }, - "runQuery": "Abfrage ausführen", - "runQueryEditor": "Abfrage ausführen (im Editor)", - "tabSwitcher": "Tab wechseln", - "copySelection": "Auswahl kopieren", - "toggleSidebar": "Seitenleiste umschalten", - "openConnections": "Verbindungen öffnen", - "newConnection": "Neue Verbindung", - "newTab": "Neuer Tab", - "closeTab": "Tab schließen", - "nextPage": "Nächste Seite", - "prevPage": "Vorherige Seite", - "switchConnection": "Zu Verbindung 1-9 wechseln", - "resetToDefault": "Auf Standard zurücksetzen", - "notOverridable": "Integriert, nicht anpassbar", - "pressKeys": "Tastenkombination drücken...", - "notebookRunAll": "Alle Zellen ausführen", - "pasteImportClipboard": "Aus Zwischenablage importieren", - "quickNavigator": "Schnellnavigation" - }, - "aiActivity": "KI-Aktivität" - }, - "update": { - "newVersionAvailable": "Neue Version verfügbar", - "version": "Version", - "releaseNotes": "Release Notes", - "downloadAndInstall": "Herunterladen und installieren", - "downloading": "Wird heruntergeladen...", - "installing": "Wird installiert...", - "installingMessage": "Die App wird nach der Installation automatisch neu gestartet", - "viewOnGitHub": "Auf GitHub ansehen", - "remindLater": "Später erinnern", - "upToDate": "Du bist auf dem neuesten Stand", - "updateAvailable": "Version {{version}} ist verfügbar", - "error": "Update-Fehler", - "managedByPackageManager": "Updates werden von {{source}} verwaltet", - "managedByPackageManagerDesc": "Verwende deinen Paketmanager, um Tabularis zu aktualisieren." - }, - "ai": { - "explain": "Erklären", - "generateSql": "SQL generieren" - }, - "newConnection": { - "namePlaceholder": "Gib deinen Verbindungsnamen an", - "nameRequired": "Verbindungsname ist erforderlich", - "dbNameRequired": "Datenbankname ist erforderlich", - "dbType": "Datenbanktyp", - "host": "Host", - "port": "Port", - "username": "Benutzername", - "password": "Passwort", - "passwordPlaceholder": "Passwort eingeben", - "usernamePlaceholder": "Benutzername eingeben", - "filePath": "Dateipfad", - "folderPath": "Ordnerpfad", - "dbName": "Datenbankname", - "dbNamePlaceholder": "Datenbankname", - "loadDatabases": "Datenbanken laden", - "loadingDatabases": "Wird geladen...", - "selectDatabases": "Datenbanken", - "appearance": "Erscheinungsbild", - "noDatabasesSelected": "Wähle mindestens eine Datenbank aus", - "selectedDatabases": "{{count}} Datenbank(en) ausgewählt", - "selectDatabase": "Datenbank auswählen", - "noDatabasesFound": "Keine Datenbanken gefunden", - "failLoadDatabases": "Laden der Datenbanken fehlgeschlagen. Prüfe deine Anmeldedaten.", - "filePathPlaceholder": "/absoluter/pfad/zu/db.sqlite", - "folderPathPlaceholder": "/absoluter/pfad/zum/ordner", - "browseFile": "Datei auswählen", - "browseFolder": "Ordner auswählen", - "useSsh": "SSH-Tunnel verwenden", - "sshHost": "SSH-Host", - "sshPort": "SSH-Port", - "sshUser": "SSH-Benutzer", - "sshPassword": "SSH-Passwort", - "sshPasswordMissing": "SSH-Passwort fehlt. Bitte erneut eingeben.", - "sshPasswordPlaceholder": "SSH-Passwort eingeben", - "sshKeyFile": "SSH-Schlüsseldatei (optional)", - "sshKeyFilePlaceholder": "/pfad/zu/id_rsa", - "sshKeyPassphrase": "Passphrase für SSH-Schlüssel (optional)", - "sshKeyPassphrasePlaceholder": "Passphrase eingeben, falls der Schlüssel verschlüsselt ist", - "saveKeychain": "Passwörter im Keychain speichern", - "testConnection": "Verbindung testen", - "save": "Speichern", - "failSave": "Speichern der Verbindung fehlgeschlagen", - "selectSshConnection": "SSH-Verbindung auswählen", - "useSshConnection": "Vorhandene SSH-Verbindung verwenden", - "createInlineSsh": "SSH inline konfigurieren", - "manageSshConnections": "SSH-Verbindungen verwalten", - "noSshConnections": "Keine SSH-Verbindungen verfügbar", - "sslMode": "SSL-Modus", - "sslModes": { - "disable": "Deaktivieren", - "allow": "Erlauben", - "prefer": "Bevorzugen", - "require": "Erforderlich", - "verify-ca": "CA prüfen", - "verify-full": "Vollständig prüfen" - }, - "chooseContext": "Kontext auswählen...", - "chooseK8s": "Verbindung auswählen...", - "chooseNamespace": "Namespace auswählen...", - "chooseResource": "Ressource auswählen...", - "createInlineK8s": "Inline", - "k8sContext": "Kontext", - "k8sNamespace": "Namespace", - "k8sNotAvailable": "Kubernetes ist für diesen Treiber nicht verfügbar.", - "k8sPort": "Container-Port", - "k8sResourceName": "Ressourcenname", - "k8sResourceType": "Ressourcentyp", - "k8sResourceTypePod": "Pod", - "k8sResourceTypeService": "Service", - "k8sSelectType": "Typ auswählen...", - "manageK8s": "Verwalten", - "noK8sConnections": "Keine gespeicherten Verbindungen — erstelle unten eine", - "noK8sContexts": "Keine Kontexte gefunden (ist kubectl installiert?)", - "selectContextFirst": "Zuerst einen Kontext auswählen", - "selectK8sConnection": "K8s-Verbindung auswählen", - "selectTypeFirst": "Zuerst Kontext/Namespace/Typ auswählen", - "useK8s": "Kubernetes-Port-Forward verwenden", - "useK8sConnection": "Gespeicherte Verbindung" - }, - "sshConnections": { - "title": "SSH-Verbindungen", - "createNew": "Neue SSH-Verbindung erstellen", - "noConnections": "Noch keine SSH-Verbindungen konfiguriert", - "name": "Verbindungsname", - "namePlaceholder": "Mein SSH-Server", - "authType": "Authentifizierungstyp", - "authTypePassword": "Passwort", - "authTypeSshKey": "SSH-Schlüssel", - "edit": "Bearbeiten", - "delete": "Löschen", - "save": "Speichern", - "update": "Aktualisieren", - "cancel": "Abbrechen", - "confirmDelete": "Möchtest du diese SSH-Verbindung wirklich löschen?", - "failSave": "Speichern der SSH-Verbindung fehlgeschlagen", - "failDelete": "Löschen der SSH-Verbindung fehlgeschlagen", - "fillRequired": "Bitte fülle alle erforderlichen Felder aus", - "keyFile": "Schlüsseldatei", - "quickTest": "Schneller Verbindungstest", - "testFailed": "Verbindungstest fehlgeschlagen", - "savedInKeychain": "Passwort im System-Keychain gespeichert" - }, - "dataGrid": { - "newRow": "NEU", - "noData": "Keine Daten zum Anzeigen", - "deleteRow": "Zeile löschen", - "deleteRows_one": "{{count}} Zeilen löschen", - "deleteRows_other": "{{count}} Zeilen löschen", - "updateFailed": "Aktualisierung fehlgeschlagen: ", - "null": "null", - "sortByAsc": "Nach {{col}} ASC sortieren", - "sortByDesc": "Nach {{col}} DESC sortieren", - "clearSort": "Sortierung löschen", - "copyCell": "Zelle kopieren", - "copySelectedRows": "Ausgewählte Zeile(n) kopieren", - "copyColumnName": "Spaltennamen kopieren", - "copyColumnNameQuoted": "Als `column` kopieren", - "copyColumnNameTable": "Als table.column kopieren", - "copied": "In Zwischenablage kopiert", - "duplicateRow": "Zeile duplizieren", - "revertSelected": "Auswahl zurücksetzen", - "setGenerate": "GENERATED setzen", - "setNull": "NULL setzen", - "setDefault": "DEFAULT setzen", - "setEmpty": "EMPTY setzen", - "setServerNow": "Aktuellen Zeitstempel einfügen", - "previewReferenced": "Verknüpften Datensatz anzeigen", - "openReferenced": "Referenzierte Zeile in {{table}} öffnen" - }, - "newRow": { - "title": "Neue Zeile", - "insert": "Einfügen", - "cancel": "Abbrechen", - "failInsert": "Einfügen der Zeile fehlgeschlagen: ", - "failLoad": "Laden des Schemas fehlgeschlagen: ", - "loading": "Wird geladen...", - "selectValue": "Wert auswählen...", - "noOptions": "Keine Optionen gefunden", - "autoGenerated": "(Automatisch generiert)", - "required": "Erforderlich", - "primaryKey": "Primärschlüssel", - "auto": "Auto" - }, - "editor": { - "noTabs": "Keine geöffneten Tabs für diese Verbindung.", - "newConsole": "Neue Konsole", - "noActiveSession": "Keine aktive Sitzung. Bitte wähle eine Verbindung aus.", - "stop": "Stopp", - "run": "Ausführen", - "export": "Exportieren", - "connected": "Verbunden", - "disconnected": "Getrennt", - "newRow": "Neue Zeile", - "rowsRetrieved": "{{count}} Zeilen abgerufen", - "autoPaginated": "Automatisch paginiert", - "pageOf": "Seite {{current}} von {{total}}", - "page": "Seite {{current}}", - "jumpToPage": "Klicken, um zur Seite zu springen", - "loadRowCount": "Zeilenanzahl laden", - "executePrompt": "Führe eine Abfrage aus, um Ergebnisse zu sehen", - "tableRunPrompt": "Drücke Ausführen (Ctrl/Command+F5), um Tabellendaten zu laden", - "closeTab": "Tab schließen", - "closeOthers": "Andere Tabs schließen", - "closeRight": "Tabs rechts schließen", - "closeLeft": "Tabs links schließen", - "closeAll": "Alle Tabs schließen", - "saveQuery": "Abfrage speichern", - "saveThisQuery": "Diese Abfrage speichern", - "noValidQueries": "Keine gültigen Abfragen gefunden", - "queryFailed": "Abfrage fehlgeschlagen.", - "showErrorDetails": "Details anzeigen", - "hideErrorDetails": "Details ausblenden", - "errorBoundary": { - "title": "Der Editor ist unerwartet abgestürzt", - "description": "Etwas im Editor konnte nicht gerendert werden. Der Fehler wird unten angezeigt — versuche es erneut oder kehre zu deinen Verbindungen zurück.", - "retry": "Erneut versuchen", - "closeCurrentTab": "Aktuellen Tab schließen", - "backToConnections": "Zurück zu den Verbindungen", - "showDetails": "Technische Details anzeigen" - }, - "newVisualQuery": "Neue visuelle Abfrage", - "activeDatabase": "Aktive Datenbank", - "tabSwitcher": { - "title": "Geöffnete Tabs", - "hint": "Ctrl+Tab", - "tabs_one": "{{count}} Tab", - "tabs_other": "{{count}} Tabs", - "escHint": "Esc zum Schließen" - }, - "quickNavigator": { - "placeholder": "Tabellen, Views, Routinen, Trigger suchen...", - "noResults": "Keine passenden Elemente gefunden", - "count_one": "1 Element", - "count_other": "{{count}} Elemente", - "navigationHint": "↑↓ zum Navigieren, Enter zum Öffnen", - "escHint": "Esc zum Schließen", - "type_table": "Tabelle", - "type_view": "View", - "type_routine": "Routine", - "type_trigger": "Trigger", - "actions": { - "inspect": "Struktur anzeigen", - "newConsole": "Neue Konsole", - "generateSql": "SQL-Vorlagen generieren", - "countRows": "Zeilen zählen", - "query": "SELECT-Abfrage ausführen", - "copyName": "Namen kopieren" - } - }, - "submitChanges": "Änderungen übernehmen", - "rollbackChanges": "Änderungen zurückrollen", - "applyToAll": "Auf alle anwenden", - "executingQuery": "Abfrage wird ausgeführt...", - "exporting": "Wird exportiert...", - "rowsProcessed": "Verarbeitete Zeilen", - "queryParameters": "Abfrageparameter", - "convertToConsole": "In Konsole umwandeln", - "parameters": "Parameter", - "paramValuePlaceholder": "Wert (z. B. 'Text' oder 123)", - "failedCreateRow": "Erstellen einer neuen Zeile fehlgeschlagen: ", - "failedProcessInsertions": "Verarbeitung von Einfügungen fehlgeschlagen: ", - "newNotebook": "Neues Notebook", - "visualExplain": { - "title": "Visual Explain", - "buttonShort": "Plan erklären", - "loading": "EXPLAIN wird ausgeführt...", - "planningTime": "Planung", - "executionTime": "Ausführung", - "totalCost": "Gesamtkosten", - "estRows": "Geschätzte Zeilen", - "actualRows": "Tatsächliche Zeilen", - "cost": "Kosten", - "time": "Zeit", - "loops": "Schleifen", - "filter": "Filter", - "indexCondition": "Index-Bedingung", - "relation": "Tabelle", - "nodeType": "Operation", - "rawOutput": "Rohausgabe", - "analyze": "Analysieren", - "analyzeWarning": "ANALYZE führt die Abfrage aus. Bei datenverändernden Statements mit Vorsicht verwenden.", - "notExplainable": "EXPLAIN wird nur für DML-Statements (SELECT, INSERT, UPDATE, DELETE) unterstützt. DDL-Statements wie CREATE, DROP oder ALTER können nicht erklärt werden.", - "contextMenuExplain": "Plan erklären", - "rerun": "Erneut ausführen", - "close": "Schließen", - "graphView": "Graph", - "tableView": "Tabelle", - "general": "Allgemein", - "analyzeData": "Daten analysieren", - "extraDetails": "Zusätzlich", - "selectNode": "Wähle einen Knoten aus, um Details zu sehen", - "buffersHit": "Buffer-Treffer", - "buffersRead": "Buffer gelesen", - "joinType": "Join-Typ", - "hashCondition": "Hash-Bedingung", - "topIssues": "Wichtigste Probleme", - "noIssues": "In der aktuellen Planzusammenfassung wurden keine größeren Probleme erkannt.", - "highestCost": "Höchste Kosten", - "slowestStep": "Langsamster Schritt", - "largestEstimateGap": "Größte Schätzabweichung", - "overEstimate": "Tatsächliche Zeilen übersteigen die Schätzung", - "underEstimate": "Schätzung übersteigt tatsächliche Zeilen", - "sequentialScans": "Sequentielle Scans", - "tempOperations": "Temporäre oder Sortier-Operationen", - "scanOperations": "Scan-lastige Operationen erkannt", - "sortOrTempOperations": "Sortier- oder temporäre Arbeit erkannt", - "driverNotes": "Treiberhinweise", - "overview": "Übersicht", - "showOverview": "Übersicht anzeigen", - "hideOverview": "Übersicht ausblenden", - "postgresAnalyzeLegend1": "PostgreSQL ANALYZE enthält tatsächliche Zeilen, Laufzeit, Schleifen und Buffer-Zähler, sofern verfügbar.", - "postgresAnalyzeLegend2": "Große Schätzabweichungen deuten meist auf veraltete Statistiken oder Prädikate hin, die der Planner schlecht modellieren kann.", - "postgresEstimateLegend1": "PostgreSQL ohne ANALYZE zeigt nur Schätzungen des Planners.", - "postgresEstimateLegend2": "Aktiviere ANALYZE, um tatsächliche Zeilen, Laufzeit, Schleifen und Buffer zu prüfen.", - "mysqlAnalyzeLegend1": "MySQL und MariaDB liefern echte Metriken nur bei unterstützten EXPLAIN ANALYZE- oder ANALYZE FORMAT-Varianten.", - "mysqlAnalyzeLegend2": "Ältere Server können auf geschätzte Pläne mit weniger Metriken zurückfallen.", - "mysqlEstimateLegend1": "MySQL und MariaDB können je nach Serverversion auf EXPLAIN FORMAT=JSON oder tabellarisches EXPLAIN zurückfallen.", - "mysqlEstimateLegend2": "Fehlen Zeitwerte, hat der Server wahrscheinlich nur einen geschätzten Plan geliefert.", - "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN ist leichtgewichtig und hauptsächlich strukturell.", - "sqliteLegend2": "Kosten, Laufzeit und Zeilenschätzungen sind im Vergleich zu PostgreSQL und MySQL oft nicht verfügbar.", - "aiAnalysis": "KI-Analyse", - "aiAnalysisTitle": "KI-Analyse des Abfrageplans", - "aiAnalyzing": "Abfrageplan wird mit KI analysiert...", - "aiConfigRequired": "KI-Anbieter nicht konfiguriert. Bitte gehe zu Einstellungen > KI." - }, - "notebook": { - "addSqlCell": "SQL-Zelle hinzufügen", - "addMarkdownCell": "Markdown-Zelle hinzufügen", - "addCell": "Hinzufügen", - "runAll": "Alle ausführen", - "runAllTooltip": "Alle SQL-Zellen von oben nach unten ausführen", - "runCell": "Zelle ausführen", - "deleteCell": "Zelle löschen", - "moveCellUp": "Nach oben", - "moveCellDown": "Nach unten", - "export": "Notebook exportieren", - "import": "Notebook importieren", - "emptyNotebook": "Dieses Notebook ist leer. Füge eine Zelle hinzu, um zu beginnen.", - "markdownPlaceholder": "Markdown hier schreiben...", - "togglePreview": "Vorschau umschalten", - "sqlCell": "SQL", - "markdownCell": "Markdown", - "invalidFile": "Ungültiges Notebook-Dateiformat", - "importSuccess": "Notebook erfolgreich importiert", - "exportSuccess": "Notebook erfolgreich exportiert", - "cellResult_one": "{{count}} Zeilen · {{time}} ms", - "cellResult_other": "{{count}} Zeilen · {{time}} ms", - "stopOnError": "Bei Fehler stoppen", - "stopOnErrorTooltip": "Ausführung stoppen, wenn eine Zelle fehlschlägt", - "runAllComplete": "Alle Ausführungen abgeschlossen", - "succeeded": "erfolgreich", - "failed": "fehlgeschlagen", - "skipped": "übersprungen", - "toggleChart": "Diagramm umschalten", - "chartType": "Diagramm", - "chartLabel": "Beschriftung", - "chartValues": "Werte", - "exportCsv": "Als CSV exportieren", - "exportJson": "Als JSON exportieren", - "exportHtml": "Als HTML exportieren", - "parameters": "Parameter", - "paramName": "name", - "paramValue": "wert", - "invalidParamName": "Ungültiger Parametername", - "parallelExecution": "Parallele Ausführung (Alle ausführen)", - "executionHistory": "Ausführungsverlauf", - "noHistory": "Noch kein Ausführungsverlauf", - "collapseCell": "Zelle einklappen", - "expandCell": "Zelle ausklappen", - "collapseAll": "Alle einklappen", - "expandAll": "Alle ausklappen", - "outline": "Gliederung", - "cellNamePlaceholder": "Ohne Titel", - "editCellName": "Zellnamen bearbeiten", - "aiGenerateName": "Namen mit KI generieren", - "generatingName": "Name wird generiert...", - "aiGenerateOutlineNames": "Namen für unbenannte Zellen mit KI generieren", - "undo": "Rückgängig", - "redo": "Wiederholen", - "history": { - "title": "Bearbeitungsverlauf", - "change": { - "initial": "Erste Version", - "editCell": "Zelle {{n}} bearbeitet", - "addSql": "SQL-Zelle {{n}} hinzugefügt", - "addMarkdown": "Markdown-Zelle {{n}} hinzugefügt", - "deleteCell": "Zelle {{n}} gelöscht", - "reorder": "Zellen neu angeordnet", - "renameCell": "Zelle {{n}} umbenannt", - "schemaCell": "Datenbank geändert (Zelle {{n}})", - "chartCell": "Diagramm geändert (Zelle {{n}})", - "parallelCell": "Parallel umgeschaltet (Zelle {{n}})", - "collapse": "Zellen ein-/ausgeklappt", - "params": "Parameter geändert", - "stopOnError": "Bei Fehler stoppen umgeschaltet", - "other": "Notebook bearbeitet" - } - } - }, - "querySelection": { - "title": "Abfrage zum Ausführen auswählen", - "queriesFound_one": "{{count}} Abfragen gefunden", - "queriesFound_other": "{{count}} Abfragen gefunden", - "runAll": "Alle ausführen", - "runSelected": "Ausgewählte ausführen ({{count}})", - "runSingle": "Diese Abfrage ausführen", - "selectAll": "Alle auswählen", - "deselectAll": "Alle abwählen" - }, - "explainSelection": { - "title": "Abfrage zum Erklären auswählen", - "queriesFound_one": "{{count}} erklärbare Abfragen gefunden", - "queriesFound_other": "{{count}} erklärbare Abfragen gefunden", - "explainSingle": "Diese Abfrage erklären", - "explainFocused": "fokussierte erklären", - "explainNth": "n-te erklären", - "cancel": "abbrechen" - }, - "multiResult": { - "rerun": "Abfrage erneut ausführen", - "close": "Tab schließen", - "rename": "Umbenennen", - "aiGenerateName": "Namen mit KI generieren", - "generatingName": "Name wird generiert...", - "viewTabs": "Tab-Ansicht", - "viewStacked": "Gestapelte Ansicht", - "queryPrefix": "Abfrage", - "results": "Ergebnisse", - "collapseAll": "Alle einklappen", - "expandAll": "Alle ausklappen" - } - }, - "createTable": { - "title": "Neue Tabelle erstellen", - "tableName": "Tabellenname", - "tableNamePlaceholder": "z. B. users, orders, products", - "columns": "Spalten", - "addColumn": "Spalte hinzufügen", - "colName": "Name", - "colType": "Typ", - "colLen": "Länge", - "colPk": "PK", - "colNn": "NN", - "colAi": "AI", - "colDefault": "Standardwert", - "create": "Tabelle erstellen", - "cancel": "Abbrechen", - "nameRequired": "Tabellenname ist erforderlich", - "colRequired": "Mindestens eine Spalte ist erforderlich", - "failCreate": "Erstellen der Tabelle fehlgeschlagen: ", - "requiresExtension": "Erfordert Erweiterung: {{ext}}" - }, - "schema": { - "title": "Schema: {{table}}", - "loading": "Schema wird geladen...", - "colName": "Name", - "colType": "Typ", - "colNullable": "Nullable", - "colKey": "Schlüssel", - "yes": "JA", - "no": "NEIN" - }, - "generateSQL": { - "title": "Generiertes SQL: {{table}}", - "loading": "SQL wird generiert...", - "runInConsole": "In Konsole ausführen", - "copy": "SQL kopieren", - "copied": "Kopiert!", - "tabCreateTable": "Tabelle erstellen", - "tabSelectAll": "SELECT *", - "tabSelectFields": "SELECT [Felder]", - "tabUpdate": "UPDATE", - "tabDelete": "DELETE" - }, - "modifyColumn": { - "titleAdd": "Spalte hinzufügen", - "titleEdit": "Spalte ändern", - "sqliteWarn": "SQLite unterstützt nur das Umbenennen von Spalten. Andere Änderungen erfordern, dass die Tabelle manuell neu erstellt wird.", - "name": "Name", - "type": "Typ", - "length": "Länge", - "default": "Standardwert", - "notNull": "Nicht Null", - "primaryKey": "Primärschlüssel", - "autoInc": "Auto Increment", - "sqlPreview": "SQL-Vorschau", - "save": "Änderungen speichern", - "add": "Spalte hinzufügen", - "cancel": "Abbrechen", - "nameRequired": "Spaltenname ist erforderlich", - "fail": "Fehlgeschlagen: ", - "pkNotSupported": "Dieser Treiber unterstützt Primärschlüssel nur beim Erstellen einer Tabelle", - "requiresExtension": "Erfordert Erweiterung: {{ext}}" - }, - "createIndex": { - "title": "Index erstellen", - "name": "Indexname", - "columns": "Spalten", - "unique": "Eindeutiger Index", - "sqlPreview": "SQL-Vorschau", - "create": "Index erstellen", - "cancel": "Abbrechen", - "nameRequired": "Indexname ist erforderlich", - "colRequired": "Mindestens eine Spalte muss ausgewählt werden" - }, - "createFk": { - "title": "Fremdschlüssel erstellen", - "name": "FK-Name (optional)", - "column": "Lokale Spalte", - "refTable": "Referenzierte Tabelle", - "refColumn": "Referenzierte Spalte", - "onDelete": "Bei Löschen", - "onUpdate": "Bei Aktualisierung", - "sqlPreview": "SQL-Vorschau", - "create": "Fremdschlüssel erstellen", - "cancel": "Abbrechen" - }, - "healthCheck": { - "title": "Verbindung verloren", - "connectionLost": "Eine Datenbankverbindung wurde verloren" - }, - "erDiagram": { - "enterFullscreen": "Vollbild", - "exitFullscreen": "Vollbild verlassen", - "noConnection": "Keine Verbindungs-ID", - "noConnectionDesc": "Diagramm kann ohne Verbindungs-ID nicht angezeigt werden.", - "switchToVertical": "Zum vertikalen Layout wechseln", - "switchToHorizontal": "Zum horizontalen Layout wechseln", - "vertical": "Vertikal", - "horizontal": "Horizontal", - "showAllTables": "Alle Tabellen anzeigen", - "showAll": "Alle anzeigen", - "focusedOn": "Fokussiert auf", - "focusOnTable": "Auf Tabelle fokussieren" - }, - "views": { - "createView": "Ansicht erstellen", - "editView": "Ansicht bearbeiten", - "createSubtitle": "Neue Datenbankansicht erstellen", - "editSubtitle": "Ansicht wird bearbeitet: {{name}}", - "viewName": "Ansichtsname", - "viewNamePlaceholder": "z. B. active_users, order_summary", - "viewDefinition": "Ansichtsdefinition (SQL)", - "preview": "Vorschau", - "runPreview": "Vorschau ausführen", - "previewEmpty": "Klicke auf 'Vorschau ausführen', um Ergebnisse zu sehen", - "moreRows": "+{{count}} weitere Zeilen", - "create": "Ansicht erstellen", - "save": "Änderungen speichern", - "nameRequired": "Ansichtsname ist erforderlich", - "definitionRequired": "Ansichtsdefinition ist erforderlich", - "failLoadDefinition": "Laden der Ansichtsdefinition fehlgeschlagen: ", - "previewError": "Vorschau fehlgeschlagen: ", - "createSuccess": "Ansicht erfolgreich erstellt", - "alterSuccess": "Ansicht erfolgreich aktualisiert", - "saveError": "Speichern der Ansicht fehlgeschlagen: ", - "confirmAlter": "Möchtest du die Ansicht \"{{view}}\" wirklich ändern?" - }, - "community": { - "title": "Der Community beitreten", - "subtitle": "Hilf tabularis zu wachsen", - "description": "Tabularis ist ein freies Open-Source-Projekt. Wenn du es nützlich findest, unterstütze das Projekt und vernetze dich mit der Community.", - "starTitle": "Auf GitHub mit Stern markieren", - "starDesc": "Ein Stern hilft anderen, das Projekt zu entdecken", - "discordTitle": "Discord beitreten", - "discordDesc": "Mit der Community chatten, Hilfe bekommen, Features vorschlagen", - "dismiss": "Vielleicht später" - }, - "whatsNew": { - "title": "Neuigkeiten", - "subtitle": "Version {{version}}", - "features": "Neue Funktionen", - "bugFixes": "Fehlerbehebungen", - "breakingChanges": "Breaking Changes", - "readMore": "Mehr lesen", - "dismiss": "Verstanden" - }, - "dump": { - "title": "Datenbank sichern", - "dumpDatabase": "Datenbank sichern", - "importDatabase": "SQL-Datei ausführen...", - "importTitle": "Datenbank importieren", - "includeStructure": "Struktur (DDL)", - "includeData": "Daten (INSERT)", - "selectTables": "Tabellen auswählen", - "selectAll": "Alle auswählen", - "deselectAll": "Alle abwählen", - "export": "Exportieren", - "success": "Datenbank erfolgreich exportiert", - "failure": "Export fehlgeschlagen: ", - "errorNoOption": "Bitte wähle mindestens Struktur oder Daten", - "errorNoTables": "Bitte wähle mindestens eine Tabelle", - "importSuccess": "SQL-Datei erfolgreich ausgeführt", - "importFailure": "Import fehlgeschlagen: ", - "importCancelled": "Import abgebrochen", - "importFailed": "Import fehlgeschlagen", - "importingFrom": "Importiere aus", - "statementsExecuted": "{{count}} / {{total}} Statements", - "confirmImport": "Möchtest du \"{{file}}\" wirklich importieren?\nDadurch können vorhandene Daten überschrieben werden.", - "elapsedTime": "Verstrichene Zeit" - }, - "geometryInput": { - "sqlMode": "SQL-Modus", - "wktMode": "WKT-Modus", - "sqlHelper": "Gib eine vollständige SQL-Funktion ein (z. B. ST_GeomFromText('POINT(30 40)', 4326))", - "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", - "wktPlaceholder": "POINT(30 40)", - "toggleTooltip": "SQL-Funktionen" - }, - "jsonInput": { - "placeholder": "JSON eingeben...", - "format": "Formatieren", - "valid": "Gültiges JSON", - "invalid": "Ungültiges JSON", - "mode": { - "code": "Code", - "tree": "Baum", - "raw": "Rohtext" - }, - "expand": "Aufklappen", - "search": "Suchen" - }, - "jsonViewer": { - "close": "Schließen", - "save": "Speichern" - }, - "jsonCell": { - "expand": "JSON-Baum ein-/ausklappen", - "openViewer": "JSON-Viewer öffnen" - }, - "rowEditor": { - "title": "Zeile bearbeiten", - "subtitle": "Zeile #{{row}}", - "enterValue": "Wert eingeben..." - }, - "contextMenu": { - "openSidebar": "Seitenleisten-Editor öffnen", - "openJsonEditor": "Im JSON-Editor öffnen" - }, - "blobInput": { - "noData": "Keine BLOB-Daten", - "uploadFile": "Datei hochladen", - "download": "Herunterladen", - "delete": "Löschen", - "truncatedWarning": "Nur Vorschau - vollständige Daten nicht geladen", - "downloadDisabledTruncated": "Download nicht verfügbar - nur Vorschau geladen", - "downloading": "Wird heruntergeladen...", - "uploading": "Wird hochgeladen...", - "openSidebar": "Im Editor öffnen", - "imagePreview": "Bildvorschau" - }, - "visualExplainPage": { - "title": "Visual Explain", - "noFile": "Keine Datei geladen", - "openFile": "Datei öffnen", - "reload": "Neu laden", - "loading": "Ausführungsplan wird geladen…", - "emptyHint": "Wählen Sie eine Datei mit einem EXPLAIN-Plan (PostgreSQL JSON- oder Textformat), um ihn zu visualisieren." - }, - "taskManager": { - "header": { - "title": "Task-Manager", - "subtitle": "Plugin-Prozesse und Systemressourcen", - "description": "Überwache Plugin-Prozesse, CPU, RAM und Datenträgernutzung in Echtzeit", - "open": "Task-Manager öffnen", - "refresh": "Aktualisieren" - }, - "killModal": { - "title": "Plugin-Prozess zwangsweise beenden", - "subtitle": "Diese Aktion kann nicht sofort rückgängig gemacht werden", - "descriptionBefore": "Das Beenden von", - "descriptionAfter": "stoppt den Prozess sofort. Alle aktiven Datenbankverbindungen über dieses Plugin funktionieren erst wieder, wenn das Plugin neu gestartet wird.", - "warning": "Aktive Abfragen und Verbindungen über dieses Plugin werden unterbrochen.", - "cancel": "Abbrechen", - "confirm": "Zwangsweise beenden" - }, - "systemResources": { - "title": "Systemressourcen", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Datenträger lesen/s", - "diskWrite": "Datenträger schreiben/s", - "processCount_one": "{{count}} Systemprozess läuft", - "processCount_other": "{{count}} Systemprozesse laufen" - }, - "tabularisProcess": { - "title": "Tabularis-Prozess", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Datenträger lesen/s", - "diskWrite": "Datenträger schreiben/s", - "childCount_one": "{{count}} Kindprozess", - "childCount_other": "{{count}} Kindprozesse", - "noChildren": "Keine Kindprozesse", - "treeTotal": "Baum-Gesamt: {{size}}", - "treeTotalTooltip": "Summe des RSS über den Prozessbaum — gemeinsam genutzter Speicher kann doppelt gezählt werden", - "loadingProcesses": "Prozesse werden geladen…", - "colPid": "PID", - "colName": "Name", - "colCpu": "CPU", - "colRam": "RAM", - "refresh": "Aktualisieren" - }, - "pluginProcesses": { - "title": "Plugin-Prozesse", - "loading": "Prozesse werden geladen…", - "empty": "Es laufen keine Plugin-Prozesse", - "emptyHint": "Installiere und aktiviere Plugins, um sie hier zu sehen", - "colPlugin": "Plugin", - "colPid": "PID", - "colCpu": "CPU", - "colRam": "RAM", - "colDiskRw": "Datenträger L/S", - "colStatus": "Status", - "colActions": "Aktionen", - "restart": "Neu starten", - "kill": "Beenden", - "collapseChildren": "Kindprozesse einklappen", - "childCount_one": "{{count}} Kindprozess", - "childCount_other": "{{count}} Kindprozesse", - "childProcess": "Kindprozess", - "status": { - "running": "läuft", - "stopped": "gestoppt", - "unknown": "unbekannt" - } - } - }, - "groups": { - "newGroup": "Neue Gruppe", - "rename": "Umbenennen", - "delete": "Löschen", - "deleteConfirm": "Möchtest du die Gruppe \"{{name}}\" wirklich löschen? Verbindungen in dieser Gruppe werden in Ungruppiert verschoben.", - "deleteTitle": "Gruppe löschen", - "connection": "Verbindung", - "connections": "Verbindungen", - "ungrouped": "Ungruppiert", - "removeFromGroup": "Aus Gruppe entfernen", - "groupName": "Gruppenname", - "createError": "Erstellen der Gruppe fehlgeschlagen" - }, - "queryModal": { - "database": "Datenbank", - "noDatabase": "Keine Datenbank" - }, - "clipboardImport": { - "title": "Aus Zwischenablage importieren", - "subtitle": "Strukturierte Daten einfügen und Schema vor dem Import prüfen", - "selectTablePlaceholder": "Tabelle auswählen...", - "contextMenuLabel": "Aus Zwischenablage importieren...", - "firstRowHeader": "Erste Zeile als Kopfzeile", - "tableName": "Tabellenname", - "tableNamePlaceholder": "z.B. verkaufsdaten", - "aiSuggest": "KI-Vorschlag", - "tableExists": "Bereits vorhanden", - "mode": "Modus", - "createNew": "Neue Tabelle erstellen", - "appendTo": "An bestehende anhängen", - "onConflict": "Falls vorhanden", - "conflictFail": "Fehler", - "conflictAppend": "Zeilen anhängen", - "conflictReplace": "Tabelle ersetzen", - "schemaPreview": "Spalten-Schema", - "dataPreview": "Datenvorschau", - "sample": "Beispielwerte", - "lowConfidence": "Gemischte Typen erkannt, Standard TEXT", - "rowsTotal_one": "{{count}} Zeilen", - "rowsTotal_other": "{{count}} Zeilen", - "showingFirst": "erste {{count}}", - "import_one": "{{count}} Zeilen importieren", - "import_other": "{{count}} Zeilen importieren", - "importing": "Importiert...", - "success_one": "{{count}} Zeilen in \"{{table}}\" importiert", - "success_other": "{{count}} Zeilen in \"{{table}}\" importiert", - "tableCreated": "Neue Tabelle erstellt", - "openTable": "Schließen", - "noData": "Keine Daten in der Zwischenablage", - "retry": "Erneut versuchen", - "warningsCount_one": "{{count}} Parser-Warnungen", - "warningsCount_other": "{{count}} Parser-Warnungen", - "columnsLabel": "Spalten", - "rowsLabel": "Zeilen", - "stepConfigure": "Ziel konfigurieren", - "stepReview": "Überprüfen & anpassen", - "modeCreateHint": "Eine neue Tabelle wird erstellt", - "modeAppendHint": "Zeilen werden an eine bestehende Tabelle angehängt", - "maximize": "Maximieren", - "minimize": "Minimieren", - "nSelected": "{{count}} ausgewählt", - "deleteSelected": "Auswahl löschen", - "deleteColumn": "Spalte löschen", - "sourceColumn": "Zwischenablage-Spalte", - "targetColumn": "Zielspalte", - "targetColumnPlaceholder": "Ziel wählen...", - "skipColumn": "Überspringen (nicht importieren)", - "createNewColumn": "Neue Spalte erstellen" - }, - "aiActivity": { - "title": "KI-Aktivität", - "description": "Protokoll aller MCP-Aufrufe und ausstehender Freigaben. Lokal gespeichert.", - "tabs": { - "events": "Ereignisse", - "sessions": "Sitzungen" - }, - "empty": "Noch keine MCP-Aktivität.", - "eventsCount_one": "{{count}} Ereignis", - "eventsCount_other": "{{count}} Ereignisse", - "blockedCount_one": "{{count}} blockiert", - "blockedCount_other": "{{count}} blockiert", - "errorsCount_one": "{{count}} Fehler", - "errorsCount_other": "{{count}} Fehler", - "sessionsCount_one": "{{count}} Sitzung", - "sessionsCount_other": "{{count}} Sitzungen", - "events": "Ereignisse", - "runQueries": "Abfragen", - "connections": "Verbindungen", - "client": "Client", - "rowsReturned": "Zeilen zurück", - "approvalId": "Freigabe-ID", - "searchQuery": "In Abfrage suchen…", - "allTools": "Alle Tools", - "allStatuses": "Alle Status", - "clearAll": "Leeren", - "clearConfirm": "Den gesamten KI-Aktivitätsverlauf löschen? Unwiderruflich.", - "exportNotebook": "Als Notebook exportieren", - "exportSuccess": "Exportiert nach {{path}}", - "viewDetails": "Details anzeigen", - "copyQuery": "Abfrage kopieren", - "openVisualExplain": "In Visual Explain öffnen", - "copied": "In Zwischenablage kopiert", - "detailTitle": "Ereignisdetails", - "col": { - "timestamp": "Zeit", - "tool": "Tool", - "connection": "Verbindung", - "query": "Abfrage", - "kind": "Typ", - "duration": "Dauer", - "status": "Status", - "actions": "Aktionen" - }, - "sort": { - "sortBy": "Sortieren nach {{field}}", - "sortByPlaceholder": "Sortieren nach…", - "toggleAscending": "Aufsteigend sortieren", - "toggleDescending": "Absteigend sortieren", - "ascending": "Aufst.", - "descending": "Abst.", - "started": "Start", - "eventCount": "Ereignisse", - "runQueries": "Ausgeführte Abfragen" - }, - "searchSessions": "Suche Sitzung, Client, Verbindung…", - "filteredFrom": "von {{total}}", - "noMatches": "Keine Sitzung entspricht den Filtern.", - "status": { - "success": "Erfolg", - "blocked_readonly": "Blockiert (nur lesen)", - "blocked_pending_approval": "Ausstehend", - "denied": "Abgelehnt", - "error": "Fehler", - "timeout": "Zeitüberschreitung" - }, - "queryKind": { - "select": "Lesen", - "write": "Schreiben", - "ddl": "DDL", - "unknown": "Unbekannt" - } - }, - "aiApproval": { - "title": "KI möchte in die Datenbank schreiben", - "subtitle": "Auf {{connection}} — vor Ausführung prüfen.", - "subtitleWithClient": "{{client}} auf {{connection}} — vor Ausführung prüfen.", - "query": "Abfrage", - "editQuery": "Vor Freigabe bearbeiten", - "lockQuery": "Sperren", - "preflightPlan": "Vorab-Ausführungsplan", - "expandPlan": "Vergrößern", - "collapsePlan": "Verkleinern", - "explainUnavailable": "EXPLAIN nicht verfügbar.", - "explainFailed": "EXPLAIN fehlgeschlagen: {{error}}", - "reasonLabel": "Grund (optional)", - "reasonPlaceholder": "z.B. In Prod riskant, bestätigen…", - "approve": "Freigeben", - "deny": "Ablehnen" - }, - "discordCallout": { - "title": "Neue Discord-Community!", - "body": "Wir haben einen eigenen Treffpunkt für Tabularis-Nutzer eröffnet: Hilfe, Tipps und Mitgestaltung der Roadmap.", - "cta": "Jetzt beitreten", - "dismiss": "Schließen" - }, - "k8sConnections": { - "title": "Kubernetes-Verbindungen", - "add": "Hinzufügen", - "empty": "Keine Kubernetes-Verbindungen gespeichert. Klicke auf „Hinzufügen“, um eine zu erstellen.", - "name": "Name", - "namePlaceholder": "Mein K8s-Cluster", - "context": "Kontext", - "chooseContext": "Kontext auswählen...", - "namespace": "Namespace", - "chooseNamespace": "Namespace auswählen...", - "resourceType": "Ressourcentyp", - "resourceTypeService": "Service", - "resourceTypePod": "Pod", - "resourceName": "Ressourcenname", - "chooseResource": "Ressource auswählen...", - "port": "Container-Port", - "test": "Testen", - "testing": "Wird getestet...", - "errors": { - "nameRequired": "Der Verbindungsname ist erforderlich", - "contextRequired": "Der Kubernetes-Kontext ist erforderlich", - "namespaceRequired": "Der Namespace ist erforderlich", - "resourceTypeInvalid": "Der Ressourcentyp muss \"service\" oder \"pod\" sein", - "resourceNameRequired": "Der Ressourcenname ist erforderlich", - "portInvalid": "Der Port muss zwischen 1 und 65535 liegen" - } - } -} diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json deleted file mode 100644 index dcfc7f68..00000000 --- a/src/i18n/locales/en.json +++ /dev/null @@ -1,1550 +0,0 @@ -{ - "toolbar": { - "filters": "Filters", - "toggleFilterPanel": "Toggle structured filter panel", - "filterConditions": "Filter conditions", - "activeOf": "{{active}} of {{total}} active", - "noFilters": "No filters —", - "addFirstFilter": "add the first filter", - "noActiveFilters": "no active filters", - "closePanelEsc": "Close filter panel (ESC)", - "unset": "Unset", - "sql": "SQL", - "addFilter": "Add filter", - "applyAll": "Apply All", - "apply": "Apply", - "applied": "Applied", - "switchToSql": "Switch to SQL WHERE input", - "duplicateFilter": "Duplicate filter", - "removeFilter": "Remove filter", - "deselectFromApplyAll": "Deselect from Apply All", - "selectForApplyAll": "Select for Apply All", - "valuePlaceholder": "value", - "fromPlaceholder": "from", - "toPlaceholder": "to" - }, - "common": { - "save": "Save", - "close": "Close", - "cancel": "Cancel", - "delete": "Delete", - "edit": "Edit", - "loading": "Loading...", - "search": "Search...", - "noResults": "No results found", - "error": "Error", - "success": "Success", - "ok": "OK", - "clear": "Clear", - "refresh": "Refresh" - }, - "sidebar": { - "actions": "Actions", - "connections": "Connections", - "settings": "Settings", - "savedQueries": "Saved Queries", - "tables": "Tables", - "newConsole": "New Console", - "newVisualQuery": "New Visual Query", - "refresh": "Refresh", - "refreshTables": "Refresh Tables", - "refreshViews": "Refresh Views", - "createView": "Create New View", - "views": "Views", - "noViews": "No views found", - "editView": "Edit View", - "viewDefinition": "View Definition", - "dropView": "Drop View", - "dropViewConfirm": "Are you sure you want to drop view \"{{view}}\"?", - "failGetViewDefinition": "Failed to get view definition: ", - "failDropView": "Failed to drop view: ", - "explorer": "Explorer", - "sqlEditor": "SQL Editor", - "loadingSchema": "Loading schema...", - "noSavedQueries": "No saved queries", - "searchFavorites": "Search favorites...", - "noFavoritesSearchResults": "No favorites match your search", - "execute": "Execute", - "edit": "Edit", - "delete": "Delete", - "confirmDeleteQuery": "Are you sure you want to delete query \"{{name}}\"?", - "confirmDeleteTitle": "Delete Query", - "noTables": "No tables found", - "columns": "columns", - "keys": "keys", - "foreignKeys": "foreign keys", - "indexes": "indexes", - "deleteColumn": "Delete Column", - "deleteColumnConfirm": "Are you sure you want to delete column \"{{column}}\" from table \"{{table}}\"?\n\nWARNING: This will permanently delete all data in this column. This action cannot be undone.", - "failDeleteColumn": "Failed to delete column: ", - "failDeleteIndex": "Failed to delete index: ", - "modifyColumn": "Modify Column", - "copyName": "Copy Name", - "openInEditor": "Open in Editor", - "closePanel": "Close panel", - "setAsActive": "Set as Active", - "deleteTable": "Delete Table", - "deleteTableConfirm": "Are you sure you want to delete table \"{{table}}\"?", - "failDeleteTable": "Failed to delete table: ", - "showData": "Show Data", - "countRows": "Count Rows", - "viewSchema": "View Schema", - "viewERDiagram": "View ER Diagram", - "generateSQL": "Generate SQL", - "addColumn": "Add Column", - "addIndex": "Add Index", - "deleteIndex": "Delete Index", - "deleteIndexConfirm": "Delete index \"{{name}}\"?", - "addFk": "Add Foreign Key", - "deleteFk": "Delete FK", - "deleteFkConfirm": "Delete foreign key \"{{name}}\"?", - "sqliteFkError": "SQLite does not support dropping FKs via ALTER TABLE.", - "mcpServer": "MCP Server", - "routines": "Routines", - "functions": "Functions", - "procedures": "Procedures", - "noRoutines": "No routines found", - "refreshRoutines": "Refresh Routines", - "triggers": "Triggers", - "noTriggers": "No triggers found", - "filterTriggers": "Filter triggers...", - "noTriggersMatch": "No triggers match your filter", - "createTrigger": "Create New Trigger", - "editTrigger": "Edit Trigger", - "dropTrigger": "Drop Trigger", - "dropTriggerConfirm": "Are you sure you want to drop trigger \"{{trigger}}\"?", - "viewTriggerDefinition": "View Definition", - "failDropTrigger": "Failed to drop trigger: ", - "failGetTriggerDefinition": "Failed to get trigger definition: ", - "refreshTriggers": "Refresh Triggers", - "onTable": "on {{table}}", - "objectSummary": "Objects", - "databases": "Databases", - "failGetRoutineDefinition": "Failed to get routine definition: ", - "schemas": "Schemas", - "noSchemas": "No schemas found", - "loadingSchemas": "Loading schemas...", - "schemaLoadError": "Failed to load schemas", - "errorDetails": "Details", - "copyError": "Copy error message", - "retry": "Try again", - "expandExplorer": "Expand Explorer", - "selectSchemas": "Select Schemas", - "selectSchemasHint": "Select schemas to load:", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "confirmSelection": "Confirm", - "editSchemas": "Edit Schemas", - "selectConnection": "Select Connection", - "disconnect": "Disconnect", - "switchConnection": "Switch Connection", - "noOtherConnections": "No other connections", - "openConnections": "Open", - "availableConnections": "Available", - "splitVertical": "Split Vertical", - "splitHorizontal": "Split Horizontal", - "separateConnections": "Separate Connections", - "splitGroup": "Split Group", - "filterTables": "Filter tables...", - "noTablesMatch": "No tables match", - "filterDatabases": "Filter databases...", - "manageDatabases": "Manage Databases", - "structure": "Structure", - "favorites": "Favorites", - "queryHistory": "History", - "noQueryHistory": "No query history", - "noHistorySearchResults": "No queries match your search", - "searchHistory": "Search history...", - "clearAllHistory": "Clear All History", - "historyRecoveredTitle": "Query history was reset", - "historyRecoveredBody": "The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:", - "historyRecoveredDismiss": "Dismiss", - "confirmDeleteHistoryEntry": "Are you sure you want to delete this query from history?", - "confirmClearHistory": "Are you sure you want to clear all query history for this connection?", - "confirmClearHistoryTitle": "Clear Query History", - "addToFavorites": "Add to Favorites", - "insertToEditor": "Insert to Editor", - "openInNewTab": "Open in New Tab", - "copyQuery": "Copy Query", - "runQuery": "Run Query", - "dateGroupToday": "Today", - "dateGroupYesterday": "Yesterday", - "dateGroupThisWeek": "This Week", - "dateGroupThisMonth": "This Month", - "dateGroupOlder": "Older", - "notebooks": { - "tab": "Notebooks", - "search": "Search notebooks", - "refresh": "Refresh", - "empty": "No saved notebooks yet.", - "noSearchResults": "No notebooks match your search.", - "open": "Open", - "rename": "Rename", - "delete": "Delete", - "deleteConfirm": "Delete notebook \"{{title}}\"? This cannot be undone.", - "renamePlaceholder": "Notebook name" - } - }, - "mcp": { - "title": "MCP Server Integration", - "subtitle": "Connect Tabularis to Claude Desktop, Cursor, and more", - "description": "The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely.", - "checking": "Checking configuration...", - "notFound": "Config file not found (create manually)", - "installed": "Installed", - "install": "Install Config", - "manualConfig": "MANUAL CONFIGURATION", - "manualText": "Add this to your client config file manually if automatic install fails.", - "successTitle": "Success", - "successMsg": "Configuration installed successfully for {{client}}! Restart the app to apply.", - "errorTitle": "Installation Failed", - "clients": "AI CLIENTS", - "manualCommand": "MANUAL COMMAND", - "manualCommandText": "Run this command in your terminal, then restart Claude Code.", - "tabs": { - "setup": "Setup", - "activity": "Activity", - "safety": "Safety" - }, - "safety": { - "readOnlyTitle": "Read-only mode", - "readOnlyDefault": "Make all MCP queries read-only", - "readOnlyDefaultDesc": "Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below.", - "readOnlyList": "Read-only connections", - "readOnlyListDesc": "These connections will reject writes from MCP. Other connections behave normally.", - "allowList": "Allow writes from MCP", - "allowListDesc": "All other connections stay read-only. Only the connections checked here may execute writes.", - "approvalTitle": "Approval gate", - "approvalMode": "Approval required", - "approvalModeDesc": "Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database.", - "modeOff": "Off", - "modeWritesOnly": "Writes only", - "modeAll": "All queries", - "approvalTimeout": "Timeout", - "approvalTimeoutDesc": "How long the MCP subprocess will wait for the user's decision before failing the request.", - "preflightExplain": "Pre-flight EXPLAIN", - "preflightExplainDesc": "Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan." - } - }, - "connections": { - "title": "Connections", - "addConnection": "Add Connection", - "noConnections": "No active connections", - "createFirst": "Create your first connection", - "active": "Active", - "disconnect": "Disconnect", - "connect": "Connect", - "edit": "Edit", - "delete": "Delete", - "clone": "Clone", - "confirmDelete": "Are you sure you want to delete this connection?", - "deleteTitle": "Confirm Delete", - "failConnect": "Failed to connect to {{name}}. Please check your settings or ensuring the database is running.", - "failDisconnect": "Failed to disconnect from database", - "failDuplicate": "Failed to duplicate connection", - "open": "Open", - "pluginDisabled": "Plugin disabled", - "connectionCount_one": "{{count}} connection", - "connectionCount_other": "{{count}} connections", - "noConnectionsHint": "Create your first connection to get started.", - "searchPlaceholder": "Search connections...", - "noSearchResults": "No connections match \"{{query}}\"", - "gridView": "Grid view", - "listView": "List view", - "export": "Export Connections", - "import": "Import Connections", - "exportTitle": "Export Connections", - "exportWarning": "The exported file will contain your database and SSH passwords in plaintext. Please store it securely." - }, - "connectionAppearance": { - "section": "Appearance", - "accentColor": "Accent color", - "customColor": "Custom", - "resetColor": "Reset to driver default", - "icon": "Icon", - "tabs": { - "default": "Default", - "pack": "Icon", - "emoji": "Emoji", - "image": "Image" - }, - "previewLabel": "Preview", - "defaultHint": "Using the driver's default icon.", - "emojiSelected": "Selected emoji", - "emojiHint": "Click another emoji below to change.", - "removeEmoji": "Clear", - "chooseImage": "Choose image…", - "removeImage": "Remove", - "imageHint": "PNG, JPG, WebP or SVG · max 512 KB", - "errors": {}, - "emojiSearch": "Search emoji…", - "iconNoResults": "No icons match.", - "iconResultsTruncated": "Showing {{shown}} of {{total}} — refine search to narrow down.", - "iconSearch": "Search icons…", - "noPreview": "No preview" - }, - "settings": { - "general": "General", - "info": "Info", - "dataEditor": "Data Editor", - "pageSize": "Result Page Size (Limit)", - "pageSizeDesc": "Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended).", - "rows": "rows", - "copyFormat": "Default Copy Format", - "copyFormatDesc": "Choose the default format when copying rows with Ctrl+C / Cmd+C.", - "csvDelimiter": "CSV Delimiter", - "csvDelimiterDesc": "Choose the default delimiter character used when copying or exporting rows as CSV.", - "delimiterComma": "Comma (,)", - "delimiterSemicolon": "Semicolon (;)", - "delimiterTab": "Tab", - "delimiterPipe": "Pipe (|)", - "detectJsonInTextColumns": "Detect JSON in text columns", - "detectJsonInTextColumnsDesc": "Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.", - "appearance": "Appearance", - "localization": "Localization", - "themeSelection": "Theme Selection", - "fontFamily": "Font Family", - "fonts": { - "custom": "Custom Font", - "customPlaceholder": "e.g., Comic Sans MS", - "enterFontName": "Enter font name above" - }, - "fontSize": "Font Size", - "fontSizeLabel": "Font Size", - "fontSizeDesc": "Adjust the base font size used throughout the application (10-20px).", - "preview": "Preview", - "fontPreviewText": "The quick brown fox jumps over the lazy dog", - "appearance_general": "General", - "appearance_sqlEditor": "SQL Editor", - "appearance_editorTheme": "Editor Theme", - "appearance_editorThemeDesc": "Choose an independent theme for the SQL editor, or keep it in sync with the app theme.", - "appearance_sameAsApp": "Same as App", - "appearance_editorFontFamily": "Editor Font Family", - "appearance_editorFontSize": "Editor Font Size", - "appearance_editorLineHeight": "Line Height", - "appearance_editorTabSize": "Tab Size", - "appearance_editorWordWrap": "Word Wrap", - "appearance_editorWordWrapDesc": "Wrap long lines in the editor instead of scrolling horizontally.", - "appearance_editorShowLineNumbers": "Show Line Numbers", - "appearance_editorShowLineNumbersDesc": "Display line numbers in the editor gutter.", - "appearance_editorAcceptSuggestionOnEnter": "Accept Suggestion with Enter", - "appearance_editorAcceptSuggestionOnEnterDesc": "Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.", - "editConfigJson": "Edit config.json", - "editConfigJsonDesc": "Directly edit the raw configuration file. A restart is required to apply changes.", - "configJsonModal": { - "title": "config.json", - "saveAndRestart": "Save & Restart", - "restartNow": "Restart Now", - "restartRequired": "A restart is required to apply changes.", - "restartMessage": "The configuration file has been saved. Restart now to apply the changes?" - }, - "language": "Language", - "languageDesc": "Choose your preferred language. 'Auto' will use your system language.", - "auto": "Auto (System)", - "timezone": "Timezone", - "timezoneDesc": "Timezone used to display timestamps and exports. 'Auto' follows your system timezone.", - "timezoneSearch": "Search timezones...", - "projectStatus": "Project Status", - "roadmapDesc": "This project is a Work In Progress (WIP). Core features are stable, but we have big plans.", - "support": "Support the Development", - "supportDesc": "If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo.", - "version": "Version", - "starOnGithub": "Star on GitHub", - "ai": { - "tab": "AI", - "title": "AI Configuration", - "description": "Configure AI providers to enable natural language to SQL generation. Keys are stored securely in your system's keychain.", - "enable": "Enable AI Features", - "enableDesc": "Show AI Assist and Explain buttons in the editor", - "defaultProvider": "Default Provider", - "defaultModel": "Default Model", - "configuration": "Configuration", - "selectProviderFirst": "Select a provider first", - "modelDesc": "Select the model to be used for generation and explanation.", - "manageKeys": "Manage API Keys", - "apiKey": "{{provider}} API Key", - "configured": "Configured", - "notConfigured": "Not configured", - "enterKey": "Enter {{provider}} Key", - "keyStoredSecurely": "API Key is stored securely in your system keychain. Setting a key here overrides the environment variable.", - "fromEnv": "Environment", - "fromEnvTooltip": "This key is loaded from an environment variable", - "envVariableDetected": "An environment variable is present, but you can override it by setting a key above.", - "reset": "Reset", - "changeKey": "Change", - "resetKey": "Delete custom key and revert to environment variable (if present)", - "keyResetSuccess": "Custom key deleted successfully", - "promptCustomization": "Prompt Customization", - "systemPrompt": "SQL Generation", - "systemPromptDesc": "Instructions for AI-powered SQL generation. Use {{SCHEMA}} as a placeholder for the database structure.", - "enterSystemPrompt": "Enter system prompt...", - "resetDefault": "Reset to Default", - "savePrompt": "Save Prompt", - "explainPrompt": "Query Explanation", - "explainPromptDesc": "Instructions for AI-powered query explanation. Use {{LANGUAGE}} as a placeholder for the output language.", - "enterExplainPrompt": "Enter explain prompt...", - "cellnamePrompt": "Notebook Cell Name Prompt", - "cellnamePromptDesc": "Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message.", - "enterCellnamePrompt": "Enter notebook cell name prompt...", - "tabrenamePrompt": "Query Tab Name Prompt", - "tabrenamePromptDesc": "Customize instructions for AI query result tab name generation. The SQL query is sent as the user message.", - "enterTabrenamePrompt": "Enter query tab name prompt...", - "explainplanPrompt": "Explain Plan Analysis Prompt", - "explainplanPromptDesc": "Customize instructions for AI analysis of EXPLAIN query plans. Use {{LANGUAGE}} for the output language.", - "enterExplainplanPrompt": "Enter explain plan analysis prompt...", - "keySaved": "API Key saved securely", - "promptSaved": "System prompt saved successfully", - "explainPromptSaved": "Explain prompt saved successfully", - "promptReset": "System prompt reset to default", - "explainPromptReset": "Explain prompt reset to default", - "modelPlaceholder": "Select a model", - "searchPlaceholder": "Search models...", - "noResults": "No models found", - "refresh": "Refresh Models", - "refreshSuccess": "AI models refreshed from providers", - "refreshError": "Failed to refresh models", - "ollamaConnected": "Ollama connected ({{count}} models found)", - "ollamaNotDetected": "Ollama not detected on port {{port}}. Is it running?", - "ollamaPort": "Ollama Port", - "modelNotFound": "Model {{model}} not found in {{provider}}. It may not work correctly.", - "customOpenaiEndpoint": "Custom Endpoint", - "endpointUrl": "Endpoint URL", - "endpointUrlDesc": "The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1", - "customOpenaiModelPlaceholder": "e.g., llama3-70b-8192, mixtral-8x7b", - "customOpenaiModelDesc": "Enter the model name provided by your OpenAI-compatible service.", - "customOpenaiModelHelp": "Enter the exact model name for your OpenAI-compatible provider." - }, - "updates": "Updates", - "openSourceLibraries": "Open Source Libraries", - "openSourceLibrariesDesc": "Browse the direct open source dependencies used across the app, backend, and tooling.", - "openSourceLibrariesSource": "Direct dependencies declared in package.json and src-tauri/Cargo.toml.", - "openSourceLibrariesTotal": "{{count}} libraries", - "openSourceLibrariesOpenProject": "Open package page", - "openSourceLibrariesSections": { - "npm-runtime": "Frontend Dependencies", - "npm-tooling": "Frontend Dev Dependencies", - "cargo-runtime": "Rust Dependencies", - "cargo-tooling": "Rust Build and Test" - }, - "openSourceLibrariesEcosystem": { - "npm": "npm ecosystem", - "cargo": "Cargo ecosystem" - }, - "autoCheckUpdates": "Check for updates on startup", - "autoCheckUpdatesDesc": "Automatically check for new versions when the app launches", - "checkNow": "Check for Updates Now", - "checking": "Checking...", - "currentVersion": "Current Version", - "logs": "Logs", - "logSettings": "Log Settings", - "enableLogging": "Enable Logging", - "enableLoggingDesc": "Collect application logs in memory for debugging", - "maxLogEntries": "Max Log Entries", - "maxLogEntriesDesc": "How many logs to keep in memory (1-10000)", - "currentLogCount": "Current Logs", - "clearLogs": "Clear Logs", - "clearLogsConfirm": "Are you sure you want to clear all logs?", - "exportLogs": "Export Logs", - "exportLogsSuccess": "Logs exported to clipboard", - "noLogs": "No logs available", - "refreshLogs": "Refresh", - "logLevel": "Level", - "logMessage": "Message", - "logTimestamp": "Timestamp", - "filterByLevel": "Filter by level", - "allLevels": "All levels", - "debug": "Debug", - "warn": "Warn", - "error": "Error", - "connectionHealthCheck": "Connection Health Check", - "pingInterval": "Ping Interval", - "pingIntervalDesc": "How often to check if active connections are still alive. Set to 0 to disable.", - "seconds": "seconds", - "entries": "entries", - "queryHistory": "Query History", - "queryHistoryMaxEntries": "Max History Entries", - "queryHistoryMaxEntriesDesc": "Maximum number of query history entries stored per connection.", - "startup": "Startup", - "showWelcome": "Show Welcome Screen", - "showWelcomeDesc": "Display the welcome screen when the application starts.", - "erDiagram": "ER Diagram", - "erDiagramDefaultLayout": "Default Layout", - "erDiagramDefaultLayoutDesc": "Choose the default layout direction for ER diagrams", - "plugins": { - "title": "Plugins", - "overviewTitle": "Plugin Center", - "overviewDesc": "Install extensions, manage plugin drivers, and keep runtime settings under control.", - "installedMetric": "Installed", - "enabledMetric": "Enabled", - "registryMetric": "Registry", - "updatesMetric": "Updates", - "available": "Available Plugins", - "availableDesc": "Browse and install plugins from the registry.", - "refresh": "Refresh", - "loadingRegistry": "Loading plugin registry...", - "registryError": "Failed to load registry", - "installed": "Installed", - "by": "by", - "platformNotSupported": "Not available for your platform", - "update": "Update", - "install": "Install", - "upToDate": "Up to date", - "downgrade": "Downgrade to", - "olderVersions": "Older versions", - "noPlugins": "No plugins available in the registry.", - "searchPlaceholder": "Search plugins…", - "filterAll": "All", - "filterInstalled": "Installed", - "filterUpdates": "Updates", - "searchNoResults": "No plugins match your search.", - "requiresVersion": "Requires Tabularis ≥ {{version}}", - "remove": "Remove", - "removeTitle": "Remove Plugin", - "confirmRemove": "Are you sure you want to remove \"{{name}}\"? This will delete the plugin files.", - "installError": { - "title": "Installation Failed", - "subtitle": "An error occurred while installing the plugin. See the details below.", - "details": "Error Details", - "copy": "Copy", - "copied": "Copied!" - }, - "startError": { - "title": "Plugin Failed to Start", - "subtitle": "The plugin process could not be launched. Check the error details below.", - "interpreterHint": "This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path.", - "details": "Error Details", - "copy": "Copy", - "copied": "Copied!", - "configure": "Configure Interpreter" - }, - "pluginSettings": { - "title": "Plugin Settings", - "interpreter": "Interpreter", - "interpreterDesc": "Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default.", - "interpreterPlaceholder": "e.g. python3", - "browse": "Browse...", - "fieldRequired": "{{label}} is required", - "saved": "Saved", - "resetToDefault": "Reset to default", - "builtin": { - "mysql": { - "maxAllowedPacket": { - "label": "Max Allowed Packet", - "description": "Maximum packet size used by the MySQL connector." - }, - "socketTimeout": { - "label": "Socket Timeout", - "description": "Socket timeout in milliseconds." - }, - "connectTimeout": { - "label": "Connect Timeout", - "description": "Connection timeout in milliseconds." - }, - "timezone": { - "label": "Timezone", - "description": "Session timezone sent to MySQL after connect." - } - } - } - } - }, - "shortcuts": { - "title": "Keyboard Shortcuts", - "categories": { - "editor": "Editor", - "navigation": "Navigation", - "data_grid": "Data Grid" - }, - "runQuery": "Run query", - "runQueryEditor": "Run query (in editor)", - "tabSwitcher": "Switch tab", - "copySelection": "Copy selection", - "toggleSidebar": "Toggle sidebar", - "openConnections": "Open connections", - "newConnection": "New connection", - "newTab": "New tab", - "closeTab": "Close tab", - "nextPage": "Next page", - "prevPage": "Previous page", - "switchConnection": "Switch to connection 1–9", - "resetToDefault": "Reset to default", - "notOverridable": "Built-in, not customizable", - "pressKeys": "Press key combination...", - "notebookRunAll": "Run All Cells", - "pasteImportClipboard": "Import from Clipboard", - "quickNavigator": "Quick Navigator" - }, - "aiActivity": "AI Activity" - }, - "update": { - "newVersionAvailable": "New Version Available", - "version": "Version", - "releaseNotes": "Release Notes", - "downloadAndInstall": "Download & Install", - "downloading": "Downloading...", - "installing": "Installing...", - "installingMessage": "The app will restart automatically after installation", - "viewOnGitHub": "View on GitHub", - "remindLater": "Remind Me Later", - "upToDate": "You're up to date", - "updateAvailable": "Version {{version}} is available", - "error": "Update Error", - "managedByPackageManager": "Updates managed by {{source}}", - "managedByPackageManagerDesc": "Use your package manager to update Tabularis." - }, - "ai": { - "explain": "Explain", - "generateSql": "Generate SQL" - }, - "newConnection": { - "namePlaceholder": "Provide your connection name", - "nameRequired": "Connection name is required", - "dbNameRequired": "Database name is required", - "dbType": "Database Type", - "host": "Host", - "port": "Port", - "username": "Username", - "password": "Password", - "passwordPlaceholder": "Enter password", - "usernamePlaceholder": "Enter username", - "filePath": "File Path", - "folderPath": "Folder Path", - "dbName": "Database Name", - "dbNamePlaceholder": "Database name", - "loadDatabases": "Load Databases", - "loadingDatabases": "Loading...", - "selectDatabases": "Databases", - "appearance": "Appearance", - "noDatabasesSelected": "Select at least one database", - "selectedDatabases": "{{count}} database(s) selected", - "selectDatabase": "Select a database", - "noDatabasesFound": "No databases found", - "failLoadDatabases": "Failed to load databases. Check your credentials.", - "filePathPlaceholder": "/absolute/path/to/db.sqlite", - "folderPathPlaceholder": "/absolute/path/to/folder", - "browseFile": "Browse file", - "browseFolder": "Browse folder", - "useSsh": "Use SSH Tunnel", - "sshHost": "SSH Host", - "sshPort": "SSH Port", - "sshUser": "SSH User", - "sshPassword": "SSH Password", - "sshPasswordMissing": "SSH Password missing. Please re-enter.", - "sshPasswordPlaceholder": "Enter SSH password", - "sshKeyFile": "SSH Key File (Optional)", - "sshKeyFilePlaceholder": "/path/to/id_rsa", - "sshKeyPassphrase": "SSH Key Passphrase (Optional)", - "sshKeyPassphrasePlaceholder": "Enter key passphrase if encrypted", - "saveKeychain": "Save passwords in Keychain", - "testConnection": "Test Connection", - "save": "Save", - "failSave": "Failed to save connection", - "selectSshConnection": "Select SSH Connection", - "useSshConnection": "Use Existing SSH Connection", - "createInlineSsh": "Configure SSH Inline", - "manageSshConnections": "Manage SSH Connections", - "noSshConnections": "No SSH connections available", - "sslMode": "SSL Mode", - "sslModes": { - "disable": "Disable", - "allow": "Allow", - "prefer": "Prefer", - "require": "Require", - "verify-ca": "Verify CA", - "verify-full": "Verify Full", - "disabled": "Disabled", - "preferred": "Preferred", - "required": "Required", - "verify_ca": "Verify CA", - "verify_identity": "Verify Identity" - }, - "chooseContext": "Choose a context...", - "chooseK8s": "Choose a connection...", - "chooseNamespace": "Choose a namespace...", - "chooseResource": "Choose a resource...", - "createInlineK8s": "Inline", - "k8sContext": "Context", - "k8sNamespace": "Namespace", - "k8sNotAvailable": "Kubernetes is not available for this driver.", - "k8sPort": "Container Port", - "k8sResourceName": "Resource Name", - "k8sResourceType": "Resource Type", - "k8sResourceTypePod": "Pod", - "k8sResourceTypeService": "Service", - "k8sSelectType": "Select type...", - "manageK8s": "Manage", - "noK8sConnections": "No saved connections — create one below", - "noK8sContexts": "No contexts found (is kubectl installed?)", - "selectContextFirst": "Select a context first", - "selectK8sConnection": "Select K8s Connection", - "selectTypeFirst": "Select context/namespace/type first", - "useK8s": "Use Kubernetes Port-Forward", - "useK8sConnection": "Saved Connection", - "connectionString": "Connection String", - "connectionStringPlaceholder": "e.g. mysql://user:pass@localhost:3306/db", - "general": "General", - "loadDatabasesHint": "Click Load Databases to fetch available databases.", - "noGeneralSettings": "No general settings available for this driver.", - "selectDatabasesHint": "Select the databases to include in this connection.", - "sshNotAvailable": "SSH is not available for this driver.", - "sslCa": "CA Certificate", - "sslCert": "Client Certificate", - "sslCertificatesOptional": "Certificate paths are optional. Leave empty to use system defaults.", - "sslDescription": "Configure SSL/TLS for secure database connections (optional).", - "sslKey": "Client Key", - "unnamedConnection": "Unnamed connection" - }, - "sshConnections": { - "title": "SSH Connections", - "createNew": "Create New SSH Connection", - "noConnections": "No SSH connections configured yet", - "name": "Connection Name", - "namePlaceholder": "My SSH Server", - "authType": "Authentication Type", - "authTypePassword": "Password", - "authTypeSshKey": "SSH Key", - "edit": "Edit", - "delete": "Delete", - "save": "Save", - "update": "Update", - "cancel": "Cancel", - "confirmDelete": "Are you sure you want to delete this SSH connection?", - "failSave": "Failed to save SSH connection", - "failDelete": "Failed to delete SSH connection", - "fillRequired": "Please fill in all required fields", - "keyFile": "Key file", - "quickTest": "Quick connection test", - "testFailed": "Connection test failed", - "savedInKeychain": "Password saved in system keychain" - }, - "dataGrid": { - "newRow": "NEW", - "noData": "No data to display", - "deleteRow": "Delete Row", - "deleteRows_one": "Delete {{count}} row", - "deleteRows_other": "Delete {{count}} rows", - "updateFailed": "Update failed: ", - "null": "null", - "sortByAsc": "Sort by {{col}} ASC", - "sortByDesc": "Sort by {{col}} DESC", - "clearSort": "Clear sort", - "copyCell": "Copy Cell", - "copySelectedRows": "Copy selected row(s)", - "copyColumnName": "Copy column name", - "copyColumnNameQuoted": "Copy as `column`", - "copyColumnNameTable": "Copy as table.column", - "copied": "Copied to clipboard", - "duplicateRow": "Duplicate Row", - "revertSelected": "Revert Selected", - "setGenerate": "Set GENERATED", - "setNull": "Set NULL", - "setDefault": "Set DEFAULT", - "setEmpty": "Set EMPTY", - "setServerNow": "Insert Current Timestamp", - "previewReferenced": "Preview related record", - "openReferenced": "Open referenced row in {{table}}" - }, - "editRow": {}, - "newRow": { - "title": "New Row", - "insert": "Insert", - "cancel": "Cancel", - "failInsert": "Failed to insert row: ", - "failLoad": "Failed to load schema: ", - "loading": "Loading...", - "selectValue": "Select Value...", - "noOptions": "No options found", - "autoGenerated": "(Auto-generated)", - "required": "Required", - "primaryKey": "Primary Key", - "auto": "Auto" - }, - "editor": { - "noTabs": "No open tabs for this connection.", - "newConsole": "New Console", - "noActiveSession": "No active session. Please select a connection.", - "stop": "Stop", - "run": "Run", - "export": "Export", - "connected": "Connected", - "disconnected": "Disconnected", - "newRow": "New Row", - "rowsRetrieved": "{{count}} rows retrieved", - "autoPaginated": "Auto paginated", - "pageOf": "Page {{current}} of {{total}}", - "page": "Page {{current}}", - "jumpToPage": "Click to jump to page", - "loadRowCount": "Load row count", - "executePrompt": "Execute a query to see results", - "tableRunPrompt": "Press Run (Ctrl/Command+F5) to load table data", - "closeTab": "Close Tab", - "closeOthers": "Close Other Tabs", - "closeRight": "Close Tabs to Right", - "closeLeft": "Close Tabs to Left", - "closeAll": "Close All Tabs", - "saveQuery": "Save Query", - "saveThisQuery": "Save this query", - "noValidQueries": "No valid queries found", - "queryFailed": "Query failed.", - "showErrorDetails": "Show details", - "hideErrorDetails": "Hide details", - "errorBoundary": { - "title": "The editor crashed unexpectedly", - "description": "Something in the editor failed to render. The error is shown below — try again, or go back to your connections.", - "retry": "Try again", - "closeCurrentTab": "Close current tab", - "backToConnections": "Back to connections", - "showDetails": "Show technical details" - }, - "newVisualQuery": "New Visual Query", - "activeDatabase": "Active database", - "tabSwitcher": { - "title": "Open Tabs", - "hint": "Ctrl+Tab", - "tabs_one": "{{count}} tab", - "tabs_other": "{{count}} tabs", - "escHint": "Esc to close" - }, - "quickNavigator": { - "placeholder": "Search tables, views, routines, triggers...", - "noResults": "No matching elements found", - "count_one": "1 element", - "count_other": "{{count}} elements", - "navigationHint": "↑↓ to navigate, Enter to open", - "escHint": "Esc to close", - "type_table": "table", - "type_view": "view", - "type_routine": "routine", - "type_trigger": "trigger", - "actions": { - "inspect": "Inspect structure", - "newConsole": "New console", - "generateSql": "Generate SQL templates", - "countRows": "Count rows", - "query": "Run SELECT query", - "copyName": "Copy name" - } - }, - "submitChanges": "Submit Changes", - "rollbackChanges": "Rollback Changes", - "applyToAll": "Apply to all", - "executingQuery": "Executing query...", - "exporting": "Exporting...", - "rowsProcessed": "Rows Processed", - "queryParameters": "Query Parameters", - "convertToConsole": "Convert to Console", - "parameters": "Parameters", - "paramValuePlaceholder": "Value (e.g. 'text' or 123)", - "failedCreateRow": "Failed to create new row: ", - "failedProcessInsertions": "Failed to process insertions: ", - "newNotebook": "New Notebook", - "visualExplain": { - "title": "Visual Explain", - "buttonShort": "Explain Plan", - "loading": "Running EXPLAIN...", - "planningTime": "Planning", - "executionTime": "Execution", - "totalCost": "Total Cost", - "estRows": "Est. Rows", - "actualRows": "Actual Rows", - "cost": "Cost", - "time": "Time", - "loops": "Loops", - "filter": "Filter", - "indexCondition": "Index Cond.", - "relation": "Table", - "nodeType": "Operation", - "rawOutput": "Raw Output", - "analyze": "Analyze", - "analyzeWarning": "ANALYZE executes the query. Use with caution on data-modifying statements.", - "notExplainable": "EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained.", - "contextMenuExplain": "Explain Plan", - "rerun": "Re-run", - "close": "Close", - "graphView": "Graph", - "tableView": "Table", - "general": "General", - "analyzeData": "Analyze Data", - "extraDetails": "Extra", - "selectNode": "Select a node to view details", - "buffersHit": "Buffers Hit", - "buffersRead": "Buffers Read", - "joinType": "Join Type", - "hashCondition": "Hash Cond.", - "topIssues": "Top Issues", - "noIssues": "No major issues detected in the current plan summary.", - "highestCost": "Highest Cost", - "slowestStep": "Slowest Step", - "largestEstimateGap": "Estimate Gap", - "overEstimate": "Actual rows exceed estimate", - "underEstimate": "Estimate exceeds actual rows", - "sequentialScans": "Sequential Scans", - "tempOperations": "Temp or Sort Ops", - "scanOperations": "Scan-heavy operations detected", - "sortOrTempOperations": "Sort or temp work detected", - "driverNotes": "Driver Notes", - "overview": "Overview", - "showOverview": "Show overview", - "hideOverview": "Hide overview", - "postgresAnalyzeLegend1": "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.", - "postgresAnalyzeLegend2": "Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well.", - "postgresEstimateLegend1": "PostgreSQL without ANALYZE shows planner estimates only.", - "postgresEstimateLegend2": "Enable ANALYZE to inspect actual rows, timing, loops, and buffers.", - "mysqlAnalyzeLegend1": "MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants.", - "mysqlAnalyzeLegend2": "Older servers may fall back to estimated plans with fewer metrics.", - "mysqlEstimateLegend1": "MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version.", - "mysqlEstimateLegend2": "If timing is missing, the server likely returned an estimate-only plan.", - "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.", - "sqliteLegend2": "Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL.", - "aiAnalysis": "AI Analysis", - "aiAnalysisTitle": "AI Query Plan Analysis", - "aiAnalyzing": "Analyzing query plan with AI...", - "aiConfigRequired": "AI Provider not configured. Please go to Settings > AI." - }, - "notebook": { - "addSqlCell": "Add SQL Cell", - "addMarkdownCell": "Add Markdown Cell", - "addCell": "Add", - "runAll": "Run All", - "runAllTooltip": "Execute all SQL cells top to bottom", - "runCell": "Run Cell", - "deleteCell": "Delete Cell", - "moveCellUp": "Move Up", - "moveCellDown": "Move Down", - "export": "Export Notebook", - "import": "Import Notebook", - "emptyNotebook": "This notebook is empty. Add a cell to get started.", - "markdownPlaceholder": "Write Markdown here...", - "togglePreview": "Toggle Preview", - "sqlCell": "SQL", - "markdownCell": "Markdown", - "invalidFile": "Invalid notebook file format", - "importSuccess": "Notebook imported successfully", - "exportSuccess": "Notebook exported successfully", - "cellResult_one": "{{count}} row · {{time}}ms", - "cellResult_other": "{{count}} rows · {{time}}ms", - "stopOnError": "Stop on Error", - "stopOnErrorTooltip": "Stop execution when a cell fails", - "runAllComplete": "Run All Complete", - "succeeded": "succeeded", - "failed": "failed", - "skipped": "skipped", - "toggleChart": "Toggle Chart", - "chartType": "Chart", - "chartLabel": "Label", - "chartValues": "Values", - "exportCsv": "Export as CSV", - "exportJson": "Export as JSON", - "exportHtml": "Export as HTML", - "parameters": "Parameters", - "paramName": "name", - "paramValue": "value", - "invalidParamName": "Invalid parameter name", - "parallelExecution": "Parallel Execution (Run All)", - "executionHistory": "Execution History", - "noHistory": "No execution history yet", - "collapseCell": "Collapse Cell", - "expandCell": "Expand Cell", - "collapseAll": "Collapse All", - "expandAll": "Expand All", - "outline": "Outline", - "cellNamePlaceholder": "Untitled", - "editCellName": "Edit cell name", - "aiGenerateName": "Generate name with AI", - "generatingName": "Generating name...", - "aiGenerateOutlineNames": "Generate names for unnamed cells with AI", - "undo": "Undo", - "redo": "Redo", - "history": { - "title": "Edit history", - "change": { - "initial": "Initial version", - "editCell": "Edited cell {{n}}", - "addSql": "Added SQL cell {{n}}", - "addMarkdown": "Added Markdown cell {{n}}", - "deleteCell": "Deleted cell {{n}}", - "reorder": "Reordered cells", - "renameCell": "Renamed cell {{n}}", - "schemaCell": "Changed database (cell {{n}})", - "chartCell": "Changed chart (cell {{n}})", - "parallelCell": "Toggled parallel (cell {{n}})", - "collapse": "Collapsed/expanded cells", - "params": "Changed parameters", - "stopOnError": "Toggled stop on error", - "other": "Edited notebook" - } - }, - "exportError": "Export failed" - }, - "querySelection": { - "title": "Select Query to Execute", - "queriesFound_one": "{{count}} query found", - "queriesFound_other": "{{count}} queries found", - "runAll": "Run All", - "runSelected": "Run Selected ({{count}})", - "runSingle": "Run this query", - "selectAll": "Select All", - "deselectAll": "Deselect All" - }, - "explainSelection": { - "title": "Select Query to Explain", - "queriesFound_one": "{{count}} explainable query found", - "queriesFound_other": "{{count}} explainable queries found", - "explainSingle": "Explain this query", - "explainFocused": "explain focused", - "explainNth": "explain Nth", - "cancel": "cancel" - }, - "multiResult": { - "rerun": "Re-run query", - "close": "Close tab", - "rename": "Rename", - "aiGenerateName": "Generate name with AI", - "generatingName": "Generating name...", - "viewTabs": "Tab view", - "viewStacked": "Stacked view", - "queryPrefix": "Query", - "results": "Results", - "collapseAll": "Collapse all", - "expandAll": "Expand all" - } - }, - "createTable": { - "title": "Create New Table", - "tableName": "Table Name", - "tableNamePlaceholder": "e.g. users, orders, products", - "columns": "Columns", - "addColumn": "Add Column", - "colName": "Name", - "colType": "Type", - "colLen": "Len", - "colPk": "PK", - "colNn": "NN", - "colAi": "AI", - "colDefault": "Default", - "create": "Create Table", - "cancel": "Cancel", - "nameRequired": "Table name is required", - "colRequired": "At least one column is required", - "failCreate": "Failed to create table: ", - "requiresExtension": "Requires extension: {{ext}}", - "sqlPreview": "SQL Preview" - }, - "schema": { - "title": "Schema: {{table}}", - "loading": "Loading schema...", - "colName": "Name", - "colType": "Type", - "colNullable": "Nullable", - "colKey": "Key", - "yes": "YES", - "no": "NO", - "close": "Close" - }, - "generateSQL": { - "title": "Generated SQL: {{table}}", - "loading": "Generating SQL...", - "runInConsole": "Run in console", - "copy": "Copy SQL", - "copied": "Copied!", - "tabCreateTable": "Create Table", - "tabSelectAll": "Select *", - "tabSelectFields": "Select [fields]", - "tabUpdate": "Update", - "tabDelete": "Delete" - }, - "modifyColumn": { - "titleAdd": "Add Column", - "titleEdit": "Modify Column", - "sqliteWarn": "SQLite only supports renaming columns. Other modifications require recreating the table manually.", - "name": "Name", - "type": "Type", - "length": "Length", - "default": "Default Value", - "notNull": "Not Null", - "primaryKey": "Primary Key", - "autoInc": "Auto Increment", - "sqlPreview": "SQL Preview", - "save": "Save Changes", - "add": "Add Column", - "cancel": "Cancel", - "nameRequired": "Column name is required", - "fail": "Failed: ", - "pkNotSupported": "This driver only supports primary keys at table creation time", - "requiresExtension": "Requires extension: {{ext}}" - }, - "createIndex": { - "title": "Create Index", - "name": "Index Name", - "columns": "Columns", - "unique": "Unique Index", - "sqlPreview": "SQL Preview", - "create": "Create Index", - "cancel": "Cancel", - "nameRequired": "Index name is required", - "colRequired": "At least one column must be selected" - }, - "createFk": { - "title": "Create Foreign Key", - "name": "FK Name (Optional)", - "column": "Local Column", - "refTable": "Referenced Table", - "refColumn": "Referenced Column", - "onDelete": "On Delete", - "onUpdate": "On Update", - "sqlPreview": "SQL Preview", - "create": "Create Foreign Key", - "cancel": "Cancel", - "nameRequired": "Name is required" - }, - "healthCheck": { - "title": "Connection Lost", - "connectionLost": "A database connection was lost" - }, - "erDiagram": { - "enterFullscreen": "Fullscreen", - "exitFullscreen": "Exit Fullscreen", - "noConnection": "No Connection ID", - "noConnectionDesc": "Cannot display diagram without a connection ID.", - "switchToVertical": "Switch to Vertical Layout", - "switchToHorizontal": "Switch to Horizontal Layout", - "vertical": "Vertical", - "horizontal": "Horizontal", - "showAllTables": "Show All Tables", - "showAll": "Show All", - "focusedOn": "Focused on", - "focusOnTable": "Focus on Table" - }, - "views": { - "createView": "Create View", - "editView": "Edit View", - "createSubtitle": "Create a new database view", - "editSubtitle": "Editing view: {{name}}", - "viewName": "View Name", - "viewNamePlaceholder": "e.g. active_users, order_summary", - "viewDefinition": "View Definition (SQL)", - "preview": "Preview", - "runPreview": "Run Preview", - "previewEmpty": "Click 'Run Preview' to see results", - "moreRows": "+{{count}} more rows", - "create": "Create View", - "save": "Save Changes", - "nameRequired": "View name is required", - "definitionRequired": "View definition is required", - "failLoadDefinition": "Failed to load view definition: ", - "previewError": "Preview failed: ", - "createSuccess": "View created successfully", - "alterSuccess": "View updated successfully", - "saveError": "Failed to save view: ", - "confirmAlter": "Are you sure you want to modify view \"{{view}}\"?", - "alterView": "Alter View" - }, - "triggers": { - "createTrigger": "Create Trigger", - "editTrigger": "Edit Trigger", - "createSubtitle": "Create a new database trigger", - "editSubtitle": "Editing trigger: {{name}}", - "triggerName": "Trigger Name", - "triggerNamePlaceholder": "e.g. before_insert_user", - "tableName": "Table Name", - "tableNamePlaceholder": "e.g. users", - "timing": "Timing", - "events": "Events", - "body": "Trigger Body (SQL)", - "sqlPreview": "Generated SQL Preview", - "rawSql": "Raw SQL", - "guidedMode": "Guided", - "rawSqlMode": "Raw SQL", - "loading": "Loading trigger definition...", - "create": "Create Trigger", - "save": "Save Changes", - "sqlRequired": "Trigger SQL is required", - "failLoadDefinition": "Failed to load trigger definition: ", - "dropError": "Failed to drop existing trigger: ", - "saveError": "Failed to save trigger: ", - "createSuccess": "Trigger created successfully", - "updateSuccess": "Trigger updated successfully", - "recreateTrigger": "Recreate Trigger", - "confirmRecreate": "Editing a trigger requires dropping and recreating it. Continue modifying \"{{trigger}}\"?" - }, - "community": { - "title": "Join the Community", - "subtitle": "Help tabularis grow", - "description": "Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.", - "starTitle": "Star on GitHub", - "starDesc": "A star helps others discover the project", - "discordTitle": "Join Discord", - "discordDesc": "Chat with the community, get help, suggest features", - "dismiss": "Maybe later" - }, - "whatsNew": { - "title": "What's New", - "subtitle": "Version {{version}}", - "features": "New Features", - "bugFixes": "Bug Fixes", - "breakingChanges": "Breaking Changes", - "readMore": "Read more", - "dismiss": "Got it" - }, - "dump": { - "title": "Dump Database", - "dumpDatabase": "Dump Database", - "importDatabase": "Run SQL File...", - "importTitle": "Import Database", - "includeStructure": "Structure (DDL)", - "includeData": "Data (INSERT)", - "selectTables": "Select Tables", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "export": "Export", - "success": "Database exported successfully", - "failure": "Export failed: ", - "errorNoOption": "Please select at least Structure or Data", - "errorNoTables": "Please select at least one table", - "importSuccess": "SQL file executed successfully", - "importFailure": "Import failed: ", - "importCancelled": "Import cancelled", - "importFailed": "Import failed", - "importingFrom": "Importing from", - "statementsExecuted": "{{count}} / {{total}} statements", - "confirmImport": "Are you sure you want to import \"{{file}}\"?\nThis may overwrite existing data.", - "elapsedTime": "Elapsed time" - }, - "geometryInput": { - "sqlMode": "SQL Mode", - "wktMode": "WKT Mode", - "sqlHelper": "Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))", - "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", - "wktPlaceholder": "POINT(30 40)", - "toggleTooltip": "SQL Functions" - }, - "jsonInput": { - "placeholder": "Enter JSON...", - "format": "Format", - "valid": "Valid JSON", - "invalid": "Invalid JSON", - "mode": { - "code": "Code", - "tree": "Tree", - "raw": "Raw" - }, - "expand": "Expand", - "search": "Search", - "diff": "Diff", - "sideBySide": "Side by side" - }, - "jsonViewer": { - "close": "Close", - "save": "Save" - }, - "jsonCell": { - "expand": "Toggle inline JSON tree", - "openViewer": "Open JSON viewer" - }, - "textCell": { - "expand": "Toggle inline text editor" - }, - "textInput": { - "diff": "Diff", - "sideBySide": "Side by side" - }, - "textViewer": { - "save": "Save" - }, - "rowEditor": { - "title": "Edit Row", - "subtitle": "Row #{{row}}", - "enterValue": "Enter value...", - "resize": "Resize sidebar" - }, - "contextMenu": { - "openSidebar": "Open Sidebar Editor", - "openJsonEditor": "Open in JSON Editor" - }, - "blobInput": { - "noData": "No BLOB data", - "uploadFile": "Upload File", - "download": "Download", - "delete": "Delete", - "truncatedWarning": "Preview only - full data not loaded", - "downloadDisabledTruncated": "Download unavailable - only preview loaded", - "downloading": "Downloading...", - "uploading": "Uploading...", - "openSidebar": "Open in editor", - "imagePreview": "Image preview" - }, - "visualExplainPage": { - "title": "Visual Explain", - "noFile": "No file loaded", - "openFile": "Open file", - "reload": "Reload", - "loading": "Loading explain plan…", - "emptyHint": "Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it." - }, - "taskManager": { - "header": { - "title": "Task Manager", - "subtitle": "Plugin processes & system resources", - "description": "Monitor plugin processes, CPU, RAM and disk usage in real time", - "open": "Open Task Manager", - "refresh": "Refresh" - }, - "killModal": { - "title": "Force Kill Plugin Process", - "subtitle": "This action cannot be undone immediately", - "descriptionBefore": "Killing", - "descriptionAfter": "will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted.", - "warning": "Active queries and connections through this plugin will be interrupted.", - "cancel": "Cancel", - "confirm": "Force Kill" - }, - "systemResources": { - "title": "System Resources", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Disk Read/s", - "diskWrite": "Disk Write/s", - "processCount_one": "{{count}} system process running", - "processCount_other": "{{count}} system processes running" - }, - "tabularisProcess": { - "title": "Tabularis Process", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Disk Read/s", - "diskWrite": "Disk Write/s", - "childCount_one": "{{count}} child process", - "childCount_other": "{{count}} child processes", - "noChildren": "No child processes", - "treeTotal": "Tree total: {{size}}", - "treeTotalTooltip": "Sum of RSS across the process tree — may overcount shared memory", - "loadingProcesses": "Loading processes…", - "colPid": "PID", - "colName": "Name", - "colCpu": "CPU", - "colRam": "RAM", - "refresh": "Refresh" - }, - "pluginProcesses": { - "title": "Plugin Processes", - "loading": "Loading processes…", - "empty": "No plugin processes are running", - "emptyHint": "Install and enable plugins to see them here", - "colPlugin": "Plugin", - "colPid": "PID", - "colCpu": "CPU", - "colRam": "RAM", - "colDiskRw": "Disk R/W", - "colStatus": "Status", - "colActions": "Actions", - "restart": "Restart", - "kill": "Kill", - "collapseChildren": "Collapse child processes", - "childCount_one": "{{count}} child process", - "childCount_other": "{{count}} child processes", - "childProcess": "child process", - "status": { - "running": "running", - "stopped": "stopped", - "unknown": "unknown" - } - } - }, - "groups": { - "newGroup": "New Group", - "rename": "Rename", - "delete": "Delete", - "deleteConfirm": "Are you sure you want to delete group \"{{name}}\"? Connections in this group will be moved to ungrouped.", - "deleteTitle": "Delete Group", - "connection": "connection", - "connections": "connections", - "ungrouped": "Ungrouped", - "removeFromGroup": "Remove from Group", - "groupName": "Group name", - "createError": "Failed to create group", - "deleteError": "Failed to delete group", - "moveError": "Failed to move connection", - "renameError": "Failed to rename group" - }, - "queryModal": { - "database": "Database", - "noDatabase": "No database" - }, - "clipboardImport": { - "title": "Import from Clipboard", - "subtitle": "Paste structured data and preview the schema before importing", - "selectTablePlaceholder": "Select a table...", - "contextMenuLabel": "Import from Clipboard...", - "firstRowHeader": "First row as header", - "tableName": "Table name", - "tableNamePlaceholder": "e.g. sales_data", - "aiSuggest": "AI Suggest", - "tableExists": "Already exists", - "mode": "Mode", - "createNew": "Create new table", - "appendTo": "Append to existing", - "onConflict": "If exists", - "conflictFail": "Fail with error", - "conflictAppend": "Append rows", - "conflictReplace": "Replace table", - "schemaPreview": "Column Schema", - "dataPreview": "Data Preview", - "sample": "Sample values", - "lowConfidence": "Mixed types detected, defaulted to TEXT", - "rowsTotal_one": "{{count}} row", - "rowsTotal_other": "{{count}} rows", - "showingFirst": "showing first {{count}}", - "import_one": "Import {{count}} row", - "import_other": "Import {{count}} rows", - "importing": "Importing...", - "success_one": "{{count}} row imported into \"{{table}}\"", - "success_other": "{{count}} rows imported into \"{{table}}\"", - "tableCreated": "New table created", - "openTable": "Close", - "noData": "No data found in clipboard", - "retry": "Try again", - "warningsCount_one": "{{count}} parsing warning", - "warningsCount_other": "{{count}} parsing warnings", - "columnsLabel": "columns", - "rowsLabel": "rows", - "stepConfigure": "Configure destination", - "stepReview": "Review & adjust", - "modeCreateHint": "A new table will be created", - "modeAppendHint": "Rows will be added to an existing table", - "maximize": "Maximize", - "minimize": "Minimize", - "nSelected": "{{count}} selected", - "deleteSelected": "Delete selected", - "deleteColumn": "Delete column", - "sourceColumn": "Clipboard column", - "targetColumn": "Target column", - "targetColumnPlaceholder": "Choose target...", - "skipColumn": "Skip (do not import)", - "createNewColumn": "Create new column" - }, - "aiActivity": { - "title": "AI Activity", - "description": "Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere.", - "tabs": { - "events": "Events", - "sessions": "Sessions" - }, - "empty": "No MCP activity yet.", - "eventsCount_one": "{{count}} event", - "eventsCount_other": "{{count}} events", - "blockedCount_one": "{{count}} blocked", - "blockedCount_other": "{{count}} blocked", - "errorsCount_one": "{{count}} error", - "errorsCount_other": "{{count}} errors", - "sessionsCount_one": "{{count}} session", - "sessionsCount_other": "{{count}} sessions", - "events": "Events", - "runQueries": "Queries", - "connections": "Connections", - "client": "Client", - "rowsReturned": "Rows returned", - "approvalId": "Approval ID", - "searchQuery": "Search query…", - "allTools": "All tools", - "allStatuses": "All statuses", - "clearAll": "Clear", - "clearConfirm": "Delete the entire AI activity history? This cannot be undone.", - "exportNotebook": "Export as Notebook", - "exportSuccess": "Exported to {{path}}", - "viewDetails": "View details", - "copyQuery": "Copy query", - "openVisualExplain": "Open in Visual Explain", - "copied": "Copied to clipboard", - "detailTitle": "Event details", - "col": { - "timestamp": "Time", - "tool": "Tool", - "connection": "Connection", - "query": "Query", - "kind": "Kind", - "duration": "Duration", - "status": "Status", - "actions": "Actions" - }, - "sort": { - "sortBy": "Sort by {{field}}", - "sortByPlaceholder": "Sort by…", - "toggleAscending": "Sort ascending", - "toggleDescending": "Sort descending", - "ascending": "Asc", - "descending": "Desc", - "started": "Started", - "eventCount": "Events", - "runQueries": "Run queries" - }, - "searchSessions": "Search session, client, connection…", - "filteredFrom": "of {{total}}", - "noMatches": "No sessions match the current filters.", - "status": { - "success": "Success", - "blocked_readonly": "Blocked (read-only)", - "blocked_pending_approval": "Pending approval", - "denied": "Denied", - "error": "Error", - "timeout": "Timeout" - }, - "queryKind": { - "select": "Select", - "write": "Write", - "ddl": "DDL", - "unknown": "Unknown" - }, - "exportCsv": "Export CSV", - "exportJson": "Export JSON" - }, - "aiApproval": { - "title": "AI requested a database write", - "subtitle": "On {{connection}} — review and decide before it executes.", - "subtitleWithClient": "{{client}} on {{connection}} — review and decide before it executes.", - "query": "Query", - "editQuery": "Edit before approving", - "lockQuery": "Lock query", - "preflightPlan": "Pre-flight execution plan", - "expandPlan": "Expand", - "collapsePlan": "Collapse", - "explainUnavailable": "EXPLAIN unavailable for this query.", - "explainFailed": "EXPLAIN failed: {{error}}", - "reasonLabel": "Reason (optional)", - "reasonPlaceholder": "e.g. Looks risky on prod, please confirm…", - "approve": "Approve", - "deny": "Deny" - }, - "discordCallout": { - "title": "Brand-new Discord community!", - "body": "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap.", - "cta": "Join now", - "dismiss": "Dismiss" - }, - "k8sConnections": { - "title": "Kubernetes Connections", - "add": "Add", - "empty": "No Kubernetes connections saved. Click \"Add\" to create one.", - "name": "Name", - "namePlaceholder": "My K8s cluster", - "context": "Context", - "chooseContext": "Choose a context...", - "namespace": "Namespace", - "chooseNamespace": "Choose a namespace...", - "resourceType": "Resource Type", - "resourceTypeService": "Service", - "resourceTypePod": "Pod", - "resourceName": "Resource Name", - "chooseResource": "Choose a resource...", - "port": "Container Port", - "test": "Test", - "testing": "Testing...", - "errors": { - "nameRequired": "Connection name is required", - "contextRequired": "Kubernetes context is required", - "namespaceRequired": "Namespace is required", - "resourceTypeInvalid": "Resource type must be \"service\" or \"pod\"", - "resourceNameRequired": "Resource name is required", - "portInvalid": "Port must be between 1 and 65535" - } - } -} diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json deleted file mode 100644 index f279736d..00000000 --- a/src/i18n/locales/es.json +++ /dev/null @@ -1,1415 +0,0 @@ -{ - "toolbar": { - "filters": "Filtros", - "toggleFilterPanel": "Panel de filtros estructurados", - "filterConditions": "Condiciones de filtro", - "activeOf": "{{active}} de {{total}} activos", - "noFilters": "Sin filtros —", - "addFirstFilter": "agregar el primer filtro", - "noActiveFilters": "sin filtros activos", - "closePanelEsc": "Cerrar panel de filtros (ESC)", - "unset": "Limpiar", - "sql": "SQL", - "addFilter": "Agregar filtro", - "applyAll": "Aplicar todos", - "apply": "Aplicar", - "applied": "Aplicado", - "switchToSql": "Cambiar a entrada SQL WHERE", - "duplicateFilter": "Duplicar filtro", - "removeFilter": "Eliminar filtro", - "deselectFromApplyAll": "Deseleccionar de Aplicar todos", - "selectForApplyAll": "Seleccionar para Aplicar todos", - "valuePlaceholder": "valor", - "fromPlaceholder": "desde", - "toPlaceholder": "hasta" - }, - "common": { - "save": "Guardar", - "close": "Cerrar", - "cancel": "Cancelar", - "delete": "Eliminar", - "edit": "Editar", - "loading": "Cargando...", - "search": "Buscar...", - "noResults": "No se encontraron resultados", - "error": "Error", - "success": "Éxito", - "ok": "OK" - }, - "sidebar": { - "connections": "Conexiones", - "settings": "Configuración", - "savedQueries": "Consultas Guardadas", - "tables": "Tablas", - "newConsole": "Nueva Consola", - "newVisualQuery": "Nueva Consulta Visual", - "refresh": "Actualizar", - "refreshTables": "Actualizar Tablas", - "refreshViews": "Actualizar Vistas", - "createView": "Crear Nueva Vista", - "views": "Vistas", - "noViews": "No se encontraron vistas", - "editView": "Editar Vista", - "viewDefinition": "Definición de Vista", - "dropView": "Eliminar Vista", - "dropViewConfirm": "¿Estás seguro de que deseas eliminar la vista \"{{view}}\"?", - "failGetViewDefinition": "Error al obtener la definición de la vista: ", - "failDropView": "Error al eliminar la vista: ", - "explorer": "Explorador", - "sqlEditor": "Editor SQL", - "loadingSchema": "Cargando esquema...", - "noSavedQueries": "No hay consultas guardadas", - "searchFavorites": "Buscar en favoritos...", - "noFavoritesSearchResults": "Ningun favorito coincide con la busqueda", - "execute": "Ejecutar", - "edit": "Editar", - "delete": "Eliminar", - "confirmDeleteQuery": "¿Estás seguro de que quieres eliminar la consulta \"{{name}}\"?", - "confirmDeleteTitle": "Eliminar Consulta", - "noTables": "No se encontraron tablas", - "columns": "columnas", - "keys": "claves", - "foreignKeys": "claves foráneas", - "indexes": "índices", - "deleteColumn": "Eliminar Columna", - "deleteColumnConfirm": "¿Estás seguro de que deseas eliminar la columna \"{{column}}\" de la tabla \"{{table}}\"?\n\nADVERTENCIA: Esto eliminará permanentemente todos los datos de esta columna. Esta acción no se puede deshacer.", - "failDeleteColumn": "Error al eliminar la columna: ", - "failDeleteIndex": "Error al eliminar el índice: ", - "modifyColumn": "Modificar Columna", - "copyName": "Copiar Nombre", - "openInEditor": "Abrir en el Editor", - "closePanel": "Cerrar panel", - "setAsActive": "Establecer como Activa", - "deleteTable": "Eliminar Tabla", - "deleteTableConfirm": "¿Estás seguro de que deseas eliminar la tabla \"{{table}}\"?", - "failDeleteTable": "Error al eliminar la tabla: ", - "showData": "Mostrar Datos", - "countRows": "Contar Filas", - "viewSchema": "Ver Esquema", - "viewERDiagram": "Ver Diagrama ER", - "generateSQL": "Generar SQL", - "addColumn": "Agregar Columna", - "addIndex": "Agregar Índice", - "deleteIndex": "Eliminar Índice", - "deleteIndexConfirm": "¿Eliminar el índice \"{{name}}\"?", - "addFk": "Agregar Clave Foránea", - "deleteFk": "Eliminar FK", - "deleteFkConfirm": "¿Eliminar la clave foránea \"{{name}}\"?", - "sqliteFkError": "SQLite no soporta la eliminación de FKs mediante ALTER TABLE.", - "mcpServer": "Servidor MCP", - "routines": "Rutinas", - "functions": "Funciones", - "procedures": "Procedimientos", - "noRoutines": "No se encontraron rutinas", - "refreshRoutines": "Actualizar Rutinas", - "objectSummary": "Objetos", - "databases": "Bases de Datos", - "failGetRoutineDefinition": "Error al obtener la definición de la rutina: ", - "schemas": "Esquemas", - "noSchemas": "No se encontraron esquemas", - "loadingSchemas": "Cargando esquemas...", - "schemaLoadError": "No se pudieron cargar los esquemas", - "errorDetails": "Detalles", - "copyError": "Copiar mensaje de error", - "retry": "Reintentar", - "expandExplorer": "Expandir Explorador", - "selectSchemas": "Seleccionar Esquemas", - "selectSchemasHint": "Selecciona los esquemas a cargar:", - "selectAll": "Seleccionar Todo", - "deselectAll": "Deseleccionar Todo", - "confirmSelection": "Confirmar", - "editSchemas": "Editar Esquemas", - "selectConnection": "Seleccionar Conexión", - "disconnect": "Desconectar", - "switchConnection": "Cambiar Conexión", - "noOtherConnections": "No hay otras conexiones", - "openConnections": "Abiertas", - "availableConnections": "Disponibles", - "splitVertical": "Dividir Vertical", - "splitHorizontal": "Dividir Horizontal", - "separateConnections": "Separar Conexiones", - "splitGroup": "Grupo Dividido", - "filterTables": "Filtrar tablas...", - "noTablesMatch": "No hay tablas que coincidan", - "filterDatabases": "Filtrar bases de datos...", - "manageDatabases": "Gestionar Bases de Datos", - "structure": "Estructura", - "favorites": "Favoritos", - "queryHistory": "Historial", - "noQueryHistory": "Sin historial de consultas", - "noHistorySearchResults": "Ninguna consulta coincide con la busqueda", - "searchHistory": "Buscar en el historial...", - "clearAllHistory": "Borrar Todo el Historial", - "historyRecoveredTitle": "Historial de consultas restablecido", - "historyRecoveredBody": "El archivo de historial estaba corrupto y se ha movido a un respaldo. Las nuevas consultas se registrarán con normalidad. Archivo de respaldo:", - "historyRecoveredDismiss": "Descartar", - "confirmDeleteHistoryEntry": "¿Estás seguro de que quieres eliminar esta consulta del historial?", - "confirmClearHistory": "¿Estás seguro de que quieres borrar todo el historial de consultas para esta conexión?", - "confirmClearHistoryTitle": "Borrar Historial de Consultas", - "addToFavorites": "Agregar a Favoritos", - "insertToEditor": "Insertar en el Editor", - "openInNewTab": "Abrir en Nueva Pestaña", - "copyQuery": "Copiar Consulta", - "runQuery": "Ejecutar Consulta", - "dateGroupToday": "Hoy", - "dateGroupYesterday": "Ayer", - "dateGroupThisWeek": "Esta Semana", - "dateGroupThisMonth": "Este Mes", - "dateGroupOlder": "Anteriores", - "notebooks": { - "tab": "Notebooks", - "search": "Buscar notebooks", - "refresh": "Actualizar", - "empty": "Aún no hay notebooks guardados.", - "noSearchResults": "Ningún notebook coincide con tu búsqueda.", - "open": "Abrir", - "rename": "Renombrar", - "delete": "Eliminar", - "deleteConfirm": "¿Eliminar el notebook \"{{title}}\"? Esta acción no se puede deshacer.", - "renamePlaceholder": "Nombre del notebook" - } - }, - "mcp": { - "title": "Integración del Servidor MCP", - "subtitle": "Conecta Tabularis a Claude Desktop, Cursor y más", - "description": "El Model Context Protocol (MCP) permite a los asistentes de IA (como Claude) conectarse a tus herramientas locales. Tabularis expone un servidor MCP que permite a la IA leer el esquema de tu base de datos y ejecutar consultas de forma segura.", - "checking": "Verificando configuración...", - "notFound": "Archivo de configuración no encontrado (crear manualmente)", - "installed": "Instalado", - "install": "Instalar Configuración", - "manualConfig": "CONFIGURACIÓN MANUAL", - "manualText": "Agrega esto al archivo de configuración del cliente manualmente si la instalación automática falla.", - "successTitle": "Éxito", - "successMsg": "¡Configuración instalada correctamente para {{client}}! Reinicia la app para aplicar.", - "errorTitle": "Instalación Fallida", - "clients": "CLIENTES IA", - "manualCommand": "COMANDO MANUAL", - "manualCommandText": "Ejecuta este comando en tu terminal y reinicia Claude Code.", - "tabs": { - "setup": "Configuración", - "activity": "Actividad", - "safety": "Seguridad" - }, - "safety": { - "readOnlyTitle": "Modo solo lectura", - "readOnlyDefault": "Hacer todas las consultas MCP de solo lectura", - "readOnlyDefaultDesc": "Bloquea cualquier sentencia que no sea SELECT vía MCP, salvo las conexiones autorizadas abajo.", - "readOnlyList": "Conexiones de solo lectura", - "readOnlyListDesc": "Estas conexiones rechazarán escrituras desde MCP. Las otras se comportan normalmente.", - "allowList": "Permitir escrituras desde MCP", - "allowListDesc": "El resto sigue en solo lectura. Solo las marcadas pueden ejecutar escrituras.", - "approvalTitle": "Puerta de aprobación", - "approvalMode": "Aprobación requerida", - "approvalModeDesc": "Pausa las escrituras (o todas las consultas) y pide al usuario que apruebe antes de ejecutar.", - "modeOff": "Desactivada", - "modeWritesOnly": "Solo escrituras", - "modeAll": "Todas las consultas", - "approvalTimeout": "Tiempo de espera", - "approvalTimeoutDesc": "Cuánto espera el subproceso MCP la decisión del usuario antes de fallar.", - "preflightExplain": "EXPLAIN previo", - "preflightExplainDesc": "Ejecuta un EXPLAIN antes de mostrar el modal para que el usuario vea el plan." - } - }, - "connections": { - "title": "Conexiones", - "addConnection": "Agregar Conexión", - "noConnections": "No hay conexiones activas", - "createFirst": "Crea tu primera conexión", - "active": "Activa", - "disconnect": "Desconectar", - "connect": "Conectar", - "edit": "Editar", - "delete": "Eliminar", - "clone": "Clonar", - "confirmDelete": "¿Estás seguro de que deseas eliminar esta conexión?", - "deleteTitle": "Confirmar eliminación", - "failConnect": "Error al conectar a {{name}}. Verifica tu configuración o asegúrate de que la base de datos esté en ejecución.", - "failDisconnect": "No se pudo desconectar de la base de datos", - "failDuplicate": "Error al duplicar la conexión", - "open": "Abierta", - "pluginDisabled": "Plugin desactivado", - "connectionCount_one": "{{count}} conexión/es", - "connectionCount_other": "{{count}} conexión/es", - "noConnectionsHint": "Crea tu primera conexión para empezar.", - "searchPlaceholder": "Buscar conexiones...", - "noSearchResults": "Ninguna conexión coincide con \"{{query}}\"", - "gridView": "Vista de cuadrícula", - "listView": "Vista de lista", - "export": "Exportar conexiones", - "import": "Importar conexiones", - "exportTitle": "Exportar conexiones", - "exportWarning": "El archivo exportado contendrá tus contraseñas de base de datos y SSH en texto plano. Guárdalo de forma segura." - }, - "connectionAppearance": { - "section": "Apariencia", - "accentColor": "Color de acento", - "customColor": "Personalizado", - "resetColor": "Restablecer al valor predeterminado", - "icon": "Icono", - "tabs": { - "default": "Predeterminado", - "pack": "Icono", - "emoji": "Emoji", - "image": "Imagen" - }, - "previewLabel": "Vista previa", - "defaultHint": "Usando el icono predeterminado del driver.", - "emojiSelected": "Emoji seleccionado", - "emojiHint": "Haz clic en otro emoji abajo para cambiarlo.", - "removeEmoji": "Quitar", - "chooseImage": "Elegir imagen…", - "removeImage": "Quitar", - "imageHint": "PNG, JPG, WebP o SVG · máx. 512 KB" - }, - "settings": { - "general": "General", - "info": "Info", - "dataEditor": "Editor de Datos", - "pageSize": "Tamaño de Página de Resultados (Límite)", - "pageSizeDesc": "Limita el número de filas obtenidas por consulta para prevenir problemas de rendimiento. Establece en 0 para desactivar (no recomendado).", - "rows": "filas", - "copyFormat": "Formato de copia predeterminado", - "copyFormatDesc": "Elige el formato predeterminado al copiar filas con Ctrl+C / Cmd+C.", - "csvDelimiter": "Delimitador CSV", - "csvDelimiterDesc": "Elige el delimitador predeterminado utilizado al copiar o exportar filas en formato CSV.", - "delimiterComma": "Coma (,)", - "delimiterSemicolon": "Punto y coma (;)", - "delimiterTab": "Tab", - "delimiterPipe": "Pipe (|)", - "detectJsonInTextColumns": "Detectar JSON en columnas de texto", - "detectJsonInTextColumnsDesc": "Muestra el visor de JSON cuando una celda de texto sin tipar contiene un objeto o array JSON. Añade un pequeño coste de análisis por celda.", - "appearance": "Apariencia", - "localization": "Localización", - "themeSelection": "Selección de Tema", - "fontFamily": "Familia de Fuente", - "fonts": { - "custom": "Fuente Personalizada", - "customPlaceholder": "ej. Comic Sans MS", - "enterFontName": "Ingresa el nombre de la fuente arriba" - }, - "fontSize": "Tamaño de Fuente", - "fontSizeLabel": "Tamaño de Fuente", - "fontSizeDesc": "Ajusta el tamaño base de fuente usado en la aplicación (10-20px).", - "preview": "Vista Previa", - "fontPreviewText": "El veloz zorro marrón salta sobre el perro perezoso", - "appearance_general": "General", - "appearance_sqlEditor": "Editor SQL", - "appearance_editorTheme": "Tema del Editor", - "appearance_editorThemeDesc": "Elige un tema independiente para el editor SQL, o mantenlo sincronizado con el tema de la app.", - "appearance_sameAsApp": "Igual que la app", - "appearance_editorFontFamily": "Fuente del Editor", - "appearance_editorFontSize": "Tamaño de Fuente del Editor", - "appearance_editorLineHeight": "Altura de Línea", - "appearance_editorTabSize": "Tamaño de Tab", - "appearance_editorWordWrap": "Ajuste de Línea", - "appearance_editorWordWrapDesc": "Ajusta las líneas largas en el editor en vez de desplazarse horizontalmente.", - "appearance_editorShowLineNumbers": "Mostrar Números de Línea", - "appearance_editorShowLineNumbersDesc": "Muestra los números de línea en el margen del editor.", - "appearance_editorAcceptSuggestionOnEnter": "Aceptar Sugerencia con Intro", - "appearance_editorAcceptSuggestionOnEnterDesc": "Permite que Intro (además de Tab) acepte la sugerencia de autocompletado activa. Cuando está desactivado, Intro siempre inserta una nueva línea.", - "editConfigJson": "Editar config.json", - "editConfigJsonDesc": "Edita directamente el archivo de configuración en bruto. Se requiere reinicio para aplicar los cambios.", - "configJsonModal": { - "title": "config.json", - "saveAndRestart": "Guardar y Reiniciar", - "restartNow": "Reiniciar Ahora", - "restartRequired": "Se requiere reinicio para aplicar los cambios.", - "restartMessage": "El archivo de configuración ha sido guardado. ¿Reiniciar ahora para aplicar los cambios?" - }, - "language": "Idioma", - "languageDesc": "Elige tu idioma preferido. 'Auto' usará el idioma del sistema.", - "auto": "Auto (Sistema)", - "projectStatus": "Estado del Proyecto", - "roadmapDesc": "Este proyecto es un Work In Progress (WIP). Las funciones principales son estables, pero tenemos grandes planes.", - "support": "Apoya el Desarrollo", - "supportDesc": "Si te gusta tabularis y quieres ver más funcionalidades, considera apoyar el proyecto contribuyendo código, reportando errores o dando una estrella en GitHub.", - "version": "Versión", - "starOnGithub": "Estrella en GitHub", - "ai": { - "tab": "IA", - "title": "Configuración de IA", - "description": "Configura los proveedores de IA para habilitar la generación de SQL desde lenguaje natural. Las claves se almacenan de forma segura en el llavero del sistema.", - "enable": "Habilitar Funciones de IA", - "enableDesc": "Mostrar los botones de Asistente IA y Explicar en el editor", - "defaultProvider": "Proveedor Predeterminado", - "defaultModel": "Modelo Predeterminado", - "configuration": "Configuración", - "selectProviderFirst": "Selecciona un proveedor primero", - "modelDesc": "Selecciona el modelo a utilizar para la generación y explicación.", - "manageKeys": "Gestionar Claves API", - "apiKey": "Clave API de {{provider}}", - "configured": "Configurado", - "notConfigured": "No configurado", - "enterKey": "Ingresa la Clave de {{provider}}", - "keyStoredSecurely": "La clave API se almacena de forma segura en el llavero del sistema. Establecer una clave aquí sobrescribe la variable de entorno.", - "fromEnv": "Variable de Entorno", - "fromEnvTooltip": "Esta clave se carga desde una variable de entorno", - "envVariableDetected": "Se detectó una variable de entorno, pero puedes sobrescribirla estableciendo una clave arriba.", - "reset": "Restablecer", - "changeKey": "Cambiar", - "resetKey": "Eliminar clave personalizada y volver a la variable de entorno (si existe)", - "keyResetSuccess": "Clave personalizada eliminada correctamente", - "promptCustomization": "Personalización de Prompts", - "systemPrompt": "Generación SQL", - "systemPromptDesc": "Instrucciones para la generación de SQL con IA. Usa {{SCHEMA}} como marcador para la estructura de la base de datos.", - "enterSystemPrompt": "Ingresa el prompt del sistema...", - "resetDefault": "Restablecer Predeterminado", - "savePrompt": "Guardar Prompt", - "explainPrompt": "Explicación de Consultas", - "explainPromptDesc": "Instrucciones para la explicación de consultas con IA. Usa {{LANGUAGE}} como marcador para el idioma de salida.", - "enterExplainPrompt": "Ingresa el prompt de explicación...", - "cellnamePrompt": "Prompt Nombre de Celda Notebook", - "cellnamePromptDesc": "Personaliza las instrucciones para la generación de nombres de celda en notebooks con IA. El contenido de la celda (SQL o Markdown) se envía como mensaje del usuario.", - "enterCellnamePrompt": "Ingresa el prompt de nombre de celda...", - "tabrenamePrompt": "Prompt Nombre de Pestaña de Consulta", - "tabrenamePromptDesc": "Personaliza las instrucciones para la generación de nombres de pestañas de resultados de consulta con IA. La consulta SQL se envía como mensaje del usuario.", - "enterTabrenamePrompt": "Ingresa el prompt de nombre de pestaña...", - "explainplanPrompt": "Prompt Analisis del Plan de Ejecucion", - "explainplanPromptDesc": "Personaliza las instrucciones para el analisis IA de los planes EXPLAIN. Usa {{LANGUAGE}} para el idioma de salida.", - "enterExplainplanPrompt": "Ingresa el prompt de analisis del plan de ejecucion...", - "keySaved": "Clave API guardada de forma segura", - "promptSaved": "Prompt del sistema guardado correctamente", - "explainPromptSaved": "Prompt de explicación guardado correctamente", - "promptReset": "Prompt del sistema restablecido al predeterminado", - "explainPromptReset": "Prompt de explicación restablecido al predeterminado", - "modelPlaceholder": "Selecciona un modelo", - "searchPlaceholder": "Buscar modelos...", - "noResults": "No se encontraron modelos", - "refresh": "Actualizar Modelos", - "refreshSuccess": "Modelos de IA actualizados desde los proveedores", - "refreshError": "Error al actualizar los modelos", - "ollamaConnected": "Ollama conectado ({{count}} modelos encontrados)", - "ollamaNotDetected": "Ollama no detectado en el puerto {{port}}. ¿Está en ejecución?", - "ollamaPort": "Puerto de Ollama", - "modelNotFound": "Modelo {{model}} no encontrado en {{provider}}. Puede que no funcione correctamente.", - "customOpenaiEndpoint": "Endpoint Personalizado", - "endpointUrl": "URL del Endpoint", - "endpointUrlDesc": "La URL base de tu API compatible con OpenAI. Ejemplos: https://api.groq.com/openai/v1, http://localhost:8000/v1", - "customOpenaiModelPlaceholder": "ej., llama3-70b-8192, mixtral-8x7b", - "customOpenaiModelDesc": "Ingresa el nombre del modelo proporcionado por tu servicio compatible con OpenAI.", - "customOpenaiModelHelp": "Ingresa el nombre exacto del modelo para tu proveedor compatible con OpenAI." - }, - "updates": "Actualizaciones", - "openSourceLibraries": "Librerías Open Source", - "openSourceLibrariesDesc": "Consulta las dependencias open source directas usadas por la app, el backend y la toolchain.", - "openSourceLibrariesSource": "Dependencias directas declaradas en package.json y src-tauri/Cargo.toml.", - "openSourceLibrariesTotal": "{{count}} librerías", - "openSourceLibrariesOpenProject": "Abrir página del paquete", - "openSourceLibrariesSections": { - "npm-runtime": "Dependencias Frontend", - "npm-tooling": "Dependencias Dev Frontend", - "cargo-runtime": "Dependencias Rust", - "cargo-tooling": "Build y Test Rust" - }, - "openSourceLibrariesEcosystem": { - "npm": "ecosistema npm", - "cargo": "ecosistema Cargo" - }, - "autoCheckUpdates": "Buscar actualizaciones al inicio", - "autoCheckUpdatesDesc": "Buscar automáticamente nuevas versiones al iniciar la aplicación", - "checkNow": "Buscar Actualizaciones Ahora", - "checking": "Verificando...", - "currentVersion": "Versión Actual", - "logs": "Registros", - "logSettings": "Configuración de Registros", - "enableLogging": "Habilitar Registros", - "enableLoggingDesc": "Recopilar registros de la aplicación en memoria para depuración", - "maxLogEntries": "Máximo de Entradas de Registro", - "maxLogEntriesDesc": "Cuántos registros mantener en memoria (1-10000)", - "currentLogCount": "Registros Actuales", - "clearLogs": "Limpiar Registros", - "clearLogsConfirm": "¿Estás seguro de que deseas borrar todos los registros?", - "exportLogs": "Exportar Registros", - "exportLogsSuccess": "Registros exportados al portapapeles", - "noLogs": "No hay registros disponibles", - "refreshLogs": "Actualizar", - "logLevel": "Nivel", - "logMessage": "Mensaje", - "logTimestamp": "Marca de Tiempo", - "filterByLevel": "Filtrar por nivel", - "allLevels": "Todos los niveles", - "debug": "Debug", - "warn": "Warn", - "error": "Error", - "connectionHealthCheck": "Verificación de Conexión", - "pingInterval": "Intervalo de Ping", - "pingIntervalDesc": "Frecuencia con la que se verifica si las conexiones activas siguen disponibles. Establece 0 para desactivar.", - "seconds": "segundos", - "entries": "entradas", - "queryHistory": "Historial de Consultas", - "queryHistoryMaxEntries": "Máx. Entradas de Historial", - "queryHistoryMaxEntriesDesc": "Número máximo de entradas del historial de consultas almacenadas por conexión.", - "startup": "Inicio", - "showWelcome": "Mostrar pantalla de bienvenida", - "showWelcomeDesc": "Mostrar la pantalla de bienvenida al iniciar la aplicación.", - "erDiagram": "Diagrama ER", - "erDiagramDefaultLayout": "Diseño Predeterminado", - "erDiagramDefaultLayoutDesc": "Elige la dirección de diseño predeterminada para los diagramas ER", - "plugins": { - "title": "Plugins", - "overviewTitle": "Centro de plugins", - "overviewDesc": "Instala extensiones, gestiona drivers de plugins y mantén bajo control los ajustes de ejecución.", - "installedMetric": "Instalados", - "enabledMetric": "Habilitados", - "registryMetric": "Registro", - "updatesMetric": "Actualizaciones", - "available": "Plugins Disponibles", - "availableDesc": "Explora e instala plugins del registro.", - "refresh": "Actualizar", - "loadingRegistry": "Cargando registro de plugins...", - "registryError": "Error al cargar el registro", - "installed": "Instalado", - "by": "por", - "platformNotSupported": "No disponible para tu plataforma", - "update": "Actualizar", - "install": "Instalar", - "upToDate": "Actualizado", - "downgrade": "Degradar a", - "olderVersions": "Versiones anteriores", - "noPlugins": "No hay plugins disponibles en el registro.", - "searchPlaceholder": "Buscar plugins…", - "filterAll": "Todos", - "filterInstalled": "Instalados", - "filterUpdates": "Actualizaciones", - "searchNoResults": "Ningún plugin coincide con la búsqueda.", - "requiresVersion": "Requiere Tabularis ≥ {{version}}", - "remove": "Eliminar", - "removeTitle": "Eliminar Plugin", - "confirmRemove": "¿Estás seguro de que deseas eliminar \"{{name}}\"? Los archivos del plugin serán eliminados.", - "installError": { - "title": "Instalación fallida", - "subtitle": "Ocurrió un error al instalar el plugin. Consulta los detalles a continuación.", - "details": "Detalles del error", - "copy": "Copiar", - "copied": "¡Copiado!" - }, - "startError": { - "title": "El Plugin no se pudo iniciar", - "subtitle": "No se pudo lanzar el proceso del plugin. Revisa los detalles del error.", - "interpreterHint": "Este plugin puede requerir un intérprete (p.ej. Python). Usa Configuración del Plugin para establecer la ruta del intérprete.", - "details": "Detalles del Error", - "copy": "Copiar", - "copied": "¡Copiado!", - "configure": "Configurar Intérprete" - }, - "pluginSettings": { - "title": "Configuración del Plugin", - "interpreter": "Intérprete", - "interpreterDesc": "Opcional. Especifica el ejecutable para iniciar este plugin (p.ej. python3 en macOS/Linux, python o ruta completa en Windows). Deja en blanco para usar el valor predeterminado.", - "interpreterPlaceholder": "p.ej. python3", - "browse": "Explorar...", - "fieldRequired": "{{label}} es obligatorio", - "saved": "Guardado", - "resetToDefault": "Restablecer predeterminado", - "builtin": { - "mysql": { - "maxAllowedPacket": { - "label": "Paquete Máximo Permitido", - "description": "Tamaño máximo de paquete usado por el conector MySQL." - }, - "socketTimeout": { - "label": "Tiempo de Espera del Socket", - "description": "Tiempo de espera del socket en milisegundos." - }, - "connectTimeout": { - "label": "Tiempo de Espera de Conexión", - "description": "Tiempo de espera de conexión en milisegundos." - }, - "timezone": { - "label": "Zona Horaria", - "description": "Zona horaria de sesión enviada a MySQL después de conectar." - } - } - } - } - }, - "shortcuts": { - "title": "Atajos de teclado", - "categories": { - "editor": "Editor", - "navigation": "Navegación", - "data_grid": "Cuadrícula de datos" - }, - "runQuery": "Ejecutar consulta", - "runQueryEditor": "Ejecutar consulta (en el editor)", - "tabSwitcher": "Cambiar pestaña", - "copySelection": "Copiar selección", - "toggleSidebar": "Mostrar/ocultar barra lateral", - "openConnections": "Abrir conexiones", - "newConnection": "Nueva conexión", - "newTab": "Nueva pestaña", - "closeTab": "Cerrar pestaña", - "nextPage": "Página siguiente", - "prevPage": "Página anterior", - "switchConnection": "Cambiar a conexión 1–9", - "resetToDefault": "Restablecer predeterminado", - "notOverridable": "Integrado, no personalizable", - "pressKeys": "Pulsa la combinación de teclas...", - "notebookRunAll": "Ejecutar Todas las Celdas", - "pasteImportClipboard": "Importar desde Portapapeles", - "quickNavigator": "Navegador rápido" - }, - "aiActivity": "Actividad IA" - }, - "update": { - "newVersionAvailable": "Nueva Versión Disponible", - "version": "Versión", - "releaseNotes": "Notas de la Versión", - "downloadAndInstall": "Descargar e Instalar", - "downloading": "Descargando...", - "installing": "Instalando...", - "installingMessage": "La aplicación se reiniciará automáticamente después de la instalación", - "viewOnGitHub": "Ver en GitHub", - "remindLater": "Recordar Después", - "upToDate": "Estás actualizado", - "updateAvailable": "La versión {{version}} está disponible", - "error": "Error de Actualización", - "managedByPackageManager": "Actualizaciones gestionadas por {{source}}", - "managedByPackageManagerDesc": "Usa tu gestor de paquetes para actualizar Tabularis." - }, - "ai": { - "explain": "Explicar", - "generateSql": "Generar SQL" - }, - "newConnection": { - "namePlaceholder": "Ingresa el nombre de tu conexión", - "nameRequired": "El nombre de la conexión es requerido", - "dbNameRequired": "El nombre de la base de datos es requerido", - "dbType": "Tipo de Base de Datos", - "host": "Host", - "port": "Puerto", - "username": "Usuario", - "password": "Contraseña", - "passwordPlaceholder": "Ingresa la contraseña", - "usernamePlaceholder": "Ingresa el nombre de usuario", - "filePath": "Ruta del Archivo", - "folderPath": "Ruta de la Carpeta", - "dbName": "Nombre de la Base de Datos", - "dbNamePlaceholder": "Nombre de la base de datos", - "loadDatabases": "Cargar Bases de Datos", - "loadingDatabases": "Cargando...", - "selectDatabases": "Bases de Datos", - "appearance": "Apariencia", - "noDatabasesSelected": "Selecciona al menos una base de datos", - "selectedDatabases": "{{count}} base(s) de datos seleccionada(s)", - "selectDatabase": "Selecciona una base de datos", - "noDatabasesFound": "No se encontraron bases de datos", - "failLoadDatabases": "Error al cargar las bases de datos. Verifica tus credenciales.", - "filePathPlaceholder": "/ruta/absoluta/db.sqlite", - "folderPathPlaceholder": "/ruta/absoluta/carpeta", - "browseFile": "Explorar archivo", - "browseFolder": "Explorar carpeta", - "useSsh": "Usar Túnel SSH", - "sshHost": "Host SSH", - "sshPort": "Puerto SSH", - "sshUser": "Usuario SSH", - "sshPassword": "Contraseña SSH", - "sshPasswordMissing": "Contraseña SSH faltante. Por favor, ingrésala de nuevo.", - "sshPasswordPlaceholder": "Ingresa la contraseña SSH", - "sshKeyFile": "Archivo de Clave SSH (Opcional)", - "sshKeyFilePlaceholder": "/ruta/a/id_rsa", - "sshKeyPassphrase": "Frase de Paso de Clave SSH (Opcional)", - "sshKeyPassphrasePlaceholder": "Ingresa la frase de paso si la clave está cifrada", - "saveKeychain": "Guardar contraseñas en el Llavero", - "testConnection": "Probar Conexión", - "save": "Guardar", - "failSave": "Error al guardar la conexión", - "selectSshConnection": "Seleccionar Conexión SSH", - "useSshConnection": "Usar Conexión SSH Existente", - "createInlineSsh": "Configurar SSH en Línea", - "manageSshConnections": "Gestionar Conexiones SSH", - "noSshConnections": "No hay conexiones SSH disponibles", - "sslMode": "Modo SSL", - "sslModes": { - "disable": "Desactivado", - "allow": "Permitir", - "prefer": "Preferido", - "require": "Requerido", - "verify-ca": "Verificar CA", - "verify-full": "Verificación completa" - }, - "chooseContext": "Elige un contexto...", - "chooseK8s": "Elige una conexión...", - "chooseNamespace": "Elige un namespace...", - "chooseResource": "Elige un recurso...", - "createInlineK8s": "En línea", - "k8sContext": "Contexto", - "k8sNamespace": "Namespace", - "k8sNotAvailable": "Kubernetes no está disponible para este controlador.", - "k8sPort": "Puerto del contenedor", - "k8sResourceName": "Nombre del recurso", - "k8sResourceType": "Tipo de recurso", - "k8sResourceTypePod": "Pod", - "k8sResourceTypeService": "Service", - "k8sSelectType": "Selecciona tipo...", - "manageK8s": "Gestionar", - "noK8sConnections": "No hay conexiones guardadas — crea una abajo", - "noK8sContexts": "No se encontraron contextos (¿está kubectl instalado?)", - "selectContextFirst": "Selecciona primero un contexto", - "selectK8sConnection": "Selecciona conexión de K8s", - "selectTypeFirst": "Selecciona primero contexto/namespace/tipo", - "useK8s": "Usar Port-Forward de Kubernetes", - "useK8sConnection": "Conexión guardada" - }, - "sshConnections": { - "title": "Conexiones SSH", - "createNew": "Crear Nueva Conexión SSH", - "noConnections": "No hay conexiones SSH configuradas", - "name": "Nombre de Conexión", - "namePlaceholder": "Mi Servidor SSH", - "authType": "Tipo de Autenticación", - "authTypePassword": "Contraseña", - "authTypeSshKey": "Clave SSH", - "edit": "Editar", - "delete": "Eliminar", - "save": "Guardar", - "update": "Actualizar", - "cancel": "Cancelar", - "confirmDelete": "¿Estás seguro de que deseas eliminar esta conexión SSH?", - "failSave": "Error al guardar la conexión SSH", - "failDelete": "Error al eliminar la conexión SSH", - "fillRequired": "Por favor, completa todos los campos requeridos", - "keyFile": "Archivo de clave", - "quickTest": "Prueba rápida de conexión", - "testFailed": "La prueba de conexión falló", - "savedInKeychain": "Contraseña guardada en el llavero del sistema" - }, - "dataGrid": { - "newRow": "NUEVA", - "noData": "No hay datos para mostrar", - "deleteRow": "Eliminar Fila", - "deleteRows_one": "Eliminar {{count}} filas", - "deleteRows_other": "Eliminar {{count}} filas", - "updateFailed": "Error en la actualización: ", - "null": "null", - "sortByAsc": "Ordenar por {{col}} ASC", - "sortByDesc": "Ordenar por {{col}} DESC", - "clearSort": "Quitar ordenamiento", - "copyCell": "Copiar Celda", - "copySelectedRows": "Copiar fila(s) seleccionada(s)", - "copyColumnName": "Copiar nombre de columna", - "copyColumnNameQuoted": "Copiar como `columna`", - "copyColumnNameTable": "Copiar como tabla.columna", - "copied": "Copiado al portapapeles", - "duplicateRow": "Duplicar Fila", - "setServerNow": "Insertar marca de tiempo actual", - "previewReferenced": "Vista previa del registro relacionado", - "openReferenced": "Abrir fila referenciada en {{table}}" - }, - "newRow": { - "title": "Nueva Fila", - "insert": "Insertar", - "cancel": "Cancelar", - "failInsert": "Error al insertar la fila: ", - "failLoad": "Error al cargar el esquema: ", - "loading": "Cargando...", - "selectValue": "Seleccionar Valor...", - "noOptions": "No se encontraron opciones", - "autoGenerated": "(Auto-generado)", - "required": "Requerido", - "primaryKey": "Clave Primaria", - "auto": "Auto" - }, - "editor": { - "noTabs": "No hay pestañas abiertas para esta conexión.", - "newConsole": "Nueva Consola", - "noActiveSession": "No hay sesión activa. Selecciona una conexión.", - "stop": "Detener", - "run": "Ejecutar", - "export": "Exportar", - "connected": "Conectado", - "disconnected": "Desconectado", - "newRow": "Nueva Fila", - "rowsRetrieved": "{{count}} filas obtenidas", - "autoPaginated": "Paginación automática", - "pageOf": "Página {{current}} de {{total}}", - "page": "Página {{current}}", - "jumpToPage": "Clic para ir a la página", - "loadRowCount": "Cargar conteo de filas", - "executePrompt": "Ejecuta una consulta para ver resultados", - "closeTab": "Cerrar Pestaña", - "closeOthers": "Cerrar Otras Pestañas", - "closeRight": "Cerrar Pestañas a la Derecha", - "closeLeft": "Cerrar Pestañas a la Izquierda", - "closeAll": "Cerrar Todas las Pestañas", - "saveQuery": "Guardar Consulta", - "saveThisQuery": "Guardar esta consulta", - "noValidQueries": "No se encontraron consultas válidas", - "queryFailed": "La consulta falló.", - "showErrorDetails": "Mostrar detalles", - "hideErrorDetails": "Ocultar detalles", - "errorBoundary": { - "title": "El editor falló inesperadamente", - "description": "Algo en el editor no pudo renderizarse. El error se muestra abajo — vuelve a intentarlo o regresa a tus conexiones.", - "retry": "Reintentar", - "closeCurrentTab": "Cerrar pestaña actual", - "backToConnections": "Volver a conexiones", - "showDetails": "Mostrar detalles técnicos" - }, - "newVisualQuery": "Nueva Consulta Visual", - "activeDatabase": "Base de datos activa", - "tabSwitcher": { - "title": "Pestañas Abiertas", - "hint": "Ctrl+Tab", - "tabs_one": "{{count}} pestaña", - "tabs_other": "{{count}} pestañas", - "escHint": "Esc para cerrar" - }, - "quickNavigator": { - "placeholder": "Buscar tablas, vistas, rutinas, triggers...", - "noResults": "No se encontraron elementos coincidentes", - "count_one": "1 elemento", - "count_other": "{{count}} elementos", - "navigationHint": "↑↓ para navegar, Enter para abrir", - "escHint": "Esc para cerrar", - "type_table": "tabla", - "type_view": "vista", - "type_routine": "rutina", - "type_trigger": "trigger", - "actions": { - "inspect": "Inspeccionar estructura", - "newConsole": "Nueva consola", - "generateSql": "Generar plantillas SQL", - "countRows": "Contar filas", - "query": "Ejecutar consulta SELECT", - "copyName": "Copiar nombre" - } - }, - "submitChanges": "Enviar Cambios", - "rollbackChanges": "Revertir Cambios", - "applyToAll": "Aplicar a todo", - "executingQuery": "Ejecutando consulta...", - "exporting": "Exportando...", - "rowsProcessed": "Filas Procesadas", - "queryParameters": "Parámetros de Consulta", - "convertToConsole": "Convertir a Consola", - "parameters": "Parámetros", - "paramValuePlaceholder": "Valor (ej. 'texto' o 123)", - "newNotebook": "Nuevo Notebook", - "visualExplain": { - "title": "Visual Explain", - "buttonShort": "Plan de Query", - "loading": "Ejecutando EXPLAIN...", - "planningTime": "Planificacion", - "executionTime": "Ejecucion", - "totalCost": "Costo Total", - "estRows": "Filas Est.", - "actualRows": "Filas Reales", - "cost": "Costo", - "time": "Tiempo", - "loops": "Ciclos", - "filter": "Filtro", - "indexCondition": "Cond. Indice", - "relation": "Tabla", - "nodeType": "Operacion", - "rawOutput": "Salida Sin Procesar", - "analyze": "Analizar", - "analyzeWarning": "ANALYZE ejecuta la consulta. Usar con precaucion en instrucciones que modifican datos.", - "notExplainable": "EXPLAIN solo es compatible con instrucciones DML (SELECT, INSERT, UPDATE, DELETE). Las instrucciones DDL como CREATE, DROP o ALTER no se pueden analizar.", - "contextMenuExplain": "Plan de Query", - "rerun": "Reejecutar", - "close": "Cerrar", - "graphView": "Grafo", - "tableView": "Tabla", - "general": "General", - "analyzeData": "Datos Analyze", - "extraDetails": "Extra", - "selectNode": "Selecciona un nodo para ver detalles", - "buffersHit": "Buffers Hit", - "buffersRead": "Buffers Leidos", - "joinType": "Tipo Join", - "hashCondition": "Cond. Hash", - "topIssues": "Puntos Criticos", - "noIssues": "No se detectaron problemas importantes en el resumen actual del plan.", - "highestCost": "Costo Mas Alto", - "slowestStep": "Paso Mas Lento", - "largestEstimateGap": "Desviacion de Estimacion", - "overEstimate": "Las filas reales superan la estimacion", - "underEstimate": "La estimacion supera las filas reales", - "sequentialScans": "Escaneos Secuenciales", - "tempOperations": "Operaciones Temp o Sort", - "scanOperations": "Se detectaron operaciones con mucho escaneo", - "sortOrTempOperations": "Se detecto trabajo temporal o de ordenacion", - "driverNotes": "Notas del Driver", - "overview": "Resumen", - "showOverview": "Mostrar resumen", - "hideOverview": "Ocultar resumen", - "postgresAnalyzeLegend1": "PostgreSQL ANALYZE incluye filas reales, tiempos, bucles y contadores de buffer cuando estan disponibles.", - "postgresAnalyzeLegend2": "Las grandes diferencias entre estimacion y realidad suelen indicar estadisticas desactualizadas o predicados dificiles de modelar.", - "postgresEstimateLegend1": "PostgreSQL sin ANALYZE muestra solo estimaciones del planner.", - "postgresEstimateLegend2": "Activa ANALYZE para inspeccionar filas reales, tiempos, bucles y buffers.", - "mysqlAnalyzeLegend1": "MySQL y MariaDB exponen metricas reales solo en variantes compatibles de EXPLAIN ANALYZE o ANALYZE FORMAT.", - "mysqlAnalyzeLegend2": "Los servidores mas antiguos pueden volver a planes estimados con menos metricas.", - "mysqlEstimateLegend1": "MySQL y MariaDB pueden volver a EXPLAIN FORMAT=JSON o al EXPLAIN tabular segun la version del servidor.", - "mysqlEstimateLegend2": "Si falta el tiempo, es probable que el servidor devolviera un plan solo estimado.", - "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN es ligero y principalmente estructural.", - "sqliteLegend2": "Costo, tiempo y estimaciones de filas suelen no estar disponibles como en PostgreSQL y MySQL.", - "aiAnalysis": "Analisis IA", - "aiAnalysisTitle": "Analisis IA del Plan de Ejecucion", - "aiAnalyzing": "Analizando plan de ejecucion con IA...", - "aiConfigRequired": "Proveedor de IA no configurado. Ve a Configuracion > IA." - }, - "notebook": { - "addSqlCell": "Agregar Celda SQL", - "addMarkdownCell": "Agregar Celda Markdown", - "addCell": "Añadir", - "runAll": "Ejecutar Todo", - "runAllTooltip": "Ejecutar todas las celdas SQL de arriba a abajo", - "runCell": "Ejecutar Celda", - "deleteCell": "Eliminar Celda", - "moveCellUp": "Mover Arriba", - "moveCellDown": "Mover Abajo", - "export": "Exportar Notebook", - "import": "Importar Notebook", - "emptyNotebook": "Este notebook está vacío. Agrega una celda para comenzar.", - "markdownPlaceholder": "Escribe Markdown aquí...", - "togglePreview": "Vista Previa", - "sqlCell": "SQL", - "markdownCell": "Markdown", - "invalidFile": "Formato de archivo notebook no válido", - "importSuccess": "Notebook importado exitosamente", - "exportSuccess": "Notebook exportado exitosamente", - "cellResult_one": "{{count}} filas · {{time}}ms", - "cellResult_other": "{{count}} filas · {{time}}ms", - "stopOnError": "Detener en Error", - "stopOnErrorTooltip": "Detener la ejecución cuando una celda falla", - "runAllComplete": "Ejecución Completada", - "succeeded": "exitosas", - "failed": "fallidas", - "skipped": "omitidas", - "toggleChart": "Mostrar/Ocultar Gráfico", - "chartType": "Gráfico", - "chartLabel": "Etiqueta", - "chartValues": "Valores", - "exportCsv": "Exportar como CSV", - "exportJson": "Exportar como JSON", - "exportHtml": "Exportar como HTML", - "parameters": "Parámetros", - "paramName": "nombre", - "paramValue": "valor", - "invalidParamName": "Nombre de parámetro no válido", - "parallelExecution": "Ejecución Paralela (Ejecutar Todo)", - "executionHistory": "Historial de Ejecución", - "noHistory": "Sin historial de ejecución", - "collapseCell": "Contraer Celda", - "expandCell": "Expandir Celda", - "collapseAll": "Contraer Todo", - "expandAll": "Expandir Todo", - "outline": "Esquema", - "cellNamePlaceholder": "Sin nombre", - "editCellName": "Editar nombre de celda", - "aiGenerateName": "Generar nombre con IA", - "generatingName": "Generando nombre...", - "aiGenerateOutlineNames": "Generar nombres para celdas sin nombre con IA", - "undo": "Deshacer", - "redo": "Rehacer", - "history": { - "title": "Historial de ediciones", - "change": { - "initial": "Versión inicial", - "editCell": "Celda {{n}} editada", - "addSql": "Celda SQL {{n}} añadida", - "addMarkdown": "Celda Markdown {{n}} añadida", - "deleteCell": "Celda {{n}} eliminada", - "reorder": "Celdas reordenadas", - "renameCell": "Celda {{n}} renombrada", - "schemaCell": "Base de datos cambiada (celda {{n}})", - "chartCell": "Gráfico cambiado (celda {{n}})", - "parallelCell": "Paralelo alternado (celda {{n}})", - "collapse": "Celdas contraídas/expandidas", - "params": "Parámetros cambiados", - "stopOnError": "Detener en error alternado", - "other": "Notebook editado" - } - } - }, - "querySelection": { - "title": "Seleccionar consulta a ejecutar", - "queriesFound_one": "{{count}} consultas encontradas", - "queriesFound_other": "{{count}} consultas encontradas", - "runAll": "Ejecutar todas", - "runSelected": "Ejecutar seleccionadas ({{count}})", - "runSingle": "Ejecutar esta consulta", - "selectAll": "Seleccionar todas", - "deselectAll": "Deseleccionar todas" - }, - "explainSelection": { - "title": "Seleccionar consulta a analizar", - "queriesFound_one": "{{count}} consultas analizables encontradas", - "queriesFound_other": "{{count}} consultas analizables encontradas", - "explainSingle": "Analizar esta consulta", - "explainFocused": "analizar seleccionada", - "explainNth": "analizar N-esima", - "cancel": "cancelar" - }, - "multiResult": { - "rerun": "Reejecutar consulta", - "close": "Cerrar pestaña", - "rename": "Renombrar", - "aiGenerateName": "Generar nombre con IA", - "generatingName": "Generando nombre...", - "viewTabs": "Vista en pestañas", - "viewStacked": "Vista apilada", - "queryPrefix": "Consulta", - "results": "Resultados", - "collapseAll": "Contraer todo", - "expandAll": "Expandir todo" - } - }, - "createTable": { - "title": "Crear Nueva Tabla", - "tableName": "Nombre de Tabla", - "tableNamePlaceholder": "ej. usuarios, pedidos, productos", - "columns": "Columnas", - "addColumn": "Agregar Columna", - "colName": "Nombre", - "colType": "Tipo", - "colLen": "Long", - "colPk": "PK", - "colNn": "NN", - "colAi": "AI", - "colDefault": "Predeterminado", - "create": "Crear Tabla", - "cancel": "Cancelar", - "nameRequired": "El nombre de la tabla es requerido", - "colRequired": "Se requiere al menos una columna", - "failCreate": "Error al crear la tabla: ", - "requiresExtension": "Requiere extensión: {{ext}}" - }, - "schema": { - "title": "Esquema: {{table}}", - "loading": "Cargando esquema...", - "colName": "Nombre", - "colType": "Tipo", - "colNullable": "Nullable", - "colKey": "Clave", - "yes": "SÍ", - "no": "NO" - }, - "generateSQL": { - "title": "SQL Generado: {{table}}", - "loading": "Generando SQL...", - "runInConsole": "Ejecutar en consola", - "copy": "Copiar SQL", - "copied": "¡Copiado!", - "tabCreateTable": "Crear Tabla", - "tabSelectAll": "Select *", - "tabSelectFields": "Select [campos]", - "tabUpdate": "Update", - "tabDelete": "Delete" - }, - "modifyColumn": { - "titleAdd": "Agregar Columna", - "titleEdit": "Modificar Columna", - "sqliteWarn": "SQLite solo soporta renombrar columnas. Otras modificaciones requieren recrear la tabla manualmente.", - "name": "Nombre", - "type": "Tipo", - "length": "Longitud", - "default": "Valor Predeterminado", - "notNull": "Not Null", - "primaryKey": "Clave Primaria", - "autoInc": "Auto Incremento", - "sqlPreview": "Vista Previa SQL", - "save": "Guardar Cambios", - "add": "Agregar Columna", - "cancel": "Cancelar", - "nameRequired": "El nombre de la columna es requerido", - "fail": "Error: ", - "pkNotSupported": "Este driver solo soporta claves primarias en la creación de la tabla", - "requiresExtension": "Requiere extensión: {{ext}}" - }, - "createIndex": { - "title": "Crear Índice", - "name": "Nombre del Índice", - "columns": "Columnas", - "unique": "Índice Único", - "sqlPreview": "Vista Previa SQL", - "create": "Crear Índice", - "cancel": "Cancelar", - "nameRequired": "El nombre del índice es requerido", - "colRequired": "Se debe seleccionar al menos una columna" - }, - "createFk": { - "title": "Crear Clave Foránea", - "name": "Nombre FK (Opcional)", - "column": "Columna Local", - "refTable": "Tabla Referenciada", - "refColumn": "Columna Referenciada", - "onDelete": "Al Eliminar", - "onUpdate": "Al Actualizar", - "sqlPreview": "Vista Previa SQL", - "create": "Crear Clave Foránea", - "cancel": "Cancelar" - }, - "healthCheck": { - "title": "Conexión Perdida", - "connectionLost": "Se ha perdido una conexión a la base de datos" - }, - "erDiagram": { - "enterFullscreen": "Pantalla Completa", - "exitFullscreen": "Salir de Pantalla Completa", - "noConnection": "Sin ID de Conexión", - "noConnectionDesc": "No se puede mostrar el diagrama sin un ID de conexión.", - "switchToVertical": "Cambiar a Diseño Vertical", - "switchToHorizontal": "Cambiar a Diseño Horizontal", - "vertical": "Vertical", - "horizontal": "Horizontal", - "showAllTables": "Mostrar Todas las Tablas", - "showAll": "Mostrar Todo", - "focusedOn": "Enfocado en", - "focusOnTable": "Enfocar en Tabla" - }, - "views": { - "createView": "Crear Vista", - "editView": "Editar Vista", - "createSubtitle": "Crear una nueva vista de base de datos", - "editSubtitle": "Editando vista: {{name}}", - "viewName": "Nombre de Vista", - "viewNamePlaceholder": "ej. usuarios_activos, resumen_pedidos", - "viewDefinition": "Definición de Vista (SQL)", - "preview": "Vista Previa", - "runPreview": "Ejecutar Vista Previa", - "previewEmpty": "Haz clic en 'Ejecutar Vista Previa' para ver resultados", - "moreRows": "+{{count}} filas más", - "create": "Crear Vista", - "save": "Guardar Cambios", - "nameRequired": "El nombre de la vista es requerido", - "definitionRequired": "La definición de la vista es requerida", - "failLoadDefinition": "Error al cargar la definición de la vista: ", - "previewError": "Error en la vista previa: ", - "createSuccess": "Vista creada correctamente", - "alterSuccess": "Vista actualizada correctamente", - "saveError": "Error al guardar la vista: ", - "confirmAlter": "¿Estás seguro de que deseas modificar la vista \"{{view}}\"?" - }, - "dump": { - "title": "Exportar Base de Datos", - "dumpDatabase": "Exportar Base de Datos", - "importDatabase": "Ejecutar Archivo SQL...", - "importTitle": "Importar Base de Datos", - "includeStructure": "Estructura (DDL)", - "includeData": "Datos (INSERT)", - "selectTables": "Seleccionar Tablas", - "selectAll": "Seleccionar Todo", - "deselectAll": "Deseleccionar Todo", - "export": "Exportar", - "success": "Base de datos exportada correctamente", - "failure": "Error en la exportación: ", - "errorNoOption": "Selecciona al menos Estructura o Datos", - "errorNoTables": "Selecciona al menos una tabla", - "importSuccess": "Archivo SQL ejecutado correctamente", - "importFailure": "Error en la importación: ", - "importCancelled": "Importación cancelada", - "importFailed": "Importación fallida", - "importingFrom": "Importando desde", - "statementsExecuted": "{{count}} / {{total}} sentencias", - "confirmImport": "¿Estás seguro de que deseas importar \"{{file}}\"?\nEsto podría sobrescribir los datos existentes.", - "elapsedTime": "Tiempo transcurrido" - }, - "geometryInput": { - "sqlMode": "Modo SQL", - "wktMode": "Modo WKT", - "sqlHelper": "Ingrese una función SQL completa (ej: ST_GeomFromText('POINT(30 40)', 4326))", - "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", - "wktPlaceholder": "POINT(30 40)", - "toggleTooltip": "Funciones SQL" - }, - "jsonInput": { - "placeholder": "Ingrese JSON...", - "format": "Formatear", - "valid": "JSON válido", - "invalid": "JSON no válido", - "mode": { - "code": "Código", - "tree": "Árbol", - "raw": "Sin formato" - }, - "expand": "Expandir", - "search": "Buscar" - }, - "jsonViewer": { - "close": "Cerrar", - "save": "Guardar" - }, - "jsonCell": { - "expand": "Expandir/contraer árbol JSON", - "openViewer": "Abrir visor JSON" - }, - "rowEditor": { - "title": "Editar Fila", - "subtitle": "Fila #{{row}}", - "enterValue": "Ingresar valor..." - }, - "contextMenu": { - "openSidebar": "Abrir Barra Lateral", - "openJsonEditor": "Abrir en el editor JSON" - }, - "blobInput": { - "noData": "Sin datos BLOB", - "uploadFile": "Subir Archivo", - "download": "Descargar", - "delete": "Eliminar", - "truncatedWarning": "Solo vista previa - datos completos no cargados", - "downloadDisabledTruncated": "Descarga no disponible - solo vista previa cargada", - "downloading": "Descargando...", - "uploading": "Subiendo...", - "openSidebar": "Abrir en el editor", - "imagePreview": "Vista previa de imagen" - }, - "visualExplainPage": { - "title": "Visual Explain", - "noFile": "Ningún archivo cargado", - "openFile": "Abrir archivo", - "reload": "Recargar", - "loading": "Cargando el plan de ejecución…", - "emptyHint": "Selecciona un archivo con un plan EXPLAIN (formato JSON o texto de PostgreSQL) para visualizarlo." - }, - "taskManager": { - "header": { - "title": "Administrador de Tareas", - "subtitle": "Procesos de complementos y recursos del sistema", - "description": "Monitoriza los procesos de complementos, CPU, RAM y uso de disco en tiempo real", - "open": "Abrir Administrador de Tareas", - "refresh": "Actualizar" - }, - "killModal": { - "title": "Forzar Cierre del Proceso", - "subtitle": "Esta acción no se puede deshacer inmediatamente", - "descriptionBefore": "Cerrar", - "descriptionAfter": "detendrá forzosamente su proceso. Todas las conexiones de base de datos activas que usen este complemento dejarán de funcionar hasta que se reinicie el complemento.", - "warning": "Las consultas activas y las conexiones a través de este complemento serán interrumpidas.", - "cancel": "Cancelar", - "confirm": "Forzar Cierre" - }, - "systemResources": { - "title": "Recursos del Sistema", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Lectura Disco/s", - "diskWrite": "Escritura Disco/s", - "processCount_one": "{{count}} proceso del sistema en ejecución", - "processCount_other": "{{count}} procesos del sistema en ejecución" - }, - "tabularisProcess": { - "title": "Proceso Tabularis", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Lectura Disco/s", - "diskWrite": "Escritura Disco/s", - "childCount_one": "{{count}} proceso hijo", - "childCount_other": "{{count}} procesos hijos", - "noChildren": "Sin procesos hijos", - "treeTotal": "Total árbol: {{size}}", - "treeTotalTooltip": "Suma de RSS del árbol de procesos — puede sobreestimar la memoria compartida", - "loadingProcesses": "Cargando procesos…", - "colPid": "PID", - "colName": "Nombre", - "colCpu": "CPU", - "colRam": "RAM", - "refresh": "Actualizar" - }, - "pluginProcesses": { - "title": "Procesos de Complementos", - "loading": "Cargando procesos…", - "empty": "No hay procesos de complementos en ejecución", - "emptyHint": "Instala y activa complementos para verlos aquí", - "colPlugin": "Complemento", - "colPid": "PID", - "colCpu": "CPU", - "colRam": "RAM", - "colDiskRw": "Disco L/E", - "colStatus": "Estado", - "colActions": "Acciones", - "restart": "Reiniciar", - "kill": "Terminar", - "collapseChildren": "Contraer procesos hijos", - "childCount_one": "{{count}} proceso hijo", - "childCount_other": "{{count}} procesos hijos", - "childProcess": "proceso hijo", - "status": { - "running": "en ejecución", - "stopped": "detenido", - "unknown": "desconocido" - } - } - }, - "queryModal": { - "database": "Base de datos", - "noDatabase": "Sin base de datos" - }, - "clipboardImport": { - "title": "Importar desde Portapapeles", - "subtitle": "Pega datos estructurados y revisa el esquema antes de importar", - "selectTablePlaceholder": "Seleccionar una tabla...", - "contextMenuLabel": "Importar desde Portapapeles...", - "firstRowHeader": "Primera fila como encabezado", - "tableName": "Nombre de tabla", - "tableNamePlaceholder": "ej. datos_ventas", - "aiSuggest": "Sugerir con IA", - "tableExists": "Ya existe", - "mode": "Modo", - "createNew": "Crear nueva tabla", - "appendTo": "Agregar a existente", - "onConflict": "Si existe", - "conflictFail": "Error", - "conflictAppend": "Agregar filas", - "conflictReplace": "Reemplazar tabla", - "schemaPreview": "Esquema de Columnas", - "dataPreview": "Vista Previa de Datos", - "sample": "Valores de muestra", - "lowConfidence": "Tipos mixtos detectados, por defecto TEXT", - "rowsTotal_one": "{{count}} filas", - "rowsTotal_other": "{{count}} filas", - "showingFirst": "primeras {{count}}", - "import_one": "Importar {{count}} filas", - "import_other": "Importar {{count}} filas", - "importing": "Importando...", - "success_one": "{{count}} filas importadas en \"{{table}}\"", - "success_other": "{{count}} filas importadas en \"{{table}}\"", - "tableCreated": "Nueva tabla creada", - "openTable": "Cerrar", - "noData": "No hay datos en el portapapeles", - "retry": "Reintentar", - "warningsCount_one": "{{count}} avisos de análisis", - "warningsCount_other": "{{count}} avisos de análisis", - "columnsLabel": "columnas", - "rowsLabel": "filas", - "stepConfigure": "Configurar destino", - "stepReview": "Revisar y ajustar", - "modeCreateHint": "Se creará una nueva tabla", - "modeAppendHint": "Las filas se añadirán a una tabla existente", - "maximize": "Maximizar", - "minimize": "Minimizar", - "nSelected": "{{count}} seleccionadas", - "deleteSelected": "Eliminar seleccionadas", - "deleteColumn": "Eliminar columna", - "sourceColumn": "Columna del portapapeles", - "targetColumn": "Columna destino", - "targetColumnPlaceholder": "Elegir destino...", - "skipColumn": "Omitir (no importar)", - "createNewColumn": "Crear nueva columna" - }, - "aiActivity": { - "title": "Actividad IA", - "description": "Registro de cada llamada MCP y de las consultas pendientes de aprobación. Almacenado localmente.", - "tabs": { - "events": "Eventos", - "sessions": "Sesiones" - }, - "empty": "Sin actividad MCP registrada.", - "eventsCount_one": "{{count}} evento", - "eventsCount_other": "{{count}} eventos", - "blockedCount_one": "{{count}} bloqueado", - "blockedCount_other": "{{count}} bloqueados", - "errorsCount_one": "{{count}} error", - "errorsCount_other": "{{count}} errores", - "sessionsCount_one": "{{count}} sesión", - "sessionsCount_other": "{{count}} sesiones", - "events": "Eventos", - "runQueries": "Consultas", - "connections": "Conexiones", - "client": "Cliente", - "rowsReturned": "Filas devueltas", - "approvalId": "ID aprobación", - "searchQuery": "Buscar en la consulta…", - "allTools": "Todas las herramientas", - "allStatuses": "Todos los estados", - "clearAll": "Limpiar", - "clearConfirm": "¿Borrar todo el historial de actividad IA? Esta acción es irreversible.", - "exportNotebook": "Exportar como Notebook", - "exportSuccess": "Exportado a {{path}}", - "viewDetails": "Ver detalles", - "copyQuery": "Copiar consulta", - "openVisualExplain": "Abrir en Visual Explain", - "copied": "Copiado al portapapeles", - "detailTitle": "Detalles del evento", - "col": { - "timestamp": "Hora", - "tool": "Herramienta", - "connection": "Conexión", - "query": "Consulta", - "kind": "Tipo", - "duration": "Duración", - "status": "Estado", - "actions": "Acciones" - }, - "sort": { - "sortBy": "Ordenar por {{field}}", - "sortByPlaceholder": "Ordenar por…", - "toggleAscending": "Orden ascendente", - "toggleDescending": "Orden descendente", - "ascending": "Asc", - "descending": "Desc", - "started": "Inicio", - "eventCount": "Eventos", - "runQueries": "Consultas ejecutadas" - }, - "searchSessions": "Buscar sesión, cliente, conexión…", - "filteredFrom": "de {{total}}", - "noMatches": "Ninguna sesión coincide con los filtros.", - "status": { - "success": "Éxito", - "blocked_readonly": "Bloqueada (solo lectura)", - "blocked_pending_approval": "Pendiente", - "denied": "Denegada", - "error": "Error", - "timeout": "Tiempo agotado" - }, - "queryKind": { - "select": "Lectura", - "write": "Escritura", - "ddl": "DDL", - "unknown": "Desconocido" - } - }, - "aiApproval": { - "title": "La IA quiere ejecutar una escritura en la base de datos", - "subtitle": "En {{connection}} — revisa y decide antes de ejecutar.", - "subtitleWithClient": "{{client}} en {{connection}} — revisa y decide antes de ejecutar.", - "query": "Consulta", - "editQuery": "Editar antes de aprobar", - "lockQuery": "Bloquear consulta", - "preflightPlan": "Plan de ejecución previo", - "expandPlan": "Expandir", - "collapsePlan": "Contraer", - "explainUnavailable": "EXPLAIN no disponible para esta consulta.", - "explainFailed": "EXPLAIN falló: {{error}}", - "reasonLabel": "Razón (opcional)", - "reasonPlaceholder": "ej. Parece arriesgada en prod, confirma…", - "approve": "Aprobar", - "deny": "Denegar" - }, - "discordCallout": { - "title": "¡Nueva comunidad Discord!", - "body": "Acabamos de abrir una comunidad dedicada a Tabularis: pide ayuda, comparte trucos y da forma al roadmap.", - "cta": "Únete ahora", - "dismiss": "Cerrar" - }, - "k8sConnections": { - "title": "Conexiones de Kubernetes", - "add": "Añadir", - "empty": "No hay conexiones de Kubernetes guardadas. Haz clic en \"Añadir\" para crear una.", - "name": "Nombre", - "namePlaceholder": "Mi clúster de K8s", - "context": "Contexto", - "chooseContext": "Elige un contexto...", - "namespace": "Namespace", - "chooseNamespace": "Elige un namespace...", - "resourceType": "Tipo de recurso", - "resourceTypeService": "Service", - "resourceTypePod": "Pod", - "resourceName": "Nombre del recurso", - "chooseResource": "Elige un recurso...", - "port": "Puerto del contenedor", - "test": "Probar", - "testing": "Probando...", - "errors": { - "nameRequired": "El nombre de la conexión es obligatorio", - "contextRequired": "El contexto de Kubernetes es obligatorio", - "namespaceRequired": "El namespace es obligatorio", - "resourceTypeInvalid": "El tipo de recurso debe ser \"service\" o \"pod\"", - "resourceNameRequired": "El nombre del recurso es obligatorio", - "portInvalid": "El puerto debe estar entre 1 y 65535" - } - } -} diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json deleted file mode 100644 index 7c71dc27..00000000 --- a/src/i18n/locales/fr.json +++ /dev/null @@ -1,1450 +0,0 @@ -{ - "toolbar": { - "filters": "Filtres", - "toggleFilterPanel": "Afficher/masquer le panneau de filtres structurés", - "filterConditions": "Conditions de filtre", - "activeOf": "{{active}} sur {{total}} actifs", - "noFilters": "Aucun filtre —", - "addFirstFilter": "ajouter le premier filtre", - "noActiveFilters": "aucun filtre actif", - "closePanelEsc": "Fermer le panneau de filtres (ESC)", - "unset": "Non défini", - "sql": "SQL", - "addFilter": "Ajouter un filtre", - "applyAll": "Tout appliquer", - "apply": "Appliquer", - "applied": "Appliqué", - "switchToSql": "Basculer vers le champ SQL WHERE", - "duplicateFilter": "Dupliquer le filtre", - "removeFilter": "Supprimer le filtre", - "deselectFromApplyAll": "Désélectionner de Tout appliquer", - "selectForApplyAll": "Sélectionner pour Tout appliquer", - "valuePlaceholder": "valeur", - "fromPlaceholder": "de", - "toPlaceholder": "à" - }, - "common": { - "save": "Enregistrer", - "close": "Fermer", - "cancel": "Annuler", - "delete": "Supprimer", - "edit": "Modifier", - "loading": "Chargement...", - "search": "Rechercher...", - "noResults": "Aucun résultat trouvé", - "error": "Erreur", - "success": "Succès", - "ok": "OK" - }, - "sidebar": { - "connections": "Connexions", - "settings": "Paramètres", - "savedQueries": "Requêtes enregistrées", - "tables": "Tables", - "newConsole": "Nouvelle console", - "newVisualQuery": "Nouvelle requête visuelle", - "refresh": "Actualiser", - "refreshTables": "Actualiser les tables", - "refreshViews": "Actualiser les vues", - "createView": "Créer une nouvelle vue", - "views": "Vues", - "noViews": "Aucune vue trouvée", - "editView": "Modifier la vue", - "viewDefinition": "Définition de la vue", - "dropView": "Supprimer la vue", - "dropViewConfirm": "Voulez-vous vraiment supprimer la vue \"{{view}}\" ?", - "failGetViewDefinition": "Échec de récupération de la définition de la vue : ", - "failDropView": "Échec de suppression de la vue : ", - "explorer": "Explorateur", - "sqlEditor": "Éditeur SQL", - "loadingSchema": "Chargement du schéma...", - "noSavedQueries": "Aucune requête enregistrée", - "searchFavorites": "Rechercher dans les favoris...", - "noFavoritesSearchResults": "Aucun favori ne correspond à votre recherche", - "execute": "Exécuter", - "edit": "Modifier", - "delete": "Supprimer", - "confirmDeleteQuery": "Voulez-vous vraiment supprimer la requête \"{{name}}\" ?", - "confirmDeleteTitle": "Supprimer la requête", - "noTables": "Aucune table trouvée", - "columns": "colonnes", - "keys": "clés", - "foreignKeys": "clés étrangères", - "indexes": "index", - "deleteColumn": "Supprimer la colonne", - "deleteColumnConfirm": "Voulez-vous vraiment supprimer la colonne \"{{column}}\" de la table \"{{table}}\" ?\n\nATTENTION : toutes les données de cette colonne seront définitivement supprimées. Cette action est irréversible.", - "failDeleteColumn": "Échec de suppression de la colonne : ", - "failDeleteIndex": "Échec de suppression de l’index : ", - "modifyColumn": "Modifier la colonne", - "copyName": "Copier le nom", - "openInEditor": "Ouvrir dans l’éditeur", - "closePanel": "Fermer le panneau", - "setAsActive": "Définir comme actif", - "deleteTable": "Supprimer la table", - "deleteTableConfirm": "Voulez-vous vraiment supprimer la table \"{{table}}\" ?", - "failDeleteTable": "Échec de suppression de la table : ", - "showData": "Afficher les données", - "countRows": "Compter les lignes", - "viewSchema": "Afficher le schéma", - "viewERDiagram": "Afficher le diagramme ER", - "generateSQL": "Générer le SQL", - "addColumn": "Ajouter une colonne", - "addIndex": "Ajouter un index", - "deleteIndex": "Supprimer l’index", - "deleteIndexConfirm": "Supprimer l’index \"{{name}}\" ?", - "addFk": "Ajouter une clé étrangère", - "deleteFk": "Supprimer la clé étrangère", - "deleteFkConfirm": "Supprimer la clé étrangère \"{{name}}\" ?", - "sqliteFkError": "SQLite ne prend pas en charge la suppression des clés étrangères via ALTER TABLE.", - "mcpServer": "Serveur MCP", - "routines": "Routines", - "functions": "Fonctions", - "procedures": "Procédures", - "noRoutines": "Aucune routine trouvée", - "refreshRoutines": "Actualiser les routines", - "objectSummary": "Objets", - "databases": "Bases de données", - "failGetRoutineDefinition": "Échec de récupération de la définition de la routine : ", - "schemas": "Schémas", - "noSchemas": "Aucun schéma trouvé", - "loadingSchemas": "Chargement des schémas...", - "schemaLoadError": "Échec du chargement des schémas", - "errorDetails": "Détails", - "copyError": "Copier le message d’erreur", - "retry": "Réessayer", - "expandExplorer": "Développer l’explorateur", - "selectSchemas": "Sélectionner les schémas", - "selectSchemasHint": "Sélectionnez les schémas à charger :", - "selectAll": "Tout sélectionner", - "deselectAll": "Tout désélectionner", - "confirmSelection": "Confirmer", - "editSchemas": "Modifier les schémas", - "selectConnection": "Sélectionner la connexion", - "disconnect": "Déconnecter", - "switchConnection": "Changer de connexion", - "noOtherConnections": "Aucune autre connexion", - "openConnections": "Ouvertes", - "availableConnections": "Disponibles", - "splitVertical": "Diviser verticalement", - "splitHorizontal": "Diviser horizontalement", - "separateConnections": "Séparer les connexions", - "splitGroup": "Diviser le groupe", - "filterTables": "Filtrer les tables...", - "noTablesMatch": "Aucune table correspondante", - "filterDatabases": "Filtrer les bases de données...", - "manageDatabases": "Gérer les bases de données", - "structure": "Structure", - "favorites": "Favoris", - "queryHistory": "Historique", - "noQueryHistory": "Aucun historique de requêtes", - "noHistorySearchResults": "Aucune requête ne correspond à votre recherche", - "searchHistory": "Rechercher dans l’historique...", - "clearAllHistory": "Effacer tout l’historique", - "historyRecoveredTitle": "Historique des requêtes réinitialisé", - "historyRecoveredBody": "Le fichier d’historique était corrompu et a été mis de côté. Les nouvelles requêtes seront enregistrées normalement. Fichier de sauvegarde :", - "historyRecoveredDismiss": "Fermer", - "confirmDeleteHistoryEntry": "Voulez-vous vraiment supprimer cette requête de l’historique ?", - "confirmClearHistory": "Voulez-vous vraiment effacer tout l’historique des requêtes pour cette connexion ?", - "confirmClearHistoryTitle": "Effacer l’historique des requêtes", - "addToFavorites": "Ajouter aux favoris", - "insertToEditor": "Insérer dans l’éditeur", - "openInNewTab": "Ouvrir dans un nouvel onglet", - "copyQuery": "Copier la requête", - "runQuery": "Exécuter la requête", - "dateGroupToday": "Aujourd’hui", - "dateGroupYesterday": "Hier", - "dateGroupThisWeek": "Cette semaine", - "dateGroupThisMonth": "Ce mois-ci", - "dateGroupOlder": "Plus ancien", - "notebooks": { - "tab": "Notebooks", - "search": "Rechercher des notebooks", - "refresh": "Actualiser", - "empty": "Aucun notebook enregistré pour le moment.", - "noSearchResults": "Aucun notebook ne correspond à votre recherche.", - "open": "Ouvrir", - "rename": "Renommer", - "delete": "Supprimer", - "deleteConfirm": "Supprimer le notebook « {{title}} » ? Cette action est irréversible.", - "renamePlaceholder": "Nom du notebook" - } - }, - "mcp": { - "title": "Intégration du serveur MCP", - "subtitle": "Connectez Tabularis à Claude Desktop, Cursor et plus encore", - "description": "Le Model Context Protocol (MCP) permet aux assistants IA (comme Claude) de se connecter à vos outils locaux. Tabularis expose un serveur MCP permettant à l’IA de lire le schéma de votre base de données et d’exécuter des requêtes en toute sécurité.", - "checking": "Vérification de la configuration...", - "notFound": "Fichier de configuration introuvable (à créer manuellement)", - "installed": "Installé", - "install": "Installer la configuration", - "manualConfig": "CONFIGURATION MANUELLE", - "manualText": "Ajoutez ceci manuellement au fichier de configuration de votre client si l’installation automatique échoue.", - "successTitle": "Succès", - "successMsg": "Configuration installée avec succès pour {{client}} ! Redémarrez l’application pour l’appliquer.", - "errorTitle": "Échec de l’installation", - "clients": "CLIENTS IA", - "manualCommand": "COMMANDE MANUELLE", - "manualCommandText": "Exécutez cette commande dans votre terminal, puis redémarrez Claude Code.", - "tabs": { - "setup": "Configuration", - "activity": "Activité", - "safety": "Sécurité" - }, - "safety": { - "readOnlyTitle": "Mode lecture seule", - "readOnlyDefault": "Mettre toutes les requêtes MCP en lecture seule", - "readOnlyDefaultDesc": "Bloquer tout statement non-SELECT via MCP, sauf pour les connexions autorisées ci-dessous.", - "readOnlyList": "Connexions en lecture seule", - "readOnlyListDesc": "Ces connexions refuseront les écritures via MCP. Les autres restent normales.", - "allowList": "Autoriser les écritures via MCP", - "allowListDesc": "Les autres restent en lecture seule. Seules celles cochées peuvent écrire.", - "approvalTitle": "Validation manuelle", - "approvalMode": "Validation requise", - "approvalModeDesc": "Mettre en pause les écritures (ou toutes les requêtes) et demander la validation utilisateur avant exécution.", - "modeOff": "Désactivée", - "modeWritesOnly": "Écritures seulement", - "modeAll": "Toutes les requêtes", - "approvalTimeout": "Délai", - "approvalTimeoutDesc": "Temps d'attente avant échec.", - "preflightExplain": "EXPLAIN préalable", - "preflightExplainDesc": "Exécute EXPLAIN avant d'afficher le modal pour montrer le plan." - } - }, - "connections": { - "title": "Connexions", - "addConnection": "Ajouter une connexion", - "noConnections": "Aucune connexion active", - "createFirst": "Créez votre première connexion", - "active": "Active", - "disconnect": "Déconnecter", - "connect": "Connecter", - "edit": "Modifier", - "delete": "Supprimer", - "clone": "Cloner", - "confirmDelete": "Voulez-vous vraiment supprimer cette connexion ?", - "deleteTitle": "Confirmer la suppression", - "failConnect": "Échec de connexion à {{name}}. Vérifiez vos paramètres ou assurez-vous que la base de données est en cours d’exécution.", - "failDisconnect": "Échec de la déconnexion de la base de données", - "failDuplicate": "Échec de duplication de la connexion", - "open": "Ouvrir", - "pluginDisabled": "Plugin désactivé", - "connectionCount_one": "{{count}} connexion(s)", - "connectionCount_other": "{{count}} connexion(s)", - "noConnectionsHint": "Créez votre première connexion pour commencer.", - "searchPlaceholder": "Rechercher des connexions...", - "noSearchResults": "Aucune connexion ne correspond à \"{{query}}\"", - "gridView": "Vue grille", - "listView": "Vue liste", - "export": "Exporter les connexions", - "import": "Importer les connexions", - "exportTitle": "Exporter les connexions", - "exportWarning": "Le fichier exporté contiendra vos mots de passe de base de données et SSH en clair. Conservez-le en lieu sûr." - }, - "connectionAppearance": { - "section": "Apparence", - "accentColor": "Couleur d'accent", - "customColor": "Personnalisé", - "resetColor": "Réinitialiser au défaut du pilote", - "icon": "Icône", - "tabs": { - "default": "Défaut", - "pack": "Icône", - "emoji": "Emoji", - "image": "Image" - }, - "chooseImage": "Choisir une image…", - "removeImage": "Supprimer", - "imageHint": "PNG, JPG, WebP ou SVG · max. 512 Ko" - }, - "settings": { - "general": "Général", - "info": "Infos", - "dataEditor": "Éditeur de données", - "pageSize": "Taille de page des résultats (limite)", - "pageSizeDesc": "Limite le nombre de lignes récupérées par requête afin d’éviter les problèmes de performance. Définissez 0 pour désactiver la limite (non recommandé).", - "rows": "lignes", - "copyFormat": "Format de copie par défaut", - "copyFormatDesc": "Choisissez le format par défaut lors de la copie des lignes avec Ctrl+C / Cmd+C.", - "csvDelimiter": "Délimiteur CSV", - "csvDelimiterDesc": "Choisissez le caractère séparateur par défaut utilisé lors de la copie ou de l’export des lignes en CSV.", - "delimiterComma": "Virgule (,)", - "delimiterSemicolon": "Point-virgule (;)", - "delimiterTab": "Tabulation", - "delimiterPipe": "Barre verticale (|)", - "detectJsonInTextColumns": "Détecter le JSON dans les colonnes texte", - "detectJsonInTextColumnsDesc": "Affiche le visualiseur JSON lorsqu'une cellule texte non typée contient un objet ou un tableau JSON. Ajoute un petit coût d'analyse par cellule.", - "appearance": "Apparence", - "localization": "Localisation", - "themeSelection": "Choix du thème", - "fontFamily": "Famille de police", - "fonts": { - "custom": "Police personnalisée", - "customPlaceholder": "ex. Comic Sans MS", - "enterFontName": "Saisissez le nom de la police ci-dessus" - }, - "fontSize": "Taille de police", - "fontSizeLabel": "Taille de police", - "fontSizeDesc": "Ajustez la taille de police de base utilisée dans toute l’application (10-20 px).", - "preview": "Aperçu", - "fontPreviewText": "Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwis", - "appearance_general": "Général", - "appearance_sqlEditor": "Éditeur SQL", - "appearance_editorTheme": "Thème de l’éditeur", - "appearance_editorThemeDesc": "Choisissez un thème indépendant pour l’éditeur SQL ou gardez-le synchronisé avec le thème de l’application.", - "appearance_sameAsApp": "Identique à l’application", - "appearance_editorFontFamily": "Police de l’éditeur", - "appearance_editorFontSize": "Taille de police de l’éditeur", - "appearance_editorLineHeight": "Hauteur de ligne", - "appearance_editorTabSize": "Taille de tabulation", - "appearance_editorWordWrap": "Retour à la ligne automatique", - "appearance_editorWordWrapDesc": "Retourne les longues lignes dans l’éditeur au lieu d’un défilement horizontal.", - "appearance_editorShowLineNumbers": "Afficher les numéros de ligne", - "appearance_editorShowLineNumbersDesc": "Affiche les numéros de ligne dans la marge de l’éditeur.", - "appearance_editorAcceptSuggestionOnEnter": "Accepter la suggestion avec Entrée", - "appearance_editorAcceptSuggestionOnEnterDesc": "Autorise la touche Entrée (en plus de Tab) à accepter la suggestion d’autocomplétion active. Lorsqu’elle est désactivée, Entrée insère toujours un saut de ligne.", - "editConfigJson": "Modifier config.json", - "editConfigJsonDesc": "Modifiez directement le fichier de configuration brut. Un redémarrage est nécessaire pour appliquer les changements.", - "configJsonModal": { - "title": "config.json", - "saveAndRestart": "Enregistrer et redémarrer", - "restartNow": "Redémarrer maintenant", - "restartRequired": "Un redémarrage est nécessaire pour appliquer les changements.", - "restartMessage": "Le fichier de configuration a été enregistré. Redémarrer maintenant pour appliquer les changements ?" - }, - "language": "Langue", - "languageDesc": "Choisissez votre langue préférée. \"Auto\" utilisera la langue de votre système.", - "auto": "Auto (Système)", - "projectStatus": "État du projet", - "roadmapDesc": "Ce projet est un Work In Progress (WIP). Les fonctionnalités principales sont stables, mais nous avons de grands projets.", - "support": "Soutenir le développement", - "supportDesc": "Si vous aimez tabularis et souhaitez voir davantage de fonctionnalités, pensez à soutenir le projet en contribuant au code, en signalant des bugs ou en mettant une étoile au dépôt.", - "version": "Version", - "starOnGithub": "Mettre une étoile sur GitHub", - "ai": { - "tab": "IA", - "title": "Configuration IA", - "description": "Configurez les fournisseurs IA pour activer la génération SQL en langage naturel. Les clés sont stockées en toute sécurité dans le trousseau de votre système.", - "enable": "Activer les fonctionnalités IA", - "enableDesc": "Afficher les boutons AI Assist et Explain dans l’éditeur", - "defaultProvider": "Fournisseur par défaut", - "defaultModel": "Modèle par défaut", - "configuration": "Configuration", - "selectProviderFirst": "Sélectionnez d’abord un fournisseur", - "modelDesc": "Sélectionnez le modèle à utiliser pour la génération et l’explication.", - "manageKeys": "Gérer les clés API", - "apiKey": "Clé API {{provider}}", - "configured": "Configuré", - "notConfigured": "Non configuré", - "enterKey": "Saisir la clé {{provider}}", - "keyStoredSecurely": "La clé API est stockée en toute sécurité dans le trousseau système. Définir une clé ici remplace la variable d’environnement.", - "fromEnv": "Environnement", - "fromEnvTooltip": "Cette clé est chargée depuis une variable d’environnement", - "envVariableDetected": "Une variable d’environnement est présente, mais vous pouvez la remplacer en définissant une clé ci-dessus.", - "reset": "Réinitialiser", - "changeKey": "Modifier", - "resetKey": "Supprimer la clé personnalisée et revenir à la variable d’environnement (si présente)", - "keyResetSuccess": "Clé personnalisée supprimée avec succès", - "promptCustomization": "Personnalisation des prompts", - "systemPrompt": "Génération SQL", - "systemPromptDesc": "Instructions pour la génération SQL par IA. Utilisez {{SCHEMA}} comme espace réservé pour la structure de la base de données.", - "enterSystemPrompt": "Saisir le prompt système...", - "resetDefault": "Réinitialiser par défaut", - "savePrompt": "Enregistrer le prompt", - "explainPrompt": "Explication de requête", - "explainPromptDesc": "Instructions pour l’explication de requêtes par IA. Utilisez {{LANGUAGE}} comme espace réservé pour la langue de sortie.", - "enterExplainPrompt": "Saisir le prompt d’explication...", - "cellnamePrompt": "Prompt de nom de cellule de notebook", - "cellnamePromptDesc": "Personnalisez les instructions pour la génération IA des noms de cellules de notebook. Le contenu de la cellule (SQL ou Markdown) est envoyé comme message utilisateur.", - "enterCellnamePrompt": "Saisir le prompt de nom de cellule de notebook...", - "tabrenamePrompt": "Prompt de nom d’onglet de requête", - "tabrenamePromptDesc": "Personnalisez les instructions pour la génération IA du nom des onglets de résultats. La requête SQL est envoyée comme message utilisateur.", - "enterTabrenamePrompt": "Saisir le prompt de nom d’onglet de requête...", - "explainplanPrompt": "Prompt d’analyse de plan EXPLAIN", - "explainplanPromptDesc": "Personnalisez les instructions pour l’analyse IA des plans EXPLAIN. Utilisez {{LANGUAGE}} pour la langue de sortie.", - "enterExplainplanPrompt": "Saisir le prompt d’analyse de plan EXPLAIN...", - "keySaved": "Clé API enregistrée en toute sécurité", - "promptSaved": "Prompt système enregistré avec succès", - "explainPromptSaved": "Prompt d’explication enregistré avec succès", - "promptReset": "Prompt système réinitialisé par défaut", - "explainPromptReset": "Prompt d’explication réinitialisé par défaut", - "modelPlaceholder": "Sélectionner un modèle", - "searchPlaceholder": "Rechercher des modèles...", - "noResults": "Aucun modèle trouvé", - "refresh": "Actualiser les modèles", - "refreshSuccess": "Modèles IA actualisés depuis les fournisseurs", - "refreshError": "Échec de l’actualisation des modèles", - "ollamaConnected": "Ollama connecté ({{count}} modèles trouvés)", - "ollamaNotDetected": "Ollama non détecté sur le port {{port}}. Est-il en cours d’exécution ?", - "ollamaPort": "Port Ollama", - "modelNotFound": "Le modèle {{model}} est introuvable dans {{provider}}. Il pourrait ne pas fonctionner correctement.", - "customOpenaiEndpoint": "Point de terminaison personnalisé", - "endpointUrl": "URL du point de terminaison", - "endpointUrlDesc": "L’URL de base de votre API compatible OpenAI. Exemples : https://api.groq.com/openai/v1, http://localhost:8000/v1", - "customOpenaiModelPlaceholder": "ex. llama3-70b-8192, mixtral-8x7b", - "customOpenaiModelDesc": "Saisissez le nom du modèle fourni par votre service compatible OpenAI.", - "customOpenaiModelHelp": "Saisissez le nom exact du modèle pour votre fournisseur compatible OpenAI." - }, - "updates": "Mises à jour", - "openSourceLibraries": "Bibliothèques open source", - "openSourceLibrariesDesc": "Parcourez les dépendances open source directes utilisées par l’application, le backend et l’outillage.", - "openSourceLibrariesSource": "Dépendances directes déclarées dans package.json et src-tauri/Cargo.toml.", - "openSourceLibrariesTotal": "{{count}} bibliothèques", - "openSourceLibrariesOpenProject": "Ouvrir la page du package", - "openSourceLibrariesSections": { - "npm-runtime": "Dépendances frontend", - "npm-tooling": "Dépendances de développement frontend", - "cargo-runtime": "Dépendances Rust", - "cargo-tooling": "Build et tests Rust" - }, - "openSourceLibrariesEcosystem": { - "npm": "écosystème npm", - "cargo": "écosystème Cargo" - }, - "autoCheckUpdates": "Vérifier les mises à jour au démarrage", - "autoCheckUpdatesDesc": "Vérifier automatiquement les nouvelles versions au lancement de l’application", - "checkNow": "Vérifier les mises à jour maintenant", - "checking": "Vérification...", - "currentVersion": "Version actuelle", - "logs": "Logs", - "logSettings": "Paramètres des logs", - "enableLogging": "Activer les logs", - "enableLoggingDesc": "Collecter les logs de l’application en mémoire pour le débogage", - "maxLogEntries": "Nombre max d’entrées de log", - "maxLogEntriesDesc": "Combien de logs conserver en mémoire (1-10000)", - "currentLogCount": "Logs actuels", - "clearLogs": "Effacer les logs", - "clearLogsConfirm": "Voulez-vous vraiment effacer tous les logs ?", - "exportLogs": "Exporter les logs", - "exportLogsSuccess": "Logs exportés dans le presse-papiers", - "noLogs": "Aucun log disponible", - "refreshLogs": "Actualiser", - "logLevel": "Niveau", - "logMessage": "Message", - "logTimestamp": "Horodatage", - "filterByLevel": "Filtrer par niveau", - "allLevels": "Tous les niveaux", - "debug": "Debug", - "warn": "Avertissement", - "error": "Erreur", - "connectionHealthCheck": "Vérification de l’état des connexions", - "pingInterval": "Intervalle de ping", - "pingIntervalDesc": "À quelle fréquence vérifier si les connexions actives sont toujours vivantes. Définissez 0 pour désactiver.", - "seconds": "secondes", - "entries": "entrées", - "queryHistory": "Historique des requêtes", - "queryHistoryMaxEntries": "Nombre max d’entrées d’historique", - "queryHistoryMaxEntriesDesc": "Nombre maximal d’entrées d’historique de requêtes stockées par connexion.", - "startup": "Démarrage", - "showWelcome": "Afficher l’écran d’accueil", - "showWelcomeDesc": "Afficher l’écran d’accueil au démarrage de l’application.", - "erDiagram": "Diagramme ER", - "erDiagramDefaultLayout": "Disposition par défaut", - "erDiagramDefaultLayoutDesc": "Choisissez la direction de disposition par défaut pour les diagrammes ER", - "plugins": { - "title": "Plugins", - "overviewTitle": "Centre de plugins", - "overviewDesc": "Installez des extensions, gérez les pilotes de plugins et gardez les paramètres d'exécution sous contrôle.", - "installedMetric": "Installés", - "enabledMetric": "Activés", - "registryMetric": "Registre", - "updatesMetric": "Mises à jour", - "available": "Plugins disponibles", - "availableDesc": "Parcourez et installez des plugins depuis le registre.", - "refresh": "Actualiser", - "loadingRegistry": "Chargement du registre des plugins...", - "registryError": "Échec de chargement du registre", - "installed": "Installé", - "by": "par", - "platformNotSupported": "Indisponible sur votre plateforme", - "update": "Mettre à jour", - "install": "Installer", - "upToDate": "À jour", - "downgrade": "Rétrograder vers", - "olderVersions": "Anciennes versions", - "noPlugins": "Aucun plugin disponible dans le registre.", - "searchPlaceholder": "Rechercher des plugins…", - "filterAll": "Tous", - "filterInstalled": "Installés", - "filterUpdates": "Mises à jour", - "searchNoResults": "Aucun plugin ne correspond à la recherche.", - "requiresVersion": "Nécessite Tabularis ≥ {{version}}", - "remove": "Supprimer", - "removeTitle": "Supprimer le plugin", - "confirmRemove": "Voulez-vous vraiment supprimer \"{{name}}\" ? Cela supprimera les fichiers du plugin.", - "installError": { - "title": "Échec de l’installation", - "subtitle": "Une erreur s’est produite lors de l’installation du plugin. Voir les détails ci-dessous.", - "details": "Détails de l’erreur", - "copy": "Copier", - "copied": "Copié !" - }, - "startError": { - "title": "Échec de démarrage du plugin", - "subtitle": "Le processus du plugin n’a pas pu être lancé. Vérifiez les détails de l’erreur ci-dessous.", - "interpreterHint": "Ce plugin peut nécessiter un interpréteur (ex. Python). Utilisez les paramètres du plugin pour configurer le chemin de l’interpréteur.", - "details": "Détails de l’erreur", - "copy": "Copier", - "copied": "Copié !", - "configure": "Configurer l’interpréteur" - }, - "pluginSettings": { - "title": "Paramètres du plugin", - "interpreter": "Interpréteur", - "interpreterDesc": "Optionnel. Spécifiez l’exécutable utilisé pour lancer ce plugin (ex. python3 sous macOS/Linux, python ou un chemin complet sous Windows). Laissez vide pour utiliser la valeur par défaut.", - "interpreterPlaceholder": "ex. python3", - "browse": "Parcourir...", - "fieldRequired": "{{label}} est requis", - "saved": "Enregistré", - "resetToDefault": "Réinitialiser par défaut", - "builtin": { - "mysql": { - "maxAllowedPacket": { - "label": "Max Allowed Packet", - "description": "Taille maximale de paquet utilisée par le connecteur MySQL." - }, - "socketTimeout": { - "label": "Délai d’expiration du socket", - "description": "Délai d’expiration du socket en millisecondes." - }, - "connectTimeout": { - "label": "Délai d’expiration de connexion", - "description": "Délai d’expiration de connexion en millisecondes." - }, - "timezone": { - "label": "Fuseau horaire", - "description": "Fuseau horaire de session envoyé à MySQL après connexion." - } - } - } - } - }, - "shortcuts": { - "title": "Raccourcis clavier", - "categories": { - "editor": "Éditeur", - "navigation": "Navigation", - "data_grid": "Grille de données" - }, - "runQuery": "Exécuter la requête", - "runQueryEditor": "Exécuter la requête (dans l’éditeur)", - "tabSwitcher": "Changer d’onglet", - "copySelection": "Copier la sélection", - "toggleSidebar": "Afficher/masquer la barre latérale", - "openConnections": "Ouvrir les connexions", - "newConnection": "Nouvelle connexion", - "newTab": "Nouvel onglet", - "closeTab": "Fermer l’onglet", - "nextPage": "Page suivante", - "prevPage": "Page précédente", - "switchConnection": "Passer à la connexion 1-9", - "resetToDefault": "Réinitialiser par défaut", - "notOverridable": "Intégré, non personnalisable", - "pressKeys": "Appuyez sur une combinaison de touches...", - "notebookRunAll": "Exécuter toutes les cellules", - "pasteImportClipboard": "Importer depuis le Presse-papiers", - "quickNavigator": "Navigateur rapide" - }, - "aiActivity": "Activité IA" - }, - "update": { - "newVersionAvailable": "Nouvelle version disponible", - "version": "Version", - "releaseNotes": "Notes de version", - "downloadAndInstall": "Télécharger et installer", - "downloading": "Téléchargement...", - "installing": "Installation...", - "installingMessage": "L’application redémarrera automatiquement après l’installation", - "viewOnGitHub": "Voir sur GitHub", - "remindLater": "Me le rappeler plus tard", - "upToDate": "Vous êtes à jour", - "updateAvailable": "La version {{version}} est disponible", - "error": "Erreur de mise à jour", - "managedByPackageManager": "Mises à jour gérées par {{source}}", - "managedByPackageManagerDesc": "Utilisez votre gestionnaire de paquets pour mettre à jour Tabularis." - }, - "ai": { - "explain": "Expliquer", - "generateSql": "Générer du SQL" - }, - "newConnection": { - "namePlaceholder": "Indiquez le nom de votre connexion", - "nameRequired": "Le nom de la connexion est requis", - "dbNameRequired": "Le nom de la base de données est requis", - "dbType": "Type de base de données", - "host": "Hôte", - "port": "Port", - "username": "Nom d’utilisateur", - "password": "Mot de passe", - "passwordPlaceholder": "Saisir le mot de passe", - "usernamePlaceholder": "Saisir le nom d'utilisateur", - "filePath": "Chemin du fichier", - "folderPath": "Chemin du dossier", - "dbName": "Nom de la base de données", - "dbNamePlaceholder": "Nom de la base de données", - "loadDatabases": "Charger les bases de données", - "loadingDatabases": "Chargement...", - "selectDatabases": "Bases de données", - "appearance": "Apparence", - "noDatabasesSelected": "Sélectionnez au moins une base de données", - "selectedDatabases": "{{count}} base(s) de données sélectionnée(s)", - "selectDatabase": "Sélectionner une base de données", - "noDatabasesFound": "Aucune base de données trouvée", - "failLoadDatabases": "Échec du chargement des bases de données. Vérifiez vos identifiants.", - "filePathPlaceholder": "/chemin/absolu/vers/db.sqlite", - "folderPathPlaceholder": "/chemin/absolu/vers/dossier", - "browseFile": "Parcourir le fichier", - "browseFolder": "Parcourir le dossier", - "useSsh": "Utiliser un tunnel SSH", - "sshHost": "Hôte SSH", - "sshPort": "Port SSH", - "sshUser": "Utilisateur SSH", - "sshPassword": "Mot de passe SSH", - "sshPasswordMissing": "Mot de passe SSH manquant. Veuillez le ressaisir.", - "sshPasswordPlaceholder": "Saisir le mot de passe SSH", - "sshKeyFile": "Fichier de clé SSH (optionnel)", - "sshKeyFilePlaceholder": "/chemin/vers/id_rsa", - "sshKeyPassphrase": "Phrase secrète de clé SSH (optionnel)", - "sshKeyPassphrasePlaceholder": "Saisissez la phrase secrète si la clé est chiffrée", - "saveKeychain": "Enregistrer les mots de passe dans le trousseau", - "testConnection": "Tester la connexion", - "save": "Enregistrer", - "failSave": "Échec de l’enregistrement de la connexion", - "selectSshConnection": "Sélectionner une connexion SSH", - "useSshConnection": "Utiliser une connexion SSH existante", - "createInlineSsh": "Configurer SSH en ligne", - "manageSshConnections": "Gérer les connexions SSH", - "noSshConnections": "Aucune connexion SSH disponible", - "sslMode": "Mode SSL", - "sslModes": { - "disable": "Désactiver", - "allow": "Autoriser", - "prefer": "Préférer", - "require": "Exiger", - "verify-ca": "Vérifier CA", - "verify-full": "Vérification complète" - }, - "chooseContext": "Choisir un contexte...", - "chooseK8s": "Choisir une connexion...", - "chooseNamespace": "Choisir un namespace...", - "chooseResource": "Choisir une ressource...", - "createInlineK8s": "En ligne", - "k8sContext": "Contexte", - "k8sNamespace": "Namespace", - "k8sNotAvailable": "Kubernetes n'est pas disponible pour ce pilote.", - "k8sPort": "Port du conteneur", - "k8sResourceName": "Nom de la ressource", - "k8sResourceType": "Type de ressource", - "k8sResourceTypePod": "Pod", - "k8sResourceTypeService": "Service", - "k8sSelectType": "Sélectionner le type...", - "manageK8s": "Gérer", - "noK8sConnections": "Aucune connexion enregistrée — créez-en une ci-dessous", - "noK8sContexts": "Aucun contexte trouvé (kubectl est-il installé ?)", - "selectContextFirst": "Sélectionnez d'abord un contexte", - "selectK8sConnection": "Sélectionner une connexion K8s", - "selectTypeFirst": "Sélectionnez d'abord contexte/namespace/type", - "useK8s": "Utiliser le Port-Forward Kubernetes", - "useK8sConnection": "Connexion enregistrée" - }, - "sshConnections": { - "title": "Connexions SSH", - "createNew": "Créer une nouvelle connexion SSH", - "noConnections": "Aucune connexion SSH configurée pour le moment", - "name": "Nom de la connexion", - "namePlaceholder": "Mon serveur SSH", - "authType": "Type d’authentification", - "authTypePassword": "Mot de passe", - "authTypeSshKey": "Clé SSH", - "edit": "Modifier", - "delete": "Supprimer", - "save": "Enregistrer", - "update": "Mettre à jour", - "cancel": "Annuler", - "confirmDelete": "Voulez-vous vraiment supprimer cette connexion SSH ?", - "failSave": "Échec de l’enregistrement de la connexion SSH", - "failDelete": "Échec de suppression de la connexion SSH", - "fillRequired": "Veuillez remplir tous les champs requis", - "keyFile": "Fichier de clé", - "quickTest": "Test rapide de connexion", - "testFailed": "Échec du test de connexion", - "savedInKeychain": "Mot de passe enregistré dans le trousseau système" - }, - "dataGrid": { - "newRow": "NOUVELLE", - "noData": "Aucune donnée à afficher", - "deleteRow": "Supprimer la ligne", - "deleteRows_one": "Supprimer {{count}} lignes", - "deleteRows_other": "Supprimer {{count}} lignes", - "updateFailed": "Échec de la mise à jour : ", - "null": "null", - "sortByAsc": "Trier par {{col}} ASC", - "sortByDesc": "Trier par {{col}} DESC", - "clearSort": "Effacer le tri", - "copyCell": "Copier la cellule", - "copySelectedRows": "Copier la/les ligne(s) sélectionnée(s)", - "copyColumnName": "Copier le nom de colonne", - "copyColumnNameQuoted": "Copier comme `column`", - "copyColumnNameTable": "Copier comme table.column", - "copied": "Copié dans le presse-papiers", - "duplicateRow": "Dupliquer la ligne", - "revertSelected": "Annuler la sélection", - "setGenerate": "Définir GENERATED", - "setNull": "Définir NULL", - "setDefault": "Définir DEFAULT", - "setEmpty": "Définir EMPTY", - "setServerNow": "Insérer l'horodatage actuel", - "previewReferenced": "Aperçu de l'enregistrement lié", - "openReferenced": "Ouvrir la ligne référencée dans {{table}}" - }, - "newRow": { - "title": "Nouvelle ligne", - "insert": "Insérer", - "cancel": "Annuler", - "failInsert": "Échec de l’insertion de la ligne : ", - "failLoad": "Échec du chargement du schéma : ", - "loading": "Chargement...", - "selectValue": "Sélectionner une valeur...", - "noOptions": "Aucune option trouvée", - "autoGenerated": "(Généré automatiquement)", - "required": "Requis", - "primaryKey": "Clé primaire", - "auto": "Auto" - }, - "editor": { - "noTabs": "Aucun onglet ouvert pour cette connexion.", - "newConsole": "Nouvelle console", - "noActiveSession": "Aucune session active. Veuillez sélectionner une connexion.", - "stop": "Arrêter", - "run": "Exécuter", - "export": "Exporter", - "connected": "Connecté", - "disconnected": "Déconnecté", - "newRow": "Nouvelle ligne", - "rowsRetrieved": "{{count}} lignes récupérées", - "autoPaginated": "Pagination automatique", - "pageOf": "Page {{current}} sur {{total}}", - "page": "Page {{current}}", - "jumpToPage": "Cliquer pour aller à la page", - "loadRowCount": "Charger le nombre de lignes", - "executePrompt": "Exécutez une requête pour voir les résultats", - "tableRunPrompt": "Appuyez sur Exécuter (Ctrl/Commande+F5) pour charger les données de la table", - "closeTab": "Fermer l’onglet", - "closeOthers": "Fermer les autres onglets", - "closeRight": "Fermer les onglets à droite", - "closeLeft": "Fermer les onglets à gauche", - "closeAll": "Fermer tous les onglets", - "saveQuery": "Enregistrer la requête", - "saveThisQuery": "Enregistrer cette requête", - "noValidQueries": "Aucune requête valide trouvée", - "queryFailed": "Échec de la requête.", - "showErrorDetails": "Afficher les détails", - "hideErrorDetails": "Masquer les détails", - "errorBoundary": { - "title": "L'éditeur a planté de manière inattendue", - "description": "Un élément de l'éditeur n'a pas pu s'afficher. L'erreur est indiquée ci-dessous — réessayez ou revenez à vos connexions.", - "retry": "Réessayer", - "closeCurrentTab": "Fermer l’onglet actuel", - "backToConnections": "Retour aux connexions", - "showDetails": "Afficher les détails techniques" - }, - "newVisualQuery": "Nouvelle requête visuelle", - "activeDatabase": "Base de données active", - "tabSwitcher": { - "title": "Onglets ouverts", - "hint": "Ctrl+Tab", - "tabs_one": "{{count}} onglet", - "tabs_other": "{{count}} onglets", - "escHint": "Esc pour fermer" - }, - "quickNavigator": { - "placeholder": "Rechercher tables, vues, routines, triggers...", - "noResults": "Aucun élément correspondant trouvé", - "count_one": "1 élément", - "count_other": "{{count}} éléments", - "navigationHint": "↑↓ pour naviguer, Entrée pour ouvrir", - "escHint": "Échap pour fermer", - "type_table": "table", - "type_view": "vue", - "type_routine": "routine", - "type_trigger": "trigger", - "actions": { - "inspect": "Inspecter la structure", - "newConsole": "Nouvelle console", - "generateSql": "Générer des modèles SQL", - "countRows": "Compter les lignes", - "query": "Exécuter une requête SELECT", - "copyName": "Copier le nom" - } - }, - "submitChanges": "Soumettre les modifications", - "rollbackChanges": "Annuler les modifications", - "applyToAll": "Appliquer à tout", - "executingQuery": "Exécution de la requête...", - "exporting": "Exportation...", - "rowsProcessed": "Lignes traitées", - "queryParameters": "Paramètres de requête", - "convertToConsole": "Convertir en console", - "parameters": "Paramètres", - "paramValuePlaceholder": "Valeur (ex. 'texte' ou 123)", - "failedCreateRow": "Échec de création de la nouvelle ligne : ", - "failedProcessInsertions": "Échec du traitement des insertions : ", - "newNotebook": "Nouveau notebook", - "visualExplain": { - "title": "Visual Explain", - "buttonShort": "Expliquer le plan", - "loading": "Exécution d’EXPLAIN...", - "planningTime": "Planification", - "executionTime": "Exécution", - "totalCost": "Coût total", - "estRows": "Lignes estimées", - "actualRows": "Lignes réelles", - "cost": "Coût", - "time": "Temps", - "loops": "Boucles", - "filter": "Filtre", - "indexCondition": "Condition d’index", - "relation": "Table", - "nodeType": "Opération", - "rawOutput": "Sortie brute", - "analyze": "Analyser", - "analyzeWarning": "ANALYZE exécute la requête. Utilisez-le avec prudence pour les instructions modifiant les données.", - "notExplainable": "EXPLAIN est uniquement pris en charge pour les instructions DML (SELECT, INSERT, UPDATE, DELETE). Les instructions DDL comme CREATE, DROP ou ALTER ne peuvent pas être expliquées.", - "contextMenuExplain": "Expliquer le plan", - "rerun": "Relancer", - "close": "Fermer", - "graphView": "Graphe", - "tableView": "Tableau", - "general": "Général", - "analyzeData": "Analyser les données", - "extraDetails": "Suppléments", - "selectNode": "Sélectionnez un nœud pour voir les détails", - "buffersHit": "Buffers touchés", - "buffersRead": "Buffers lus", - "joinType": "Type de jointure", - "hashCondition": "Condition hash", - "topIssues": "Principaux problèmes", - "noIssues": "Aucun problème majeur détecté dans le résumé actuel du plan.", - "highestCost": "Coût le plus élevé", - "slowestStep": "Étape la plus lente", - "largestEstimateGap": "Écart d’estimation", - "overEstimate": "Les lignes réelles dépassent l’estimation", - "underEstimate": "L’estimation dépasse les lignes réelles", - "sequentialScans": "Scans séquentiels", - "tempOperations": "Opérations temporaires ou de tri", - "scanOperations": "Opérations gourmandes en scans détectées", - "sortOrTempOperations": "Travail de tri ou temporaire détecté", - "driverNotes": "Notes du pilote", - "overview": "Vue d’ensemble", - "showOverview": "Afficher la vue d’ensemble", - "hideOverview": "Masquer la vue d’ensemble", - "postgresAnalyzeLegend1": "PostgreSQL ANALYZE inclut les lignes réelles, le temps, les boucles et les compteurs de buffer lorsqu’ils sont disponibles.", - "postgresAnalyzeLegend2": "De grands écarts d’estimation indiquent généralement des statistiques obsolètes ou des prédicats mal modélisés par le planificateur.", - "postgresEstimateLegend1": "PostgreSQL sans ANALYZE n’affiche que les estimations du planificateur.", - "postgresEstimateLegend2": "Activez ANALYZE pour inspecter les lignes réelles, le temps, les boucles et les buffers.", - "mysqlAnalyzeLegend1": "MySQL et MariaDB n’exposent des métriques réelles que sur les variantes prises en charge d’EXPLAIN ANALYZE ou ANALYZE FORMAT.", - "mysqlAnalyzeLegend2": "Les anciens serveurs peuvent revenir à des plans estimés avec moins de métriques.", - "mysqlEstimateLegend1": "MySQL et MariaDB peuvent revenir à EXPLAIN FORMAT=JSON ou à EXPLAIN tabulaire selon la version du serveur.", - "mysqlEstimateLegend2": "Si le temps manque, le serveur a probablement renvoyé un plan uniquement estimé.", - "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN est léger et principalement structurel.", - "sqliteLegend2": "Le coût, le temps et les estimations de lignes sont souvent indisponibles comparés à PostgreSQL et MySQL.", - "aiAnalysis": "Analyse IA", - "aiAnalysisTitle": "Analyse IA du plan de requête", - "aiAnalyzing": "Analyse du plan de requête avec l’IA...", - "aiConfigRequired": "Fournisseur IA non configuré. Veuillez aller dans Paramètres > IA." - }, - "notebook": { - "addSqlCell": "Ajouter une cellule SQL", - "addMarkdownCell": "Ajouter une cellule Markdown", - "addCell": "Ajouter", - "runAll": "Tout exécuter", - "runAllTooltip": "Exécuter toutes les cellules SQL de haut en bas", - "runCell": "Exécuter la cellule", - "deleteCell": "Supprimer la cellule", - "moveCellUp": "Monter", - "moveCellDown": "Descendre", - "export": "Exporter le notebook", - "import": "Importer le notebook", - "emptyNotebook": "Ce notebook est vide. Ajoutez une cellule pour commencer.", - "markdownPlaceholder": "Écrivez du Markdown ici...", - "togglePreview": "Afficher/masquer l’aperçu", - "sqlCell": "SQL", - "markdownCell": "Markdown", - "invalidFile": "Format de fichier notebook invalide", - "importSuccess": "Notebook importé avec succès", - "exportSuccess": "Notebook exporté avec succès", - "cellResult_one": "{{count}} lignes · {{time}} ms", - "cellResult_other": "{{count}} lignes · {{time}} ms", - "stopOnError": "Arrêter en cas d’erreur", - "stopOnErrorTooltip": "Arrêter l’exécution lorsqu’une cellule échoue", - "runAllComplete": "Exécution complète", - "succeeded": "réussies", - "failed": "échouées", - "skipped": "ignorées", - "toggleChart": "Afficher/masquer le graphique", - "chartType": "Graphique", - "chartLabel": "Étiquette", - "chartValues": "Valeurs", - "exportCsv": "Exporter en CSV", - "exportJson": "Exporter en JSON", - "exportHtml": "Exporter en HTML", - "parameters": "Paramètres", - "paramName": "nom", - "paramValue": "valeur", - "invalidParamName": "Nom de paramètre invalide", - "parallelExecution": "Exécution parallèle (Tout exécuter)", - "executionHistory": "Historique d’exécution", - "noHistory": "Aucun historique d’exécution pour le moment", - "collapseCell": "Réduire la cellule", - "expandCell": "Développer la cellule", - "collapseAll": "Tout réduire", - "expandAll": "Tout développer", - "outline": "Plan", - "cellNamePlaceholder": "Sans titre", - "editCellName": "Modifier le nom de la cellule", - "aiGenerateName": "Générer un nom avec l’IA", - "generatingName": "Génération du nom...", - "aiGenerateOutlineNames": "Générer des noms IA pour les cellules sans nom", - "undo": "Annuler", - "redo": "Rétablir", - "history": { - "title": "Historique des modifications", - "change": { - "initial": "Version initiale", - "editCell": "Cellule {{n}} modifiée", - "addSql": "Cellule SQL {{n}} ajoutée", - "addMarkdown": "Cellule Markdown {{n}} ajoutée", - "deleteCell": "Cellule {{n}} supprimée", - "reorder": "Cellules réordonnées", - "renameCell": "Cellule {{n}} renommée", - "schemaCell": "Base de données modifiée (cellule {{n}})", - "chartCell": "Graphique modifié (cellule {{n}})", - "parallelCell": "Parallèle basculé (cellule {{n}})", - "collapse": "Cellules réduites/développées", - "params": "Paramètres modifiés", - "stopOnError": "Arrêt en cas d'erreur basculé", - "other": "Notebook modifié" - } - } - }, - "querySelection": { - "title": "Sélectionner la requête à exécuter", - "queriesFound_one": "{{count}} requêtes trouvées", - "queriesFound_other": "{{count}} requêtes trouvées", - "runAll": "Tout exécuter", - "runSelected": "Exécuter la sélection ({{count}})", - "runSingle": "Exécuter cette requête", - "selectAll": "Tout sélectionner", - "deselectAll": "Tout désélectionner" - }, - "explainSelection": { - "title": "Sélectionner la requête à expliquer", - "queriesFound_one": "{{count}} requêtes explicables trouvées", - "queriesFound_other": "{{count}} requêtes explicables trouvées", - "explainSingle": "Expliquer cette requête", - "explainFocused": "expliquer la sélection", - "explainNth": "expliquer la n-ième", - "cancel": "annuler" - }, - "multiResult": { - "rerun": "Relancer la requête", - "close": "Fermer l’onglet", - "rename": "Renommer", - "aiGenerateName": "Générer un nom avec l’IA", - "generatingName": "Génération du nom...", - "viewTabs": "Vue onglets", - "viewStacked": "Vue empilée", - "queryPrefix": "Requête", - "results": "Résultats", - "collapseAll": "Tout réduire", - "expandAll": "Tout développer" - } - }, - "createTable": { - "title": "Créer une nouvelle table", - "tableName": "Nom de la table", - "tableNamePlaceholder": "ex. users, orders, products", - "columns": "Colonnes", - "addColumn": "Ajouter une colonne", - "colName": "Nom", - "colType": "Type", - "colLen": "Longueur", - "colPk": "PK", - "colNn": "NN", - "colAi": "AI", - "colDefault": "Valeur par défaut", - "create": "Créer la table", - "cancel": "Annuler", - "nameRequired": "Le nom de la table est requis", - "colRequired": "Au moins une colonne est requise", - "failCreate": "Échec de la création de la table : ", - "requiresExtension": "Extension requise : {{ext}}" - }, - "schema": { - "title": "Schéma : {{table}}", - "loading": "Chargement du schéma...", - "colName": "Nom", - "colType": "Type", - "colNullable": "Nullable", - "colKey": "Clé", - "yes": "OUI", - "no": "NON" - }, - "generateSQL": { - "title": "SQL généré : {{table}}", - "loading": "Génération du SQL...", - "runInConsole": "Exécuter dans la console", - "copy": "Copier le SQL", - "copied": "Copié !", - "tabCreateTable": "Créer une table", - "tabSelectAll": "SELECT *", - "tabSelectFields": "SELECT [champs]", - "tabUpdate": "UPDATE", - "tabDelete": "DELETE" - }, - "modifyColumn": { - "titleAdd": "Ajouter une colonne", - "titleEdit": "Modifier la colonne", - "sqliteWarn": "SQLite ne prend en charge que le renommage des colonnes. Les autres modifications nécessitent de recréer la table manuellement.", - "name": "Nom", - "type": "Type", - "length": "Longueur", - "default": "Valeur par défaut", - "notNull": "Non nul", - "primaryKey": "Clé primaire", - "autoInc": "Auto Increment", - "sqlPreview": "Aperçu SQL", - "save": "Enregistrer les modifications", - "add": "Ajouter une colonne", - "cancel": "Annuler", - "nameRequired": "Le nom de la colonne est requis", - "fail": "Échec : ", - "pkNotSupported": "Ce pilote ne prend en charge les clés primaires qu’à la création de la table", - "requiresExtension": "Extension requise : {{ext}}" - }, - "createIndex": { - "title": "Créer un index", - "name": "Nom de l’index", - "columns": "Colonnes", - "unique": "Index unique", - "sqlPreview": "Aperçu SQL", - "create": "Créer l’index", - "cancel": "Annuler", - "nameRequired": "Le nom de l’index est requis", - "colRequired": "Au moins une colonne doit être sélectionnée" - }, - "createFk": { - "title": "Créer une clé étrangère", - "name": "Nom de la clé étrangère (optionnel)", - "column": "Colonne locale", - "refTable": "Table référencée", - "refColumn": "Colonne référencée", - "onDelete": "À la suppression", - "onUpdate": "À la mise à jour", - "sqlPreview": "Aperçu SQL", - "create": "Créer la clé étrangère", - "cancel": "Annuler" - }, - "healthCheck": { - "title": "Connexion perdue", - "connectionLost": "Une connexion à la base de données a été perdue" - }, - "erDiagram": { - "enterFullscreen": "Plein écran", - "exitFullscreen": "Quitter le plein écran", - "noConnection": "Aucun ID de connexion", - "noConnectionDesc": "Impossible d’afficher le diagramme sans ID de connexion.", - "switchToVertical": "Passer en disposition verticale", - "switchToHorizontal": "Passer en disposition horizontale", - "vertical": "Verticale", - "horizontal": "Horizontale", - "showAllTables": "Afficher toutes les tables", - "showAll": "Tout afficher", - "focusedOn": "Focalisé sur", - "focusOnTable": "Focaliser sur la table" - }, - "views": { - "createView": "Créer une vue", - "editView": "Modifier la vue", - "createSubtitle": "Créer une nouvelle vue de base de données", - "editSubtitle": "Modification de la vue : {{name}}", - "viewName": "Nom de la vue", - "viewNamePlaceholder": "ex. active_users, order_summary", - "viewDefinition": "Définition de la vue (SQL)", - "preview": "Aperçu", - "runPreview": "Exécuter l’aperçu", - "previewEmpty": "Cliquez sur \"Exécuter l’aperçu\" pour voir les résultats", - "moreRows": "+{{count}} lignes supplémentaires", - "create": "Créer la vue", - "save": "Enregistrer les modifications", - "nameRequired": "Le nom de la vue est requis", - "definitionRequired": "La définition de la vue est requise", - "failLoadDefinition": "Échec du chargement de la définition de la vue : ", - "previewError": "Échec de l’aperçu : ", - "createSuccess": "Vue créée avec succès", - "alterSuccess": "Vue mise à jour avec succès", - "saveError": "Échec de l’enregistrement de la vue : ", - "confirmAlter": "Voulez-vous vraiment modifier la vue \"{{view}}\" ?" - }, - "community": { - "title": "Rejoindre la communauté", - "subtitle": "Aidez tabularis à grandir", - "description": "Tabularis est un projet libre et open source. Si vous le trouvez utile, pensez à soutenir le projet et à rejoindre la communauté.", - "starTitle": "Mettre une étoile sur GitHub", - "starDesc": "Une étoile aide d’autres personnes à découvrir le projet", - "discordTitle": "Rejoindre Discord", - "discordDesc": "Discutez avec la communauté, obtenez de l’aide, proposez des fonctionnalités", - "dismiss": "Peut-être plus tard" - }, - "whatsNew": { - "title": "Nouveautés", - "subtitle": "Version {{version}}", - "features": "Nouvelles fonctionnalités", - "bugFixes": "Corrections de bugs", - "breakingChanges": "Changements incompatibles", - "readMore": "En savoir plus", - "dismiss": "Compris" - }, - "dump": { - "title": "Exporter la base de données", - "dumpDatabase": "Exporter la base de données", - "importDatabase": "Exécuter un fichier SQL...", - "importTitle": "Importer une base de données", - "includeStructure": "Structure (DDL)", - "includeData": "Données (INSERT)", - "selectTables": "Sélectionner les tables", - "selectAll": "Tout sélectionner", - "deselectAll": "Tout désélectionner", - "export": "Exporter", - "success": "Base de données exportée avec succès", - "failure": "Échec de l’export : ", - "errorNoOption": "Veuillez sélectionner au moins Structure ou Données", - "errorNoTables": "Veuillez sélectionner au moins une table", - "importSuccess": "Fichier SQL exécuté avec succès", - "importFailure": "Échec de l’import : ", - "importCancelled": "Import annulé", - "importFailed": "Échec de l’import", - "importingFrom": "Import depuis", - "statementsExecuted": "{{count}} / {{total}} instructions", - "confirmImport": "Voulez-vous vraiment importer \"{{file}}\" ?\nCela peut écraser des données existantes.", - "elapsedTime": "Temps écoulé" - }, - "geometryInput": { - "sqlMode": "Mode SQL", - "wktMode": "Mode WKT", - "sqlHelper": "Saisissez une fonction SQL complète (ex. ST_GeomFromText('POINT(30 40)', 4326))", - "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", - "wktPlaceholder": "POINT(30 40)", - "toggleTooltip": "Fonctions SQL" - }, - "jsonInput": { - "placeholder": "Saisir du JSON...", - "format": "Formater", - "valid": "JSON valide", - "invalid": "JSON invalide", - "mode": { - "code": "Code", - "tree": "Arborescence", - "raw": "Brut" - }, - "expand": "Développer", - "search": "Rechercher" - }, - "jsonViewer": { - "close": "Fermer", - "save": "Enregistrer" - }, - "jsonCell": { - "expand": "Afficher/masquer l'arbre JSON", - "openViewer": "Ouvrir le visualiseur JSON" - }, - "rowEditor": { - "title": "Modifier la ligne", - "subtitle": "Ligne n°{{row}}", - "enterValue": "Saisir une valeur..." - }, - "contextMenu": { - "openSidebar": "Ouvrir l’éditeur latéral", - "openJsonEditor": "Ouvrir dans l’éditeur JSON" - }, - "blobInput": { - "noData": "Aucune donnée BLOB", - "uploadFile": "Téléverser un fichier", - "download": "Télécharger", - "delete": "Supprimer", - "truncatedWarning": "Aperçu uniquement - données complètes non chargées", - "downloadDisabledTruncated": "Téléchargement indisponible - seul l’aperçu est chargé", - "downloading": "Téléchargement...", - "uploading": "Téléversement...", - "openSidebar": "Ouvrir dans l’éditeur", - "imagePreview": "Aperçu de l’image" - }, - "visualExplainPage": { - "title": "Visual Explain", - "noFile": "Aucun fichier chargé", - "openFile": "Ouvrir un fichier", - "reload": "Recharger", - "loading": "Chargement du plan d'exécution…", - "emptyHint": "Sélectionnez un fichier contenant un plan EXPLAIN (format JSON ou texte PostgreSQL) pour le visualiser." - }, - "taskManager": { - "header": { - "title": "Gestionnaire des tâches", - "subtitle": "Processus plugins et ressources système", - "description": "Surveillez en temps réel les processus plugins, le CPU, la RAM et l’utilisation disque", - "open": "Ouvrir le gestionnaire des tâches", - "refresh": "Actualiser" - }, - "killModal": { - "title": "Forcer l’arrêt du processus du plugin", - "subtitle": "Cette action ne peut pas être annulée immédiatement", - "descriptionBefore": "Tuer", - "descriptionAfter": "arrêtera brutalement son processus. Toute connexion à la base de données utilisant ce plugin cessera de fonctionner tant que le plugin ne sera pas redémarré.", - "warning": "Les requêtes et connexions actives via ce plugin seront interrompues.", - "cancel": "Annuler", - "confirm": "Forcer l’arrêt" - }, - "systemResources": { - "title": "Ressources système", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Lecture disque/s", - "diskWrite": "Écriture disque/s", - "processCount_one": "{{count}} processus système en cours", - "processCount_other": "{{count}} processus système en cours" - }, - "tabularisProcess": { - "title": "Processus Tabularis", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Lecture disque/s", - "diskWrite": "Écriture disque/s", - "childCount_one": "{{count}} processus enfant", - "childCount_other": "{{count}} processus enfants", - "noChildren": "Aucun processus enfant", - "treeTotal": "Total de l’arborescence : {{size}}", - "treeTotalTooltip": "Somme du RSS sur l’arborescence des processus — peut surestimer la mémoire partagée", - "loadingProcesses": "Chargement des processus…", - "colPid": "PID", - "colName": "Nom", - "colCpu": "CPU", - "colRam": "RAM", - "refresh": "Actualiser" - }, - "pluginProcesses": { - "title": "Processus des plugins", - "loading": "Chargement des processus…", - "empty": "Aucun processus de plugin n’est en cours", - "emptyHint": "Installez et activez des plugins pour les voir ici", - "colPlugin": "Plugin", - "colPid": "PID", - "colCpu": "CPU", - "colRam": "RAM", - "colDiskRw": "Lecture/écriture disque", - "colStatus": "Statut", - "colActions": "Actions", - "restart": "Redémarrer", - "kill": "Tuer", - "collapseChildren": "Réduire les processus enfants", - "childCount_one": "{{count}} processus enfant", - "childCount_other": "{{count}} processus enfants", - "childProcess": "processus enfant", - "status": { - "running": "en cours", - "stopped": "arrêté", - "unknown": "inconnu" - } - } - }, - "groups": { - "newGroup": "Nouveau groupe", - "rename": "Renommer", - "delete": "Supprimer", - "deleteConfirm": "Voulez-vous vraiment supprimer le groupe \"{{name}}\" ? Les connexions de ce groupe seront déplacées vers Non groupées.", - "deleteTitle": "Supprimer le groupe", - "connection": "connexion", - "connections": "connexions", - "ungrouped": "Non groupé", - "removeFromGroup": "Retirer du groupe", - "groupName": "Nom du groupe", - "createError": "Échec de création du groupe" - }, - "queryModal": { - "database": "Base de données", - "noDatabase": "Aucune base de données" - }, - "clipboardImport": { - "title": "Importer depuis le Presse-papiers", - "subtitle": "Collez des données structurées et vérifiez le schéma avant l'import", - "selectTablePlaceholder": "Sélectionner une table...", - "contextMenuLabel": "Importer depuis le Presse-papiers...", - "firstRowHeader": "Première ligne comme en-tête", - "tableName": "Nom de la table", - "tableNamePlaceholder": "ex. donnees_ventes", - "aiSuggest": "Suggérer avec IA", - "tableExists": "Existe déjà", - "mode": "Mode", - "createNew": "Créer nouvelle table", - "appendTo": "Ajouter à existante", - "onConflict": "Si existe", - "conflictFail": "Erreur", - "conflictAppend": "Ajouter des lignes", - "conflictReplace": "Remplacer la table", - "schemaPreview": "Schéma des colonnes", - "dataPreview": "Aperçu des données", - "sample": "Exemples de valeurs", - "lowConfidence": "Types mixtes détectés, défaut TEXT", - "rowsTotal_one": "{{count}} lignes", - "rowsTotal_other": "{{count}} lignes", - "showingFirst": "premières {{count}}", - "import_one": "Importer {{count}} lignes", - "import_other": "Importer {{count}} lignes", - "importing": "Importation...", - "success_one": "{{count}} lignes importées dans \"{{table}}\"", - "success_other": "{{count}} lignes importées dans \"{{table}}\"", - "tableCreated": "Nouvelle table créée", - "openTable": "Fermer", - "noData": "Aucune donnée dans le presse-papiers", - "retry": "Réessayer", - "warningsCount_one": "{{count}} avertissements d'analyse", - "warningsCount_other": "{{count}} avertissements d'analyse", - "columnsLabel": "colonnes", - "rowsLabel": "lignes", - "stepConfigure": "Configurer la destination", - "stepReview": "Vérifier et ajuster", - "modeCreateHint": "Une nouvelle table sera créée", - "modeAppendHint": "Les lignes seront ajoutées à une table existante", - "maximize": "Agrandir", - "minimize": "Réduire", - "nSelected": "{{count}} sélectionnées", - "deleteSelected": "Supprimer la sélection", - "deleteColumn": "Supprimer la colonne", - "sourceColumn": "Colonne du presse-papiers", - "targetColumn": "Colonne cible", - "targetColumnPlaceholder": "Choisir la cible...", - "skipColumn": "Ignorer (ne pas importer)", - "createNewColumn": "Créer une nouvelle colonne" - }, - "aiActivity": { - "title": "Activité IA", - "description": "Journal de chaque appel MCP et des requêtes en attente de validation. Stockage local.", - "tabs": { - "events": "Événements", - "sessions": "Sessions" - }, - "empty": "Aucune activité MCP.", - "eventsCount_one": "{{count}} événement", - "eventsCount_other": "{{count}} événements", - "blockedCount_one": "{{count}} bloqué", - "blockedCount_other": "{{count}} bloqués", - "errorsCount_one": "{{count}} erreur", - "errorsCount_other": "{{count}} erreurs", - "sessionsCount_one": "{{count}} session", - "sessionsCount_other": "{{count}} sessions", - "events": "Événements", - "runQueries": "Requêtes", - "connections": "Connexions", - "client": "Client", - "rowsReturned": "Lignes retournées", - "approvalId": "ID validation", - "searchQuery": "Rechercher…", - "allTools": "Tous les outils", - "allStatuses": "Tous les statuts", - "clearAll": "Effacer", - "clearConfirm": "Supprimer tout l'historique d'activité IA ? Action irréversible.", - "exportNotebook": "Exporter en Notebook", - "exportSuccess": "Exporté vers {{path}}", - "viewDetails": "Voir les détails", - "copyQuery": "Copier la requête", - "openVisualExplain": "Ouvrir dans Visual Explain", - "copied": "Copié dans le presse-papier", - "detailTitle": "Détails de l'événement", - "col": { - "timestamp": "Heure", - "tool": "Outil", - "connection": "Connexion", - "query": "Requête", - "kind": "Type", - "duration": "Durée", - "status": "Statut", - "actions": "Actions" - }, - "sort": { - "sortBy": "Trier par {{field}}", - "sortByPlaceholder": "Trier par…", - "toggleAscending": "Tri croissant", - "toggleDescending": "Tri décroissant", - "ascending": "Asc", - "descending": "Desc", - "started": "Début", - "eventCount": "Événements", - "runQueries": "Requêtes exécutées" - }, - "searchSessions": "Rechercher session, client, connexion…", - "filteredFrom": "sur {{total}}", - "noMatches": "Aucune session ne correspond aux filtres.", - "status": { - "success": "Succès", - "blocked_readonly": "Bloquée (lecture seule)", - "blocked_pending_approval": "En attente", - "denied": "Refusée", - "error": "Erreur", - "timeout": "Délai dépassé" - }, - "queryKind": { - "select": "Lecture", - "write": "Écriture", - "ddl": "DDL", - "unknown": "Inconnu" - } - }, - "aiApproval": { - "title": "L'IA veut exécuter une écriture", - "subtitle": "Sur {{connection}} — examinez avant exécution.", - "subtitleWithClient": "{{client}} sur {{connection}} — examinez avant exécution.", - "query": "Requête", - "editQuery": "Modifier avant d'approuver", - "lockQuery": "Verrouiller", - "preflightPlan": "Plan d'exécution préalable", - "expandPlan": "Agrandir", - "collapsePlan": "Réduire", - "explainUnavailable": "EXPLAIN indisponible.", - "explainFailed": "EXPLAIN a échoué : {{error}}", - "reasonLabel": "Motif (facultatif)", - "reasonPlaceholder": "ex. Risqué en prod, confirmez…", - "approve": "Approuver", - "deny": "Refuser" - }, - "discordCallout": { - "title": "Nouvelle communauté Discord !", - "body": "Nous venons d’ouvrir une communauté dédiée à Tabularis : entraide, astuces et influence sur la roadmap.", - "cta": "Rejoindre maintenant", - "dismiss": "Fermer" - }, - "k8sConnections": { - "title": "Connexions Kubernetes", - "add": "Ajouter", - "empty": "Aucune connexion Kubernetes enregistrée. Cliquez sur « Ajouter » pour en créer une.", - "name": "Nom", - "namePlaceholder": "Mon cluster K8s", - "context": "Contexte", - "chooseContext": "Choisir un contexte...", - "namespace": "Namespace", - "chooseNamespace": "Choisir un namespace...", - "resourceType": "Type de ressource", - "resourceTypeService": "Service", - "resourceTypePod": "Pod", - "resourceName": "Nom de la ressource", - "chooseResource": "Choisir une ressource...", - "port": "Port du conteneur", - "test": "Tester", - "testing": "Test en cours...", - "errors": { - "nameRequired": "Le nom de la connexion est requis", - "contextRequired": "Le contexte Kubernetes est requis", - "namespaceRequired": "Le namespace est requis", - "resourceTypeInvalid": "Le type de ressource doit être \"service\" ou \"pod\"", - "resourceNameRequired": "Le nom de la ressource est requis", - "portInvalid": "Le port doit être compris entre 1 et 65535" - } - } -} diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json deleted file mode 100644 index e8c1796a..00000000 --- a/src/i18n/locales/it.json +++ /dev/null @@ -1,1438 +0,0 @@ -{ - "toolbar": { - "filters": "Filtri", - "toggleFilterPanel": "Pannello filtri strutturati", - "filterConditions": "Condizioni filtro", - "activeOf": "{{active}} di {{total}} attivi", - "noFilters": "Nessun filtro —", - "addFirstFilter": "aggiungi il primo filtro", - "noActiveFilters": "nessun filtro attivo", - "closePanelEsc": "Chiudi pannello filtri (ESC)", - "unset": "Rimuovi", - "sql": "SQL", - "addFilter": "Aggiungi filtro", - "applyAll": "Applica tutti", - "apply": "Applica", - "applied": "Applicato", - "switchToSql": "Passa all'input SQL WHERE", - "duplicateFilter": "Duplica filtro", - "removeFilter": "Rimuovi filtro", - "deselectFromApplyAll": "Deseleziona da Applica tutti", - "selectForApplyAll": "Seleziona per Applica tutti", - "valuePlaceholder": "valore", - "fromPlaceholder": "da", - "toPlaceholder": "a" - }, - "common": { - "save": "Salva", - "close": "Chiudi", - "cancel": "Annulla", - "delete": "Elimina", - "edit": "Modifica", - "loading": "Caricamento...", - "search": "Cerca...", - "noResults": "Nessun risultato trovato", - "error": "Errore", - "success": "Successo", - "ok": "OK" - }, - "sidebar": { - "connections": "Connessioni", - "settings": "Impostazioni", - "savedQueries": "Query Salvate", - "tables": "Tabelle", - "newConsole": "Nuova Console", - "newVisualQuery": "Nuova Query Visuale", - "refresh": "Aggiorna", - "refreshTables": "Aggiorna Tabelle", - "refreshViews": "Aggiorna Viste", - "createView": "Crea Nuova Vista", - "views": "Viste", - "noViews": "Nessuna vista trovata", - "editView": "Modifica Vista", - "viewDefinition": "Definizione Vista", - "dropView": "Elimina Vista", - "dropViewConfirm": "Sei sicuro di voler eliminare la vista \"{{view}}\"?", - "failGetViewDefinition": "Impossibile recuperare la definizione della vista: ", - "failDropView": "Eliminazione vista fallita: ", - "explorer": "Esplora", - "sqlEditor": "Editor SQL", - "loadingSchema": "Caricamento schema...", - "noSavedQueries": "Nessuna query salvata", - "searchFavorites": "Cerca nei preferiti...", - "noFavoritesSearchResults": "Nessun preferito corrisponde alla ricerca", - "execute": "Esegui", - "edit": "Modifica", - "delete": "Elimina", - "confirmDeleteQuery": "Sei sicuro di voler eliminare la query \"{{name}}\"?", - "confirmDeleteTitle": "Elimina Query", - "noTables": "Nessuna tabella trovata", - "columns": "colonne", - "keys": "chiavi", - "foreignKeys": "chiavi esterne", - "indexes": "indici", - "deleteColumn": "Elimina colonna", - "deleteColumnConfirm": "Sei sicuro di voler eliminare la colonna \"{{column}}\" dalla tabella \"{{table}}\"?\n\nATTENZIONE: Questo eliminerà permanentemente tutti i dati in questa colonna. L'azione non può essere annullata.", - "failDeleteColumn": "Eliminazione colonna fallita: ", - "failDeleteIndex": "Eliminazione indice fallita: ", - "modifyColumn": "Modifica colonna", - "copyName": "Copia nome", - "openInEditor": "Apri nell'editor", - "closePanel": "Chiudi pannello", - "setAsActive": "Imposta come attiva", - "deleteTable": "Elimina tabella", - "deleteTableConfirm": "Sei sicuro di voler eliminare la tabella \"{{table}}\"?", - "failDeleteTable": "Eliminazione tabella fallita: ", - "showData": "Mostra Dati", - "countRows": "Conta righe", - "viewSchema": "Vedi schema", - "viewERDiagram": "Visualizza Diagramma ER", - "generateSQL": "Genera SQL", - "addColumn": "Aggiungi colonna", - "addIndex": "Aggiungi Indice", - "deleteIndex": "Elimina indice", - "deleteIndexConfirm": "Eliminare l'indice \"{{name}}\"?", - "addFk": "Aggiungi Chiave Esterna", - "deleteFk": "Elimina FK", - "deleteFkConfirm": "Eliminare la chiave esterna \"{{name}}\"?", - "sqliteFkError": "SQLite non supporta l'eliminazione di FK tramite ALTER TABLE.", - "mcpServer": "Server MCP", - "routines": "Routine", - "functions": "Funzioni", - "procedures": "Procedure", - "noRoutines": "Nessuna routine trovata", - "refreshRoutines": "Aggiorna Routine", - "objectSummary": "Oggetti", - "databases": "Database", - "failGetRoutineDefinition": "Impossibile recuperare la definizione della routine: ", - "schemas": "Schemi", - "noSchemas": "Nessuno schema trovato", - "loadingSchemas": "Caricamento schemi...", - "schemaLoadError": "Caricamento degli schemi fallito", - "errorDetails": "Dettagli", - "copyError": "Copia messaggio d’errore", - "retry": "Riprova", - "expandExplorer": "Espandi Explorer", - "selectSchemas": "Seleziona Schemi", - "selectSchemasHint": "Seleziona gli schemi da caricare:", - "selectAll": "Seleziona Tutti", - "deselectAll": "Deseleziona Tutti", - "confirmSelection": "Conferma", - "editSchemas": "Modifica Schemi", - "selectConnection": "Seleziona Connessione", - "disconnect": "Disconnetti", - "switchConnection": "Cambia Connessione", - "noOtherConnections": "Nessun'altra connessione", - "openConnections": "Aperte", - "availableConnections": "Disponibili", - "splitVertical": "Dividi Verticale", - "splitHorizontal": "Dividi Orizzontale", - "separateConnections": "Separa Connessioni", - "splitGroup": "Gruppo Diviso", - "filterTables": "Filtra tabelle...", - "noTablesMatch": "Nessuna tabella trovata", - "filterDatabases": "Filtra database...", - "manageDatabases": "Gestisci Database", - "structure": "Struttura", - "favorites": "Preferiti", - "queryHistory": "Cronologia", - "noQueryHistory": "Nessuna cronologia query", - "noHistorySearchResults": "Nessuna query corrisponde alla ricerca", - "searchHistory": "Cerca nella cronologia...", - "clearAllHistory": "Cancella Tutta la Cronologia", - "historyRecoveredTitle": "Cronologia query azzerata", - "historyRecoveredBody": "Il file di cronologia era corrotto ed è stato spostato in backup. Le nuove query verranno registrate normalmente. File di backup:", - "historyRecoveredDismiss": "Chiudi", - "confirmDeleteHistoryEntry": "Sei sicuro di voler eliminare questa query dalla cronologia?", - "confirmClearHistory": "Sei sicuro di voler cancellare tutta la cronologia delle query per questa connessione?", - "confirmClearHistoryTitle": "Cancella Cronologia Query", - "addToFavorites": "Aggiungi ai Preferiti", - "insertToEditor": "Inserisci nell'Editor", - "openInNewTab": "Apri in Nuova Scheda", - "copyQuery": "Copia Query", - "runQuery": "Esegui Query", - "dateGroupToday": "Oggi", - "dateGroupYesterday": "Ieri", - "dateGroupThisWeek": "Questa Settimana", - "dateGroupThisMonth": "Questo Mese", - "dateGroupOlder": "Precedenti", - "notebooks": { - "tab": "Notebook", - "search": "Cerca notebook", - "refresh": "Aggiorna", - "empty": "Nessun notebook salvato.", - "noSearchResults": "Nessun notebook corrisponde alla ricerca.", - "open": "Apri", - "rename": "Rinomina", - "delete": "Elimina", - "deleteConfirm": "Eliminare il notebook \"{{title}}\"? L'operazione non è reversibile.", - "renamePlaceholder": "Nome del notebook" - } - }, - "mcp": { - "title": "Integrazione Server MCP", - "subtitle": "Connetti Tabularis a Claude Desktop, Cursor e altri", - "description": "Il Model Context Protocol (MCP) permette agli assistenti AI (come Claude) di connettersi ai tuoi strumenti locali. Tabularis espone un server MCP che permette all'AI di leggere lo schema del database ed eseguire query in sicurezza.", - "checking": "Verifica configurazione...", - "notFound": "File config non trovato (crealo manualmente)", - "installed": "Installato", - "install": "Installa Config", - "manualConfig": "CONFIGURAZIONE MANUALE", - "manualText": "Aggiungi questo al file di configurazione del client manualmente se l'installazione automatica fallisce.", - "successTitle": "Successo", - "successMsg": "Configurazione installata per {{client}}! Riavvia l'app per applicare.", - "errorTitle": "Installazione Fallita", - "clients": "CLIENT AI", - "manualCommand": "COMANDO MANUALE", - "manualCommandText": "Esegui questo comando nel terminale, poi riavvia Claude Code.", - "tabs": { - "setup": "Configurazione", - "activity": "Attività", - "safety": "Sicurezza" - }, - "safety": { - "readOnlyTitle": "Modalità sola lettura", - "readOnlyDefault": "Rendi tutte le query MCP di sola lettura", - "readOnlyDefaultDesc": "Blocca qualsiasi statement non-SELECT proveniente da MCP, salvo le connessioni esplicitamente abilitate.", - "readOnlyList": "Connessioni di sola lettura", - "readOnlyListDesc": "Queste connessioni rifiuteranno le scritture da MCP. Le altre si comportano normalmente.", - "allowList": "Consenti scritture da MCP", - "allowListDesc": "Tutte le altre connessioni restano in sola lettura. Solo quelle selezionate possono eseguire scritture.", - "approvalTitle": "Approvazione manuale", - "approvalMode": "Approvazione richiesta", - "approvalModeDesc": "Sospendi le scritture (o ogni query) chiedendo conferma all'utente in Tabularis prima dell'esecuzione.", - "modeOff": "Disattiva", - "modeWritesOnly": "Solo scritture", - "modeAll": "Tutte le query", - "approvalTimeout": "Timeout", - "approvalTimeoutDesc": "Quanti secondi il processo MCP attende la decisione dell'utente prima di abortire.", - "preflightExplain": "EXPLAIN preliminare", - "preflightExplainDesc": "Esegui un EXPLAIN della query prima di mostrare il modal di approvazione, così l'utente vede il piano di esecuzione." - } - }, - "connections": { - "title": "Connessioni", - "addConnection": "Aggiungi Connessione", - "noConnections": "Nessuna connessione attiva", - "createFirst": "Crea la tua prima connessione", - "active": "Attiva", - "disconnect": "Disconnetti", - "connect": "Connetti", - "edit": "Modifica", - "delete": "Elimina", - "clone": "Clona", - "confirmDelete": "Sei sicuro di voler eliminare questa connessione?", - "deleteTitle": "Conferma eliminazione", - "failConnect": "Impossibile connettersi a {{name}}. Verifica le impostazioni o assicurati che il database sia in esecuzione.", - "failDisconnect": "Impossibile disconnettersi dal database", - "failDuplicate": "Impossibile duplicare la connessione", - "open": "Aperta", - "pluginDisabled": "Plugin disabilitato", - "connectionCount_one": "{{count}} connessione/i", - "connectionCount_other": "{{count}} connessione/i", - "noConnectionsHint": "Crea la tua prima connessione per iniziare.", - "searchPlaceholder": "Cerca connessioni...", - "noSearchResults": "Nessuna connessione corrisponde a \"{{query}}\"", - "gridView": "Vista griglia", - "listView": "Vista lista", - "export": "Esporta connessioni", - "import": "Importa connessioni", - "exportTitle": "Esporta connessioni", - "exportWarning": "Il file esportato conterrà le password del database e SSH in chiaro. Conservalo in modo sicuro." - }, - "connectionAppearance": { - "section": "Aspetto", - "accentColor": "Colore di accento", - "customColor": "Personalizzato", - "resetColor": "Ripristina predefinito", - "icon": "Icona", - "tabs": { - "default": "Predefinito", - "pack": "Icona", - "emoji": "Emoji", - "image": "Immagine" - }, - "previewLabel": "Anteprima", - "defaultHint": "In uso l'icona predefinita del driver.", - "emojiSelected": "Emoji selezionato", - "emojiHint": "Clicca un altro emoji qui sotto per cambiarlo.", - "removeEmoji": "Rimuovi", - "chooseImage": "Scegli immagine…", - "removeImage": "Rimuovi", - "imageHint": "PNG, JPG, WebP o SVG · max 512 KB" - }, - "settings": { - "general": "Generali", - "info": "Info", - "dataEditor": "Editor Dati", - "pageSize": "Dimensione Pagina Risultati (Limite)", - "pageSizeDesc": "Limita il numero di righe caricate per query per prevenire problemi di performance. Imposta a 0 per disabilitare (non consigliato).", - "rows": "righe", - "copyFormat": "Formato di copia predefinito", - "copyFormatDesc": "Scegli il formato predefinito per la copia delle righe con Ctrl+C / Cmd+C.", - "csvDelimiter": "Delimitatore CSV", - "csvDelimiterDesc": "Scegli il delimitatore predefinito utilizzato per la copia o l'esportazione delle righe in formato CSV.", - "delimiterComma": "Virgola (,)", - "delimiterSemicolon": "Punto e virgola (;)", - "delimiterTab": "Tab", - "delimiterPipe": "Pipe (|)", - "detectJsonInTextColumns": "Rileva JSON nelle colonne di testo", - "detectJsonInTextColumnsDesc": "Mostra il visualizzatore JSON quando una cella di testo non tipizzata contiene un oggetto o un array JSON. Aggiunge un piccolo costo di analisi per cella.", - "appearance": "Aspetto", - "localization": "Localizzazione", - "themeSelection": "Selezione Tema", - "fontFamily": "Famiglia Font", - "fonts": { - "custom": "Font Personalizzato", - "customPlaceholder": "es. Comic Sans MS", - "enterFontName": "Inserisci il nome del font sopra" - }, - "fontSize": "Dimensione Font", - "fontSizeLabel": "Dimensione Font", - "fontSizeDesc": "Regola la dimensione base del font usata nell'applicazione (10-20px).", - "preview": "Anteprima", - "fontPreviewText": "La volpe marrone salta sopra il cane pigro", - "appearance_general": "Generali", - "appearance_sqlEditor": "Editor SQL", - "appearance_editorTheme": "Tema dell'Editor", - "appearance_editorThemeDesc": "Scegli un tema indipendente per l'editor SQL, oppure mantienilo sincronizzato con il tema dell'app.", - "appearance_sameAsApp": "Come l'app", - "appearance_editorFontFamily": "Font dell'Editor", - "appearance_editorFontSize": "Dimensione Font dell'Editor", - "appearance_editorLineHeight": "Altezza Riga", - "appearance_editorTabSize": "Dimensione Tab", - "appearance_editorWordWrap": "A Capo Automatico", - "appearance_editorWordWrapDesc": "Manda a capo le righe lunghe nell'editor invece di scorrere orizzontalmente.", - "appearance_editorShowLineNumbers": "Mostra Numeri di Riga", - "appearance_editorShowLineNumbersDesc": "Visualizza i numeri di riga nel margine dell'editor.", - "appearance_editorAcceptSuggestionOnEnter": "Accetta Suggerimento con Invio", - "appearance_editorAcceptSuggestionOnEnterDesc": "Permetti al tasto Invio (oltre a Tab) di accettare il suggerimento di autocompletamento attivo. Quando disattivato, Invio inserisce sempre una nuova riga.", - "editConfigJson": "Modifica config.json", - "editConfigJsonDesc": "Modifica direttamente il file di configurazione grezzo. È necessario un riavvio per applicare le modifiche.", - "configJsonModal": { - "title": "config.json", - "saveAndRestart": "Salva e Riavvia", - "restartNow": "Riavvia Ora", - "restartRequired": "È necessario un riavvio per applicare le modifiche.", - "restartMessage": "Il file di configurazione è stato salvato. Riavviare ora per applicare le modifiche?" - }, - "language": "Lingua", - "languageDesc": "Scegli la tua lingua preferita. 'Auto' userà la lingua di sistema.", - "auto": "Auto (Sistema)", - "projectStatus": "Stato del Progetto", - "roadmapDesc": "Questo progetto è un Work In Progress (WIP). Le funzioni principali sono stabili, ma abbiamo grandi piani.", - "support": "Supporta lo Sviluppo", - "supportDesc": "Se ti piace tabularis e vuoi vedere nuove funzionalità, considera di supportare il progetto contribuendo al codice, segnalando bug o mettendo una stella su GitHub.", - "version": "Versione", - "starOnGithub": "Star su GitHub", - "ai": { - "tab": "AI", - "title": "Configurazione AI", - "description": "Configura i provider AI per abilitare la generazione di SQL da linguaggio naturale. Le chiavi sono salvate in modo sicuro nel portachiavi di sistema.", - "enable": "Abilita Funzionalità AI", - "enableDesc": "Mostra i pulsanti AI Assist ed Explain nell'editor", - "defaultProvider": "Provider Predefinito", - "defaultModel": "Modello Predefinito", - "configuration": "Configurazione", - "selectProviderFirst": "Seleziona prima un provider", - "modelDesc": "Seleziona il modello da utilizzare per la generazione e la spiegazione.", - "manageKeys": "Gestisci Chiavi API", - "apiKey": "Chiave API {{provider}}", - "configured": "Configurato", - "notConfigured": "Non configurato", - "enterKey": "Inserisci Chiave {{provider}}", - "keyStoredSecurely": "La chiave API è salvata in modo sicuro nel portachiavi. Impostare una chiave qui sovrascrive la variabile d'ambiente.", - "fromEnv": "Variabile Ambiente", - "fromEnvTooltip": "Questa chiave è caricata da una variabile d'ambiente", - "envVariableDetected": "È presente una variabile d'ambiente, ma puoi sovrascriverla impostando una chiave qui sopra.", - "reset": "Ripristina", - "changeKey": "Cambia", - "resetKey": "Elimina chiave personalizzata e ripristina variabile d'ambiente (se presente)", - "keyResetSuccess": "Chiave personalizzata eliminata con successo", - "promptCustomization": "Personalizzazione Prompt", - "systemPrompt": "Generazione SQL", - "systemPromptDesc": "Istruzioni per la generazione SQL tramite AI. Usa {{SCHEMA}} come segnaposto per la struttura del database.", - "enterSystemPrompt": "Inserisci prompt di sistema...", - "resetDefault": "Ripristina Predefinito", - "savePrompt": "Salva Prompt", - "explainPrompt": "Spiegazione Query", - "explainPromptDesc": "Istruzioni per la spiegazione delle query tramite AI. Usa {{LANGUAGE}} come segnaposto per la lingua di output.", - "enterExplainPrompt": "Inserisci prompt di spiegazione...", - "cellnamePrompt": "Prompt Nome Cella Notebook", - "cellnamePromptDesc": "Personalizza le istruzioni per la generazione AI del nome cella nei notebook. Il contenuto della cella (SQL o Markdown) viene inviato come messaggio utente.", - "enterCellnamePrompt": "Inserisci prompt nome cella...", - "tabrenamePrompt": "Prompt Nome Tab Query", - "tabrenamePromptDesc": "Personalizza le istruzioni per la generazione AI del nome delle tab risultato query. La query SQL viene inviata come messaggio utente.", - "enterTabrenamePrompt": "Inserisci prompt nome tab query...", - "explainplanPrompt": "Prompt Analisi Piano di Esecuzione", - "explainplanPromptDesc": "Personalizza le istruzioni per l'analisi AI dei piani EXPLAIN. Usa {{LANGUAGE}} per la lingua di output.", - "enterExplainplanPrompt": "Inserisci prompt analisi piano di esecuzione...", - "keySaved": "Chiave API salvata in modo sicuro", - "promptSaved": "Prompt di sistema salvato con successo", - "explainPromptSaved": "Prompt di spiegazione salvato con successo", - "promptReset": "Prompt di sistema ripristinato al predefinito", - "explainPromptReset": "Prompt di spiegazione ripristinato al predefinito", - "modelPlaceholder": "Seleziona un modello", - "searchPlaceholder": "Cerca modelli...", - "noResults": "Nessun modello trovato", - "refresh": "Aggiorna Modelli", - "refreshSuccess": "Modelli AI aggiornati dai provider", - "refreshError": "Impossibile aggiornare i modelli", - "ollamaConnected": "Ollama connesso ({{count}} modelli trovati)", - "ollamaNotDetected": "Ollama non rilevato sulla porta {{port}}. È in esecuzione?", - "ollamaPort": "Porta Ollama", - "modelNotFound": "Modello {{model}} non trovato in {{provider}}. Potrebbe non funzionare correttamente.", - "customOpenaiEndpoint": "Endpoint Personalizzato", - "endpointUrl": "URL Endpoint", - "endpointUrlDesc": "L'URL base della tua API compatibile OpenAI. Esempi: https://api.groq.com/openai/v1, http://localhost:8000/v1", - "customOpenaiModelPlaceholder": "es., llama3-70b-8192, mixtral-8x7b", - "customOpenaiModelDesc": "Inserisci il nome del modello fornito dal tuo servizio compatibile OpenAI.", - "customOpenaiModelHelp": "Inserisci il nome esatto del modello per il tuo provider compatibile OpenAI." - }, - "updates": "Aggiornamenti", - "openSourceLibraries": "Librerie Open Source", - "openSourceLibrariesDesc": "Consulta le dipendenze open source dirette usate dall'app, dal backend e dalla toolchain.", - "openSourceLibrariesSource": "Dipendenze dirette dichiarate in package.json e src-tauri/Cargo.toml.", - "openSourceLibrariesTotal": "{{count}} librerie", - "openSourceLibrariesOpenProject": "Apri pagina del pacchetto", - "openSourceLibrariesSections": { - "npm-runtime": "Dipendenze Frontend", - "npm-tooling": "Dipendenze Dev Frontend", - "cargo-runtime": "Dipendenze Rust", - "cargo-tooling": "Build e Test Rust" - }, - "openSourceLibrariesEcosystem": { - "npm": "ecosistema npm", - "cargo": "ecosistema Cargo" - }, - "autoCheckUpdates": "Controlla aggiornamenti all'avvio", - "autoCheckUpdatesDesc": "Controlla automaticamente nuove versioni all'avvio dell'app", - "checkNow": "Controlla Aggiornamenti Ora", - "checking": "Controllo...", - "currentVersion": "Versione Corrente", - "logs": "Log", - "logSettings": "Impostazioni Log", - "enableLogging": "Abilita Logging", - "enableLoggingDesc": "Raccogli i log dell'applicazione in memoria per il debug", - "maxLogEntries": "Numero massimo di log", - "maxLogEntriesDesc": "Quanti log mantenere in memoria (1-10000)", - "currentLogCount": "Log attuali", - "clearLogs": "Pulisci Log", - "clearLogsConfirm": "Sei sicuro di voler cancellare tutti i log?", - "exportLogs": "Esporta Log", - "exportLogsSuccess": "Log esportati negli appunti", - "noLogs": "Nessun log disponibile", - "refreshLogs": "Aggiorna", - "logLevel": "Livello", - "logMessage": "Messaggio", - "logTimestamp": "Timestamp", - "filterByLevel": "Filtra per livello", - "allLevels": "Tutti i livelli", - "debug": "Debug", - "warn": "Warn", - "error": "Error", - "connectionHealthCheck": "Controllo Connessione", - "pingInterval": "Intervallo di Ping", - "pingIntervalDesc": "Frequenza con cui verificare se le connessioni attive sono ancora raggiungibili. Imposta 0 per disabilitare.", - "seconds": "secondi", - "entries": "voci", - "queryHistory": "Cronologia Query", - "queryHistoryMaxEntries": "Max Voci Cronologia", - "queryHistoryMaxEntriesDesc": "Numero massimo di voci nella cronologia delle query salvate per connessione.", - "startup": "Avvio", - "showWelcome": "Mostra schermata di benvenuto", - "showWelcomeDesc": "Mostra la schermata di benvenuto all'avvio dell'applicazione.", - "erDiagram": "Diagramma ER", - "erDiagramDefaultLayout": "Layout Predefinito", - "erDiagramDefaultLayoutDesc": "Scegli la direzione di default per i diagrammi ER", - "plugins": { - "title": "Plugin", - "overviewTitle": "Centro Plugin", - "overviewDesc": "Installa estensioni, gestisci i driver dei plugin e tieni sotto controllo le impostazioni di runtime.", - "installedMetric": "Installati", - "enabledMetric": "Abilitati", - "registryMetric": "Registro", - "updatesMetric": "Aggiornamenti", - "available": "Plugin Disponibili", - "availableDesc": "Sfoglia e installa plugin dal registro.", - "refresh": "Aggiorna", - "loadingRegistry": "Caricamento registro plugin...", - "registryError": "Impossibile caricare il registro", - "installed": "Installato", - "by": "di", - "platformNotSupported": "Non disponibile per la tua piattaforma", - "update": "Aggiorna", - "install": "Installa", - "upToDate": "Aggiornato", - "downgrade": "Effettua downgrade a", - "olderVersions": "Versioni precedenti", - "noPlugins": "Nessun plugin disponibile nel registro.", - "searchPlaceholder": "Cerca plugin…", - "filterAll": "Tutti", - "filterInstalled": "Installati", - "filterUpdates": "Aggiornamenti", - "searchNoResults": "Nessun plugin corrisponde alla ricerca.", - "requiresVersion": "Richiede Tabularis ≥ {{version}}", - "remove": "Rimuovi", - "removeTitle": "Rimuovi Plugin", - "confirmRemove": "Sei sicuro di voler rimuovere \"{{name}}\"? I file del plugin verranno eliminati.", - "installError": { - "title": "Installazione fallita", - "subtitle": "Si è verificato un errore durante l'installazione del plugin. Vedi i dettagli qui sotto.", - "details": "Dettagli errore", - "copy": "Copia", - "copied": "Copiato!" - }, - "startError": { - "title": "Plugin non avviato", - "subtitle": "Impossibile avviare il processo del plugin. Controlla i dettagli dell'errore.", - "interpreterHint": "Questo plugin potrebbe richiedere un interprete (es. Python). Usa le Impostazioni Plugin per configurare il percorso dell'interprete.", - "details": "Dettagli Errore", - "copy": "Copia", - "copied": "Copiato!", - "configure": "Configura Interprete" - }, - "pluginSettings": { - "title": "Impostazioni Plugin", - "interpreter": "Interprete", - "interpreterDesc": "Opzionale. Specifica l'eseguibile usato per avviare questo plugin (es. python3 su macOS/Linux, python o percorso completo su Windows). Lascia vuoto per usare il valore predefinito.", - "interpreterPlaceholder": "es. python3", - "browse": "Sfoglia...", - "fieldRequired": "{{label}} è obbligatorio", - "saved": "Salvato", - "resetToDefault": "Ripristina predefinito", - "builtin": { - "mysql": { - "maxAllowedPacket": { - "label": "Max Allowed Packet", - "description": "Dimensione massima del pacchetto usata dal connettore MySQL." - }, - "socketTimeout": { - "label": "Timeout Socket", - "description": "Timeout del socket in millisecondi." - }, - "connectTimeout": { - "label": "Timeout Connessione", - "description": "Timeout di connessione in millisecondi." - }, - "timezone": { - "label": "Fuso Orario", - "description": "Fuso orario della sessione inviato a MySQL dopo la connessione." - } - } - } - } - }, - "shortcuts": { - "title": "Scorciatoie da tastiera", - "categories": { - "editor": "Editor", - "navigation": "Navigazione", - "data_grid": "Griglia dati" - }, - "runQuery": "Esegui query", - "runQueryEditor": "Esegui query (nell'editor)", - "tabSwitcher": "Cambia tab", - "copySelection": "Copia selezione", - "toggleSidebar": "Mostra/nascondi sidebar", - "openConnections": "Apri connessioni", - "newConnection": "Nuova connessione", - "newTab": "Nuovo tab", - "closeTab": "Chiudi tab", - "nextPage": "Pagina successiva", - "prevPage": "Pagina precedente", - "switchConnection": "Passa alla connessione 1–9", - "resetToDefault": "Ripristina predefinito", - "notOverridable": "Integrata, non personalizzabile", - "pressKeys": "Premi la combinazione di tasti...", - "notebookRunAll": "Esegui Tutte le Celle", - "pasteImportClipboard": "Importa dagli Appunti", - "quickNavigator": "Navigatore rapido" - }, - "aiActivity": "Attività AI" - }, - "update": { - "newVersionAvailable": "Nuova Versione Disponibile", - "version": "Versione", - "releaseNotes": "Note di Rilascio", - "downloadAndInstall": "Scarica e Installa", - "downloading": "Download in corso...", - "installing": "Installazione in corso...", - "installingMessage": "L'app si riavvierà automaticamente dopo l'installazione", - "viewOnGitHub": "Visualizza su GitHub", - "remindLater": "Ricordamelo Dopo", - "upToDate": "Sei aggiornato", - "updateAvailable": "La versione {{version}} è disponibile", - "error": "Errore Aggiornamento", - "managedByPackageManager": "Aggiornamenti gestiti da {{source}}", - "managedByPackageManagerDesc": "Usa il tuo package manager per aggiornare Tabularis." - }, - "ai": { - "explain": "Spiega", - "generateSql": "Genera SQL" - }, - "newConnection": { - "namePlaceholder": "Inserisci il nome della connessione", - "nameRequired": "Il nome della connessione è richiesto", - "dbNameRequired": "Il nome del database è richiesto", - "dbType": "Tipo Database", - "host": "Host", - "port": "Porta", - "username": "Nome utente", - "password": "Password", - "passwordPlaceholder": "Inserisci password", - "usernamePlaceholder": "Inserisci nome utente", - "filePath": "Percorso File", - "folderPath": "Percorso Cartella", - "dbName": "Nome Database", - "dbNamePlaceholder": "Nome database", - "loadDatabases": "Carica Database", - "loadingDatabases": "Caricamento...", - "selectDatabases": "Database", - "appearance": "Aspetto", - "noDatabasesSelected": "Seleziona almeno un database", - "selectedDatabases": "{{count}} database selezionato/i", - "selectDatabase": "Seleziona un database", - "noDatabasesFound": "Nessun database trovato", - "failLoadDatabases": "Impossibile caricare i database. Verifica le credenziali.", - "filePathPlaceholder": "/percorso/assoluto/db.sqlite", - "folderPathPlaceholder": "/percorso/assoluto/cartella", - "browseFile": "Sfoglia file", - "browseFolder": "Sfoglia cartella", - "useSsh": "Usa Tunnel SSH", - "sshHost": "Host SSH", - "sshPort": "Porta SSH", - "sshUser": "Utente SSH", - "sshPassword": "Password SSH", - "sshPasswordMissing": "Password SSH mancante. Per favore reinseriscila.", - "sshPasswordPlaceholder": "Inserisci password SSH", - "sshKeyFile": "File Chiave SSH (Opzionale)", - "sshKeyFilePlaceholder": "/percorso/id_rsa", - "sshKeyPassphrase": "Passphrase Chiave SSH (Opzionale)", - "sshKeyPassphrasePlaceholder": "Inserisci passphrase se la chiave è cifrata", - "saveKeychain": "Salva password nel Portachiavi", - "testConnection": "Testa Connessione", - "save": "Salva", - "failSave": "Salvataggio connessione fallito", - "selectSshConnection": "Seleziona Connessione SSH", - "useSshConnection": "Usa Connessione SSH Esistente", - "createInlineSsh": "Configura SSH Inline", - "manageSshConnections": "Gestisci Connessioni SSH", - "noSshConnections": "Nessuna connessione SSH disponibile", - "sslMode": "Modalità SSL", - "sslModes": { - "disable": "Disabilitato", - "allow": "Permetti", - "prefer": "Preferito", - "require": "Richiesto", - "verify-ca": "Verifica CA", - "verify-full": "Verifica completa" - }, - "chooseContext": "Scegli un contesto...", - "chooseK8s": "Scegli una connessione...", - "chooseNamespace": "Scegli un namespace...", - "chooseResource": "Scegli una risorsa...", - "createInlineK8s": "Inline", - "k8sContext": "Contesto", - "k8sNamespace": "Namespace", - "k8sNotAvailable": "Kubernetes non è disponibile per questo driver.", - "k8sPort": "Porta container", - "k8sResourceName": "Nome risorsa", - "k8sResourceType": "Tipo di risorsa", - "k8sResourceTypePod": "Pod", - "k8sResourceTypeService": "Service", - "k8sSelectType": "Seleziona tipo...", - "manageK8s": "Gestisci", - "noK8sConnections": "Nessuna connessione salvata — creane una qui sotto", - "noK8sContexts": "Nessun contesto trovato (kubectl è installato?)", - "selectContextFirst": "Seleziona prima un contesto", - "selectK8sConnection": "Seleziona connessione K8s", - "selectTypeFirst": "Seleziona prima contesto/namespace/tipo", - "useK8s": "Usa Port-Forward Kubernetes", - "useK8sConnection": "Connessione salvata" - }, - "sshConnections": { - "title": "Connessioni SSH", - "createNew": "Crea Nuova Connessione SSH", - "noConnections": "Nessuna connessione SSH configurata", - "name": "Nome Connessione", - "namePlaceholder": "Il Mio Server SSH", - "authType": "Tipo di Autenticazione", - "authTypePassword": "Password", - "authTypeSshKey": "Chiave SSH", - "edit": "Modifica", - "delete": "Elimina", - "save": "Salva", - "update": "Aggiorna", - "cancel": "Annulla", - "confirmDelete": "Sei sicuro di voler eliminare questa connessione SSH?", - "failSave": "Salvataggio connessione SSH fallito", - "failDelete": "Eliminazione connessione SSH fallita", - "fillRequired": "Per favore compila tutti i campi obbligatori", - "keyFile": "File chiave", - "quickTest": "Test connessione rapido", - "testFailed": "Test connessione fallito", - "savedInKeychain": "Password salvata nel portachiavi di sistema" - }, - "dataGrid": { - "newRow": "NUOVA", - "noData": "Nessun dato da visualizzare", - "deleteRow": "Elimina riga", - "deleteRows_one": "Elimina {{count}} righe", - "deleteRows_other": "Elimina {{count}} righe", - "updateFailed": "Aggiornamento fallito: ", - "null": "null", - "sortByAsc": "Ordina per {{col}} ASC", - "sortByDesc": "Ordina per {{col}} DESC", - "clearSort": "Rimuovi ordinamento", - "copyCell": "Copia cella", - "copySelectedRows": "Copia riga/righe selezionate", - "copyColumnName": "Copia nome colonna", - "copyColumnNameQuoted": "Copia come `colonna`", - "copyColumnNameTable": "Copia come tabella.colonna", - "copied": "Copiato negli appunti", - "revertSelected": "Ripristina selezionato", - "setGenerate": "Imposta GENERATED", - "setNull": "Imposta NULL", - "setDefault": "Imposta DEFAULT", - "setEmpty": "Imposta VUOTO", - "previewReferenced": "Anteprima record correlato", - "openReferenced": "Apri la riga referenziata in {{table}}" - }, - "newRow": { - "title": "Nuova riga", - "insert": "Inserisci", - "cancel": "Annulla", - "failInsert": "Inserimento riga fallito: ", - "failLoad": "Caricamento schema fallito: ", - "loading": "Caricamento...", - "selectValue": "Seleziona valore...", - "noOptions": "Nessuna opzione trovata", - "autoGenerated": "(Auto-generato)", - "required": "Richiesto", - "primaryKey": "Chiave Primaria", - "auto": "Auto" - }, - "editor": { - "noTabs": "Nessuna scheda aperta per questa connessione.", - "newConsole": "Nuova Console", - "noActiveSession": "Nessuna sessione attiva. Seleziona una connessione.", - "stop": "Stop", - "run": "Esegui", - "export": "Esporta", - "connected": "Connesso", - "disconnected": "Disconnesso", - "newRow": "Nuova riga", - "rowsRetrieved": "{{count}} righe recuperate", - "autoPaginated": "Impaginazione automatica", - "pageOf": "Pagina {{current}} di {{total}}", - "page": "Pagina {{current}}", - "jumpToPage": "Clicca per saltare alla pagina", - "loadRowCount": "Carica conteggio righe", - "executePrompt": "Esegui una query per vedere i risultati", - "tableRunPrompt": "Premi Esegui (Ctrl/Command+F5) per caricare i dati della tabella", - "closeTab": "Chiudi scheda", - "closeOthers": "Chiudi altre schede", - "closeRight": "Chiudi schede a destra", - "closeLeft": "Chiudi schede a sinistra", - "closeAll": "Chiudi tutte le schede", - "saveQuery": "Salva Query", - "saveThisQuery": "Salva questa query", - "noValidQueries": "Nessuna query valida trovata", - "queryFailed": "Esecuzione query fallita.", - "showErrorDetails": "Mostra dettagli", - "hideErrorDetails": "Nascondi dettagli", - "errorBoundary": { - "title": "L'editor si è bloccato in modo imprevisto", - "description": "Qualcosa nell'editor non è riuscito a renderizzarsi. L'errore è mostrato qui sotto — riprova oppure torna alle connessioni.", - "retry": "Riprova", - "closeCurrentTab": "Chiudi scheda corrente", - "backToConnections": "Torna alle connessioni", - "showDetails": "Mostra dettagli tecnici" - }, - "newVisualQuery": "Nuova Query Visuale", - "activeDatabase": "Database attivo", - "tabSwitcher": { - "title": "Tab Aperte", - "hint": "Ctrl+Tab", - "escHint": "Esc per chiudere" - }, - "quickNavigator": { - "placeholder": "Cerca tabelle, viste, routine, trigger...", - "noResults": "Nessun elemento corrispondente trovato", - "count_one": "1 elemento", - "count_other": "{{count}} elementi", - "navigationHint": "↑↓ per navigare, Invio per aprire", - "escHint": "Esc per chiudere", - "type_table": "tabella", - "type_view": "vista", - "type_routine": "routine", - "type_trigger": "trigger", - "actions": { - "inspect": "Ispeziona struttura", - "newConsole": "Nuova console", - "generateSql": "Genera modelli SQL", - "countRows": "Conta righe", - "query": "Esegui query SELECT", - "copyName": "Copia nome" - } - }, - "submitChanges": "Invia Modifiche", - "rollbackChanges": "Annulla Modifiche", - "applyToAll": "Applica a tutto", - "executingQuery": "Esecuzione query...", - "exporting": "Esportazione in corso...", - "rowsProcessed": "Righe processate", - "queryParameters": "Parametri Query", - "convertToConsole": "Converti in Console", - "parameters": "Parametri", - "paramValuePlaceholder": "Valore (es. 'testo' o 123)", - "failedCreateRow": "Impossibile creare nuova riga: ", - "failedProcessInsertions": "Impossibile processare gli inserimenti: ", - "newNotebook": "Nuovo Notebook", - "visualExplain": { - "title": "Visual Explain", - "buttonShort": "Piano Query", - "loading": "Esecuzione EXPLAIN...", - "planningTime": "Pianificazione", - "executionTime": "Esecuzione", - "totalCost": "Costo Totale", - "estRows": "Righe Stimate", - "actualRows": "Righe Reali", - "cost": "Costo", - "time": "Tempo", - "loops": "Cicli", - "filter": "Filtro", - "indexCondition": "Cond. Indice", - "relation": "Tabella", - "nodeType": "Operazione", - "rawOutput": "Output Grezzo", - "analyze": "Analizza", - "analyzeWarning": "ANALYZE esegue la query. Usare con cautela su istruzioni che modificano dati.", - "notExplainable": "EXPLAIN è supportato solo per istruzioni DML (SELECT, INSERT, UPDATE, DELETE). Le istruzioni DDL come CREATE, DROP o ALTER non possono essere analizzate.", - "contextMenuExplain": "Piano Query", - "rerun": "Riesegui", - "close": "Chiudi", - "graphView": "Grafo", - "tableView": "Tabella", - "general": "Generale", - "analyzeData": "Dati Analyze", - "extraDetails": "Extra", - "selectNode": "Seleziona un nodo per i dettagli", - "buffersHit": "Buffer Hit", - "buffersRead": "Buffer Letti", - "joinType": "Tipo Join", - "hashCondition": "Cond. Hash", - "topIssues": "Punti Critici", - "noIssues": "Nessun problema rilevante nel riepilogo del piano corrente.", - "highestCost": "Costo Più Alto", - "slowestStep": "Step Più Lento", - "largestEstimateGap": "Scostamento Stima", - "overEstimate": "Le righe reali superano la stima", - "underEstimate": "La stima supera le righe reali", - "sequentialScans": "Scansioni Sequenziali", - "tempOperations": "Operazioni Temp o Sort", - "scanOperations": "Rilevate operazioni con scansione pesante", - "sortOrTempOperations": "Rilevato lavoro di sort o temporaneo", - "driverNotes": "Note Driver", - "overview": "Panoramica", - "showOverview": "Mostra panoramica", - "hideOverview": "Nascondi panoramica", - "postgresAnalyzeLegend1": "PostgreSQL ANALYZE include righe reali, tempi, cicli e contatori buffer quando disponibili.", - "postgresAnalyzeLegend2": "Scostamenti elevati tra stima e reale indicano spesso statistiche non aggiornate o predicati difficili da modellare.", - "postgresEstimateLegend1": "PostgreSQL senza ANALYZE mostra solo le stime del planner.", - "postgresEstimateLegend2": "Abilita ANALYZE per ispezionare righe reali, tempi, cicli e buffer.", - "mysqlAnalyzeLegend1": "MySQL e MariaDB espongono metriche reali solo con le varianti supportate di EXPLAIN ANALYZE o ANALYZE FORMAT.", - "mysqlAnalyzeLegend2": "I server meno recenti possono ripiegare su piani stimati con meno metriche.", - "mysqlEstimateLegend1": "MySQL e MariaDB possono ripiegare su EXPLAIN FORMAT=JSON o sull'EXPLAIN tabellare in base alla versione del server.", - "mysqlEstimateLegend2": "Se il tempo manca, il server ha probabilmente restituito un piano solo stimato.", - "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN è leggero e soprattutto strutturale.", - "sqliteLegend2": "Costo, tempi e stime di righe spesso non sono disponibili come in PostgreSQL e MySQL.", - "aiAnalysis": "Analisi AI", - "aiAnalysisTitle": "Analisi AI del Piano di Esecuzione", - "aiAnalyzing": "Analisi del piano di esecuzione con AI...", - "aiConfigRequired": "Provider AI non configurato. Vai su Impostazioni > AI." - }, - "notebook": { - "addSqlCell": "Aggiungi Cella SQL", - "addMarkdownCell": "Aggiungi Cella Markdown", - "addCell": "Aggiungi", - "runAll": "Esegui Tutto", - "runAllTooltip": "Esegui tutte le celle SQL dall'alto in basso", - "runCell": "Esegui Cella", - "deleteCell": "Elimina Cella", - "moveCellUp": "Sposta Su", - "moveCellDown": "Sposta Giù", - "export": "Esporta Notebook", - "import": "Importa Notebook", - "emptyNotebook": "Questo notebook è vuoto. Aggiungi una cella per iniziare.", - "markdownPlaceholder": "Scrivi Markdown qui...", - "togglePreview": "Anteprima", - "sqlCell": "SQL", - "markdownCell": "Markdown", - "invalidFile": "Formato file notebook non valido", - "importSuccess": "Notebook importato con successo", - "exportSuccess": "Notebook esportato con successo", - "cellResult_one": "{{count}} righe · {{time}}ms", - "cellResult_other": "{{count}} righe · {{time}}ms", - "stopOnError": "Ferma su Errore", - "stopOnErrorTooltip": "Ferma l'esecuzione quando una cella fallisce", - "runAllComplete": "Esecuzione Completata", - "succeeded": "riuscite", - "failed": "fallite", - "skipped": "saltate", - "toggleChart": "Mostra/Nascondi Grafico", - "chartType": "Grafico", - "chartLabel": "Etichetta", - "chartValues": "Valori", - "exportCsv": "Esporta come CSV", - "exportJson": "Esporta come JSON", - "exportHtml": "Esporta come HTML", - "parameters": "Parametri", - "paramName": "nome", - "paramValue": "valore", - "invalidParamName": "Nome parametro non valido", - "parallelExecution": "Esecuzione Parallela (Esegui Tutto)", - "executionHistory": "Cronologia Esecuzioni", - "noHistory": "Nessuna cronologia di esecuzione", - "collapseCell": "Comprimi Cella", - "expandCell": "Espandi Cella", - "collapseAll": "Comprimi Tutto", - "expandAll": "Espandi Tutto", - "outline": "Sommario", - "cellNamePlaceholder": "Senza nome", - "editCellName": "Modifica nome cella", - "aiGenerateName": "Genera nome con AI", - "generatingName": "Generazione nome...", - "aiGenerateOutlineNames": "Genera nomi per le celle senza nome con AI", - "undo": "Annulla", - "redo": "Ripeti", - "history": { - "title": "Cronologia modifiche", - "change": { - "initial": "Versione iniziale", - "editCell": "Modificata cella {{n}}", - "addSql": "Aggiunta cella SQL {{n}}", - "addMarkdown": "Aggiunta cella Markdown {{n}}", - "deleteCell": "Eliminata cella {{n}}", - "reorder": "Celle riordinate", - "renameCell": "Rinominata cella {{n}}", - "schemaCell": "Database cambiato (cella {{n}})", - "chartCell": "Grafico cambiato (cella {{n}})", - "parallelCell": "Parallelo commutato (cella {{n}})", - "collapse": "Celle compresse/espanse", - "params": "Parametri modificati", - "stopOnError": "Stop on error commutato", - "other": "Notebook modificato" - } - } - }, - "querySelection": { - "title": "Seleziona la query da eseguire", - "queriesFound_one": "{{count}} query trovate", - "queriesFound_other": "{{count}} query trovate", - "runAll": "Esegui tutte", - "runSelected": "Esegui selezionate ({{count}})", - "runSingle": "Esegui questa query", - "selectAll": "Seleziona tutte", - "deselectAll": "Deseleziona tutte" - }, - "explainSelection": { - "title": "Seleziona la query da analizzare", - "queriesFound_one": "{{count}} query analizzabili trovate", - "queriesFound_other": "{{count}} query analizzabili trovate", - "explainSingle": "Analizza questa query", - "explainFocused": "analizza selezionata", - "explainNth": "analizza N-esima", - "cancel": "annulla" - }, - "multiResult": { - "rerun": "Riesegui query", - "close": "Chiudi tab", - "rename": "Rinomina", - "aiGenerateName": "Genera nome con AI", - "generatingName": "Generazione nome...", - "viewTabs": "Vista a tab", - "viewStacked": "Vista impilata", - "queryPrefix": "Query", - "results": "Risultati", - "collapseAll": "Comprimi tutto", - "expandAll": "Espandi tutto" - } - }, - "createTable": { - "title": "Crea Nuova Tabella", - "tableName": "Nome Tabella", - "tableNamePlaceholder": "es. utenti, ordini, prodotti", - "columns": "Colonne", - "addColumn": "Aggiungi Colonna", - "colName": "Nome", - "colType": "Tipo", - "colLen": "Lung", - "colPk": "PK", - "colNn": "NN", - "colAi": "AI", - "colDefault": "Default", - "create": "Crea Tabella", - "cancel": "Annulla", - "nameRequired": "Il nome della tabella è richiesto", - "colRequired": "È richiesta almeno una colonna", - "failCreate": "Creazione tabella fallita: ", - "requiresExtension": "Richiede estensione: {{ext}}" - }, - "schema": { - "title": "Schema: {{table}}", - "loading": "Caricamento schema...", - "colName": "Nome", - "colType": "Tipo", - "colNullable": "Nullable", - "colKey": "Chiave", - "yes": "SÌ", - "no": "NO" - }, - "generateSQL": { - "title": "SQL Generato: {{table}}", - "loading": "Generazione SQL in corso...", - "runInConsole": "Esegui nella console", - "copy": "Copia SQL", - "copied": "Copiato!", - "tabCreateTable": "Crea tabella", - "tabSelectAll": "SELECT *", - "tabSelectFields": "SELECT [campi]", - "tabUpdate": "UPDATE", - "tabDelete": "DELETE" - }, - "modifyColumn": { - "titleAdd": "Aggiungi Colonna", - "titleEdit": "Modifica Colonna", - "sqliteWarn": "SQLite supporta solo la rinomina delle colonne. Altre modifiche richiedono la ricreazione manuale della tabella.", - "name": "Nome", - "type": "Tipo", - "length": "Lunghezza", - "default": "Valore Predefinito", - "notNull": "Not Null", - "primaryKey": "Chiave Primaria", - "autoInc": "Auto Increment", - "sqlPreview": "Anteprima SQL", - "save": "Salva Modifiche", - "add": "Aggiungi Colonna", - "cancel": "Annulla", - "nameRequired": "Il nome della colonna è richiesto", - "fail": "Fallito: ", - "pkNotSupported": "Questo driver supporta le chiavi primarie solo in fase di creazione della tabella", - "requiresExtension": "Richiede estensione: {{ext}}" - }, - "createIndex": { - "title": "Crea Indice", - "name": "Nome Indice", - "columns": "Colonne", - "unique": "Indice Unico", - "sqlPreview": "Anteprima SQL", - "create": "Crea Indice", - "cancel": "Annulla", - "nameRequired": "Il nome dell'indice è richiesto", - "colRequired": "Almeno una colonna deve essere selezionata" - }, - "createFk": { - "title": "Crea Chiave Esterna", - "name": "Nome FK (Opzionale)", - "column": "Colonna Locale", - "refTable": "Tabella Riferita", - "refColumn": "Colonna Riferita", - "onDelete": "Al Delete", - "onUpdate": "All'Update", - "sqlPreview": "Anteprima SQL", - "create": "Crea Chiave Esterna", - "cancel": "Annulla" - }, - "healthCheck": { - "title": "Connessione Persa", - "connectionLost": "Una connessione al database è stata persa" - }, - "erDiagram": { - "enterFullscreen": "Schermo Intero", - "exitFullscreen": "Esci da Schermo Intero", - "noConnection": "Nessun ID Connessione", - "noConnectionDesc": "Impossibile visualizzare il diagramma senza un ID connessione.", - "switchToVertical": "Passa a Layout Verticale", - "switchToHorizontal": "Passa a Layout Orizzontale", - "vertical": "Verticale", - "horizontal": "Orizzontale", - "showAllTables": "Mostra Tutte le Tabelle", - "showAll": "Mostra Tutto", - "focusedOn": "Focus su", - "focusOnTable": "Focus su Tabella" - }, - "views": { - "createView": "Crea Vista", - "editView": "Modifica Vista", - "createSubtitle": "Crea una nuova vista database", - "editSubtitle": "Modifica vista: {{name}}", - "viewName": "Nome Vista", - "viewNamePlaceholder": "es. utenti_attivi, riepilogo_ordini", - "viewDefinition": "Definizione Vista (SQL)", - "preview": "Anteprima", - "runPreview": "Esegui Anteprima", - "previewEmpty": "Clicca 'Esegui Anteprima' per vedere i risultati", - "moreRows": "+{{count}} righe in più", - "create": "Crea Vista", - "save": "Salva Modifiche", - "nameRequired": "Il nome della vista è richiesto", - "definitionRequired": "La definizione della vista è richiesta", - "failLoadDefinition": "Impossibile caricare la definizione della vista: ", - "previewError": "Anteprima fallita: ", - "createSuccess": "Vista creata con successo", - "alterSuccess": "Vista aggiornata con successo", - "saveError": "Salvataggio vista fallito: ", - "confirmAlter": "Sei sicuro di voler modificare la vista \"{{view}}\"?" - }, - "community": { - "title": "Unisciti alla Community", - "subtitle": "Aiuta tabularis a crescere", - "description": "Tabularis è un progetto gratuito e open-source. Se lo trovi utile, considera di supportare il progetto e unirti alla community.", - "starTitle": "Star su GitHub", - "starDesc": "Una stella aiuta gli altri a scoprire il progetto", - "discordTitle": "Unisciti su Discord", - "discordDesc": "Chatta con la community, ricevi aiuto, suggerisci funzionalità", - "dismiss": "Forse più tardi" - }, - "whatsNew": { - "title": "Novità", - "subtitle": "Versione {{version}}", - "features": "Nuove Funzionalità", - "bugFixes": "Correzioni Bug", - "breakingChanges": "Modifiche Incompatibili", - "readMore": "Leggi di più", - "dismiss": "Ho capito" - }, - "dump": { - "title": "Esporta Database", - "dumpDatabase": "Esporta Database", - "importDatabase": "Esegui File SQL...", - "importTitle": "Importazione Database", - "includeStructure": "Struttura (DDL)", - "includeData": "Dati (INSERT)", - "selectTables": "Seleziona Tabelle", - "selectAll": "Seleziona Tutto", - "deselectAll": "Deseleziona Tutto", - "export": "Esporta", - "success": "Database esportato con successo", - "failure": "Esportazione fallita: ", - "errorNoOption": "Seleziona almeno Struttura o Dati", - "errorNoTables": "Seleziona almeno una tabella", - "importSuccess": "File SQL eseguito con successo", - "importFailure": "Importazione fallita: ", - "importCancelled": "Importazione annullata", - "importFailed": "Importazione fallita", - "importingFrom": "Importazione da", - "statementsExecuted": "{{count}} / {{total}} istruzioni", - "confirmImport": "Sei sicuro di voler importare \"{{file}}\"?\nQuesto potrebbe sovrascrivere i dati esistenti.", - "elapsedTime": "Tempo trascorso" - }, - "geometryInput": { - "sqlMode": "Modalità SQL", - "wktMode": "Modalità WKT", - "sqlHelper": "Inserisci una funzione SQL completa (es: ST_GeomFromText('POINT(30 40)', 4326))", - "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", - "wktPlaceholder": "POINT(30 40)", - "toggleTooltip": "Funzioni SQL" - }, - "jsonInput": { - "placeholder": "Inserisci JSON...", - "format": "Formatta", - "valid": "JSON valido", - "invalid": "JSON non valido", - "mode": { - "code": "Codice", - "tree": "Albero", - "raw": "Grezzo" - }, - "expand": "Espandi", - "search": "Cerca" - }, - "jsonViewer": { - "close": "Chiudi", - "save": "Salva" - }, - "jsonCell": { - "expand": "Espandi/comprimi albero JSON", - "openViewer": "Apri visualizzatore JSON" - }, - "rowEditor": { - "title": "Modifica Riga", - "subtitle": "Riga #{{row}}", - "enterValue": "Inserisci valore..." - }, - "contextMenu": { - "openSidebar": "Apri Barra Laterale", - "openJsonEditor": "Apri nell'editor JSON" - }, - "blobInput": { - "noData": "Nessun dato BLOB", - "uploadFile": "Carica File", - "download": "Scarica", - "delete": "Elimina", - "truncatedWarning": "Solo anteprima - dati completi non caricati", - "downloadDisabledTruncated": "Download non disponibile - caricata solo anteprima", - "downloading": "Download in corso...", - "uploading": "Caricamento in corso...", - "openSidebar": "Apri nell'editor", - "imagePreview": "Anteprima immagine" - }, - "visualExplainPage": { - "title": "Visual Explain", - "noFile": "Nessun file caricato", - "openFile": "Apri file", - "reload": "Ricarica", - "loading": "Caricamento del piano di esecuzione…", - "emptyHint": "Seleziona un file contenente un piano EXPLAIN (formato JSON o testo PostgreSQL) per visualizzarlo." - }, - "taskManager": { - "header": { - "title": "Gestione Attività", - "subtitle": "Processi dei plugin e risorse di sistema", - "description": "Monitora i processi dei plugin, CPU, RAM e utilizzo disco in tempo reale", - "open": "Apri Gestione Attività", - "refresh": "Aggiorna" - }, - "killModal": { - "title": "Termina Forzatamente il Processo", - "subtitle": "Questa azione non può essere annullata immediatamente", - "descriptionBefore": "La terminazione di", - "descriptionAfter": "fermerà forzatamente il suo processo. Tutte le connessioni database attive che usano questo plugin smetteranno di funzionare finché il plugin non verrà riavviato.", - "warning": "Le query attive e le connessioni attraverso questo plugin verranno interrotte.", - "cancel": "Annulla", - "confirm": "Termina Forzatamente" - }, - "systemResources": { - "title": "Risorse di Sistema", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Lettura Disco/s", - "diskWrite": "Scrittura Disco/s", - "processCount_one": "{{count}} processo di sistema in esecuzione", - "processCount_other": "{{count}} processi di sistema in esecuzione" - }, - "tabularisProcess": { - "title": "Processo Tabularis", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Lettura Disco/s", - "diskWrite": "Scrittura Disco/s", - "childCount_one": "{{count}} processo figlio", - "childCount_other": "{{count}} processi figli", - "noChildren": "Nessun processo figlio", - "treeTotal": "Totale albero: {{size}}", - "treeTotalTooltip": "Somma RSS dell'albero dei processi — può sovrastimare la memoria condivisa", - "loadingProcesses": "Caricamento processi…", - "colPid": "PID", - "colName": "Nome", - "colCpu": "CPU", - "colRam": "RAM", - "refresh": "Aggiorna" - }, - "pluginProcesses": { - "title": "Processi Plugin", - "loading": "Caricamento processi…", - "empty": "Nessun processo plugin in esecuzione", - "emptyHint": "Installa e abilita i plugin per vederli qui", - "colPlugin": "Plugin", - "colPid": "PID", - "colCpu": "CPU", - "colRam": "RAM", - "colDiskRw": "Disco L/S", - "colStatus": "Stato", - "colActions": "Azioni", - "restart": "Riavvia", - "kill": "Termina", - "collapseChildren": "Comprimi processi figli", - "childCount_one": "{{count}} processo figlio", - "childCount_other": "{{count}} processi figli", - "childProcess": "processo figlio", - "status": { - "running": "in esecuzione", - "stopped": "arrestato", - "unknown": "sconosciuto" - } - } - }, - "queryModal": { - "database": "Database", - "noDatabase": "Nessun database" - }, - "clipboardImport": { - "title": "Importa dagli Appunti", - "subtitle": "Incolla dati strutturati e rivedi lo schema prima dell'importazione", - "selectTablePlaceholder": "Seleziona una tabella...", - "contextMenuLabel": "Importa dagli Appunti...", - "firstRowHeader": "Prima riga come intestazione", - "tableName": "Nome tabella", - "tableNamePlaceholder": "es. dati_vendite", - "aiSuggest": "Suggerisci con AI", - "tableExists": "Esiste già", - "mode": "Modalità", - "createNew": "Crea nuova tabella", - "appendTo": "Aggiungi a esistente", - "onConflict": "Se esiste", - "conflictFail": "Errore", - "conflictAppend": "Aggiungi righe", - "conflictReplace": "Sostituisci tabella", - "schemaPreview": "Schema Colonne", - "dataPreview": "Anteprima Dati", - "sample": "Valori campione", - "lowConfidence": "Tipi misti rilevati, default TEXT", - "rowsTotal_one": "{{count}} righe", - "rowsTotal_other": "{{count}} righe", - "showingFirst": "prime {{count}}", - "import_one": "Importa {{count}} righe", - "import_other": "Importa {{count}} righe", - "importing": "Importazione...", - "success_one": "{{count}} righe importate in \"{{table}}\"", - "success_other": "{{count}} righe importate in \"{{table}}\"", - "tableCreated": "Nuova tabella creata", - "openTable": "Chiudi", - "noData": "Nessun dato negli appunti", - "retry": "Riprova", - "warningsCount_one": "{{count}} avvisi di parsing", - "warningsCount_other": "{{count}} avvisi di parsing", - "columnsLabel": "colonne", - "rowsLabel": "righe", - "stepConfigure": "Configura destinazione", - "stepReview": "Rivedi e modifica", - "modeCreateHint": "Verrà creata una nuova tabella", - "modeAppendHint": "Le righe verranno aggiunte a una tabella esistente", - "maximize": "Massimizza", - "minimize": "Riduci", - "nSelected": "{{count}} selezionate", - "deleteSelected": "Elimina selezionate", - "deleteColumn": "Elimina colonna", - "sourceColumn": "Colonna appunti", - "targetColumn": "Colonna destinazione", - "targetColumnPlaceholder": "Scegli destinazione...", - "skipColumn": "Salta (non importare)", - "createNewColumn": "Crea nuova colonna" - }, - "aiActivity": { - "title": "Attività AI", - "description": "Log di ogni chiamata MCP e delle query in attesa di approvazione. Tutto è salvato localmente.", - "tabs": { - "events": "Eventi", - "sessions": "Sessioni" - }, - "empty": "Nessuna attività MCP registrata.", - "eventsCount_one": "{{count}} evento", - "eventsCount_other": "{{count}} eventi", - "blockedCount_one": "{{count}} bloccato", - "blockedCount_other": "{{count}} bloccati", - "errorsCount_one": "{{count}} errore", - "errorsCount_other": "{{count}} errori", - "sessionsCount_one": "{{count}} sessione", - "sessionsCount_other": "{{count}} sessioni", - "events": "Eventi", - "runQueries": "Query", - "connections": "Connessioni", - "client": "Client", - "rowsReturned": "Righe restituite", - "approvalId": "ID approvazione", - "searchQuery": "Cerca nella query…", - "allTools": "Tutti gli strumenti", - "allStatuses": "Tutti gli stati", - "clearAll": "Svuota", - "clearConfirm": "Vuoi eliminare l'intera storia delle attività AI? L'operazione è irreversibile.", - "exportNotebook": "Esporta come Notebook", - "exportSuccess": "Esportato in {{path}}", - "viewDetails": "Mostra dettagli", - "copyQuery": "Copia query", - "openVisualExplain": "Apri in Visual Explain", - "copied": "Copiato negli appunti", - "detailTitle": "Dettagli evento", - "col": { - "timestamp": "Ora", - "tool": "Strumento", - "connection": "Connessione", - "query": "Query", - "kind": "Tipo", - "duration": "Durata", - "status": "Stato", - "actions": "Azioni" - }, - "sort": { - "sortBy": "Ordina per {{field}}", - "sortByPlaceholder": "Ordina per…", - "toggleAscending": "Ordine crescente", - "toggleDescending": "Ordine decrescente", - "ascending": "Cresc.", - "descending": "Decresc.", - "started": "Inizio", - "eventCount": "Eventi", - "runQueries": "Query eseguite" - }, - "searchSessions": "Cerca sessione, client, connessione…", - "filteredFrom": "su {{total}}", - "noMatches": "Nessuna sessione corrisponde ai filtri.", - "status": { - "success": "Successo", - "blocked_readonly": "Bloccata (sola lettura)", - "blocked_pending_approval": "In attesa", - "denied": "Negata", - "error": "Errore", - "timeout": "Timeout" - }, - "queryKind": { - "select": "Lettura", - "write": "Scrittura", - "ddl": "DDL", - "unknown": "Sconosciuto" - } - }, - "aiApproval": { - "title": "L'AI vuole eseguire una scrittura sul database", - "subtitle": "Su {{connection}} — controlla e decidi prima dell'esecuzione.", - "subtitleWithClient": "{{client}} su {{connection}} — controlla e decidi prima dell'esecuzione.", - "query": "Query", - "editQuery": "Modifica prima di approvare", - "lockQuery": "Blocca query", - "preflightPlan": "Piano di esecuzione preliminare", - "expandPlan": "Espandi", - "collapsePlan": "Riduci", - "explainUnavailable": "EXPLAIN non disponibile per questa query.", - "explainFailed": "EXPLAIN fallito: {{error}}", - "reasonLabel": "Motivo (opzionale)", - "reasonPlaceholder": "es. Sembra rischiosa in produzione, conferma…", - "approve": "Approva", - "deny": "Nega" - }, - "discordCallout": { - "title": "Nuova community Discord!", - "body": "Abbiamo una community Discord dedicata a Tabularis: ricevi aiuto, scambia consigli e influenza la roadmap.", - "cta": "Entra subito", - "dismiss": "Chiudi" - }, - "k8sConnections": { - "title": "Connessioni Kubernetes", - "add": "Aggiungi", - "empty": "Nessuna connessione Kubernetes salvata. Clicca \"Aggiungi\" per crearne una.", - "name": "Nome", - "namePlaceholder": "Il mio cluster K8s", - "context": "Contesto", - "chooseContext": "Scegli un contesto...", - "namespace": "Namespace", - "chooseNamespace": "Scegli un namespace...", - "resourceType": "Tipo di risorsa", - "resourceTypeService": "Service", - "resourceTypePod": "Pod", - "resourceName": "Nome risorsa", - "chooseResource": "Scegli una risorsa...", - "port": "Porta container", - "test": "Test", - "testing": "Test in corso...", - "errors": { - "nameRequired": "Il nome della connessione è obbligatorio", - "contextRequired": "Il contesto Kubernetes è obbligatorio", - "namespaceRequired": "Il namespace è obbligatorio", - "resourceTypeInvalid": "Il tipo di risorsa deve essere \"service\" o \"pod\"", - "resourceNameRequired": "Il nome della risorsa è obbligatorio", - "portInvalid": "La porta deve essere compresa tra 1 e 65535" - } - } -} diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json deleted file mode 100644 index 71750357..00000000 --- a/src/i18n/locales/ja.json +++ /dev/null @@ -1,1473 +0,0 @@ -{ - "toolbar": { - "filters": "フィルター", - "toggleFilterPanel": "構造化フィルターパネルを切り替え", - "filterConditions": "フィルター条件", - "activeOf": "{{total}} 件中 {{active}} 件が有効", - "noFilters": "フィルターなし —", - "addFirstFilter": "最初のフィルターを追加", - "noActiveFilters": "有効なフィルターなし", - "closePanelEsc": "フィルターパネルを閉じる (ESC)", - "unset": "未設定", - "sql": "SQL", - "addFilter": "フィルターを追加", - "applyAll": "すべて適用", - "apply": "適用", - "applied": "適用済み", - "switchToSql": "SQL WHERE 入力に切り替え", - "duplicateFilter": "フィルターを複製", - "removeFilter": "フィルターを削除", - "deselectFromApplyAll": "すべて適用から除外", - "selectForApplyAll": "すべて適用に含める", - "valuePlaceholder": "値", - "fromPlaceholder": "開始", - "toPlaceholder": "終了" - }, - "common": { - "save": "保存", - "close": "閉じる", - "cancel": "キャンセル", - "delete": "削除", - "edit": "編集", - "loading": "読み込み中...", - "search": "検索...", - "noResults": "結果が見つかりません", - "error": "エラー", - "success": "成功", - "ok": "OK" - }, - "sidebar": { - "connections": "接続", - "settings": "設定", - "savedQueries": "保存済みクエリ", - "tables": "テーブル", - "newConsole": "新規コンソール", - "newVisualQuery": "新規ビジュアルクエリ", - "refresh": "更新", - "refreshTables": "テーブルを更新", - "refreshViews": "ビューを更新", - "createView": "ビューを新規作成", - "views": "ビュー", - "noViews": "ビューが見つかりません", - "editView": "ビューを編集", - "viewDefinition": "ビュー定義", - "dropView": "ビューを削除", - "dropViewConfirm": "ビュー「{{view}}」を削除してもよろしいですか?", - "failGetViewDefinition": "ビュー定義の取得に失敗しました: ", - "failDropView": "ビューの削除に失敗しました: ", - "explorer": "エクスプローラー", - "sqlEditor": "SQL エディタ", - "loadingSchema": "スキーマを読み込み中...", - "noSavedQueries": "保存済みクエリはありません", - "searchFavorites": "お気に入りを検索...", - "noFavoritesSearchResults": "検索に一致するお気に入りがありません", - "execute": "実行", - "edit": "編集", - "delete": "削除", - "confirmDeleteQuery": "クエリ「{{name}}」を削除してもよろしいですか?", - "confirmDeleteTitle": "クエリを削除", - "noTables": "テーブルが見つかりません", - "columns": "カラム", - "keys": "キー", - "foreignKeys": "外部キー", - "indexes": "インデックス", - "deleteColumn": "カラムを削除", - "deleteColumnConfirm": "テーブル「{{table}}」のカラム「{{column}}」を削除してもよろしいですか?\n\n警告: このカラムのすべてのデータが完全に削除されます。この操作は取り消せません。", - "failDeleteColumn": "カラムの削除に失敗しました: ", - "failDeleteIndex": "インデックスの削除に失敗しました: ", - "modifyColumn": "カラムを変更", - "copyName": "名前をコピー", - "openInEditor": "エディタで開く", - "closePanel": "パネルを閉じる", - "setAsActive": "アクティブに設定", - "deleteTable": "テーブルを削除", - "deleteTableConfirm": "テーブル「{{table}}」を削除してもよろしいですか?", - "failDeleteTable": "テーブルの削除に失敗しました: ", - "showData": "データを表示", - "countRows": "行数をカウント", - "viewSchema": "スキーマを表示", - "viewERDiagram": "ER 図を表示", - "generateSQL": "SQL を生成", - "addColumn": "カラムを追加", - "addIndex": "インデックスを追加", - "deleteIndex": "インデックスを削除", - "deleteIndexConfirm": "インデックス「{{name}}」を削除しますか?", - "addFk": "外部キーを追加", - "deleteFk": "FK を削除", - "deleteFkConfirm": "外部キー「{{name}}」を削除しますか?", - "sqliteFkError": "SQLite は ALTER TABLE による FK 削除をサポートしていません。", - "mcpServer": "MCP サーバー", - "routines": "ルーチン", - "functions": "関数", - "procedures": "プロシージャ", - "noRoutines": "ルーチンが見つかりません", - "refreshRoutines": "ルーチンを更新", - "triggers": "トリガー", - "noTriggers": "トリガーが見つかりません", - "filterTriggers": "トリガーを絞り込み...", - "noTriggersMatch": "条件に一致するトリガーがありません", - "createTrigger": "トリガーを新規作成", - "editTrigger": "トリガーを編集", - "dropTrigger": "トリガーを削除", - "dropTriggerConfirm": "トリガー「{{trigger}}」を削除してもよろしいですか?", - "viewTriggerDefinition": "定義を表示", - "failDropTrigger": "トリガーの削除に失敗しました: ", - "failGetTriggerDefinition": "トリガー定義の取得に失敗しました: ", - "refreshTriggers": "トリガーを更新", - "onTable": "{{table}} に対して", - "objectSummary": "オブジェクト", - "databases": "データベース", - "failGetRoutineDefinition": "ルーチン定義の取得に失敗しました: ", - "schemas": "スキーマ", - "noSchemas": "スキーマが見つかりません", - "loadingSchemas": "スキーマを読み込み中...", - "schemaLoadError": "スキーマの読み込みに失敗しました", - "errorDetails": "詳細", - "copyError": "エラーメッセージをコピー", - "retry": "再試行", - "expandExplorer": "エクスプローラーを展開", - "selectSchemas": "スキーマを選択", - "selectSchemasHint": "読み込むスキーマを選択:", - "selectAll": "すべて選択", - "deselectAll": "すべて解除", - "confirmSelection": "確定", - "editSchemas": "スキーマを編集", - "selectConnection": "接続を選択", - "disconnect": "切断", - "switchConnection": "接続を切り替え", - "noOtherConnections": "他の接続はありません", - "openConnections": "開く", - "availableConnections": "利用可能", - "splitVertical": "垂直分割", - "splitHorizontal": "水平分割", - "separateConnections": "接続を分離", - "splitGroup": "グループを分割", - "filterTables": "テーブルをフィルター...", - "noTablesMatch": "一致するテーブルがありません", - "filterDatabases": "データベースをフィルター...", - "manageDatabases": "データベースを管理", - "structure": "構造", - "favorites": "お気に入り", - "queryHistory": "履歴", - "noQueryHistory": "クエリ履歴はありません", - "noHistorySearchResults": "検索に一致するクエリがありません", - "searchHistory": "履歴を検索...", - "clearAllHistory": "すべての履歴を削除", - "historyRecoveredTitle": "クエリ履歴をリセットしました", - "historyRecoveredBody": "履歴ファイルが破損していたためバックアップに移動しました。新しいクエリは通常どおり記録されます。バックアップ ファイル:", - "historyRecoveredDismiss": "閉じる", - "confirmDeleteHistoryEntry": "このクエリを履歴から削除してもよろしいですか?", - "confirmClearHistory": "この接続のクエリ履歴をすべて削除してもよろしいですか?", - "confirmClearHistoryTitle": "クエリ履歴を削除", - "addToFavorites": "お気に入りに追加", - "insertToEditor": "エディタに挿入", - "openInNewTab": "新しいタブで開く", - "copyQuery": "クエリをコピー", - "runQuery": "クエリを実行", - "dateGroupToday": "今日", - "dateGroupYesterday": "昨日", - "dateGroupThisWeek": "今週", - "dateGroupThisMonth": "今月", - "dateGroupOlder": "それ以前", - "notebooks": { - "tab": "ノートブック", - "search": "ノートブックを検索", - "refresh": "更新", - "empty": "保存されたノートブックはまだありません。", - "noSearchResults": "一致するノートブックがありません。", - "open": "開く", - "rename": "名前を変更", - "delete": "削除", - "deleteConfirm": "ノートブック「{{title}}」を削除しますか?この操作は元に戻せません。", - "renamePlaceholder": "ノートブック名" - } - }, - "mcp": { - "title": "MCP サーバー連携", - "subtitle": "Tabularis を Claude Desktop、Cursor などに接続", - "description": "Model Context Protocol (MCP) を使うと、AI アシスタント (Claude など) がローカルツールに接続できます。Tabularis は MCP サーバーを公開しており、AI がデータベーススキーマを読み取り、クエリを安全に実行できるようにします。", - "checking": "設定を確認中...", - "notFound": "設定ファイルが見つかりません (手動で作成してください)", - "installed": "インストール済み", - "install": "設定をインストール", - "manualConfig": "手動設定", - "manualText": "自動インストールが失敗する場合は、これをクライアントの設定ファイルに手動で追加してください。", - "successTitle": "成功", - "successMsg": "{{client}} の設定が正常にインストールされました。変更を反映するにはアプリを再起動してください。", - "errorTitle": "インストール失敗", - "clients": "AI クライアント", - "manualCommand": "手動コマンド", - "manualCommandText": "このコマンドをターミナルで実行し、Claude Code を再起動してください。", - "tabs": { - "setup": "セットアップ", - "activity": "アクティビティ", - "safety": "セーフティ" - }, - "safety": { - "readOnlyTitle": "読み取り専用モード", - "readOnlyDefault": "MCP クエリをすべて読み取り専用にする", - "readOnlyDefaultDesc": "下記で明示的に許可されていない限り、MCP 経由の SELECT 以外のステートメントをブロックします。", - "readOnlyList": "読み取り専用接続", - "readOnlyListDesc": "これらの接続は MCP からの書き込みを拒否します。他の接続は通常通り動作します。", - "allowList": "MCP からの書き込みを許可", - "allowListDesc": "他のすべての接続は読み取り専用のままです。ここでチェックされた接続のみ書き込みを実行できます。", - "approvalTitle": "承認ゲート", - "approvalMode": "承認が必要", - "approvalModeDesc": "書き込み(またはすべてのクエリ)を一時停止し、データベースに到達する前に Tabularis 内でユーザーに承認を求めます。", - "modeOff": "オフ", - "modeWritesOnly": "書き込みのみ", - "modeAll": "すべてのクエリ", - "approvalTimeout": "タイムアウト", - "approvalTimeoutDesc": "MCP サブプロセスがリクエストをタイムアウトさせる前にユーザーの判断を待つ時間。", - "preflightExplain": "プリフライト EXPLAIN", - "preflightExplainDesc": "承認モーダルを表示する前にクエリに対して EXPLAIN を実行し、ユーザーに実行計画を表示します。" - } - }, - "connections": { - "title": "接続", - "addConnection": "接続を追加", - "noConnections": "アクティブな接続はありません", - "createFirst": "最初の接続を作成", - "active": "アクティブ", - "disconnect": "切断", - "connect": "接続", - "edit": "編集", - "delete": "削除", - "clone": "複製", - "confirmDelete": "この接続を削除してもよろしいですか?", - "deleteTitle": "削除の確認", - "failConnect": "{{name}} への接続に失敗しました。設定を確認するか、データベースが稼働していることを確認してください。", - "failDisconnect": "データベースからの切断に失敗しました", - "failDuplicate": "接続の複製に失敗しました", - "open": "開く", - "pluginDisabled": "プラグインが無効", - "connectionCount_one": "{{count}} 件の接続", - "connectionCount_other": "{{count}} 件の接続", - "noConnectionsHint": "最初の接続を作成して始めましょう。", - "searchPlaceholder": "接続を検索...", - "noSearchResults": "「{{query}}」に一致する接続はありません", - "gridView": "グリッド表示", - "listView": "リスト表示", - "export": "接続をエクスポート", - "import": "接続をインポート", - "exportTitle": "接続をエクスポート", - "exportWarning": "エクスポートされたファイルには、データベースおよび SSH のパスワードが平文で含まれます。安全な場所に保管してください。" - }, - "connectionAppearance": { - "section": "外観", - "accentColor": "アクセントカラー", - "customColor": "カスタム", - "resetColor": "ドライバーの初期設定に戻す", - "icon": "アイコン", - "tabs": { - "default": "デフォルト", - "pack": "アイコン", - "emoji": "絵文字", - "image": "画像" - }, - "chooseImage": "画像を選択…", - "removeImage": "削除", - "imageHint": "PNG、JPG、WebP または SVG · 最大 512 KB" - }, - "settings": { - "general": "一般", - "info": "情報", - "dataEditor": "データエディタ", - "pageSize": "結果ページサイズ (上限)", - "pageSizeDesc": "パフォーマンス問題を避けるため、クエリごとに取得する行数を制限します。0 に設定すると無効化されます (非推奨)。", - "rows": "行", - "copyFormat": "デフォルトのコピー形式", - "copyFormatDesc": "Ctrl+C / Cmd+C で行をコピーする際のデフォルト形式を選択します。", - "csvDelimiter": "CSV 区切り文字", - "csvDelimiterDesc": "行を CSV としてコピーまたはエクスポートする際のデフォルト区切り文字を選択します。", - "delimiterComma": "カンマ (,)", - "delimiterSemicolon": "セミコロン (;)", - "delimiterTab": "タブ", - "delimiterPipe": "パイプ (|)", - "appearance": "外観", - "localization": "ローカライズ", - "themeSelection": "テーマ選択", - "fontFamily": "フォントファミリー", - "fonts": { - "custom": "カスタムフォント", - "customPlaceholder": "例: Comic Sans MS", - "enterFontName": "上にフォント名を入力してください" - }, - "fontSize": "フォントサイズ", - "fontSizeLabel": "フォントサイズ", - "fontSizeDesc": "アプリケーション全体で使用される基本フォントサイズを調整します (10〜20px)。", - "preview": "プレビュー", - "fontPreviewText": "いろはにほへと ちりぬるを わかよたれそ つねならむ", - "appearance_general": "一般", - "appearance_sqlEditor": "SQL エディタ", - "appearance_editorTheme": "エディタテーマ", - "appearance_editorThemeDesc": "SQL エディタに独立したテーマを選択するか、アプリのテーマと同期するかを選びます。", - "appearance_sameAsApp": "アプリと同じ", - "appearance_editorFontFamily": "エディタのフォントファミリー", - "appearance_editorFontSize": "エディタのフォントサイズ", - "appearance_editorLineHeight": "行の高さ", - "appearance_editorTabSize": "タブサイズ", - "appearance_editorWordWrap": "ワードラップ", - "appearance_editorWordWrapDesc": "エディタ内の長い行を横スクロールせず折り返します。", - "appearance_editorShowLineNumbers": "行番号を表示", - "appearance_editorShowLineNumbersDesc": "エディタの左端に行番号を表示します。", - "appearance_editorAcceptSuggestionOnEnter": "Enter で候補を確定", - "appearance_editorAcceptSuggestionOnEnterDesc": "Tab に加えて Enter でもオートコンプリートの候補を確定できるようにします。オフの場合、Enter は常に改行を挿入します。", - "editConfigJson": "config.json を編集", - "editConfigJsonDesc": "生の設定ファイルを直接編集します。変更を反映するには再起動が必要です。", - "configJsonModal": { - "title": "config.json", - "saveAndRestart": "保存して再起動", - "restartNow": "今すぐ再起動", - "restartRequired": "変更を反映するには再起動が必要です。", - "restartMessage": "設定ファイルを保存しました。変更を反映するために今すぐ再起動しますか?" - }, - "language": "言語", - "languageDesc": "使用する言語を選択します。「自動」はシステムの言語を使用します。", - "auto": "自動 (システム)", - "timezone": "タイムゾーン", - "timezoneDesc": "タイムスタンプの表示とエクスポートに使用するタイムゾーン。「自動」はシステムのタイムゾーンに従います。", - "timezoneSearch": "タイムゾーンを検索...", - "projectStatus": "プロジェクトの状態", - "roadmapDesc": "このプロジェクトは現在開発中 (WIP) です。主要機能は安定していますが、より大きな構想も進めています。", - "support": "開発をサポート", - "supportDesc": "Tabularis を気に入っていただけたら、コードへの貢献、バグ報告、リポジトリへのスターなどでプロジェクトのサポートをご検討ください。", - "version": "バージョン", - "starOnGithub": "GitHub でスター", - "ai": { - "tab": "AI", - "title": "AI 設定", - "description": "AI プロバイダを設定して、自然言語から SQL を生成する機能を有効化します。キーはシステムのキーチェーンに安全に保管されます。", - "enable": "AI 機能を有効化", - "enableDesc": "エディタに AI Assist と Explain ボタンを表示します", - "defaultProvider": "デフォルトプロバイダ", - "defaultModel": "デフォルトモデル", - "configuration": "設定", - "selectProviderFirst": "まずプロバイダを選択してください", - "modelDesc": "生成と説明に使用するモデルを選択します。", - "manageKeys": "API キーを管理", - "apiKey": "{{provider}} API キー", - "configured": "設定済み", - "notConfigured": "未設定", - "enterKey": "{{provider}} キーを入力", - "keyStoredSecurely": "API キーはシステムのキーチェーンに安全に保管されます。ここでキーを設定すると環境変数より優先されます。", - "fromEnv": "環境変数", - "fromEnvTooltip": "このキーは環境変数から読み込まれています", - "envVariableDetected": "環境変数が検出されていますが、上でキーを設定すれば上書きできます。", - "reset": "リセット", - "changeKey": "変更", - "resetKey": "カスタムキーを削除し、環境変数に戻します (存在する場合)", - "keyResetSuccess": "カスタムキーを正常に削除しました", - "promptCustomization": "プロンプトのカスタマイズ", - "systemPrompt": "SQL 生成", - "systemPromptDesc": "AI による SQL 生成の指示です。{{SCHEMA}} をデータベース構造のプレースホルダーとして使用します。", - "enterSystemPrompt": "システムプロンプトを入力...", - "resetDefault": "デフォルトに戻す", - "savePrompt": "プロンプトを保存", - "explainPrompt": "クエリ説明", - "explainPromptDesc": "AI によるクエリ説明の指示です。{{LANGUAGE}} を出力言語のプレースホルダーとして使用します。", - "enterExplainPrompt": "説明プロンプトを入力...", - "cellnamePrompt": "ノートブックセル名プロンプト", - "cellnamePromptDesc": "AI によるノートブックセル名生成の指示をカスタマイズします。セルの内容 (SQL または Markdown) がユーザーメッセージとして送信されます。", - "enterCellnamePrompt": "ノートブックセル名プロンプトを入力...", - "tabrenamePrompt": "クエリタブ名プロンプト", - "tabrenamePromptDesc": "AI によるクエリ結果タブ名生成の指示をカスタマイズします。SQL クエリがユーザーメッセージとして送信されます。", - "enterTabrenamePrompt": "クエリタブ名プロンプトを入力...", - "explainplanPrompt": "実行計画分析プロンプト", - "explainplanPromptDesc": "AI による EXPLAIN クエリ計画分析の指示をカスタマイズします。{{LANGUAGE}} を出力言語に使用します。", - "enterExplainplanPrompt": "実行計画分析プロンプトを入力...", - "keySaved": "API キーを安全に保存しました", - "promptSaved": "システムプロンプトを正常に保存しました", - "explainPromptSaved": "説明プロンプトを正常に保存しました", - "promptReset": "システムプロンプトをデフォルトに戻しました", - "explainPromptReset": "説明プロンプトをデフォルトに戻しました", - "modelPlaceholder": "モデルを選択", - "searchPlaceholder": "モデルを検索...", - "noResults": "モデルが見つかりません", - "refresh": "モデルを更新", - "refreshSuccess": "プロバイダから AI モデルを更新しました", - "refreshError": "モデルの更新に失敗しました", - "ollamaConnected": "Ollama に接続しました ({{count}} 個のモデルを検出)", - "ollamaNotDetected": "ポート {{port}} で Ollama を検出できませんでした。起動していますか?", - "ollamaPort": "Ollama ポート", - "modelNotFound": "{{provider}} ではモデル {{model}} が見つかりません。正しく動作しない可能性があります。", - "customOpenaiEndpoint": "カスタムエンドポイント", - "endpointUrl": "エンドポイント URL", - "endpointUrlDesc": "OpenAI 互換 API のベース URL です。例: https://api.groq.com/openai/v1, http://localhost:8000/v1", - "customOpenaiModelPlaceholder": "例: llama3-70b-8192, mixtral-8x7b", - "customOpenaiModelDesc": "OpenAI 互換サービスが提供するモデル名を入力してください。", - "customOpenaiModelHelp": "OpenAI 互換プロバイダの正確なモデル名を入力してください。" - }, - "updates": "アップデート", - "openSourceLibraries": "オープンソースライブラリ", - "openSourceLibrariesDesc": "アプリ、バックエンド、ツールで使用している直接依存のオープンソースを閲覧できます。", - "openSourceLibrariesSource": "package.json および src-tauri/Cargo.toml に宣言された直接依存です。", - "openSourceLibrariesTotal": "{{count}} 個のライブラリ", - "openSourceLibrariesOpenProject": "パッケージページを開く", - "openSourceLibrariesSections": { - "npm-runtime": "フロントエンド依存", - "npm-tooling": "フロントエンド開発依存", - "cargo-runtime": "Rust 依存", - "cargo-tooling": "Rust ビルド・テスト" - }, - "openSourceLibrariesEcosystem": { - "npm": "npm エコシステム", - "cargo": "Cargo エコシステム" - }, - "autoCheckUpdates": "起動時にアップデートを確認", - "autoCheckUpdatesDesc": "アプリ起動時に自動で新しいバージョンを確認します", - "checkNow": "今すぐアップデートを確認", - "checking": "確認中...", - "currentVersion": "現在のバージョン", - "logs": "ログ", - "logSettings": "ログ設定", - "enableLogging": "ログを有効化", - "enableLoggingDesc": "デバッグ用にアプリケーションログをメモリに収集します", - "maxLogEntries": "最大ログエントリ数", - "maxLogEntriesDesc": "メモリに保持するログの件数 (1〜10000)", - "currentLogCount": "現在のログ", - "clearLogs": "ログを消去", - "clearLogsConfirm": "すべてのログを消去してもよろしいですか?", - "exportLogs": "ログをエクスポート", - "exportLogsSuccess": "ログをクリップボードにエクスポートしました", - "noLogs": "ログがありません", - "refreshLogs": "更新", - "logLevel": "レベル", - "logMessage": "メッセージ", - "logTimestamp": "タイムスタンプ", - "filterByLevel": "レベルでフィルター", - "allLevels": "すべてのレベル", - "debug": "デバッグ", - "warn": "警告", - "error": "エラー", - "connectionHealthCheck": "接続ヘルスチェック", - "pingInterval": "Ping 間隔", - "pingIntervalDesc": "アクティブな接続の生存確認を行う間隔です。0 にすると無効になります。", - "seconds": "秒", - "entries": "件", - "queryHistory": "クエリ履歴", - "queryHistoryMaxEntries": "最大履歴件数", - "queryHistoryMaxEntriesDesc": "接続ごとに保存されるクエリ履歴の最大件数です。", - "startup": "起動", - "showWelcome": "ウェルカム画面を表示", - "showWelcomeDesc": "アプリ起動時にウェルカム画面を表示します。", - "erDiagram": "ER 図", - "erDiagramDefaultLayout": "デフォルトレイアウト", - "erDiagramDefaultLayoutDesc": "ER 図のデフォルトのレイアウト方向を選択します", - "plugins": { - "title": "プラグイン", - "overviewTitle": "プラグインセンター", - "overviewDesc": "拡張機能のインストール、プラグインドライバの管理、実行時設定のコントロールを行います。", - "installedMetric": "インストール済み", - "enabledMetric": "有効", - "registryMetric": "レジストリ", - "updatesMetric": "アップデート", - "available": "利用可能なプラグイン", - "availableDesc": "レジストリからプラグインを閲覧・インストールします。", - "refresh": "更新", - "loadingRegistry": "プラグインレジストリを読み込み中...", - "registryError": "レジストリの読み込みに失敗しました", - "installed": "インストール済み", - "by": "作成者:", - "platformNotSupported": "お使いのプラットフォームでは利用できません", - "update": "更新", - "install": "インストール", - "upToDate": "最新", - "downgrade": "ダウングレード:", - "olderVersions": "以前のバージョン", - "noPlugins": "レジストリに利用可能なプラグインがありません。", - "searchPlaceholder": "プラグインを検索…", - "filterAll": "すべて", - "filterInstalled": "インストール済み", - "filterUpdates": "アップデート", - "searchNoResults": "検索に一致するプラグインがありません。", - "requiresVersion": "Tabularis ≥ {{version}} が必要です", - "remove": "削除", - "removeTitle": "プラグインを削除", - "confirmRemove": "「{{name}}」を削除してもよろしいですか?プラグインファイルが削除されます。", - "installError": { - "title": "インストール失敗", - "subtitle": "プラグインのインストール中にエラーが発生しました。詳細は下記を参照してください。", - "details": "エラーの詳細", - "copy": "コピー", - "copied": "コピーしました!" - }, - "startError": { - "title": "プラグインの起動に失敗", - "subtitle": "プラグインプロセスを起動できませんでした。下記のエラー詳細を確認してください。", - "interpreterHint": "このプラグインにはインタプリタ (例: Python) が必要な場合があります。プラグイン設定からインタプリタのパスを設定してください。", - "details": "エラーの詳細", - "copy": "コピー", - "copied": "コピーしました!", - "configure": "インタプリタを設定" - }, - "pluginSettings": { - "title": "プラグイン設定", - "interpreter": "インタプリタ", - "interpreterDesc": "任意。このプラグインの実行に使用する実行ファイルを指定します (例: macOS/Linux では python3、Windows では python またはフルパス)。空欄の場合はデフォルトが使用されます。", - "interpreterPlaceholder": "例: python3", - "browse": "参照...", - "fieldRequired": "{{label}} は必須です", - "saved": "保存しました", - "resetToDefault": "デフォルトに戻す", - "builtin": { - "mysql": { - "maxAllowedPacket": { - "label": "最大許容パケットサイズ", - "description": "MySQL コネクタが使用する最大パケットサイズです。" - }, - "socketTimeout": { - "label": "ソケットタイムアウト", - "description": "ソケットタイムアウト (ミリ秒)。" - }, - "connectTimeout": { - "label": "接続タイムアウト", - "description": "接続タイムアウト (ミリ秒)。" - }, - "timezone": { - "label": "タイムゾーン", - "description": "接続後に MySQL に送信するセッションタイムゾーンです。" - } - } - } - } - }, - "shortcuts": { - "title": "キーボードショートカット", - "categories": { - "editor": "エディタ", - "navigation": "ナビゲーション", - "data_grid": "データグリッド" - }, - "runQuery": "クエリを実行", - "runQueryEditor": "クエリを実行 (エディタ内)", - "tabSwitcher": "タブを切り替え", - "copySelection": "選択範囲をコピー", - "toggleSidebar": "サイドバーを切り替え", - "openConnections": "接続を開く", - "newConnection": "新規接続", - "newTab": "新規タブ", - "closeTab": "タブを閉じる", - "nextPage": "次のページ", - "prevPage": "前のページ", - "switchConnection": "接続 1〜9 に切り替え", - "resetToDefault": "デフォルトに戻す", - "notOverridable": "組み込み、カスタマイズ不可", - "pressKeys": "キーの組み合わせを押してください...", - "notebookRunAll": "すべてのセルを実行", - "pasteImportClipboard": "クリップボードからインポート", - "quickNavigator": "クイックナビゲーター" - }, - "aiActivity": "AI アクティビティ" - }, - "update": { - "newVersionAvailable": "新しいバージョンが利用可能", - "version": "バージョン", - "releaseNotes": "リリースノート", - "downloadAndInstall": "ダウンロードしてインストール", - "downloading": "ダウンロード中...", - "installing": "インストール中...", - "installingMessage": "インストール後にアプリは自動的に再起動します", - "viewOnGitHub": "GitHub で表示", - "remindLater": "あとで通知", - "upToDate": "最新の状態です", - "updateAvailable": "バージョン {{version}} が利用可能です", - "error": "アップデートエラー", - "managedByPackageManager": "アップデートは {{source}} によって管理されています", - "managedByPackageManagerDesc": "Tabularis のアップデートにはパッケージマネージャを使用してください。" - }, - "ai": { - "explain": "Explain", - "generateSql": "SQL を生成" - }, - "newConnection": { - "namePlaceholder": "接続名を入力", - "nameRequired": "接続名は必須です", - "dbNameRequired": "データベース名は必須です", - "dbType": "データベースの種類", - "host": "ホスト", - "port": "ポート", - "username": "ユーザー名", - "password": "パスワード", - "passwordPlaceholder": "パスワードを入力", - "usernamePlaceholder": "ユーザー名を入力", - "filePath": "ファイルパス", - "folderPath": "フォルダパス", - "dbName": "データベース名", - "dbNamePlaceholder": "データベース名", - "loadDatabases": "データベースを読み込み", - "loadingDatabases": "読み込み中...", - "selectDatabases": "データベース", - "appearance": "外観", - "noDatabasesSelected": "少なくとも 1 つのデータベースを選択してください", - "selectedDatabases": "{{count}} 個のデータベースを選択中", - "selectDatabase": "データベースを選択", - "noDatabasesFound": "データベースが見つかりません", - "failLoadDatabases": "データベースの読み込みに失敗しました。認証情報を確認してください。", - "filePathPlaceholder": "/absolute/path/to/db.sqlite", - "folderPathPlaceholder": "/absolute/path/to/folder", - "browseFile": "ファイルを参照", - "browseFolder": "フォルダを参照", - "useSsh": "SSH トンネルを使用", - "sshHost": "SSH ホスト", - "sshPort": "SSH ポート", - "sshUser": "SSH ユーザー", - "sshPassword": "SSH パスワード", - "sshPasswordMissing": "SSH パスワードが未入力です。再入力してください。", - "sshPasswordPlaceholder": "SSH パスワードを入力", - "sshKeyFile": "SSH 鍵ファイル (任意)", - "sshKeyFilePlaceholder": "/path/to/id_rsa", - "sshKeyPassphrase": "SSH 鍵のパスフレーズ (任意)", - "sshKeyPassphrasePlaceholder": "鍵が暗号化されている場合はパスフレーズを入力", - "saveKeychain": "パスワードをキーチェーンに保存", - "testConnection": "接続テスト", - "save": "保存", - "failSave": "接続の保存に失敗しました", - "selectSshConnection": "SSH 接続を選択", - "useSshConnection": "既存の SSH 接続を使用", - "createInlineSsh": "SSH をインラインで設定", - "manageSshConnections": "SSH 接続を管理", - "noSshConnections": "利用可能な SSH 接続がありません", - "sslMode": "SSL モード", - "sslModes": { - "disable": "無効", - "allow": "許可", - "prefer": "優先", - "require": "必須", - "verify-ca": "CAを検証", - "verify-full": "完全検証" - }, - "chooseContext": "コンテキストを選択...", - "chooseK8s": "接続を選択...", - "chooseNamespace": "ネームスペースを選択...", - "chooseResource": "リソースを選択...", - "createInlineK8s": "インライン", - "k8sContext": "コンテキスト", - "k8sNamespace": "ネームスペース", - "k8sNotAvailable": "このドライバーでは Kubernetes を使用できません。", - "k8sPort": "コンテナポート", - "k8sResourceName": "リソース名", - "k8sResourceType": "リソースタイプ", - "k8sResourceTypePod": "Pod", - "k8sResourceTypeService": "Service", - "k8sSelectType": "タイプを選択...", - "manageK8s": "管理", - "noK8sConnections": "保存された接続がありません — 下で作成してください", - "noK8sContexts": "コンテキストが見つかりません(kubectl はインストールされていますか?)", - "selectContextFirst": "先にコンテキストを選択してください", - "selectK8sConnection": "K8s 接続を選択", - "selectTypeFirst": "先にコンテキスト/ネームスペース/タイプを選択してください", - "useK8s": "Kubernetes ポートフォワードを使用", - "useK8sConnection": "保存された接続" - }, - "sshConnections": { - "title": "SSH 接続", - "createNew": "新しい SSH 接続を作成", - "noConnections": "SSH 接続が設定されていません", - "name": "接続名", - "namePlaceholder": "My SSH Server", - "authType": "認証方式", - "authTypePassword": "パスワード", - "authTypeSshKey": "SSH 鍵", - "edit": "編集", - "delete": "削除", - "save": "保存", - "update": "更新", - "cancel": "キャンセル", - "confirmDelete": "この SSH 接続を削除してもよろしいですか?", - "failSave": "SSH 接続の保存に失敗しました", - "failDelete": "SSH 接続の削除に失敗しました", - "fillRequired": "必須項目をすべて入力してください", - "keyFile": "鍵ファイル", - "quickTest": "簡易接続テスト", - "testFailed": "接続テストに失敗しました", - "savedInKeychain": "パスワードをシステムのキーチェーンに保存しました" - }, - "dataGrid": { - "noData": "表示するデータがありません", - "deleteRow": "行を削除", - "deleteRows_one": "{{count}} 行を削除", - "deleteRows_other": "{{count}} 行を削除", - "updateFailed": "更新に失敗しました: ", - "null": "null", - "sortByAsc": "{{col}} を昇順で並べ替え", - "sortByDesc": "{{col}} を降順で並べ替え", - "clearSort": "並べ替えを解除", - "copyCell": "セルをコピー", - "copySelectedRows": "選択した行をコピー", - "copyColumnName": "カラム名をコピー", - "copyColumnNameQuoted": "`column` 形式でコピー", - "copyColumnNameTable": "table.column 形式でコピー", - "copied": "クリップボードにコピーしました", - "duplicateRow": "行を複製", - "revertSelected": "選択を元に戻す", - "setGenerate": "GENERATED に設定", - "setNull": "NULL に設定", - "setDefault": "DEFAULT に設定", - "setEmpty": "EMPTY に設定", - "setServerNow": "現在のタイムスタンプを挿入", - "previewReferenced": "関連レコードをプレビュー", - "openReferenced": "{{table}} で参照行を開く" - }, - "newRow": { - "title": "新規行", - "insert": "挿入", - "cancel": "キャンセル", - "failInsert": "行の挿入に失敗しました: ", - "failLoad": "スキーマの読み込みに失敗しました: ", - "loading": "読み込み中...", - "selectValue": "値を選択...", - "noOptions": "選択肢が見つかりません", - "autoGenerated": "(自動生成)", - "required": "必須", - "primaryKey": "主キー", - "auto": "自動" - }, - "editor": { - "noTabs": "この接続に対して開いているタブはありません。", - "newConsole": "新規コンソール", - "noActiveSession": "アクティブなセッションがありません。接続を選択してください。", - "stop": "停止", - "run": "実行", - "export": "エクスポート", - "connected": "接続済み", - "disconnected": "切断済み", - "newRow": "新規行", - "rowsRetrieved": "{{count}} 行を取得しました", - "autoPaginated": "自動ページング", - "pageOf": "{{current}} / {{total}} ページ", - "page": "{{current}} ページ", - "jumpToPage": "クリックでページ移動", - "loadRowCount": "行数を読み込む", - "executePrompt": "クエリを実行すると結果が表示されます", - "tableRunPrompt": "Run (Ctrl/Command+F5) を押してテーブルデータを読み込んでください", - "closeTab": "タブを閉じる", - "closeOthers": "他のタブを閉じる", - "closeRight": "右側のタブを閉じる", - "closeLeft": "左側のタブを閉じる", - "closeAll": "すべてのタブを閉じる", - "saveQuery": "クエリを保存", - "saveThisQuery": "このクエリを保存", - "noValidQueries": "有効なクエリが見つかりません", - "queryFailed": "クエリが失敗しました。", - "showErrorDetails": "詳細を表示", - "hideErrorDetails": "詳細を非表示", - "errorBoundary": { - "title": "エディタが予期せずクラッシュしました", - "description": "エディタの一部のレンダリングに失敗しました。エラーは下に表示されています。再試行するか、接続一覧に戻ってください。", - "retry": "再試行", - "closeCurrentTab": "現在のタブを閉じる", - "backToConnections": "接続一覧に戻る", - "showDetails": "技術的な詳細を表示" - }, - "newVisualQuery": "新規ビジュアルクエリ", - "activeDatabase": "アクティブなデータベース", - "tabSwitcher": { - "title": "開いているタブ", - "hint": "Ctrl+Tab", - "escHint": "Esc で閉じる" - }, - "quickNavigator": { - "placeholder": "テーブル、ビュー、ルーチン、トリガーを検索...", - "noResults": "一致する要素が見つかりません", - "count_one": "1件", - "count_other": "{{count}}件", - "navigationHint": "↑↓で移動、Enterで開く", - "escHint": "Escで閉じる", - "type_table": "テーブル", - "type_view": "ビュー", - "type_routine": "ルーチン", - "type_trigger": "トリガー", - "actions": { - "inspect": "構造を表示", - "newConsole": "新規コンソール", - "generateSql": "SQLテンプレートを生成", - "countRows": "行数をカウント", - "query": "SELECTクエリを実行", - "copyName": "名前をコピー" - } - }, - "submitChanges": "変更を送信", - "rollbackChanges": "変更をロールバック", - "applyToAll": "すべてに適用", - "executingQuery": "クエリを実行中...", - "exporting": "エクスポート中...", - "rowsProcessed": "処理行数", - "queryParameters": "クエリパラメータ", - "convertToConsole": "コンソールに変換", - "parameters": "パラメータ", - "paramValuePlaceholder": "値 (例: 'text' や 123)", - "failedCreateRow": "新規行の作成に失敗しました: ", - "failedProcessInsertions": "挿入の処理に失敗しました: ", - "newNotebook": "新規ノートブック", - "visualExplain": { - "title": "ビジュアル Explain", - "buttonShort": "実行計画", - "loading": "EXPLAIN を実行中...", - "planningTime": "プランニング", - "executionTime": "実行", - "totalCost": "総コスト", - "estRows": "推定行数", - "actualRows": "実行行数", - "cost": "コスト", - "time": "時間", - "loops": "ループ", - "filter": "フィルター", - "indexCondition": "インデックス条件", - "relation": "テーブル", - "nodeType": "操作", - "rawOutput": "生出力", - "analyze": "分析", - "analyzeWarning": "ANALYZE はクエリを実行します。データを変更するステートメントでは注意して使用してください。", - "notExplainable": "EXPLAIN は DML ステートメント (SELECT, INSERT, UPDATE, DELETE) のみサポートされます。CREATE、DROP、ALTER などの DDL は説明できません。", - "contextMenuExplain": "実行計画", - "rerun": "再実行", - "close": "閉じる", - "graphView": "グラフ", - "tableView": "テーブル", - "general": "一般", - "analyzeData": "分析データ", - "extraDetails": "詳細", - "selectNode": "ノードを選択して詳細を表示", - "buffersHit": "バッファヒット", - "buffersRead": "バッファ読み込み", - "joinType": "結合タイプ", - "hashCondition": "ハッシュ条件", - "topIssues": "主な問題", - "noIssues": "現在のプランサマリに大きな問題は検出されませんでした。", - "highestCost": "最高コスト", - "slowestStep": "最も遅いステップ", - "largestEstimateGap": "推定の乖離", - "overEstimate": "実行行数が推定を超過", - "underEstimate": "推定が実行行数を超過", - "sequentialScans": "シーケンシャルスキャン", - "tempOperations": "一時またはソート操作", - "scanOperations": "スキャンの多い操作を検出", - "sortOrTempOperations": "ソートまたは一時処理を検出", - "driverNotes": "ドライバ補足", - "overview": "概要", - "showOverview": "概要を表示", - "hideOverview": "概要を非表示", - "postgresAnalyzeLegend1": "PostgreSQL の ANALYZE では、利用可能な場合は実行行数、時間、ループ、バッファカウンタが含まれます。", - "postgresAnalyzeLegend2": "大きな推定乖離は通常、古い統計やプランナーがモデル化しきれない述語を示します。", - "postgresEstimateLegend1": "ANALYZE なしの PostgreSQL はプランナーの推定のみを表示します。", - "postgresEstimateLegend2": "ANALYZE を有効にすると、実行行数、時間、ループ、バッファを確認できます。", - "mysqlAnalyzeLegend1": "MySQL および MariaDB では、サポートされた EXPLAIN ANALYZE または ANALYZE FORMAT バリアントでのみ実測値が得られます。", - "mysqlAnalyzeLegend2": "古いサーバーでは、指標の少ない推定プランにフォールバックする場合があります。", - "mysqlEstimateLegend1": "MySQL および MariaDB はサーバーのバージョンに応じて EXPLAIN FORMAT=JSON または表形式 EXPLAIN にフォールバックする場合があります。", - "mysqlEstimateLegend2": "タイミングが欠落している場合、サーバーは推定のみのプランを返している可能性があります。", - "sqliteLegend1": "SQLite の EXPLAIN QUERY PLAN は軽量で、主に構造情報のみを提供します。", - "sqliteLegend2": "コスト、タイミング、行数推定は PostgreSQL や MySQL と比べて得られないことが多いです。", - "aiAnalysis": "AI 分析", - "aiAnalysisTitle": "AI によるクエリ計画分析", - "aiAnalyzing": "AI でクエリ計画を分析中...", - "aiConfigRequired": "AI プロバイダが未設定です。設定 > AI に移動してください。" - }, - "notebook": { - "addSqlCell": "SQL セルを追加", - "addMarkdownCell": "Markdown セルを追加", - "addCell": "追加", - "runAll": "すべて実行", - "runAllTooltip": "上から下へすべての SQL セルを実行", - "runCell": "セルを実行", - "deleteCell": "セルを削除", - "moveCellUp": "上に移動", - "moveCellDown": "下に移動", - "export": "ノートブックをエクスポート", - "import": "ノートブックをインポート", - "emptyNotebook": "このノートブックは空です。セルを追加して始めましょう。", - "markdownPlaceholder": "ここに Markdown を記述...", - "togglePreview": "プレビューを切り替え", - "sqlCell": "SQL", - "markdownCell": "Markdown", - "invalidFile": "不正なノートブックファイル形式です", - "importSuccess": "ノートブックを正常にインポートしました", - "exportSuccess": "ノートブックを正常にエクスポートしました", - "cellResult_one": "{{count}} 行 · {{time}}ms", - "cellResult_other": "{{count}} 行 · {{time}}ms", - "stopOnError": "エラー時に停止", - "stopOnErrorTooltip": "セルが失敗したら実行を停止します", - "runAllComplete": "すべての実行が完了", - "succeeded": "成功", - "failed": "失敗", - "skipped": "スキップ", - "toggleChart": "チャートを切り替え", - "chartType": "チャート", - "chartLabel": "ラベル", - "chartValues": "値", - "exportCsv": "CSV としてエクスポート", - "exportJson": "JSON としてエクスポート", - "exportHtml": "HTML としてエクスポート", - "parameters": "パラメータ", - "paramName": "名前", - "paramValue": "値", - "invalidParamName": "不正なパラメータ名です", - "parallelExecution": "並列実行 (すべて実行)", - "executionHistory": "実行履歴", - "noHistory": "実行履歴はまだありません", - "collapseCell": "セルを折りたたむ", - "expandCell": "セルを展開", - "collapseAll": "すべて折りたたむ", - "expandAll": "すべて展開", - "outline": "アウトライン", - "cellNamePlaceholder": "無題", - "editCellName": "セル名を編集", - "aiGenerateName": "AI で名前を生成", - "generatingName": "名前を生成中...", - "aiGenerateOutlineNames": "AI で未命名セルの名前を生成", - "undo": "元に戻す", - "redo": "やり直す", - "history": { - "title": "編集履歴", - "change": { - "initial": "初期バージョン", - "editCell": "セル {{n}} を編集", - "addSql": "SQL セル {{n}} を追加", - "addMarkdown": "Markdown セル {{n}} を追加", - "deleteCell": "セル {{n}} を削除", - "reorder": "セルを並べ替え", - "renameCell": "セル {{n}} の名前を変更", - "schemaCell": "データベースを変更(セル {{n}})", - "chartCell": "チャートを変更(セル {{n}})", - "parallelCell": "並列を切り替え(セル {{n}})", - "collapse": "セルを折りたたみ/展開", - "params": "パラメータを変更", - "stopOnError": "エラー時に停止を切り替え", - "other": "ノートブックを編集" - } - } - }, - "querySelection": { - "title": "実行するクエリを選択", - "queriesFound_one": "{{count}} 件のクエリが見つかりました", - "queriesFound_other": "{{count}} 件のクエリが見つかりました", - "runAll": "すべて実行", - "runSelected": "選択したものを実行 ({{count}})", - "runSingle": "このクエリを実行", - "selectAll": "すべて選択", - "deselectAll": "すべて解除" - }, - "explainSelection": { - "title": "説明するクエリを選択", - "queriesFound_one": "説明可能なクエリが {{count}} 件見つかりました", - "queriesFound_other": "説明可能なクエリが {{count}} 件見つかりました", - "explainSingle": "このクエリを説明", - "explainFocused": "フォーカス中のものを説明", - "explainNth": "N 番目を説明", - "cancel": "キャンセル" - }, - "multiResult": { - "rerun": "クエリを再実行", - "close": "タブを閉じる", - "rename": "名前を変更", - "aiGenerateName": "AI で名前を生成", - "generatingName": "名前を生成中...", - "viewTabs": "タブ表示", - "viewStacked": "スタック表示", - "queryPrefix": "クエリ", - "results": "結果", - "collapseAll": "すべて折りたたむ", - "expandAll": "すべて展開" - } - }, - "createTable": { - "title": "新規テーブルを作成", - "tableName": "テーブル名", - "tableNamePlaceholder": "例: users, orders, products", - "columns": "カラム", - "addColumn": "カラムを追加", - "colName": "名前", - "colType": "タイプ", - "colLen": "長さ", - "colPk": "PK", - "colNn": "NN", - "colAi": "AI", - "colDefault": "デフォルト", - "create": "テーブルを作成", - "cancel": "キャンセル", - "nameRequired": "テーブル名は必須です", - "colRequired": "少なくとも 1 つのカラムが必要です", - "failCreate": "テーブルの作成に失敗しました: ", - "requiresExtension": "拡張機能が必要: {{ext}}" - }, - "schema": { - "title": "スキーマ: {{table}}", - "loading": "スキーマを読み込み中...", - "colName": "名前", - "colType": "タイプ", - "colNullable": "NULL 許可", - "colKey": "キー", - "yes": "はい", - "no": "いいえ" - }, - "generateSQL": { - "title": "生成された SQL: {{table}}", - "loading": "SQL を生成中...", - "runInConsole": "コンソールで実行", - "copy": "SQL をコピー", - "copied": "コピーしました!", - "tabCreateTable": "テーブル作成", - "tabSelectAll": "SELECT *", - "tabSelectFields": "SELECT [フィールド]", - "tabUpdate": "UPDATE", - "tabDelete": "DELETE" - }, - "modifyColumn": { - "titleAdd": "カラムを追加", - "titleEdit": "カラムを変更", - "sqliteWarn": "SQLite はカラムの名前変更のみサポートします。その他の変更にはテーブルの再作成が必要です。", - "name": "名前", - "type": "タイプ", - "length": "長さ", - "default": "デフォルト値", - "notNull": "NOT NULL", - "primaryKey": "主キー", - "autoInc": "自動インクリメント", - "sqlPreview": "SQL プレビュー", - "save": "変更を保存", - "add": "カラムを追加", - "cancel": "キャンセル", - "nameRequired": "カラム名は必須です", - "fail": "失敗: ", - "pkNotSupported": "このドライバはテーブル作成時のみ主キーをサポートします", - "requiresExtension": "拡張機能が必要: {{ext}}" - }, - "createIndex": { - "title": "インデックスを作成", - "name": "インデックス名", - "columns": "カラム", - "unique": "ユニークインデックス", - "sqlPreview": "SQL プレビュー", - "create": "インデックスを作成", - "cancel": "キャンセル", - "nameRequired": "インデックス名は必須です", - "colRequired": "少なくとも 1 つのカラムを選択してください" - }, - "createFk": { - "title": "外部キーを作成", - "name": "FK 名 (任意)", - "column": "ローカルカラム", - "refTable": "参照テーブル", - "refColumn": "参照カラム", - "onDelete": "削除時", - "onUpdate": "更新時", - "sqlPreview": "SQL プレビュー", - "create": "外部キーを作成", - "cancel": "キャンセル" - }, - "healthCheck": { - "title": "接続が失われました", - "connectionLost": "データベース接続が失われました" - }, - "erDiagram": { - "enterFullscreen": "フルスクリーン", - "exitFullscreen": "フルスクリーンを終了", - "noConnection": "接続 ID がありません", - "noConnectionDesc": "接続 ID がないため、図を表示できません。", - "switchToVertical": "垂直レイアウトに切り替え", - "switchToHorizontal": "水平レイアウトに切り替え", - "vertical": "垂直", - "horizontal": "水平", - "showAllTables": "すべてのテーブルを表示", - "showAll": "すべて表示", - "focusedOn": "フォーカス中", - "focusOnTable": "テーブルにフォーカス" - }, - "views": { - "createView": "ビューを作成", - "editView": "ビューを編集", - "createSubtitle": "新しいデータベースビューを作成します", - "editSubtitle": "ビューを編集中: {{name}}", - "viewName": "ビュー名", - "viewNamePlaceholder": "例: active_users, order_summary", - "viewDefinition": "ビュー定義 (SQL)", - "preview": "プレビュー", - "runPreview": "プレビューを実行", - "previewEmpty": "「プレビューを実行」をクリックすると結果が表示されます", - "moreRows": "+{{count}} 行以上", - "create": "ビューを作成", - "save": "変更を保存", - "nameRequired": "ビュー名は必須です", - "definitionRequired": "ビュー定義は必須です", - "failLoadDefinition": "ビュー定義の読み込みに失敗しました: ", - "previewError": "プレビューに失敗しました: ", - "createSuccess": "ビューを正常に作成しました", - "alterSuccess": "ビューを正常に更新しました", - "saveError": "ビューの保存に失敗しました: ", - "confirmAlter": "ビュー「{{view}}」を変更してもよろしいですか?" - }, - "triggers": { - "createTrigger": "トリガーを作成", - "editTrigger": "トリガーを編集", - "createSubtitle": "新しいデータベーストリガーを作成します", - "editSubtitle": "トリガーを編集中: {{name}}", - "triggerName": "トリガー名", - "triggerNamePlaceholder": "例: before_insert_user", - "tableName": "テーブル名", - "tableNamePlaceholder": "例: users", - "timing": "タイミング", - "events": "イベント", - "body": "トリガー本体 (SQL)", - "sqlPreview": "生成 SQL プレビュー", - "rawSql": "Raw SQL", - "guidedMode": "ガイド", - "rawSqlMode": "Raw SQL", - "loading": "トリガー定義を読み込み中...", - "create": "トリガーを作成", - "save": "変更を保存", - "sqlRequired": "トリガー SQL は必須です", - "failLoadDefinition": "トリガー定義の読み込みに失敗しました: ", - "dropError": "既存のトリガーの削除に失敗しました: ", - "saveError": "トリガーの保存に失敗しました: ", - "createSuccess": "トリガーを正常に作成しました", - "updateSuccess": "トリガーを正常に更新しました", - "recreateTrigger": "トリガーを再作成", - "confirmRecreate": "トリガーを編集するには、いったん削除して再作成する必要があります。「{{trigger}}」の変更を続行しますか?" - }, - "community": { - "title": "コミュニティに参加", - "subtitle": "Tabularis の成長をサポート", - "description": "Tabularis は無料のオープンソースプロジェクトです。便利だと感じたら、プロジェクトのサポートやコミュニティへの参加をご検討ください。", - "starTitle": "GitHub でスター", - "starDesc": "スターはプロジェクトを他の人に見つけてもらう助けになります", - "discordTitle": "Discord に参加", - "discordDesc": "コミュニティとの交流、サポート、機能提案", - "dismiss": "あとで" - }, - "whatsNew": { - "title": "新機能", - "subtitle": "バージョン {{version}}", - "features": "新機能", - "bugFixes": "バグ修正", - "breakingChanges": "破壊的変更", - "readMore": "もっと読む", - "dismiss": "了解" - }, - "dump": { - "title": "データベースをダンプ", - "dumpDatabase": "データベースをダンプ", - "importDatabase": "SQL ファイルを実行...", - "importTitle": "データベースをインポート", - "includeStructure": "構造 (DDL)", - "includeData": "データ (INSERT)", - "selectTables": "テーブルを選択", - "selectAll": "すべて選択", - "deselectAll": "すべて解除", - "export": "エクスポート", - "success": "データベースを正常にエクスポートしました", - "failure": "エクスポートに失敗しました: ", - "errorNoOption": "構造かデータのいずれかを選択してください", - "errorNoTables": "少なくとも 1 つのテーブルを選択してください", - "importSuccess": "SQL ファイルを正常に実行しました", - "importFailure": "インポートに失敗しました: ", - "importCancelled": "インポートをキャンセルしました", - "importFailed": "インポートに失敗しました", - "importingFrom": "インポート元", - "statementsExecuted": "{{count}} / {{total}} ステートメント", - "confirmImport": "「{{file}}」をインポートしてもよろしいですか?\n既存のデータが上書きされる可能性があります。", - "elapsedTime": "経過時間" - }, - "geometryInput": { - "sqlMode": "SQL モード", - "wktMode": "WKT モード", - "sqlHelper": "完全な SQL 関数を入力してください (例: ST_GeomFromText('POINT(30 40)', 4326))", - "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", - "wktPlaceholder": "POINT(30 40)", - "toggleTooltip": "SQL 関数" - }, - "jsonInput": { - "placeholder": "JSON を入力...", - "format": "整形", - "valid": "有効な JSON", - "invalid": "無効な JSON" - }, - "rowEditor": { - "title": "行を編集", - "subtitle": "行 #{{row}}", - "enterValue": "値を入力..." - }, - "contextMenu": { - "openSidebar": "サイドバーエディタで開く" - }, - "blobInput": { - "noData": "BLOB データなし", - "uploadFile": "ファイルをアップロード", - "download": "ダウンロード", - "delete": "削除", - "truncatedWarning": "プレビューのみ - 完全なデータは読み込まれていません", - "downloadDisabledTruncated": "ダウンロード不可 - プレビューのみ読み込み済み", - "downloading": "ダウンロード中...", - "uploading": "アップロード中...", - "openSidebar": "エディタで開く", - "imagePreview": "画像プレビュー" - }, - "visualExplainPage": { - "title": "ビジュアル Explain", - "noFile": "ファイルが読み込まれていません", - "openFile": "ファイルを開く", - "reload": "再読み込み", - "loading": "実行計画を読み込み中…", - "emptyHint": "EXPLAIN プランを含むファイル (Postgres JSON またはテキスト形式) を選択して可視化します。" - }, - "taskManager": { - "header": { - "title": "タスクマネージャ", - "subtitle": "プラグインプロセスとシステムリソース", - "description": "プラグインプロセス、CPU、RAM、ディスク使用量をリアルタイムで監視します", - "open": "タスクマネージャを開く", - "refresh": "更新" - }, - "killModal": { - "title": "プラグインプロセスを強制終了", - "subtitle": "この操作はすぐには取り消せません", - "descriptionBefore": "強制終了中:", - "descriptionAfter": "のプロセスを強制的に停止します。このプラグインを使用しているアクティブなデータベース接続は、プラグインが再起動されるまで動作しなくなります。", - "warning": "このプラグインを経由するアクティブなクエリや接続は中断されます。", - "cancel": "キャンセル", - "confirm": "強制終了" - }, - "systemResources": { - "title": "システムリソース", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "ディスク読み取り/秒", - "diskWrite": "ディスク書き込み/秒", - "processCount_one": "{{count}} 個のシステムプロセスが実行中", - "processCount_other": "{{count}} 個のシステムプロセスが実行中" - }, - "tabularisProcess": { - "title": "Tabularis プロセス", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "ディスク読み取り/秒", - "diskWrite": "ディスク書き込み/秒", - "childCount_one": "{{count}} 個の子プロセス", - "childCount_other": "{{count}} 個の子プロセス", - "noChildren": "子プロセスはありません", - "treeTotal": "ツリー合計: {{size}}", - "treeTotalTooltip": "プロセスツリー全体の RSS 合計 — 共有メモリを重複して計算している可能性があります", - "loadingProcesses": "プロセスを読み込み中…", - "colPid": "PID", - "colName": "名前", - "colCpu": "CPU", - "colRam": "RAM", - "refresh": "更新" - }, - "pluginProcesses": { - "title": "プラグインプロセス", - "loading": "プロセスを読み込み中…", - "empty": "実行中のプラグインプロセスはありません", - "emptyHint": "プラグインをインストールして有効化するとここに表示されます", - "colPlugin": "プラグイン", - "colPid": "PID", - "colCpu": "CPU", - "colRam": "RAM", - "colDiskRw": "ディスク R/W", - "colStatus": "ステータス", - "colActions": "操作", - "restart": "再起動", - "kill": "停止", - "collapseChildren": "子プロセスを折りたたむ", - "childCount_one": "{{count}} 個の子プロセス", - "childCount_other": "{{count}} 個の子プロセス", - "childProcess": "子プロセス", - "status": { - "running": "実行中", - "stopped": "停止", - "unknown": "不明" - } - } - }, - "groups": { - "newGroup": "新規グループ", - "rename": "名前を変更", - "delete": "削除", - "deleteConfirm": "グループ「{{name}}」を削除してもよろしいですか?このグループ内の接続は未分類に移動されます。", - "deleteTitle": "グループを削除", - "connection": "接続", - "connections": "接続", - "ungrouped": "未分類", - "removeFromGroup": "グループから削除", - "groupName": "グループ名", - "createError": "グループの作成に失敗しました" - }, - "queryModal": { - "database": "データベース", - "noDatabase": "データベースなし" - }, - "clipboardImport": { - "title": "クリップボードからインポート", - "subtitle": "構造化データを貼り付け、インポート前にスキーマをプレビューします", - "selectTablePlaceholder": "テーブルを選択...", - "contextMenuLabel": "クリップボードからインポート...", - "firstRowHeader": "最初の行をヘッダーとして扱う", - "tableName": "テーブル名", - "tableNamePlaceholder": "例: sales_data", - "aiSuggest": "AI 提案", - "tableExists": "既に存在します", - "mode": "モード", - "createNew": "新規テーブルを作成", - "appendTo": "既存に追加", - "onConflict": "既存時の動作", - "conflictFail": "エラーで失敗", - "conflictAppend": "行を追加", - "conflictReplace": "テーブルを置換", - "schemaPreview": "カラムスキーマ", - "dataPreview": "データプレビュー", - "sample": "サンプル値", - "lowConfidence": "混在タイプを検出、TEXT にデフォルト設定", - "rowsTotal_one": "{{count}} 行", - "rowsTotal_other": "{{count}} 行", - "showingFirst": "先頭 {{count}} 行を表示中", - "import_one": "{{count}} 行をインポート", - "import_other": "{{count}} 行をインポート", - "importing": "インポート中...", - "success_one": "{{count}} 行を「{{table}}」にインポートしました", - "success_other": "{{count}} 行を「{{table}}」にインポートしました", - "tableCreated": "新規テーブルを作成しました", - "openTable": "閉じる", - "noData": "クリップボードにデータが見つかりません", - "retry": "再試行", - "warningsCount_one": "{{count}} 件の解析警告", - "warningsCount_other": "{{count}} 件の解析警告", - "columnsLabel": "カラム", - "rowsLabel": "行", - "stepConfigure": "インポート先を設定", - "stepReview": "確認・調整", - "modeCreateHint": "新規テーブルが作成されます", - "modeAppendHint": "既存テーブルに行が追加されます", - "maximize": "最大化", - "minimize": "最小化", - "nSelected": "{{count}} 件選択中", - "deleteSelected": "選択を削除", - "deleteColumn": "カラムを削除", - "sourceColumn": "クリップボードのカラム", - "targetColumn": "対象カラム", - "targetColumnPlaceholder": "対象を選択...", - "skipColumn": "スキップ (インポートしない)", - "createNewColumn": "新規カラムを作成" - }, - "aiActivity": { - "title": "AI アクティビティ", - "description": "すべての MCP ツール呼び出しの監査ログと、承認待ちのクエリ。ローカルに保存され、外部には送信されません。", - "tabs": { - "events": "イベント", - "sessions": "セッション" - }, - "empty": "MCP アクティビティはまだありません。", - "eventsCount_one": "{{count}} 件のイベント", - "eventsCount_other": "{{count}} 件のイベント", - "blockedCount_one": "{{count}} 件ブロック", - "blockedCount_other": "{{count}} 件ブロック", - "errorsCount_one": "{{count}} 件のエラー", - "errorsCount_other": "{{count}} 件のエラー", - "sessionsCount_one": "{{count}} 件のセッション", - "sessionsCount_other": "{{count}} 件のセッション", - "events": "イベント", - "runQueries": "クエリ", - "connections": "接続", - "client": "クライアント", - "rowsReturned": "取得行数", - "approvalId": "承認 ID", - "searchQuery": "クエリを検索…", - "allTools": "すべてのツール", - "allStatuses": "すべてのステータス", - "clearAll": "クリア", - "clearConfirm": "AI アクティビティ履歴をすべて削除しますか?この操作は元に戻せません。", - "exportNotebook": "ノートブックとしてエクスポート", - "exportSuccess": "{{path}} にエクスポートしました", - "viewDetails": "詳細を表示", - "copyQuery": "クエリをコピー", - "openVisualExplain": "Visual Explain で開く", - "copied": "クリップボードにコピーしました", - "detailTitle": "イベントの詳細", - "col": { - "timestamp": "時刻", - "tool": "ツール", - "connection": "接続", - "query": "クエリ", - "kind": "種別", - "duration": "所要時間", - "status": "ステータス", - "actions": "アクション" - }, - "sort": { - "sortBy": "{{field}} で並び替え", - "sortByPlaceholder": "並び替え…", - "toggleAscending": "昇順で並び替え", - "toggleDescending": "降順で並び替え", - "ascending": "昇順", - "descending": "降順", - "started": "開始", - "eventCount": "イベント", - "runQueries": "実行クエリ" - }, - "searchSessions": "セッション、クライアント、接続を検索…", - "filteredFrom": "/ {{total}} 件中", - "noMatches": "現在のフィルタに一致するセッションがありません。", - "status": { - "success": "成功", - "blocked_readonly": "ブロック (読み取り専用)", - "blocked_pending_approval": "承認待ち", - "denied": "拒否", - "error": "エラー", - "timeout": "タイムアウト" - }, - "queryKind": { - "select": "SELECT", - "write": "書き込み", - "ddl": "DDL", - "unknown": "不明" - } - }, - "aiApproval": { - "title": "AI がデータベース書き込みを要求しています", - "subtitle": "{{connection}} 上 — 実行前に確認して判断してください。", - "subtitleWithClient": "{{client}} が {{connection}} 上 — 実行前に確認して判断してください。", - "query": "クエリ", - "editQuery": "承認前に編集", - "lockQuery": "クエリをロック", - "preflightPlan": "プリフライト実行計画", - "expandPlan": "展開", - "collapsePlan": "折りたたむ", - "explainUnavailable": "このクエリは EXPLAIN に対応していません。", - "explainFailed": "EXPLAIN 失敗: {{error}}", - "reasonLabel": "理由 (任意)", - "reasonPlaceholder": "例: 本番環境でリスクがありそう、確認お願いします…", - "approve": "承認", - "deny": "拒否" - }, - "discordCallout": { - "title": "Discord コミュニティが新登場!", - "body": "Tabularis ユーザー専用のコミュニティを立ち上げました。質問・情報交換・ロードマップへのフィードバックをお寄せください。", - "cta": "今すぐ参加", - "dismiss": "閉じる" - }, - "k8sConnections": { - "title": "Kubernetes 接続", - "add": "追加", - "empty": "保存された Kubernetes 接続がありません。「追加」をクリックして作成してください。", - "name": "名前", - "namePlaceholder": "マイ K8s クラスター", - "context": "コンテキスト", - "chooseContext": "コンテキストを選択...", - "namespace": "ネームスペース", - "chooseNamespace": "ネームスペースを選択...", - "resourceType": "リソースタイプ", - "resourceTypeService": "Service", - "resourceTypePod": "Pod", - "resourceName": "リソース名", - "chooseResource": "リソースを選択...", - "port": "コンテナポート", - "test": "テスト", - "testing": "テスト中...", - "errors": { - "nameRequired": "接続名は必須です", - "contextRequired": "Kubernetes コンテキストは必須です", - "namespaceRequired": "ネームスペースは必須です", - "resourceTypeInvalid": "リソースタイプは \"service\" または \"pod\" である必要があります", - "resourceNameRequired": "リソース名は必須です", - "portInvalid": "ポートは 1 から 65535 の範囲で指定してください" - } - } -} diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json deleted file mode 100644 index ef0c8229..00000000 --- a/src/i18n/locales/ru.json +++ /dev/null @@ -1,1518 +0,0 @@ -{ - "toolbar": { - "filters": "Фильтры", - "toggleFilterPanel": "Открыть/закрыть панель фильтров", - "filterConditions": "Условия фильтрации", - "activeOf": "Активно {{active}} из {{total}}", - "noFilters": "Нет фильтров —", - "addFirstFilter": "добавить первый фильтр", - "noActiveFilters": "нет активных фильтров", - "closePanelEsc": "Закрыть панель фильтров (ESC)", - "unset": "Не задано", - "sql": "SQL", - "addFilter": "Добавить фильтр", - "applyAll": "Применить все", - "apply": "Применить", - "applied": "Применено", - "switchToSql": "Перейти к вводу SQL WHERE", - "duplicateFilter": "Дублировать фильтр", - "removeFilter": "Удалить фильтр", - "deselectFromApplyAll": "Убрать из «Применить все»", - "selectForApplyAll": "Добавить в «Применить все»", - "valuePlaceholder": "значение", - "fromPlaceholder": "от", - "toPlaceholder": "до" - }, - "common": { - "save": "Сохранить", - "close": "Закрыть", - "cancel": "Отменить", - "delete": "Удалить", - "edit": "Изменить", - "loading": "Загрузка...", - "search": "Поиск...", - "noResults": "Ничего не найдено", - "error": "Ошибка", - "success": "Готово", - "ok": "ОК" - }, - "sidebar": { - "connections": "Подключения", - "settings": "Настройки", - "savedQueries": "Сохранённые запросы", - "tables": "Таблицы", - "newConsole": "Новая консоль", - "newVisualQuery": "Новый визуальный запрос", - "refresh": "Обновить", - "refreshTables": "Обновить таблицы", - "refreshViews": "Обновить представления", - "createView": "Создать новое представление", - "views": "Представления", - "noViews": "Представления не найдены", - "editView": "Изменить представление", - "viewDefinition": "Определение представления", - "dropView": "Удалить представление", - "dropViewConfirm": "Удалить представление \"{{view}}\"?", - "failGetViewDefinition": "Не удалось получить определение представления: ", - "failDropView": "Не удалось удалить представление: ", - "explorer": "Проводник", - "sqlEditor": "SQL-редактор", - "loadingSchema": "Загрузка схемы...", - "noSavedQueries": "Нет сохранённых запросов", - "searchFavorites": "Поиск в избранном...", - "noFavoritesSearchResults": "Ничего не найдено в избранном", - "execute": "Выполнить", - "edit": "Изменить", - "delete": "Удалить", - "confirmDeleteQuery": "Удалить запрос \"{{name}}\"?", - "confirmDeleteTitle": "Удалить запрос", - "noTables": "Таблицы не найдены", - "columns": "столбцы", - "keys": "ключи", - "foreignKeys": "внешние ключи", - "indexes": "индексы", - "deleteColumn": "Удалить столбец", - "deleteColumnConfirm": "Удалить столбец \"{{column}}\" из таблицы \"{{table}}\"?\n\nВНИМАНИЕ: Все данные в этом столбце будут безвозвратно удалены. Действие необратимо.", - "failDeleteColumn": "Не удалось удалить столбец: ", - "failDeleteIndex": "Не удалось удалить индекс: ", - "modifyColumn": "Изменить столбец", - "copyName": "Копировать имя", - "openInEditor": "Открыть в редакторе", - "closePanel": "Закрыть панель", - "setAsActive": "Сделать активным", - "deleteTable": "Удалить таблицу", - "deleteTableConfirm": "Удалить таблицу \"{{table}}\"?", - "failDeleteTable": "Не удалось удалить таблицу: ", - "showData": "Показать данные", - "countRows": "Подсчитать строки", - "viewSchema": "Просмотреть схему", - "viewERDiagram": "Открыть ER-диаграмму", - "generateSQL": "Сгенерировать SQL", - "addColumn": "Добавить столбец", - "addIndex": "Добавить индекс", - "deleteIndex": "Удалить индекс", - "deleteIndexConfirm": "Удалить индекс \"{{name}}\"?", - "addFk": "Добавить внешний ключ", - "deleteFk": "Удалить внешний ключ", - "deleteFkConfirm": "Удалить внешний ключ \"{{name}}\"?", - "sqliteFkError": "SQLite не поддерживает удаление внешних ключей через ALTER TABLE.", - "mcpServer": "MCP-сервер", - "routines": "Подпрограммы", - "functions": "Функции", - "procedures": "Хранимые процедуры", - "noRoutines": "Подпрограммы не найдены", - "refreshRoutines": "Обновить подпрограммы", - "triggers": "Триггеры", - "noTriggers": "Триггеры не найдены", - "filterTriggers": "Фильтр триггеров...", - "noTriggersMatch": "Ни один триггер не соответствует фильтру", - "createTrigger": "Создать новый триггер", - "editTrigger": "Изменить триггер", - "dropTrigger": "Удалить триггер", - "dropTriggerConfirm": "Удалить триггер \"{{trigger}}\"?", - "viewTriggerDefinition": "Просмотреть определение", - "failDropTrigger": "Не удалось удалить триггер: ", - "failGetTriggerDefinition": "Не удалось получить определение триггера: ", - "refreshTriggers": "Обновить триггеры", - "onTable": "на {{table}}", - "objectSummary": "Объекты", - "databases": "Базы данных", - "failGetRoutineDefinition": "Не удалось получить определение подпрограммы: ", - "schemas": "Схемы", - "noSchemas": "Схемы не найдены", - "loadingSchemas": "Загрузка схем...", - "schemaLoadError": "Не удалось загрузить схемы", - "errorDetails": "Подробности", - "copyError": "Скопировать сообщение об ошибке", - "retry": "Повторить", - "expandExplorer": "Развернуть проводник", - "selectSchemas": "Выбрать схемы", - "selectSchemasHint": "Выберите схемы для загрузки:", - "selectAll": "Выбрать все", - "deselectAll": "Снять выбор", - "confirmSelection": "Подтвердить", - "editSchemas": "Изменить схемы", - "selectConnection": "Выбрать подключение", - "disconnect": "Отключиться", - "switchConnection": "Сменить подключение", - "noOtherConnections": "Нет других подключений", - "openConnections": "Открытые", - "availableConnections": "Доступные", - "splitVertical": "Разделить вертикально", - "splitHorizontal": "Разделить горизонтально", - "separateConnections": "Отдельные подключения", - "splitGroup": "Разделить группу", - "filterTables": "Фильтр таблиц...", - "noTablesMatch": "Таблицы не найдены", - "filterDatabases": "Фильтр баз данных...", - "manageDatabases": "Управление базами данных", - "structure": "Структура", - "favorites": "Избранное", - "queryHistory": "История", - "noQueryHistory": "История запросов пуста", - "noHistorySearchResults": "Запросы не найдены", - "searchHistory": "Поиск в истории...", - "clearAllHistory": "Очистить всю историю", - "historyRecoveredTitle": "История запросов сброшена", - "historyRecoveredBody": "Файл истории был повреждён и перенесён в резервную копию. Новые запросы будут записываться как обычно. Резервный файл:", - "historyRecoveredDismiss": "Закрыть", - "confirmDeleteHistoryEntry": "Удалить этот запрос из истории?", - "confirmClearHistory": "Очистить всю историю запросов для этого подключения?", - "confirmClearHistoryTitle": "Очистить историю запросов", - "addToFavorites": "Добавить в избранное", - "insertToEditor": "Вставить в редактор", - "openInNewTab": "Открыть в новой вкладке", - "copyQuery": "Копировать запрос", - "runQuery": "Выполнить запрос", - "dateGroupToday": "Сегодня", - "dateGroupYesterday": "Вчера", - "dateGroupThisWeek": "На этой неделе", - "dateGroupThisMonth": "В этом месяце", - "dateGroupOlder": "Ранее", - "notebooks": { - "tab": "Блокноты", - "search": "Поиск блокнотов", - "refresh": "Обновить", - "empty": "Сохранённых блокнотов пока нет.", - "noSearchResults": "Нет блокнотов, соответствующих запросу.", - "open": "Открыть", - "rename": "Переименовать", - "delete": "Удалить", - "deleteConfirm": "Удалить блокнот «{{title}}»? Это действие нельзя отменить.", - "renamePlaceholder": "Имя блокнота" - } - }, - "mcp": { - "title": "Интеграция MCP-сервера", - "subtitle": "Подключить Tabularis к Claude Desktop, Cursor и другим клиентам", - "description": "Model Context Protocol (MCP) позволяет AI-ассистентам (например, Claude) подключаться к локальным инструментам. Tabularis предоставляет MCP-сервер, через который AI читает схему базы данных и выполняет запросы.", - "checking": "Проверка конфигурации...", - "notFound": "Файл конфигурации не найден (создайте вручную)", - "installed": "Установлено", - "install": "Установить конфигурацию", - "manualConfig": "РУЧНАЯ НАСТРОЙКА", - "manualText": "Добавьте этот фрагмент в файл конфигурации клиента вручную, если автоматическая установка не сработала.", - "successTitle": "Готово", - "successMsg": "Настройки для {{client}} установлены. Перезапустите приложение.", - "errorTitle": "Ошибка установки", - "clients": "AI-КЛИЕНТЫ", - "manualCommand": "РУЧНАЯ КОМАНДА", - "manualCommandText": "Выполните эту команду в терминале, затем перезапустите Claude Code.", - "tabs": { - "setup": "Настройка", - "activity": "Активность", - "safety": "Безопасность" - }, - "safety": { - "readOnlyTitle": "Режим только для чтения", - "readOnlyDefault": "Все MCP-запросы только для чтения", - "readOnlyDefaultDesc": "Блокировать любые не-SELECT запросы через MCP, если подключение явно не разрешено ниже.", - "readOnlyList": "Подключения только для чтения", - "readOnlyListDesc": "Отметьте подключения, которые должны быть только для чтения. Остальные работают как обычно.", - "allowList": "Разрешить запись из MCP", - "allowListDesc": "Отметьте подключения, которым разрешена запись. Остальные — только для чтения.", - "approvalTitle": "Подтверждение операций", - "approvalMode": "Требовать подтверждение", - "approvalModeDesc": "Приостанавливать запись (или любой запрос) и запрашивать подтверждение в Tabularis перед отправкой в базу данных.", - "modeOff": "Выключено", - "modeWritesOnly": "Только запись", - "modeAll": "Все запросы", - "approvalTimeout": "Таймаут", - "approvalTimeoutDesc": "Сколько времени MCP-процесс ожидает решения пользователя перед отменой запроса.", - "preflightExplain": "Предварительный EXPLAIN", - "preflightExplainDesc": "Выполнить EXPLAIN перед показом окна подтверждения, чтобы пользователь видел план выполнения." - } - }, - "connections": { - "title": "Подключения", - "addConnection": "Добавить подключение", - "noConnections": "Нет активных подключений", - "createFirst": "Создайте первое подключение", - "active": "Активно", - "disconnect": "Отключиться", - "connect": "Подключиться", - "edit": "Изменить", - "delete": "Удалить", - "clone": "Клонировать", - "confirmDelete": "Удалить это подключение?", - "deleteTitle": "Подтверждение удаления", - "failConnect": "Не удалось подключиться к {{name}}. Проверьте настройки или убедитесь, что база данных запущена.", - "failDisconnect": "Не удалось отключиться от базы данных", - "failDuplicate": "Не удалось дублировать подключение", - "open": "Открыть", - "pluginDisabled": "Плагин отключён", - "noConnectionsHint": "Создайте первое подключение, чтобы начать работу.", - "searchPlaceholder": "Поиск подключений...", - "noSearchResults": "Подключения по запросу \"{{query}}\" не найдены", - "gridView": "Сетка", - "listView": "Список", - "export": "Экспортировать подключения", - "import": "Импортировать подключения", - "exportTitle": "Экспорт подключений", - "exportWarning": "Экспортируемый файл будет содержать пароли к базам данных и SSH в открытом виде. Храните его в надёжном месте!", - "connectionCount_one": "{{count}} подключение", - "connectionCount_few": "{{count}} подключения", - "connectionCount_many": "{{count}} подключений", - "connectionCount_other": "{{count}} подключения" - }, - "settings": { - "general": "Общие", - "info": "Информация", - "dataEditor": "Редактор данных", - "pageSize": "Размер страницы результатов (Limit)", - "pageSizeDesc": "Ограничивает количество строк, получаемых за один запрос, во избежание проблем с производительностью. Установите 0, чтобы отключить (не рекомендуется).", - "rows": "строк", - "copyFormat": "Формат копирования по умолчанию", - "copyFormatDesc": "Формат по умолчанию при копировании строк через Ctrl+C / Cmd+C.", - "csvDelimiter": "Разделитель CSV", - "csvDelimiterDesc": "Разделитель по умолчанию при копировании или экспорте строк в формате CSV.", - "delimiterComma": "Запятая (,)", - "delimiterSemicolon": "Точка с запятой (;)", - "delimiterTab": "Табуляция", - "delimiterPipe": "Вертикальная черта (|)", - "detectJsonInTextColumns": "Определять JSON в текстовых столбцах", - "detectJsonInTextColumnsDesc": "Показывать просмотрщик JSON, когда нетипизированная текстовая ячейка содержит объект или массив JSON. Создаёт небольшие издержки на разбор каждой ячейки.", - "appearance": "Внешний вид", - "localization": "Локализация", - "themeSelection": "Выбор темы", - "fontFamily": "Шрифт", - "fonts": { - "custom": "Пользовательский шрифт", - "customPlaceholder": "например, Comic Sans MS", - "enterFontName": "Введите название шрифта выше" - }, - "fontSize": "Размер шрифта", - "fontSizeLabel": "Размер шрифта", - "fontSizeDesc": "Базовый размер шрифта во всём приложении (10–20 пикселей).", - "preview": "Предпросмотр", - "fontPreviewText": "Съешь же ещё этих мягких французских булок, да выпей чаю", - "appearance_general": "Общие", - "appearance_sqlEditor": "SQL-редактор", - "appearance_editorTheme": "Тема редактора", - "appearance_editorThemeDesc": "Выберите отдельную тему для SQL-редактора или синхронизируйте её с темой приложения.", - "appearance_sameAsApp": "Как в приложении", - "appearance_editorFontFamily": "Шрифт редактора", - "appearance_editorFontSize": "Размер шрифта редактора", - "appearance_editorLineHeight": "Межстрочный интервал", - "appearance_editorTabSize": "Размер отступа", - "appearance_editorWordWrap": "Перенос строк", - "appearance_editorWordWrapDesc": "Переносить длинные строки в редакторе вместо горизонтальной прокрутки.", - "appearance_editorShowLineNumbers": "Показывать номера строк", - "appearance_editorShowLineNumbersDesc": "Отображать номера строк на полях редактора.", - "appearance_editorAcceptSuggestionOnEnter": "Принимать подсказку по Enter", - "appearance_editorAcceptSuggestionOnEnterDesc": "Разрешить Enter (в дополнение к Tab) для принятия активной подсказки автодополнения. При отключении Enter всегда вставляет новую строку.", - "editConfigJson": "Изменить config.json", - "editConfigJsonDesc": "Прямое редактирование файла конфигурации. Изменения вступят в силу после перезапуска.", - "configJsonModal": { - "title": "config.json", - "saveAndRestart": "Сохранить и перезапустить", - "restartNow": "Перезапустить сейчас", - "restartRequired": "Изменения вступят в силу после перезапуска.", - "restartMessage": "Файл конфигурации сохранён. Перезапустить сейчас?" - }, - "language": "Язык", - "languageDesc": "Выберите язык интерфейса. «Авто» использует язык системы.", - "auto": "Авто (системный)", - "projectStatus": "Статус проекта", - "roadmapDesc": "Проект находится в активной разработке (WIP). Основные функции стабильны, впереди много интересного.", - "support": "Поддержать разработку", - "supportDesc": "Если Tabularis вам полезен и вы хотите видеть больше возможностей — поддержите проект: вносите вклад в код, сообщайте об ошибках или поставьте звезду репозиторию.", - "version": "Версия", - "starOnGithub": "Поставить звезду на GitHub", - "ai": { - "tab": "AI", - "title": "Настройки AI", - "description": "Настройте AI-провайдеров для генерации SQL из естественного языка. Ключи хранятся в системном хранилище.", - "enable": "Включить функции AI", - "enableDesc": "Показывать кнопки AI-помощи и объяснения в редакторе", - "defaultProvider": "Провайдер по умолчанию", - "defaultModel": "Модель по умолчанию", - "configuration": "Конфигурация", - "selectProviderFirst": "Сначала выберите провайдера", - "modelDesc": "Выберите модель для генерации и объяснения запросов.", - "manageKeys": "Управление API-ключами", - "apiKey": "API-ключ {{provider}}", - "configured": "Настроено", - "notConfigured": "Не настроено", - "enterKey": "Введите ключ {{provider}}", - "keyStoredSecurely": "API-ключ хранится в системном хранилище ключей. Указанный здесь ключ имеет приоритет над переменной окружения.", - "fromEnv": "Окружение", - "fromEnvTooltip": "Этот ключ загружен из переменной окружения", - "envVariableDetected": "Обнаружена переменная окружения, но её можно переопределить, указав ключ выше.", - "reset": "Сбросить", - "changeKey": "Изменить", - "resetKey": "Удалить пользовательский ключ и вернуться к переменной окружения (если задана)", - "keyResetSuccess": "Пользовательский ключ удалён", - "promptCustomization": "Настройка промптов", - "systemPrompt": "Генерация SQL", - "systemPromptDesc": "Инструкции для AI-генерации SQL. Используйте {{SCHEMA}} как заполнитель структуры базы данных.", - "enterSystemPrompt": "Введите системный промпт...", - "resetDefault": "Сбросить по умолчанию", - "savePrompt": "Сохранить промпт", - "explainPrompt": "Объяснение запроса", - "explainPromptDesc": "Инструкции для AI-объяснения запросов. Используйте {{LANGUAGE}} как заполнитель языка вывода.", - "enterExplainPrompt": "Введите промпт для объяснения...", - "cellnamePrompt": "Промпт для названия ячейки ноутбука", - "cellnamePromptDesc": "Настройте инструкции для AI-генерации названий ячеек ноутбука. Содержимое ячейки (SQL или Markdown) передаётся как сообщение пользователя.", - "enterCellnamePrompt": "Введите промпт для названия ячейки...", - "tabrenamePrompt": "Промпт для названия вкладки запроса", - "tabrenamePromptDesc": "Настройте инструкции для AI-генерации названий вкладок с результатами. SQL-запрос передаётся как сообщение пользователя.", - "enterTabrenamePrompt": "Введите промпт для названия вкладки...", - "explainplanPrompt": "Промпт для анализа плана выполнения", - "explainplanPromptDesc": "Настройте инструкции для AI-анализа планов EXPLAIN. Используйте {{LANGUAGE}} для языка вывода.", - "enterExplainplanPrompt": "Введите промпт для анализа плана выполнения...", - "keySaved": "API-ключ сохранён в хранилище ключей", - "promptSaved": "Системный промпт сохранён", - "explainPromptSaved": "Промпт для объяснения сохранён", - "promptReset": "Системный промпт сброшен", - "explainPromptReset": "Промпт для объяснения сброшен", - "modelPlaceholder": "Выберите модель", - "searchPlaceholder": "Поиск моделей...", - "noResults": "Модели не найдены", - "refresh": "Обновить модели", - "refreshSuccess": "Список моделей AI обновлён", - "refreshError": "Не удалось обновить модели", - "ollamaConnected": "Ollama подключён (найдено моделей: {{count}})", - "ollamaNotDetected": "Ollama не обнаружен на порту {{port}}. Запущен ли он?", - "ollamaPort": "Порт Ollama", - "modelNotFound": "Модель {{model}} не найдена у провайдера {{provider}}. Она может работать некорректно.", - "customOpenaiEndpoint": "Пользовательский эндпоинт", - "endpointUrl": "URL эндпоинта", - "endpointUrlDesc": "Базовый URL OpenAI-совместимого API. Примеры: https://api.groq.com/openai/v1, http://localhost:8000/v1", - "customOpenaiModelPlaceholder": "например, llama3-70b-8192, mixtral-8x7b", - "customOpenaiModelDesc": "Введите название модели, предоставляемой OpenAI-совместимым сервисом.", - "customOpenaiModelHelp": "Укажите точное название модели вашего OpenAI-совместимого провайдера." - }, - "updates": "Обновления", - "openSourceLibraries": "Библиотеки с открытым исходным кодом", - "openSourceLibrariesDesc": "Прямые зависимости приложения, бэкенда и инструментов с открытым исходным кодом.", - "openSourceLibrariesSource": "Прямые зависимости из package.json и src-tauri/Cargo.toml.", - "openSourceLibrariesTotal": "{{count}} библиотек", - "openSourceLibrariesOpenProject": "Открыть страницу пакета", - "openSourceLibrariesSections": { - "npm-runtime": "Зависимости фронтенда", - "npm-tooling": "Dev-зависимости фронтенда", - "cargo-runtime": "Зависимости Rust", - "cargo-tooling": "Сборка и тесты Rust" - }, - "openSourceLibrariesEcosystem": { - "npm": "экосистема npm", - "cargo": "Экосистема Cargo" - }, - "autoCheckUpdates": "Проверять обновления при запуске", - "autoCheckUpdatesDesc": "Автоматически проверять новые версии при запуске приложения", - "checkNow": "Проверить обновления сейчас", - "checking": "Проверка...", - "currentVersion": "Текущая версия", - "logs": "Логи", - "logSettings": "Настройки логирования", - "enableLogging": "Включить логирование", - "enableLoggingDesc": "Собирать логи приложения в памяти для отладки", - "maxLogEntries": "Максимум записей в логе", - "maxLogEntriesDesc": "Количество логов, хранимых в памяти (1–10000)", - "currentLogCount": "Текущие логи", - "clearLogs": "Очистить логи", - "clearLogsConfirm": "Очистить все логи?", - "exportLogs": "Экспортировать логи", - "exportLogsSuccess": "Логи скопированы в буфер обмена", - "noLogs": "Логи отсутствуют", - "refreshLogs": "Обновить", - "logLevel": "Уровень", - "logMessage": "Сообщение", - "logTimestamp": "Время", - "filterByLevel": "Фильтр по уровню", - "allLevels": "Все уровни", - "debug": "Debug", - "warn": "Warn", - "error": "Error", - "connectionHealthCheck": "Проверка состояния подключения", - "pingInterval": "Интервал пинга", - "pingIntervalDesc": "Как часто проверять активные подключения. Установите 0 для отключения.", - "seconds": "секунд", - "entries": "записей", - "queryHistory": "История запросов", - "queryHistoryMaxEntries": "Максимум записей в истории", - "queryHistoryMaxEntriesDesc": "Максимальное количество записей истории запросов для одного подключения.", - "startup": "Запуск", - "showWelcome": "Показывать экран приветствия", - "showWelcomeDesc": "Показывать экран приветствия при запуске приложения.", - "erDiagram": "ER-диаграмма", - "erDiagramDefaultLayout": "Расположение по умолчанию", - "erDiagramDefaultLayoutDesc": "Направление по умолчанию для ER-диаграмм", - "plugins": { - "title": "Плагины", - "overviewTitle": "Центр плагинов", - "overviewDesc": "Устанавливайте расширения, управляйте драйверами плагинов и настройками среды выполнения.", - "installedMetric": "Установлено", - "enabledMetric": "Включено", - "registryMetric": "Реестр", - "updatesMetric": "Обновления", - "available": "Доступные плагины", - "availableDesc": "Просмотр и установка плагинов из реестра.", - "refresh": "Обновить", - "loadingRegistry": "Загрузка реестра плагинов...", - "registryError": "Не удалось загрузить реестр", - "installed": "Установлено", - "by": "от", - "platformNotSupported": "Недоступно для вашей платформы", - "update": "Обновить", - "install": "Установить", - "upToDate": "Актуально", - "downgrade": "Откатить до", - "olderVersions": "Старые версии", - "noPlugins": "В реестре нет доступных плагинов.", - "searchPlaceholder": "Поиск плагинов…", - "filterAll": "Все", - "filterInstalled": "Установленные", - "filterUpdates": "Обновления", - "searchNoResults": "Плагины не найдены.", - "requiresVersion": "Требуется Tabularis ≥ {{version}}", - "remove": "Удалить", - "removeTitle": "Удалить плагин", - "confirmRemove": "Удалить «{{name}}»? Файлы плагина будут удалены.", - "installError": { - "title": "Ошибка установки", - "subtitle": "Ошибка при установке плагина. Подробности ниже.", - "details": "Подробности ошибки", - "copy": "Копировать", - "copied": "Скопировано!" - }, - "startError": { - "title": "Плагин не запустился", - "subtitle": "Процесс плагина не удалось запустить. Подробности ниже.", - "interpreterHint": "Для этого плагина может потребоваться интерпретатор (например, Python). Укажите путь к нему в настройках плагина.", - "details": "Подробности ошибки", - "copy": "Копировать", - "copied": "Скопировано!", - "configure": "Настроить интерпретатор" - }, - "pluginSettings": { - "title": "Настройки плагина", - "interpreter": "Интерпретатор", - "interpreterDesc": "Необязательно. Укажите исполняемый файл для запуска плагина (например, python3 на macOS/Linux или python либо полный путь на Windows). Оставьте пустым, чтобы использовать значение по умолчанию.", - "interpreterPlaceholder": "например, python3", - "browse": "Обзор...", - "fieldRequired": "{{label}} обязательно", - "saved": "Сохранено", - "resetToDefault": "Сбросить по умолчанию", - "builtin": { - "mysql": { - "maxAllowedPacket": { - "label": "Максимальный размер пакета", - "description": "Максимальный размер пакета для MySQL-коннектора." - }, - "socketTimeout": { - "label": "Таймаут сокета", - "description": "Таймаут сокета в миллисекундах." - }, - "connectTimeout": { - "label": "Таймаут подключения", - "description": "Таймаут подключения в миллисекундах." - }, - "timezone": { - "label": "Часовой пояс", - "description": "Часовой пояс сессии, отправляемый в MySQL после подключения." - } - } - } - } - }, - "shortcuts": { - "title": "Горячие клавиши", - "categories": { - "editor": "Редактор", - "navigation": "Навигация", - "data_grid": "Таблица данных" - }, - "runQuery": "Выполнить запрос", - "runQueryEditor": "Выполнить запрос (в редакторе)", - "tabSwitcher": "Переключить вкладку", - "copySelection": "Копировать выделение", - "toggleSidebar": "Показать/скрыть боковую панель", - "openConnections": "Открыть подключения", - "newConnection": "Новое подключение", - "newTab": "Новая вкладка", - "closeTab": "Закрыть вкладку", - "nextPage": "Следующая страница", - "prevPage": "Предыдущая страница", - "switchConnection": "Переключиться на подключение 1–9", - "resetToDefault": "Сбросить по умолчанию", - "notOverridable": "Встроенное, не настраивается", - "pressKeys": "Нажмите сочетание клавиш...", - "notebookRunAll": "Выполнить все ячейки", - "pasteImportClipboard": "Импортировать из буфера обмена", - "quickNavigator": "Быстрый навигатор" - }, - "aiActivity": "Активность AI" - }, - "update": { - "newVersionAvailable": "Доступна новая версия", - "version": "Версия", - "releaseNotes": "Что нового", - "downloadAndInstall": "Скачать и установить", - "downloading": "Загрузка...", - "installing": "Установка...", - "installingMessage": "Приложение автоматически перезапустится после установки", - "viewOnGitHub": "Открыть на GitHub", - "remindLater": "Напомнить позже", - "upToDate": "Используется актуальная версия", - "updateAvailable": "Доступна версия {{version}}", - "error": "Ошибка обновления", - "managedByPackageManager": "Обновления управляются через {{source}}", - "managedByPackageManagerDesc": "Для обновления Tabularis используйте менеджер пакетов." - }, - "ai": { - "explain": "Объяснить", - "generateSql": "Сгенерировать SQL" - }, - "newConnection": { - "namePlaceholder": "Введите название подключения", - "nameRequired": "Название подключения обязательно", - "dbNameRequired": "Название базы данных обязательно", - "dbType": "Тип базы данных", - "host": "Хост", - "port": "Порт", - "username": "Пользователь", - "password": "Пароль", - "passwordPlaceholder": "Введите пароль", - "usernamePlaceholder": "Введите имя пользователя", - "filePath": "Путь к файлу", - "folderPath": "Путь к папке", - "dbName": "Имя базы данных", - "dbNamePlaceholder": "Имя базы данных", - "loadDatabases": "Загрузить базы данных", - "loadingDatabases": "Загрузка...", - "selectDatabases": "Базы данных", - "appearance": "Внешний вид", - "noDatabasesSelected": "Выберите хотя бы одну базу данных", - "selectedDatabases": "Выбрано баз данных: {{count}}", - "selectDatabase": "Выберите базу данных", - "noDatabasesFound": "Базы данных не найдены", - "failLoadDatabases": "Не удалось загрузить базы данных. Проверьте учётные данные.", - "filePathPlaceholder": "/абсолютный/путь/к/db.sqlite", - "folderPathPlaceholder": "/абсолютный/путь/к/папке", - "browseFile": "Выбрать файл", - "browseFolder": "Выбрать папку", - "useSsh": "Использовать SSH-туннель", - "sshHost": "SSH-хост", - "sshPort": "SSH-порт", - "sshUser": "SSH-пользователь", - "sshPassword": "SSH-пароль", - "sshPasswordMissing": "SSH-пароль отсутствует. Введите заново.", - "sshPasswordPlaceholder": "Введите SSH-пароль", - "sshKeyFile": "SSH-ключ (необязательно)", - "sshKeyFilePlaceholder": "/path/to/id_rsa", - "sshKeyPassphrase": "Пароль SSH-ключа (необязательно)", - "sshKeyPassphrasePlaceholder": "Введите пароль, если ключ зашифрован", - "saveKeychain": "Сохранять пароли в Keychain", - "testConnection": "Проверить подключение", - "save": "Сохранить", - "failSave": "Не удалось сохранить подключение", - "selectSshConnection": "Выбрать SSH-подключение", - "useSshConnection": "Использовать существующее SSH-подключение", - "createInlineSsh": "Настроить SSH вручную", - "manageSshConnections": "Управление SSH-подключениями", - "noSshConnections": "Нет доступных SSH-подключений", - "sslMode": "Режим SSL", - "sslModes": { - "disable": "Отключён", - "allow": "Разрешён", - "prefer": "Предпочтительный", - "require": "Обязательный" - }, - "chooseContext": "Выберите контекст...", - "chooseK8s": "Выберите подключение...", - "chooseNamespace": "Выберите пространство имён...", - "chooseResource": "Выберите ресурс...", - "createInlineK8s": "Встроенно", - "k8sContext": "Контекст", - "k8sNamespace": "Пространство имён", - "k8sNotAvailable": "Kubernetes недоступен для этого драйвера.", - "k8sPort": "Порт контейнера", - "k8sResourceName": "Имя ресурса", - "k8sResourceType": "Тип ресурса", - "k8sResourceTypePod": "Pod", - "k8sResourceTypeService": "Service", - "k8sSelectType": "Выберите тип...", - "manageK8s": "Управление", - "noK8sConnections": "Нет сохранённых подключений — создайте ниже", - "noK8sContexts": "Контексты не найдены (установлен ли kubectl?)", - "selectContextFirst": "Сначала выберите контекст", - "selectK8sConnection": "Выберите подключение K8s", - "selectTypeFirst": "Сначала выберите контекст/пространство имён/тип", - "useK8s": "Использовать проброс портов Kubernetes", - "useK8sConnection": "Сохранённое подключение" - }, - "sshConnections": { - "title": "SSH-подключения", - "createNew": "Создать новое SSH-подключение", - "noConnections": "SSH-подключения не настроены", - "name": "Название подключения", - "namePlaceholder": "Мой SSH-сервер", - "authType": "Тип аутентификации", - "authTypePassword": "Пароль", - "authTypeSshKey": "SSH-ключ", - "edit": "Изменить", - "delete": "Удалить", - "save": "Сохранить", - "update": "Обновить", - "cancel": "Отменить", - "confirmDelete": "Удалить это SSH-подключение?", - "failSave": "Не удалось сохранить SSH-подключение", - "failDelete": "Не удалось удалить SSH-подключение", - "fillRequired": "Заполните все обязательные поля", - "keyFile": "Файл ключа", - "quickTest": "Быстрая проверка подключения", - "testFailed": "Проверка подключения не удалась", - "savedInKeychain": "Пароль сохранён в системном хранилище ключей" - }, - "dataGrid": { - "newRow": "НОВАЯ", - "noData": "Нет данных для отображения", - "deleteRow": "Удалить строку", - "updateFailed": "Ошибка обновления: ", - "null": "null", - "sortByAsc": "Сортировать по {{col}} ASC", - "sortByDesc": "Сортировать по {{col}} DESC", - "clearSort": "Сбросить сортировку", - "copyCell": "Копировать ячейку", - "copySelectedRows": "Копировать выбранные строки", - "copyColumnName": "Копировать имя столбца", - "copyColumnNameQuoted": "Копировать как `column`", - "copyColumnNameTable": "Копировать как table.column", - "copied": "Скопировано в буфер обмена", - "duplicateRow": "Дублировать строку", - "revertSelected": "Отменить выбранные изменения", - "setGenerate": "Установить GENERATED", - "setNull": "Установить NULL", - "setDefault": "Установить DEFAULT", - "setEmpty": "Установить EMPTY", - "setServerNow": "Вставить текущую метку времени", - "openReferenced": "Открыть связанную строку в {{table}}", - "deleteRows_one": "Удалить {{count}} строку", - "deleteRows_few": "Удалить {{count}} строки", - "deleteRows_many": "Удалить {{count}} строк", - "deleteRows_other": "Удалить {{count}} строки" - }, - "newRow": { - "title": "Новая строка", - "insert": "Вставить", - "cancel": "Отменить", - "failInsert": "Не удалось добавить строку: ", - "failLoad": "Не удалось загрузить схему: ", - "loading": "Загрузка...", - "selectValue": "Выберите значение...", - "noOptions": "Варианты не найдены", - "autoGenerated": "(Генерируется автоматически)", - "required": "Обязательно", - "primaryKey": "Первичный ключ", - "auto": "Авто" - }, - "editor": { - "noTabs": "Нет открытых вкладок для этого подключения.", - "newConsole": "Новая консоль", - "noActiveSession": "Нет активной сессии. Выберите подключение.", - "stop": "Остановить", - "run": "Запустить", - "export": "Экспортировать", - "connected": "Подключено", - "disconnected": "Отключено", - "newRow": "Новая строка", - "rowsRetrieved": "Строк: {{count}}", - "autoPaginated": "Автопостраничный вывод", - "pageOf": "Страница {{current}} из {{total}}", - "page": "Страница {{current}}", - "jumpToPage": "Нажмите для перехода на страницу", - "loadRowCount": "Загрузить количество строк", - "executePrompt": "Выполните запрос, чтобы увидеть результаты", - "tableRunPrompt": "Нажмите «Запустить» (Ctrl/Command+F5) для загрузки данных таблицы", - "closeTab": "Закрыть вкладку", - "closeOthers": "Закрыть остальные вкладки", - "closeRight": "Закрыть вкладки справа", - "closeLeft": "Закрыть вкладки слева", - "closeAll": "Закрыть все вкладки", - "saveQuery": "Сохранить запрос", - "saveThisQuery": "Сохранить этот запрос", - "noValidQueries": "Допустимые запросы не найдены", - "queryFailed": "Ошибка выполнения запроса.", - "showErrorDetails": "Показать подробности", - "hideErrorDetails": "Скрыть подробности", - "errorBoundary": { - "title": "Редактор завершился с ошибкой", - "description": "Ошибка при отображении редактора. Подробности ниже — попробуйте ещё раз или вернитесь к подключениям.", - "retry": "Попробовать снова", - "closeCurrentTab": "Закрыть текущую вкладку", - "backToConnections": "Вернуться к подключениям", - "showDetails": "Показать технические подробности" - }, - "newVisualQuery": "Новый визуальный запрос", - "activeDatabase": "Активная база данных", - "tabSwitcher": { - "title": "Открытые вкладки", - "hint": "Ctrl+Tab", - "tabs_one": "{{count}} вкладка", - "tabs_other": "{{count}} вкладки", - "escHint": "Esc для закрытия", - "tabs_few": "{{count}} вкладки", - "tabs_many": "{{count}} вкладок" - }, - "quickNavigator": { - "placeholder": "Поиск таблиц, представлений, процедур, триггеров...", - "noResults": "Совпадающие элементы не найдены", - "count_one": "1 элемент", - "count_other": "{{count}} элементов", - "navigationHint": "↑↓ для навигации, Enter для открытия", - "escHint": "Esc для закрытия", - "type_table": "таблица", - "type_view": "представление", - "type_routine": "процедура", - "type_trigger": "триггер", - "actions": { - "inspect": "Показать структуру", - "newConsole": "Новая консоль", - "generateSql": "Сгенерировать SQL-шаблоны", - "countRows": "Подсчитать строки", - "query": "Выполнить SELECT-запрос", - "copyName": "Скопировать имя" - } - }, - "submitChanges": "Применить изменения", - "rollbackChanges": "Откатить изменения", - "applyToAll": "Применить ко всем", - "executingQuery": "Выполнение запроса...", - "exporting": "Экспорт...", - "rowsProcessed": "Обработано строк", - "queryParameters": "Параметры запроса", - "convertToConsole": "Преобразовать в консоль", - "parameters": "Параметры", - "paramValuePlaceholder": "Значение (например, 'текст' или 123)", - "failedCreateRow": "Не удалось создать новую строку: ", - "failedProcessInsertions": "Не удалось обработать вставки: ", - "newNotebook": "Новый ноутбук", - "visualExplain": { - "title": "Визуальный Explain", - "buttonShort": "План выполнения", - "loading": "Выполнение EXPLAIN...", - "planningTime": "Планирование", - "executionTime": "Выполнение", - "totalCost": "Общая стоимость", - "estRows": "Оценка строк", - "actualRows": "Реальных строк", - "cost": "Стоимость", - "time": "Время", - "loops": "Итерации", - "filter": "Фильтр", - "indexCondition": "Условие индекса", - "relation": "Таблица", - "nodeType": "Операция", - "rawOutput": "Сырой вывод", - "analyze": "Анализ", - "analyzeWarning": "ANALYZE выполняет запрос. Осторожно с операторами изменения данных.", - "notExplainable": "EXPLAIN поддерживается только для DML-запросов (SELECT, INSERT, UPDATE, DELETE). DDL-запросы (CREATE, DROP, ALTER) не поддерживаются.", - "contextMenuExplain": "План выполнения", - "rerun": "Перезапустить", - "close": "Закрыть", - "graphView": "Граф", - "tableView": "Таблица", - "general": "Общее", - "analyzeData": "Данные ANALYZE", - "extraDetails": "Дополнительно", - "selectNode": "Выберите узел для просмотра подробностей", - "buffersHit": "Попаданий в буфер", - "buffersRead": "Чтений буфера", - "joinType": "Тип соединения", - "hashCondition": "Условие хеша", - "topIssues": "Основные проблемы", - "noIssues": "Серьёзных проблем в текущем плане не обнаружено.", - "highestCost": "Наибольшая стоимость", - "slowestStep": "Самый медленный шаг", - "largestEstimateGap": "Разрыв оценки", - "overEstimate": "Реальных строк больше оценки", - "underEstimate": "Оценка превышает реальное количество строк", - "sequentialScans": "Последовательные сканирования", - "tempOperations": "Временные операции или сортировка", - "scanOperations": "Обнаружены интенсивные сканирования", - "sortOrTempOperations": "Обнаружена сортировка или временные операции", - "driverNotes": "Примечания драйвера", - "overview": "Обзор", - "showOverview": "Показать обзор", - "hideOverview": "Скрыть обзор", - "postgresAnalyzeLegend1": "PostgreSQL ANALYZE включает реальные строки, время, итерации и счётчики буферов при наличии.", - "postgresAnalyzeLegend2": "Большие расхождения в оценках обычно указывают на устаревшую статистику или предикаты, которые планировщик не может смоделировать точно.", - "postgresEstimateLegend1": "PostgreSQL без ANALYZE показывает только оценки планировщика.", - "postgresEstimateLegend2": "Включите ANALYZE для просмотра реальных строк, времени, итераций и буферов.", - "mysqlAnalyzeLegend1": "MySQL и MariaDB предоставляют реальные метрики только в поддерживаемых вариантах EXPLAIN ANALYZE или ANALYZE FORMAT.", - "mysqlAnalyzeLegend2": "Старые серверы могут возвращать только оценочные планы с меньшим количеством метрик.", - "mysqlEstimateLegend1": "MySQL и MariaDB могут возвращать EXPLAIN FORMAT=JSON или табличный EXPLAIN в зависимости от версии сервера.", - "mysqlEstimateLegend2": "Если время отсутствует, сервер вернул только оценочный план.", - "sqliteLegend1": "SQLite EXPLAIN QUERY PLAN — лёгкий инструмент преимущественно для анализа структуры.", - "sqliteLegend2": "Стоимость, время и оценки строк зачастую недоступны по сравнению с PostgreSQL и MySQL.", - "aiAnalysis": "AI-анализ", - "aiAnalysisTitle": "AI-анализ плана запроса", - "aiAnalyzing": "Анализ плана запроса с помощью AI...", - "aiConfigRequired": "AI-провайдер не настроен. Перейдите в Настройки > AI." - }, - "notebook": { - "addSqlCell": "Добавить SQL-ячейку", - "addMarkdownCell": "Добавить Markdown-ячейку", - "addCell": "Добавить", - "runAll": "Запустить все", - "runAllTooltip": "Выполнить все SQL-ячейки сверху вниз", - "runCell": "Запустить ячейку", - "deleteCell": "Удалить ячейку", - "moveCellUp": "Переместить вверх", - "moveCellDown": "Переместить вниз", - "export": "Экспортировать ноутбук", - "import": "Импортировать ноутбук", - "emptyNotebook": "Ноутбук пуст. Добавьте ячейку для начала работы.", - "markdownPlaceholder": "Введите Markdown...", - "togglePreview": "Переключить предпросмотр", - "sqlCell": "SQL", - "markdownCell": "Markdown", - "invalidFile": "Недопустимый формат файла ноутбука", - "importSuccess": "Ноутбук импортирован", - "exportSuccess": "Ноутбук экспортирован", - "stopOnError": "Остановить при ошибке", - "stopOnErrorTooltip": "Прекратить выполнение при ошибке в ячейке", - "runAllComplete": "Выполнение завершено", - "succeeded": "успешно", - "failed": "с ошибкой", - "skipped": "пропущено", - "toggleChart": "Показать/скрыть график", - "chartType": "График", - "chartLabel": "Метка", - "chartValues": "Значения", - "exportCsv": "Экспортировать как CSV", - "exportJson": "Экспортировать как JSON", - "exportHtml": "Экспортировать как HTML", - "parameters": "Параметры", - "paramName": "имя", - "paramValue": "значение", - "invalidParamName": "Недопустимое имя параметра", - "parallelExecution": "Параллельное выполнение (Запустить все)", - "executionHistory": "История выполнения", - "noHistory": "История выполнения пуста", - "collapseCell": "Свернуть ячейку", - "expandCell": "Развернуть ячейку", - "collapseAll": "Свернуть все", - "expandAll": "Развернуть все", - "outline": "Структура", - "cellNamePlaceholder": "Без названия", - "editCellName": "Изменить название ячейки", - "aiGenerateName": "Сгенерировать название с помощью AI", - "generatingName": "Генерация названия...", - "aiGenerateOutlineNames": "Сгенерировать названия для безымянных ячеек с помощью AI", - "undo": "Отменить", - "redo": "Повторить", - "history": { - "title": "История изменений", - "change": { - "initial": "Начальная версия", - "editCell": "Изменена ячейка {{n}}", - "addSql": "Добавлена SQL-ячейка {{n}}", - "addMarkdown": "Добавлена Markdown-ячейка {{n}}", - "deleteCell": "Удалена ячейка {{n}}", - "reorder": "Ячейки переупорядочены", - "renameCell": "Переименована ячейка {{n}}", - "schemaCell": "Изменена база данных (ячейка {{n}})", - "chartCell": "Изменён график (ячейка {{n}})", - "parallelCell": "Переключён параллельный режим (ячейка {{n}})", - "collapse": "Ячейки свёрнуты/развёрнуты", - "params": "Изменены параметры", - "stopOnError": "Переключён останов при ошибке", - "other": "Блокнот изменён" - } - }, - "cellResult_one": "{{count}} строка · {{time}}мс", - "cellResult_few": "{{count}} строки · {{time}}мс", - "cellResult_many": "{{count}} строк · {{time}}мс", - "cellResult_other": "{{count}} строки · {{time}}мс" - }, - "querySelection": { - "title": "Выбрать запрос для выполнения", - "runAll": "Запустить все", - "runSelected": "Запустить выбранные ({{count}})", - "runSingle": "Запустить этот запрос", - "selectAll": "Выбрать все", - "deselectAll": "Снять выбор", - "queriesFound_one": "{{count}} запрос", - "queriesFound_few": "{{count}} запроса", - "queriesFound_many": "{{count}} запросов", - "queriesFound_other": "{{count}} запроса" - }, - "explainSelection": { - "title": "Выбрать запрос для объяснения", - "explainSingle": "Объяснить этот запрос", - "explainFocused": "объяснить активный", - "explainNth": "объяснить N-й", - "cancel": "отменить", - "queriesFound_one": "{{count}} запрос", - "queriesFound_few": "{{count}} запроса", - "queriesFound_many": "{{count}} запросов", - "queriesFound_other": "{{count}} запроса" - }, - "multiResult": { - "rerun": "Перезапустить запрос", - "close": "Закрыть вкладку", - "rename": "Переименовать", - "aiGenerateName": "Сгенерировать название с помощью AI", - "generatingName": "Генерация названия...", - "viewTabs": "Вкладки", - "viewStacked": "Список", - "queryPrefix": "Запрос", - "results": "Результаты", - "collapseAll": "Свернуть все", - "expandAll": "Развернуть все" - } - }, - "createTable": { - "title": "Создать новую таблицу", - "tableName": "Название таблицы", - "tableNamePlaceholder": "например, users, orders, products", - "columns": "Столбцы", - "addColumn": "Добавить столбец", - "colName": "Имя", - "colType": "Тип", - "colLen": "Длина", - "colPk": "PK", - "colNn": "NN", - "colAi": "AI", - "colDefault": "По умолчанию", - "create": "Создать таблицу", - "cancel": "Отменить", - "nameRequired": "Название таблицы обязательно", - "colRequired": "Требуется хотя бы один столбец", - "failCreate": "Не удалось создать таблицу: ", - "requiresExtension": "Требуется расширение: {{ext}}" - }, - "schema": { - "title": "Схема: {{table}}", - "loading": "Загрузка схемы...", - "colName": "Имя", - "colType": "Тип", - "colNullable": "Nullable", - "colKey": "Ключ", - "yes": "Да", - "no": "Нет" - }, - "generateSQL": { - "title": "Сгенерированный SQL: {{table}}", - "loading": "Генерация SQL...", - "runInConsole": "Запустить в консоли", - "copy": "Копировать SQL", - "copied": "Скопировано!", - "tabCreateTable": "Создать таблицу", - "tabSelectAll": "SELECT *", - "tabSelectFields": "SELECT [поля]", - "tabUpdate": "UPDATE", - "tabDelete": "DELETE" - }, - "modifyColumn": { - "titleAdd": "Добавить столбец", - "titleEdit": "Изменить столбец", - "sqliteWarn": "SQLite поддерживает только переименование столбцов. Другие изменения требуют пересоздания таблицы вручную.", - "name": "Имя", - "type": "Тип", - "length": "Длина", - "default": "Значение по умолчанию", - "notNull": "Не null", - "primaryKey": "Первичный ключ", - "autoInc": "Автоинкремент", - "sqlPreview": "Предпросмотр SQL", - "save": "Сохранить изменения", - "add": "Добавить столбец", - "cancel": "Отменить", - "nameRequired": "Имя столбца обязательно", - "fail": "Ошибка: ", - "pkNotSupported": "Этот драйвер поддерживает первичные ключи только при создании таблицы", - "requiresExtension": "Требуется расширение: {{ext}}" - }, - "createIndex": { - "title": "Создать индекс", - "name": "Название индекса", - "columns": "Столбцы", - "unique": "Уникальный индекс", - "sqlPreview": "Предпросмотр SQL", - "create": "Создать индекс", - "cancel": "Отменить", - "nameRequired": "Название индекса обязательно", - "colRequired": "Выберите хотя бы один столбец" - }, - "createFk": { - "title": "Создать внешний ключ", - "name": "Имя внешнего ключа (необязательно)", - "column": "Локальный столбец", - "refTable": "Ссылочная таблица", - "refColumn": "Ссылочный столбец", - "onDelete": "При удалении", - "onUpdate": "При обновлении", - "sqlPreview": "Предпросмотр SQL", - "create": "Создать внешний ключ", - "cancel": "Отменить" - }, - "healthCheck": { - "title": "Подключение потеряно", - "connectionLost": "Соединение с базой данных прервано" - }, - "erDiagram": { - "enterFullscreen": "На весь экран", - "exitFullscreen": "Выйти из полноэкранного режима", - "noConnection": "Нет ID подключения", - "noConnectionDesc": "Отображение диаграммы невозможно без ID подключения.", - "switchToVertical": "Переключить на вертикальное расположение", - "switchToHorizontal": "Переключить на горизонтальное расположение", - "vertical": "Вертикально", - "horizontal": "Горизонтально", - "showAllTables": "Показать все таблицы", - "showAll": "Показать все", - "focusedOn": "Фокус на", - "focusOnTable": "Фокус на таблице" - }, - "views": { - "createView": "Создать представление", - "editView": "Изменить представление", - "createSubtitle": "Создать новое представление базы данных", - "editSubtitle": "Редактирование представления: {{name}}", - "viewName": "Название представления", - "viewNamePlaceholder": "например, active_users, order_summary", - "viewDefinition": "Определение представления (SQL)", - "preview": "Предпросмотр", - "runPreview": "Запустить предпросмотр", - "previewEmpty": "Нажмите «Запустить предпросмотр», чтобы увидеть результаты", - "moreRows": "+{{count}} строк", - "create": "Создать представление", - "save": "Сохранить изменения", - "nameRequired": "Название представления обязательно", - "definitionRequired": "Определение представления обязательно", - "failLoadDefinition": "Не удалось загрузить определение представления: ", - "previewError": "Ошибка предпросмотра: ", - "createSuccess": "Представление создано", - "alterSuccess": "Представление обновлено", - "saveError": "Не удалось сохранить представление: ", - "confirmAlter": "Изменить представление \"{{view}}\"?" - }, - "triggers": { - "createTrigger": "Создать триггер", - "editTrigger": "Изменить триггер", - "createSubtitle": "Создать новый триггер базы данных", - "editSubtitle": "Редактирование триггера: {{name}}", - "triggerName": "Название триггера", - "triggerNamePlaceholder": "например, before_insert_user", - "tableName": "Название таблицы", - "tableNamePlaceholder": "например, users", - "timing": "Момент срабатывания", - "events": "События", - "body": "Тело триггера (SQL)", - "sqlPreview": "Предпросмотр сгенерированного SQL", - "rawSql": "Сырой SQL", - "guidedMode": "Пошаговый", - "rawSqlMode": "Сырой SQL", - "loading": "Загрузка определения триггера...", - "create": "Создать триггер", - "save": "Сохранить изменения", - "sqlRequired": "SQL триггера обязателен", - "failLoadDefinition": "Не удалось загрузить определение триггера: ", - "dropError": "Не удалось удалить существующий триггер: ", - "saveError": "Не удалось сохранить триггер: ", - "createSuccess": "Триггер создан", - "updateSuccess": "Триггер обновлён", - "recreateTrigger": "Пересоздать триггер", - "confirmRecreate": "Редактирование триггера требует его удаления и повторного создания. Продолжить изменение \"{{trigger}}\"?" - }, - "community": { - "title": "Присоединяйтесь к сообществу", - "subtitle": "Помогите Tabularis развиваться", - "description": "Tabularis — бесплатный проект с открытым исходным кодом. Если он вам полезен, поддержите проект и присоединяйтесь к сообществу.", - "starTitle": "Поставить звезду на GitHub", - "starDesc": "Звезда помогает другим найти проект", - "discordTitle": "Присоединиться к Discord", - "discordDesc": "Общайтесь с сообществом, получайте помощь, предлагайте функции", - "dismiss": "Может быть позже" - }, - "whatsNew": { - "title": "Что нового", - "subtitle": "Версия {{version}}", - "features": "Новые функции", - "bugFixes": "Исправления ошибок", - "breakingChanges": "Критические изменения", - "readMore": "Подробнее", - "dismiss": "Понятно" - }, - "dump": { - "title": "Экспорт базы данных", - "dumpDatabase": "Экспортировать базу данных", - "importDatabase": "Выполнить SQL-файл...", - "importTitle": "Импорт базы данных", - "includeStructure": "Структура (DDL)", - "includeData": "Данные (INSERT)", - "selectTables": "Выбрать таблицы", - "selectAll": "Выбрать все", - "deselectAll": "Снять выбор", - "export": "Экспортировать", - "success": "База данных экспортирована", - "failure": "Ошибка экспорта: ", - "errorNoOption": "Выберите хотя бы структуру или данные", - "errorNoTables": "Выберите хотя бы одну таблицу", - "importSuccess": "SQL-файл выполнен", - "importFailure": "Ошибка импорта: ", - "importCancelled": "Импорт отменён", - "importFailed": "Импорт не удался", - "importingFrom": "Импорт из", - "statementsExecuted": "{{count}} / {{total}} операторов", - "confirmImport": "Импортировать \"{{file}}\"?\nСуществующие данные могут быть перезаписаны.", - "elapsedTime": "Прошло времени" - }, - "geometryInput": { - "sqlMode": "Режим SQL", - "wktMode": "Режим WKT", - "sqlHelper": "Введите полную SQL-функцию (например, ST_GeomFromText('POINT(30 40)', 4326))", - "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", - "wktPlaceholder": "POINT(30 40)", - "toggleTooltip": "SQL-функции" - }, - "jsonInput": { - "placeholder": "Введите JSON...", - "format": "Форматировать", - "valid": "Корректный JSON", - "invalid": "Некорректный JSON", - "mode": { - "code": "Код", - "tree": "Дерево", - "raw": "Сырой" - }, - "expand": "Развернуть", - "search": "Поиск", - "diff": "Сравнение", - "sideBySide": "Рядом" - }, - "jsonViewer": { - "close": "Закрыть", - "save": "Сохранить" - }, - "jsonCell": { - "expand": "Показать/скрыть JSON-дерево", - "openViewer": "Открыть просмотрщик JSON" - }, - "textCell": { - "expand": "Показать/скрыть текстовый редактор" - }, - "textInput": { - "diff": "Сравнение", - "sideBySide": "Рядом" - }, - "textViewer": { - "save": "Сохранить" - }, - "rowEditor": { - "title": "Изменить строку", - "subtitle": "Строка #{{row}}", - "enterValue": "Введите значение..." - }, - "contextMenu": { - "openSidebar": "Открыть в боковом редакторе", - "openJsonEditor": "Открыть в JSON-редакторе" - }, - "blobInput": { - "noData": "Нет данных BLOB", - "uploadFile": "Загрузить файл", - "download": "Скачать", - "delete": "Удалить", - "truncatedWarning": "Только предпросмотр — полные данные не загружены", - "downloadDisabledTruncated": "Загрузка недоступна — загружен только предпросмотр", - "downloading": "Скачивание...", - "uploading": "Загрузка...", - "openSidebar": "Открыть в редакторе", - "imagePreview": "Предпросмотр изображения" - }, - "visualExplainPage": { - "title": "Визуальный Explain", - "noFile": "Файл не загружен", - "openFile": "Открыть файл", - "reload": "Перезагрузить", - "loading": "Загрузка плана выполнения…", - "emptyHint": "Выберите файл с планом EXPLAIN (Postgres JSON или текст) для визуализации." - }, - "taskManager": { - "header": { - "title": "Диспетчер задач", - "subtitle": "Процессы плагинов и системные ресурсы", - "description": "Мониторинг процессов плагинов, CPU, RAM и диска в реальном времени", - "open": "Открыть диспетчер задач", - "refresh": "Обновить" - }, - "killModal": { - "title": "Принудительно завершить процесс плагина", - "subtitle": "Это действие нельзя немедленно отменить", - "descriptionBefore": "Завершение", - "descriptionAfter": "принудительно остановит процесс. Все активные подключения к базе данных через этот плагин перестанут работать до его перезапуска.", - "warning": "Активные запросы и подключения через этот плагин будут прерваны.", - "cancel": "Отменить", - "confirm": "Завершить принудительно" - }, - "systemResources": { - "title": "Системные ресурсы", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Чтение с диска/с", - "diskWrite": "Запись на диск/с", - "processCount_one": "{{count}} системный процесс", - "processCount_other": "{{count}} системных процессов", - "processCount_few": "{{count}} системных процесса", - "processCount_many": "{{count}} системных процессов" - }, - "tabularisProcess": { - "title": "Процесс Tabularis", - "cpu": "CPU", - "ram": "RAM", - "diskRead": "Чтение с диска/с", - "diskWrite": "Запись на диск/с", - "childCount_one": "{{count}} дочерний процесс", - "childCount_other": "{{count}} дочерних процессов", - "noChildren": "Нет дочерних процессов", - "treeTotal": "Итого по дереву: {{size}}", - "treeTotalTooltip": "Сумма RSS по дереву процессов — общая память может учитываться несколько раз", - "loadingProcesses": "Загрузка процессов…", - "colPid": "PID", - "colName": "Имя", - "colCpu": "CPU", - "colRam": "RAM", - "refresh": "Обновить", - "childCount_few": "{{count}} дочерних процесса", - "childCount_many": "{{count}} дочерних процессов" - }, - "pluginProcesses": { - "title": "Процессы плагинов", - "loading": "Загрузка процессов…", - "empty": "Нет запущенных процессов плагинов", - "emptyHint": "Установите и включите плагины, чтобы увидеть их здесь", - "colPlugin": "Плагин", - "colPid": "PID", - "colCpu": "CPU", - "colRam": "RAM", - "colDiskRw": "Диск R/W", - "colStatus": "Статус", - "colActions": "Действия", - "restart": "Перезапустить", - "kill": "Завершить", - "collapseChildren": "Свернуть дочерние процессы", - "childCount_one": "{{count}} дочерний процесс", - "childCount_other": "{{count}} дочерних процессов", - "childProcess": "дочерний процесс", - "status": { - "running": "работает", - "stopped": "остановлен", - "unknown": "неизвестно" - }, - "childCount_few": "{{count}} дочерних процесса", - "childCount_many": "{{count}} дочерних процессов" - } - }, - "groups": { - "newGroup": "Новая группа", - "rename": "Переименовать", - "delete": "Удалить", - "deleteConfirm": "Удалить группу «{{name}}»? Подключения переместятся в раздел без группы.", - "deleteTitle": "Удалить группу", - "connection": "подключение", - "connections": "подключений", - "ungrouped": "Без группы", - "removeFromGroup": "Убрать из группы", - "groupName": "Название группы", - "createError": "Не удалось создать группу" - }, - "queryModal": { - "database": "База данных", - "noDatabase": "Нет базы данных" - }, - "clipboardImport": { - "title": "Импорт из буфера обмена", - "subtitle": "Вставьте структурированные данные и проверьте схему перед импортом", - "selectTablePlaceholder": "Выберите таблицу...", - "contextMenuLabel": "Импортировать из буфера обмена...", - "firstRowHeader": "Первая строка как заголовок", - "tableName": "Название таблицы", - "tableNamePlaceholder": "например, sales_data", - "aiSuggest": "Предложить (AI)", - "tableExists": "Уже существует", - "mode": "Режим", - "createNew": "Создать новую таблицу", - "appendTo": "Добавить в существующую", - "onConflict": "При совпадении", - "conflictFail": "Завершить с ошибкой", - "conflictAppend": "Добавить строки", - "conflictReplace": "Заменить таблицу", - "schemaPreview": "Схема столбцов", - "dataPreview": "Предпросмотр данных", - "sample": "Примеры значений", - "lowConfidence": "Обнаружены смешанные типы, использован TEXT", - "showingFirst": "показаны первые {{count}}", - "importing": "Импорт...", - "tableCreated": "Новая таблица создана", - "openTable": "Закрыть", - "noData": "В буфере обмена нет данных", - "retry": "Попробовать снова", - "columnsLabel": "столбцы", - "rowsLabel": "строки", - "stepConfigure": "Настроить назначение", - "stepReview": "Проверить и настроить", - "modeCreateHint": "Будет создана новая таблица", - "modeAppendHint": "Строки будут добавлены в существующую таблицу", - "maximize": "Развернуть", - "minimize": "Свернуть", - "nSelected": "Выбрано: {{count}}", - "deleteSelected": "Удалить выбранные", - "deleteColumn": "Удалить столбец", - "sourceColumn": "Столбец из буфера обмена", - "targetColumn": "Целевой столбец", - "targetColumnPlaceholder": "Выберите цель...", - "skipColumn": "Пропустить (не импортировать)", - "createNewColumn": "Создать новый столбец", - "rowsTotal_one": "{{count}} строка", - "rowsTotal_few": "{{count}} строки", - "rowsTotal_many": "{{count}} строк", - "rowsTotal_other": "{{count}} строки", - "import_one": "Импортировать {{count}} строку", - "import_few": "Импортировать {{count}} строки", - "import_many": "Импортировать {{count}} строк", - "import_other": "Импортировать {{count}} строки", - "success_one": "{{count}} строка импортирована в «{{table}}»", - "success_few": "{{count}} строки импортированы в «{{table}}»", - "success_many": "{{count}} строк импортировано в «{{table}}»", - "success_other": "{{count}} строки импортированы в «{{table}}»", - "warningsCount_one": "{{count}} предупреждение при разборе", - "warningsCount_few": "{{count}} предупреждения при разборе", - "warningsCount_many": "{{count}} предупреждений при разборе", - "warningsCount_other": "{{count}} предупреждения при разборе" - }, - "aiActivity": { - "title": "Активность AI", - "description": "Журнал всех вызовов MCP-инструментов и запросов, ожидающих подтверждения. Хранится локально — никуда не отправляется.", - "tabs": { - "events": "События", - "sessions": "Сессии" - }, - "empty": "Нет активности MCP.", - "eventsCount_one": "{{count}} событие", - "eventsCount_other": "{{count}} событий", - "blockedCount_one": "{{count}} заблокированное", - "blockedCount_other": "{{count}} заблокированных", - "errorsCount_one": "{{count}} ошибка", - "errorsCount_other": "{{count}} ошибок", - "sessionsCount_one": "{{count}} сессия", - "sessionsCount_other": "{{count}} сессий", - "events": "События", - "runQueries": "Запросы", - "connections": "Подключения", - "client": "Клиент", - "rowsReturned": "Возвращено строк", - "approvalId": "ID подтверждения", - "searchQuery": "Поиск запроса…", - "allTools": "Все инструменты", - "allStatuses": "Все статусы", - "clearAll": "Очистить", - "clearConfirm": "Удалить всю историю активности AI? Это действие необратимо.", - "exportNotebook": "Экспортировать как ноутбук", - "exportSuccess": "Экспортировано в {{path}}", - "viewDetails": "Подробности", - "copyQuery": "Копировать запрос", - "openVisualExplain": "Открыть в Visual Explain", - "copied": "Скопировано в буфер обмена", - "detailTitle": "Подробности события", - "col": { - "timestamp": "Время", - "tool": "Инструмент", - "connection": "Подключение", - "query": "Запрос", - "kind": "Тип", - "duration": "Длительность", - "status": "Статус", - "actions": "Действия" - }, - "sort": { - "sortBy": "Сортировать по {{field}}", - "sortByPlaceholder": "Сортировать по…", - "toggleAscending": "Сортировать по возрастанию", - "toggleDescending": "Сортировать по убыванию", - "ascending": "По возр.", - "descending": "По убыв.", - "started": "Начало", - "eventCount": "События", - "runQueries": "Запросы" - }, - "searchSessions": "Поиск по сессии, клиенту, подключению…", - "filteredFrom": "из {{total}}", - "noMatches": "Сессии не соответствуют текущим фильтрам.", - "status": { - "success": "Успешно", - "blocked_readonly": "Заблокировано (только чтение)", - "blocked_pending_approval": "Ожидает подтверждения", - "denied": "Отклонено", - "error": "Ошибка", - "timeout": "Таймаут" - }, - "queryKind": { - "select": "Чтение", - "write": "Запись", - "ddl": "DDL", - "unknown": "Неизвестно" - }, - "eventsCount_few": "{{count}} события", - "eventsCount_many": "{{count}} событий", - "blockedCount_few": "{{count}} заблокированных", - "blockedCount_many": "{{count}} заблокированных", - "errorsCount_few": "{{count}} ошибки", - "errorsCount_many": "{{count}} ошибок", - "sessionsCount_few": "{{count}} сессии", - "sessionsCount_many": "{{count}} сессий" - }, - "aiApproval": { - "title": "AI запрашивает запись в базу данных", - "subtitle": "На {{connection}} — проверьте запрос перед выполнением.", - "subtitleWithClient": "{{client}} на {{connection}} — проверьте запрос перед выполнением.", - "query": "Запрос", - "editQuery": "Изменить перед подтверждением", - "lockQuery": "Заблокировать запрос", - "preflightPlan": "Предварительный план выполнения", - "expandPlan": "Развернуть", - "collapsePlan": "Свернуть", - "explainUnavailable": "EXPLAIN недоступен для этого запроса.", - "explainFailed": "EXPLAIN завершился с ошибкой: {{error}}", - "reasonLabel": "Причина (необязательно)", - "reasonPlaceholder": "например: Выглядит рискованно на проде, нужно подтверждение…", - "approve": "Подтвердить", - "deny": "Отклонить" - }, - "discordCallout": { - "title": "Новое сообщество в Discord!", - "body": "Мы только что открыли отдельное место для пользователей Tabularis. Получайте помощь, делитесь советами, участвуйте в формировании дорожной карты.", - "cta": "Вступить сейчас", - "dismiss": "Закрыть" - }, - "k8sConnections": { - "title": "Подключения Kubernetes", - "add": "Добавить", - "empty": "Нет сохранённых подключений Kubernetes. Нажмите «Добавить», чтобы создать.", - "name": "Имя", - "namePlaceholder": "Мой кластер K8s", - "context": "Контекст", - "chooseContext": "Выберите контекст...", - "namespace": "Пространство имён", - "chooseNamespace": "Выберите пространство имён...", - "resourceType": "Тип ресурса", - "resourceTypeService": "Service", - "resourceTypePod": "Pod", - "resourceName": "Имя ресурса", - "chooseResource": "Выберите ресурс...", - "port": "Порт контейнера", - "test": "Проверить", - "testing": "Проверка...", - "errors": { - "nameRequired": "Имя подключения обязательно", - "contextRequired": "Контекст Kubernetes обязателен", - "namespaceRequired": "Пространство имён обязательно", - "resourceTypeInvalid": "Тип ресурса должен быть \"service\" или \"pod\"", - "resourceNameRequired": "Имя ресурса обязательно", - "portInvalid": "Порт должен быть в диапазоне от 1 до 65535" - } - } -} diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json deleted file mode 100644 index 005f0324..00000000 --- a/src/i18n/locales/zh.json +++ /dev/null @@ -1,1392 +0,0 @@ -{ - "toolbar": { - "filters": "筛选器", - "toggleFilterPanel": "切换结构化筛选面板", - "filterConditions": "筛选条件", - "activeOf": "{{active}} / {{total}} 已激活", - "noFilters": "无筛选器 —", - "addFirstFilter": "添加第一个筛选器", - "noActiveFilters": "无激活筛选器", - "closePanelEsc": "关闭筛选面板 (ESC)", - "unset": "取消设置", - "sql": "SQL", - "addFilter": "添加筛选器", - "applyAll": "全部应用", - "apply": "应用", - "applied": "已应用", - "switchToSql": "切换到 SQL WHERE 输入", - "duplicateFilter": "复制筛选器", - "removeFilter": "移除筛选器", - "deselectFromApplyAll": "从全部应用中取消选择", - "selectForApplyAll": "选择用于全部应用", - "valuePlaceholder": "值", - "fromPlaceholder": "从", - "toPlaceholder": "到" - }, - "common": { - "save": "保存", - "close": "关闭", - "cancel": "取消", - "delete": "删除", - "edit": "编辑", - "loading": "加载中...", - "search": "搜索...", - "error": "错误", - "success": "成功", - "ok": "OK" - }, - "sidebar": { - "connections": "连接", - "settings": "设置", - "savedQueries": "已保存查询", - "tables": "表", - "newConsole": "新建控制台", - "newVisualQuery": "新建可视化查询", - "refresh": "刷新", - "refreshTables": "刷新表", - "refreshViews": "刷新视图", - "createView": "创建新视图", - "views": "视图", - "noViews": "未找到视图", - "editView": "编辑视图", - "viewDefinition": "视图定义", - "dropView": "删除视图", - "dropViewConfirm": "确定要删除视图 \"{{view}}\" 吗?", - "failGetViewDefinition": "获取视图定义失败:", - "failDropView": "删除视图失败:", - "explorer": "浏览器", - "sqlEditor": "SQL 编辑器", - "loadingSchema": "加载模式中...", - "noSavedQueries": "无已保存查询", - "searchFavorites": "搜索收藏...", - "noFavoritesSearchResults": "没有匹配的收藏", - "execute": "执行", - "edit": "编辑", - "delete": "删除", - "confirmDeleteQuery": "确定要删除查询 \"{{name}}\" 吗?", - "confirmDeleteTitle": "删除查询", - "noTables": "未找到表", - "columns": "列", - "keys": "键", - "foreignKeys": "外键", - "indexes": "索引", - "deleteColumn": "删除列", - "deleteColumnConfirm": "确定要从表 \"{{table}}\" 中删除列 \"{{column}}\" 吗?\n\n警告:这将永久删除此列中的所有数据。此操作无法撤销。", - "failDeleteColumn": "删除列失败:", - "failDeleteIndex": "删除索引失败:", - "modifyColumn": "修改列", - "copyName": "复制名称", - "openInEditor": "在编辑器中打开", - "closePanel": "关闭面板", - "setAsActive": "设为激活", - "deleteTable": "删除表", - "deleteTableConfirm": "确定要删除表 \"{{table}}\" 吗?", - "failDeleteTable": "删除表失败:", - "showData": "显示数据", - "countRows": "统计行数", - "viewSchema": "查看模式", - "viewERDiagram": "查看 ER 图", - "generateSQL": "生成 SQL", - "addColumn": "添加列", - "addIndex": "添加索引", - "deleteIndex": "删除索引", - "deleteIndexConfirm": "删除索引 \"{{name}}\"?", - "addFk": "添加外键", - "deleteFk": "删除外键", - "deleteFkConfirm": "删除外键 \"{{name}}\"?", - "sqliteFkError": "SQLite 不支持通过 ALTER TABLE 删除外键。", - "mcpServer": "MCP 服务器", - "routines": "存储过程", - "functions": "函数", - "procedures": "存储过程", - "noRoutines": "未找到存储过程", - "refreshRoutines": "刷新存储过程", - "objectSummary": "对象", - "databases": "数据库", - "failGetRoutineDefinition": "获取存储过程定义失败:", - "schemas": "模式", - "noSchemas": "未找到模式", - "loadingSchemas": "加载模式中...", - "schemaLoadError": "加载模式失败", - "errorDetails": "详情", - "copyError": "复制错误信息", - "retry": "重试", - "expandExplorer": "展开浏览器", - "selectSchemas": "选择模式", - "selectSchemasHint": "选择要加载的模式:", - "selectAll": "全选", - "deselectAll": "取消全选", - "confirmSelection": "确认", - "editSchemas": "编辑模式", - "selectConnection": "选择连接", - "disconnect": "断开连接", - "switchConnection": "切换连接", - "noOtherConnections": "无其他连接", - "openConnections": "打开", - "availableConnections": "可用", - "splitVertical": "垂直分割", - "splitHorizontal": "水平分割", - "separateConnections": "分离连接", - "splitGroup": "分割组", - "filterTables": "筛选表...", - "noTablesMatch": "无匹配的表", - "filterDatabases": "筛选数据库...", - "manageDatabases": "管理数据库", - "structure": "结构", - "favorites": "收藏", - "queryHistory": "历史", - "noQueryHistory": "暂无查询历史", - "noHistorySearchResults": "没有匹配的查询", - "searchHistory": "搜索历史...", - "clearAllHistory": "清除所有历史", - "historyRecoveredTitle": "查询历史已重置", - "historyRecoveredBody": "历史文件已损坏并被移至备份。新的查询将正常记录。备份文件:", - "historyRecoveredDismiss": "关闭", - "confirmDeleteHistoryEntry": "确定要从历史中删除此查询吗?", - "confirmClearHistory": "确定要清除此连接的所有查询历史吗?", - "confirmClearHistoryTitle": "清除查询历史", - "addToFavorites": "添加到收藏", - "insertToEditor": "插入到编辑器", - "openInNewTab": "在新标签中打开", - "copyQuery": "复制查询", - "runQuery": "运行查询", - "dateGroupToday": "今天", - "dateGroupYesterday": "昨天", - "dateGroupThisWeek": "本周", - "dateGroupThisMonth": "本月", - "dateGroupOlder": "更早", - "notebooks": { - "tab": "笔记本", - "search": "搜索笔记本", - "refresh": "刷新", - "empty": "暂无已保存的笔记本。", - "noSearchResults": "没有匹配的笔记本。", - "open": "打开", - "rename": "重命名", - "delete": "删除", - "deleteConfirm": "删除笔记本“{{title}}”?此操作无法撤销。", - "renamePlaceholder": "笔记本名称" - } - }, - "mcp": { - "title": "MCP 服务器集成", - "subtitle": "将 Tabularis 连接到 Claude Desktop、Cursor 等", - "description": "模型上下文协议 (MCP) 允许 AI 助手(如 Claude)连接到您的本地工具。Tabularis 暴露了一个 MCP 服务器,让 AI 可以安全地读取数据库模式并执行查询。", - "checking": "检查配置中...", - "notFound": "未找到配置文件(请手动创建)", - "installed": "已安装", - "install": "安装配置", - "manualConfig": "手动配置", - "manualText": "如果自动安装失败,请将此添加到您的客户端配置文件中。", - "successTitle": "成功", - "successMsg": "{{client}} 的配置安装成功!重启应用以应用更改。", - "errorTitle": "安装失败", - "clients": "AI 客户端", - "manualCommand": "手动命令", - "manualCommandText": "在终端中运行此命令,然后重启 Claude Code。", - "tabs": { - "setup": "设置", - "activity": "活动", - "safety": "安全" - }, - "safety": { - "readOnlyTitle": "只读模式", - "readOnlyDefault": "将所有 MCP 查询设为只读", - "readOnlyDefaultDesc": "通过 MCP 阻止任何非 SELECT 语句,除非连接被显式允许。", - "readOnlyList": "只读连接", - "readOnlyListDesc": "这些连接将拒绝来自 MCP 的写入。其他连接行为不变。", - "allowList": "允许 MCP 写入", - "allowListDesc": "其余连接保持只读。仅勾选的连接可以执行写入。", - "approvalTitle": "审批门", - "approvalMode": "需要审批", - "approvalModeDesc": "在执行前暂停写入(或所有查询)并要求用户在 Tabularis 中批准。", - "modeOff": "关闭", - "modeWritesOnly": "仅写入", - "modeAll": "所有查询", - "approvalTimeout": "超时", - "approvalTimeoutDesc": "MCP 子进程等待用户决定的时间。", - "preflightExplain": "预先 EXPLAIN", - "preflightExplainDesc": "在显示审批模态之前运行 EXPLAIN,以便用户查看执行计划。" - } - }, - "connections": { - "title": "连接", - "addConnection": "添加连接", - "noConnections": "无活动连接", - "createFirst": "创建您的第一个连接", - "active": "活动", - "disconnect": "断开连接", - "connect": "连接", - "edit": "编辑", - "delete": "删除", - "clone": "克隆", - "confirmDelete": "确定要删除此连接吗?", - "deleteTitle": "确认删除", - "failConnect": "连接到 {{name}} 失败。请检查您的设置或确保数据库正在运行。", - "failDisconnect": "断开数据库连接失败", - "failDuplicate": "复制连接失败", - "open": "打开", - "pluginDisabled": "插件已禁用", - "connectionCount_one": "{{count}} 个连接", - "connectionCount_other": "{{count}} 个连接", - "noConnectionsHint": "创建您的第一个连接以开始使用。", - "searchPlaceholder": "搜索连接...", - "noSearchResults": "无匹配 \"{{query}}\" 的连接", - "gridView": "网格视图", - "listView": "列表视图", - "export": "导出连接", - "import": "导入连接", - "exportTitle": "导出连接", - "exportWarning": "导出的文件将包含您的数据库和 SSH 明文密码。请妥善保管该文件。" - }, - "connectionAppearance": { - "section": "外观", - "accentColor": "强调色", - "customColor": "自定义", - "resetColor": "重置为驱动默认", - "icon": "图标", - "tabs": { - "default": "默认", - "pack": "图标", - "emoji": "表情", - "image": "图片" - }, - "chooseImage": "选择图片…", - "removeImage": "移除", - "imageHint": "PNG、JPG、WebP 或 SVG · 最大 512 KB" - }, - "settings": { - "general": "通用", - "info": "信息", - "dataEditor": "数据编辑器", - "pageSize": "结果页面大小(限制)", - "pageSizeDesc": "限制每次查询获取的行数,以防止性能问题。设置为 0 可禁用(不推荐)。", - "rows": "行", - "copyFormat": "默认复制格式", - "copyFormatDesc": "选择使用 Ctrl+C / Cmd+C 复制行时的默认格式。", - "csvDelimiter": "CSV 分隔符", - "csvDelimiterDesc": "选择复制或导出行为 CSV 时使用的默认分隔符。", - "delimiterComma": "逗号 (,)", - "delimiterSemicolon": "分号 (;)", - "delimiterTab": "制表符", - "delimiterPipe": "管道符 (|)", - "detectJsonInTextColumns": "在文本列中检测 JSON", - "detectJsonInTextColumnsDesc": "当未带类型的文本单元格包含 JSON 对象或数组时显示 JSON 查看器入口。每单元格会增加少量解析开销。", - "appearance": "外观", - "localization": "本地化", - "themeSelection": "主题选择", - "fontFamily": "字体", - "fonts": { - "custom": "自定义字体", - "customPlaceholder": "例如:微软雅黑", - "enterFontName": "在上方输入字体名称" - }, - "fontSize": "字体大小", - "fontSizeLabel": "字体大小", - "fontSizeDesc": "调整整个应用使用的基础字体大小(10-20px)。", - "preview": "预览", - "fontPreviewText": "The quick brown fox jumps over the lazy dog", - "language": "语言", - "languageDesc": "选择您的首选语言。自动\"将使用您的系统语言。", - "auto": "自动(系统)", - "projectStatus": "项目状态", - "roadmapDesc": "此项目是正在进行的工作 (WIP)。核心功能已稳定,但我们有更大的计划。", - "support": "支持开发", - "supportDesc": "如果您喜欢 Tabularis 并希望看到更多功能,请考虑通过贡献代码、报告错误或 Star 项目来支持该项目。", - "version": "版本", - "starOnGithub": "在 GitHub 上 Star", - "ai": { - "tab": "AI", - "title": "AI 配置", - "description": "配置 AI 提供商以启用自然语言到 SQL 生成。密钥安全存储在您的系统密钥链中。", - "enable": "启用 AI 功能", - "enableDesc": "在编辑器中显示 AI 辅助和解释按钮", - "defaultProvider": "默认提供商", - "defaultModel": "默认模型", - "configuration": "配置", - "selectProviderFirst": "请先选择一个提供商", - "modelDesc": "选择用于生成和解释的模型。", - "manageKeys": "管理 API 密钥", - "apiKey": "{{provider}} API 密钥", - "configured": "已配置", - "notConfigured": "未配置", - "enterKey": "输入 {{provider}} 密钥", - "keyStoredSecurely": "API 密钥安全存储在您的系统密钥链中。在此设置密钥将覆盖环境变量。", - "fromEnv": "环境变量", - "fromEnvTooltip": "此密钥从环境变量加载", - "envVariableDetected": "检测到环境变量,但您可以通过在上方设置密钥来覆盖它。", - "reset": "重置", - "changeKey": "更改", - "resetKey": "删除自定义密钥并恢复到环境变量(如果有)", - "keyResetSuccess": "自定义密钥删除成功", - "promptCustomization": "提示词自定义", - "systemPrompt": "SQL 生成", - "systemPromptDesc": "AI SQL 生成的指令。使用 {{SCHEMA}} 作为数据库结构的占位符。", - "enterSystemPrompt": "输入系统提示词...", - "resetDefault": "重置为默认", - "savePrompt": "保存提示词", - "explainPrompt": "查询解释", - "explainPromptDesc": "AI 查询解释的指令。使用 {{LANGUAGE}} 作为输出语言的占位符。", - "enterExplainPrompt": "输入解释提示词...", - "cellnamePrompt": "Notebook 单元格名称提示词", - "cellnamePromptDesc": "自定义 AI Notebook 单元格名称生成的指令。单元格内容(SQL 或 Markdown)作为用户消息发送。", - "enterCellnamePrompt": "输入单元格名称提示词...", - "tabrenamePrompt": "查询标签页名称提示词", - "tabrenamePromptDesc": "自定义 AI 查询结果标签页名称生成的指令。SQL 查询作为用户消息发送。", - "enterTabrenamePrompt": "输入查询标签页名称提示词...", - "explainplanPrompt": "执行计划分析提示词", - "explainplanPromptDesc": "自定义 AI EXPLAIN 计划分析的指令。使用 {{LANGUAGE}} 作为输出语言的占位符。", - "enterExplainplanPrompt": "输入执行计划分析提示词...", - "keySaved": "API 密钥已安全保存", - "promptSaved": "系统提示词保存成功", - "explainPromptSaved": "解释提示词保存成功", - "promptReset": "系统提示词已重置为默认", - "explainPromptReset": "解释提示词已重置为默认", - "modelPlaceholder": "选择一个模型", - "searchPlaceholder": "搜索模型...", - "noResults": "未找到模型", - "refresh": "刷新模型", - "refreshSuccess": "已从提供商刷新 AI 模型", - "refreshError": "刷新模型失败", - "ollamaConnected": "Ollama 已连接(找到 {{count}} 个模型)", - "ollamaNotDetected": "未在端口 {{port}} 上检测到 Ollama。是否正在运行?", - "ollamaPort": "Ollama 端口", - "modelNotFound": "在 {{provider}} 中未找到模型 {{model}}。它可能无法正常工作。", - "customOpenaiEndpoint": "自定义端点", - "endpointUrl": "端点 URL", - "endpointUrlDesc": "您的 OpenAI 兼容 API 的基础 URL。例如:https://api.groq.com/openai/v1, http://localhost:8000/v1", - "customOpenaiModelPlaceholder": "例如:llama3-70b-8192, mixtral-8x7b", - "customOpenaiModelDesc": "输入您的 OpenAI 兼容服务提供的模型名称。", - "customOpenaiModelHelp": "输入您的 OpenAI 兼容提供商的确切模型名称。" - }, - "updates": "更新", - "openSourceLibraries": "开源库", - "openSourceLibrariesDesc": "查看应用、后端和工具链直接使用的开源依赖。", - "openSourceLibrariesSource": "直接依赖声明于 package.json 和 src-tauri/Cargo.toml。", - "openSourceLibrariesTotal": "{{count}} 个库", - "openSourceLibrariesOpenProject": "打开包页面", - "openSourceLibrariesSections": { - "npm-runtime": "前端依赖", - "npm-tooling": "前端开发依赖", - "cargo-runtime": "Rust 依赖", - "cargo-tooling": "Rust 构建与测试" - }, - "openSourceLibrariesEcosystem": { - "npm": "npm 生态", - "cargo": "Cargo 生态" - }, - "autoCheckUpdates": "启动时检查更新", - "autoCheckUpdatesDesc": "应用启动时自动检查新版本", - "checkNow": "立即检查更新", - "checking": "检查中...", - "currentVersion": "当前版本", - "logs": "日志", - "logSettings": "日志设置", - "enableLogging": "启用日志", - "enableLoggingDesc": "在内存中收集应用日志以进行调试", - "maxLogEntries": "最大日志条目数", - "maxLogEntriesDesc": "在内存中保留的日志数量(1-10000)", - "currentLogCount": "当前日志数", - "clearLogs": "清除日志", - "clearLogsConfirm": "确定要清除所有日志吗?", - "exportLogs": "导出日志", - "exportLogsSuccess": "日志已导出到剪贴板", - "noLogs": "无日志可用", - "refreshLogs": "刷新", - "logLevel": "级别", - "logMessage": "消息", - "logTimestamp": "时间戳", - "filterByLevel": "按级别筛选", - "allLevels": "所有级别", - "debug": "调试", - "warn": "警告", - "error": "错误", - "entries": "条目", - "queryHistory": "查询历史", - "queryHistoryMaxEntries": "最大历史条目", - "queryHistoryMaxEntriesDesc": "每个连接存储的查询历史最大条目数。", - "startup": "启动", - "showWelcome": "显示欢迎屏幕", - "showWelcomeDesc": "应用程序启动时显示欢迎屏幕。", - "erDiagram": "ER 图", - "erDiagramDefaultLayout": "默认布局", - "erDiagramDefaultLayoutDesc": "选择 ER 图的默认布局方向", - "plugins": { - "title": "插件", - "overviewTitle": "插件中心", - "overviewDesc": "安装扩展、管理插件驱动,并控制运行时设置。", - "installedMetric": "已安装", - "enabledMetric": "已启用", - "registryMetric": "注册表", - "updatesMetric": "更新", - "available": "可用插件", - "availableDesc": "浏览并安装注册表中的插件。", - "refresh": "刷新", - "loadingRegistry": "加载插件注册表...", - "registryError": "加载注册表失败", - "installed": "已安装", - "by": "作者", - "platformNotSupported": "您的平台不可用", - "update": "更新", - "install": "安装", - "upToDate": "已是最新", - "downgrade": "降级到", - "olderVersions": "旧版本", - "noPlugins": "注册表中无可用插件。", - "searchPlaceholder": "搜索插件…", - "filterAll": "全部", - "filterInstalled": "已安装", - "filterUpdates": "更新", - "searchNoResults": "没有匹配的插件。", - "requiresVersion": "需要 Tabularis ≥ {{version}}", - "remove": "移除", - "removeTitle": "移除插件", - "confirmRemove": "确定要移除 \"{{name}}\" 吗?这将删除插件文件。", - "installError": { - "title": "安装失败", - "subtitle": "安装插件时发生错误。请参阅下面的详细信息。", - "details": "错误详情", - "copy": "复制", - "copied": "已复制!" - }, - "startError": { - "title": "插件启动失败", - "subtitle": "无法启动插件进程。请参阅下面的错误详细信息。", - "interpreterHint": "此插件可能需要解释器(如 Python)。使用插件设置配置解释器路径。", - "details": "错误详情", - "copy": "复制", - "copied": "已复制!", - "configure": "配置解释器" - }, - "pluginSettings": { - "title": "插件设置", - "interpreter": "解释器", - "interpreterDesc": "可选。指定用于运行此插件的可执行文件(例如 macOS/Linux 上的 python3,Windows 上的 python 或完整路径)。留空使用默认值。", - "interpreterPlaceholder": "例如:python3", - "browse": "浏览...", - "fieldRequired": "{{label}} 是必需的", - "saved": "已保存", - "resetToDefault": "重置为默认", - "builtin": { - "mysql": { - "maxAllowedPacket": { - "label": "最大允许数据包", - "description": "MySQL 连接器使用的最大数据包大小。" - }, - "socketTimeout": { - "label": "Socket 超时", - "description": "Socket 超时时间,单位为毫秒。" - }, - "connectTimeout": { - "label": "连接超时", - "description": "连接超时时间,单位为毫秒。" - }, - "timezone": { - "label": "时区", - "description": "连接建立后发送给 MySQL 的会话时区。" - } - } - } - } - }, - "shortcuts": { - "title": "键盘快捷键", - "categories": { - "editor": "编辑器", - "navigation": "导航", - "data_grid": "数据网格" - }, - "runQuery": "运行查询", - "runQueryEditor": "运行查询(编辑器中)", - "tabSwitcher": "切换标签", - "copySelection": "复制选区", - "toggleSidebar": "切换侧边栏", - "openConnections": "打开连接", - "newConnection": "新建连接", - "newTab": "新建标签", - "closeTab": "关闭标签", - "nextPage": "下一页", - "prevPage": "上一页", - "switchConnection": "切换到连接 1–9", - "resetToDefault": "重置为默认", - "notOverridable": "内置,不可自定义", - "pressKeys": "按下组合键...", - "notebookRunAll": "运行所有单元格", - "quickNavigator": "快速导航" - }, - "aiActivity": "AI 活动" - }, - "update": { - "newVersionAvailable": "有新版本可用", - "version": "版本", - "releaseNotes": "发布说明", - "downloadAndInstall": "下载并安装", - "downloading": "下载中...", - "installing": "安装中...", - "installingMessage": "安装后应用将自动重启", - "viewOnGitHub": "在 GitHub 上查看", - "remindLater": "稍后提醒我", - "upToDate": "已是最新版本", - "updateAvailable": "版本 {{version}} 可用", - "error": "更新错误", - "managedByPackageManager": "更新由 {{source}} 管理", - "managedByPackageManagerDesc": "使用您的包管理器更新 Tabularis。" - }, - "ai": { - "explain": "解释", - "generateSql": "生成 SQL" - }, - "newConnection": { - "namePlaceholder": "输入您的连接名称", - "nameRequired": "连接名称是必需的", - "dbNameRequired": "数据库名称是必需的", - "dbType": "数据库类型", - "host": "主机", - "port": "端口", - "username": "用户名", - "password": "密码", - "passwordPlaceholder": "输入密码", - "usernamePlaceholder": "输入用户名", - "filePath": "文件路径", - "folderPath": "文件夹路径", - "dbName": "数据库名称", - "dbNamePlaceholder": "数据库名称", - "loadDatabases": "加载数据库", - "loadingDatabases": "加载中...", - "selectDatabases": "数据库", - "appearance": "外观", - "noDatabasesSelected": "请至少选择一个数据库", - "selectedDatabases": "已选择 {{count}} 个数据库", - "selectDatabase": "选择一个数据库", - "noDatabasesFound": "未找到数据库", - "failLoadDatabases": "加载数据库失败。请检查您的凭据。", - "filePathPlaceholder": "/absolute/path/to/db.sqlite", - "folderPathPlaceholder": "/absolute/path/to/folder", - "browseFile": "浏览文件", - "browseFolder": "浏览文件夹", - "useSsh": "使用 SSH 隧道", - "sshHost": "SSH 主机", - "sshPort": "SSH 端口", - "sshUser": "SSH 用户", - "sshPassword": "SSH 密码", - "sshPasswordMissing": "SSH 密码缺失。请重新输入。", - "sshPasswordPlaceholder": "输入 SSH 密码", - "sshKeyFile": "SSH 密钥文件(可选)", - "sshKeyFilePlaceholder": "/path/to/id_rsa", - "sshKeyPassphrase": "SSH 密钥密码(可选)", - "sshKeyPassphrasePlaceholder": "如果加密请输入密钥密码", - "saveKeychain": "在密钥链中保存密码", - "testConnection": "测试连接", - "save": "保存", - "failSave": "保存连接失败", - "selectSshConnection": "选择 SSH 连接", - "useSshConnection": "使用现有 SSH 连接", - "createInlineSsh": "配置内联 SSH", - "manageSshConnections": "管理 SSH 连接", - "noSshConnections": "无 SSH 连接可用", - "sslMode": "SSL 模式", - "sslModes": { - "disable": "禁用", - "allow": "允许", - "prefer": "首选", - "require": "要求", - "verify-ca": "验证 CA", - "verify-full": "完全验证" - }, - "chooseContext": "选择上下文...", - "chooseK8s": "选择连接...", - "chooseNamespace": "选择命名空间...", - "chooseResource": "选择资源...", - "createInlineK8s": "内联", - "k8sContext": "上下文", - "k8sNamespace": "命名空间", - "k8sNotAvailable": "此驱动不支持 Kubernetes。", - "k8sPort": "容器端口", - "k8sResourceName": "资源名称", - "k8sResourceType": "资源类型", - "k8sResourceTypePod": "Pod", - "k8sResourceTypeService": "Service", - "k8sSelectType": "选择类型...", - "manageK8s": "管理", - "noK8sConnections": "没有已保存的连接 — 在下方创建一个", - "noK8sContexts": "未找到上下文(是否已安装 kubectl?)", - "selectContextFirst": "请先选择上下文", - "selectK8sConnection": "选择 K8s 连接", - "selectTypeFirst": "请先选择上下文/命名空间/类型", - "useK8s": "使用 Kubernetes 端口转发", - "useK8sConnection": "已保存的连接" - }, - "sshConnections": { - "title": "SSH 连接", - "createNew": "创建新的 SSH 连接", - "noConnections": "尚未配置 SSH 连接", - "name": "连接名称", - "namePlaceholder": "我的 SSH 服务器", - "authType": "认证类型", - "authTypePassword": "密码", - "authTypeSshKey": "SSH 密钥", - "edit": "编辑", - "delete": "删除", - "save": "保存", - "update": "更新", - "cancel": "取消", - "confirmDelete": "确定要删除此 SSH 连接吗?", - "failSave": "保存 SSH 连接失败", - "failDelete": "删除 SSH 连接失败", - "fillRequired": "请填写所有必需字段", - "keyFile": "密钥文件", - "quickTest": "快速连接测试", - "testFailed": "连接测试失败", - "savedInKeychain": "密码已保存到系统密钥链" - }, - "dataGrid": { - "newRow": "新建", - "noData": "无数据显示", - "deleteRow": "删除行", - "deleteRows_one": "删除 {{count}} 行", - "deleteRows_other": "删除 {{count}} 行", - "updateFailed": "更新失败:", - "null": "null", - "sortByAsc": "按 {{col}} 升序排序", - "sortByDesc": "按 {{col}} 降序排序", - "clearSort": "清除排序", - "copyCell": "复制单元格", - "copySelectedRows": "复制选中的行", - "copyColumnName": "复制列名", - "copyColumnNameQuoted": "复制为 `列`", - "copyColumnNameTable": "复制为 表.列", - "copied": "已复制到剪贴板", - "duplicateRow": "复制行", - "revertSelected": "还原选中", - "setGenerate": "设为 GENERATED", - "setNull": "设为 NULL", - "setDefault": "设为 DEFAULT", - "setEmpty": "设为空", - "setServerNow": "插入当前时间戳", - "previewReferenced": "预览相关记录", - "openReferenced": "在 {{table}} 中打开引用的行" - }, - "newRow": { - "title": "新建行", - "insert": "插入", - "cancel": "取消", - "failInsert": "插入行失败:", - "failLoad": "加载模式失败:", - "loading": "加载中...", - "selectValue": "选择值...", - "noOptions": "未找到选项", - "autoGenerated": "(自动生成)", - "required": "必需", - "primaryKey": "主键", - "auto": "自动" - }, - "editor": { - "noTabs": "此连接无打开的标签。", - "newConsole": "新建控制台", - "noActiveSession": "无活动会话。请选择一个连接。", - "stop": "停止", - "run": "运行", - "export": "导出", - "connected": "已连接", - "disconnected": "已断开", - "newRow": "新建行", - "rowsRetrieved": "已检索 {{count}} 行", - "autoPaginated": "自动分页", - "pageOf": "第 {{current}} 页,共 {{total}} 页", - "page": "第 {{current}} 页", - "jumpToPage": "点击跳转到页面", - "loadRowCount": "加载行数", - "executePrompt": "执行查询以查看结果", - "tableRunPrompt": "按运行(Ctrl/Command+F5)加载表数据", - "closeTab": "关闭标签", - "closeOthers": "关闭其他标签", - "closeRight": "关闭右侧标签", - "closeLeft": "关闭左侧标签", - "closeAll": "关闭所有标签", - "saveQuery": "保存查询", - "saveThisQuery": "保存此查询", - "noValidQueries": "未找到有效查询", - "queryFailed": "查询失败。", - "showErrorDetails": "显示详情", - "hideErrorDetails": "隐藏详情", - "errorBoundary": { - "title": "编辑器意外崩溃", - "description": "编辑器中的某些内容渲染失败。错误显示如下 — 请重试或返回到你的连接列表。", - "retry": "重试", - "closeCurrentTab": "关闭当前标签", - "backToConnections": "返回连接", - "showDetails": "显示技术细节" - }, - "newVisualQuery": "新建可视化查询", - "activeDatabase": "当前数据库", - "tabSwitcher": { - "title": "打开的标签", - "hint": "Ctrl+Tab", - "escHint": "按 Esc 关闭" - }, - "quickNavigator": { - "placeholder": "搜索表、视图、例程、触发器...", - "noResults": "未找到匹配的元素", - "count_one": "1 个元素", - "count_other": "{{count}} 个元素", - "navigationHint": "↑↓ 导航,Enter 打开", - "escHint": "Esc 关闭", - "type_table": "表", - "type_view": "视图", - "type_routine": "例程", - "type_trigger": "触发器", - "actions": { - "inspect": "查看结构", - "newConsole": "新建控制台", - "generateSql": "生成 SQL 模板", - "countRows": "统计行数", - "query": "执行 SELECT 查询", - "copyName": "复制名称" - } - }, - "submitChanges": "提交更改", - "rollbackChanges": "回滚更改", - "applyToAll": "应用到全部", - "executingQuery": "执行查询中...", - "exporting": "导出中...", - "rowsProcessed": "已处理行数", - "queryParameters": "查询参数", - "convertToConsole": "转换为控制台", - "parameters": "参数", - "paramValuePlaceholder": "值(例如 'text' 或 123)", - "failedCreateRow": "创建新行失败:", - "failedProcessInsertions": "处理插入失败:", - "newNotebook": "新建笔记本", - "visualExplain": { - "title": "可视化执行计划", - "buttonShort": "执行计划", - "loading": "正在执行 EXPLAIN...", - "planningTime": "规划时间", - "executionTime": "执行时间", - "totalCost": "总成本", - "estRows": "预估行数", - "actualRows": "实际行数", - "cost": "成本", - "time": "时间", - "loops": "循环", - "filter": "过滤条件", - "indexCondition": "索引条件", - "relation": "表", - "nodeType": "操作", - "rawOutput": "原始输出", - "analyze": "分析", - "analyzeWarning": "ANALYZE 会实际执行查询。对数据修改语句请谨慎使用。", - "notExplainable": "EXPLAIN 仅支持 DML 语句(SELECT、INSERT、UPDATE、DELETE)。DDL 语句(如 CREATE、DROP、ALTER)无法进行分析。", - "rerun": "重新运行", - "close": "关闭", - "graphView": "图形", - "tableView": "表格", - "general": "基本信息", - "analyzeData": "分析数据", - "extraDetails": "其他", - "selectNode": "选择节点查看详情", - "buffersHit": "缓冲区命中", - "buffersRead": "缓冲区读取", - "joinType": "连接类型", - "hashCondition": "哈希条件", - "topIssues": "关键问题", - "noIssues": "当前执行计划摘要中未检测到明显问题。", - "highestCost": "最高成本", - "slowestStep": "最慢步骤", - "largestEstimateGap": "估算偏差", - "overEstimate": "实际行数高于估算", - "underEstimate": "估算高于实际行数", - "sequentialScans": "顺序扫描", - "tempOperations": "临时或排序操作", - "scanOperations": "检测到高扫描操作", - "sortOrTempOperations": "检测到排序或临时操作", - "driverNotes": "驱动说明", - "overview": "概览", - "showOverview": "显示概览", - "hideOverview": "隐藏概览", - "postgresAnalyzeLegend1": "PostgreSQL 的 ANALYZE 会在可用时包含实际行数、耗时、循环次数和缓冲区计数。", - "postgresAnalyzeLegend2": "估算与实际差距过大通常意味着统计信息过旧,或存在规划器难以建模的谓词。", - "postgresEstimateLegend1": "未启用 ANALYZE 的 PostgreSQL 仅显示规划器估算值。", - "postgresEstimateLegend2": "启用 ANALYZE 后可查看实际行数、耗时、循环次数和缓冲区信息。", - "mysqlAnalyzeLegend1": "MySQL 和 MariaDB 仅在支持的 EXPLAIN ANALYZE 或 ANALYZE FORMAT 变体中提供实际指标。", - "mysqlAnalyzeLegend2": "较旧的服务器可能会回退到仅估算、指标更少的执行计划。", - "mysqlEstimateLegend1": "MySQL 和 MariaDB 会根据服务器版本回退到 EXPLAIN FORMAT=JSON 或表格版 EXPLAIN。", - "mysqlEstimateLegend2": "如果缺少耗时信息,服务器很可能返回的是仅估算的计划。", - "sqliteLegend1": "SQLite 的 EXPLAIN QUERY PLAN 很轻量,主要用于展示结构。", - "sqliteLegend2": "与 PostgreSQL 和 MySQL 相比,成本、耗时和行数估算通常不可用。", - "aiAnalysis": "AI 分析", - "aiAnalysisTitle": "AI 执行计划分析", - "aiAnalyzing": "正在使用 AI 分析执行计划...", - "aiConfigRequired": "未配置 AI 提供商。请前往 设置 > AI。" - }, - "notebook": { - "addSqlCell": "添加 SQL 单元格", - "addMarkdownCell": "添加 Markdown 单元格", - "addCell": "添加", - "runAll": "全部运行", - "runAllTooltip": "从上到下执行所有 SQL 单元格", - "runCell": "运行单元格", - "deleteCell": "删除单元格", - "moveCellUp": "上移", - "moveCellDown": "下移", - "export": "导出笔记本", - "import": "导入笔记本", - "emptyNotebook": "此笔记本为空。添加一个单元格以开始。", - "markdownPlaceholder": "在此编写 Markdown...", - "togglePreview": "切换预览", - "sqlCell": "SQL", - "markdownCell": "Markdown", - "invalidFile": "无效的笔记本文件格式", - "importSuccess": "笔记本导入成功", - "exportSuccess": "笔记本导出成功", - "cellResult_one": "{{count}} 行 · {{time}}毫秒", - "cellResult_other": "{{count}} 行 · {{time}}毫秒", - "stopOnError": "出错时停止", - "stopOnErrorTooltip": "当单元格失败时停止执行", - "runAllComplete": "全部运行完成", - "succeeded": "成功", - "failed": "失败", - "skipped": "已跳过", - "toggleChart": "显示/隐藏图表", - "chartType": "图表", - "chartLabel": "标签", - "chartValues": "数值", - "exportCsv": "导出为 CSV", - "exportJson": "导出为 JSON", - "exportHtml": "导出为 HTML", - "parameters": "参数", - "paramName": "名称", - "paramValue": "值", - "invalidParamName": "参数名称无效", - "parallelExecution": "并行执行(全部运行)", - "executionHistory": "执行历史", - "noHistory": "暂无执行历史", - "collapseCell": "折叠单元格", - "expandCell": "展开单元格", - "collapseAll": "全部折叠", - "expandAll": "全部展开", - "outline": "大纲", - "cellNamePlaceholder": "未命名", - "editCellName": "编辑单元格名称", - "aiGenerateName": "使用 AI 生成名称", - "generatingName": "正在生成名称...", - "aiGenerateOutlineNames": "使用 AI 为未命名单元格生成名称", - "undo": "撤销", - "redo": "重做", - "history": { - "title": "编辑历史", - "change": { - "initial": "初始版本", - "editCell": "编辑了单元格 {{n}}", - "addSql": "添加了 SQL 单元格 {{n}}", - "addMarkdown": "添加了 Markdown 单元格 {{n}}", - "deleteCell": "删除了单元格 {{n}}", - "reorder": "重新排序单元格", - "renameCell": "重命名了单元格 {{n}}", - "schemaCell": "更改了数据库(单元格 {{n}})", - "chartCell": "更改了图表(单元格 {{n}})", - "parallelCell": "切换了并行(单元格 {{n}})", - "collapse": "折叠/展开单元格", - "params": "更改了参数", - "stopOnError": "切换了出错时停止", - "other": "编辑了笔记本" - } - } - }, - "querySelection": { - "title": "选择要执行的查询", - "queriesFound_one": "找到 {{count}} 个查询", - "queriesFound_other": "找到 {{count}} 个查询", - "runAll": "全部执行", - "runSelected": "执行选中 ({{count}})", - "runSingle": "执行此查询", - "selectAll": "全选", - "deselectAll": "取消全选" - }, - "multiResult": { - "rerun": "重新执行查询", - "close": "关闭标签", - "rename": "重命名", - "aiGenerateName": "使用 AI 生成名称", - "generatingName": "正在生成名称..." - } - }, - "createTable": { - "title": "创建新表", - "tableName": "表名称", - "tableNamePlaceholder": "例如:users, orders, products", - "columns": "列", - "addColumn": "添加列", - "colName": "名称", - "colType": "类型", - "colLen": "长度", - "colPk": "主键", - "colNn": "非空", - "colAi": "自增", - "colDefault": "默认值", - "create": "创建表", - "cancel": "取消", - "nameRequired": "表名称是必需的", - "colRequired": "至少需要一列", - "failCreate": "创建表失败:" - }, - "schema": { - "title": "模式:{{table}}", - "loading": "加载模式中...", - "colName": "名称", - "colType": "类型", - "colNullable": "可为空", - "colKey": "键", - "yes": "是", - "no": "否" - }, - "generateSQL": { - "title": "生成的 SQL:{{table}}", - "loading": "生成 SQL 中...", - "runInConsole": "在控制台中运行", - "copy": "复制 SQL", - "copied": "已复制!", - "tabCreateTable": "创建表", - "tabSelectAll": "SELECT *", - "tabSelectFields": "SELECT [字段]", - "tabUpdate": "UPDATE", - "tabDelete": "DELETE" - }, - "modifyColumn": { - "titleAdd": "添加列", - "titleEdit": "修改列", - "sqliteWarn": "SQLite 仅支持重命名列。其他修改需要手动重建表。", - "name": "名称", - "type": "类型", - "length": "长度", - "default": "默认值", - "notNull": "非空", - "primaryKey": "主键", - "autoInc": "自增", - "sqlPreview": "SQL 预览", - "save": "保存更改", - "add": "添加列", - "cancel": "取消", - "nameRequired": "列名称是必需的", - "fail": "失败:", - "pkNotSupported": "此驱动程序仅在表创建时支持主键" - }, - "createIndex": { - "title": "创建索引", - "name": "索引名称", - "columns": "列", - "unique": "唯一索引", - "sqlPreview": "SQL 预览", - "create": "创建索引", - "cancel": "取消", - "nameRequired": "索引名称是必需的", - "colRequired": "必须选择至少一列" - }, - "createFk": { - "title": "创建外键", - "name": "FK 名称(可选)", - "column": "本地列", - "refTable": "引用表", - "refColumn": "引用列", - "onDelete": "删除时", - "onUpdate": "更新时", - "sqlPreview": "SQL 预览", - "create": "创建外键", - "cancel": "取消" - }, - "erDiagram": { - "enterFullscreen": "全屏", - "exitFullscreen": "退出全屏", - "noConnection": "无连接 ID", - "noConnectionDesc": "无法在没有连接 ID 的情况下显示图表。", - "switchToVertical": "切换到垂直布局", - "switchToHorizontal": "切换到水平布局", - "vertical": "垂直", - "horizontal": "水平", - "showAllTables": "显示所有表", - "showAll": "显示全部", - "focusedOn": "聚焦于", - "focusOnTable": "聚焦于表" - }, - "views": { - "createView": "创建视图", - "editView": "编辑视图", - "createSubtitle": "创建新的数据库视图", - "editSubtitle": "正在编辑视图:{{name}}", - "viewName": "视图名称", - "viewNamePlaceholder": "例如:active_users, order_summary", - "viewDefinition": "视图定义 (SQL)", - "preview": "预览", - "runPreview": "运行预览", - "previewEmpty": "点击\"运行预览\"查看结果", - "moreRows": "还有 {{count}} 行", - "create": "创建视图", - "save": "保存更改", - "nameRequired": "视图名称是必需的", - "definitionRequired": "视图定义是必需的", - "failLoadDefinition": "加载视图定义失败:", - "previewError": "预览失败:", - "createSuccess": "视图创建成功", - "alterSuccess": "视图更新成功", - "saveError": "保存视图失败:", - "confirmAlter": "确定要修改视图 \"{{view}}\" 吗?" - }, - "community": { - "title": "加入社区", - "subtitle": "帮助 Tabularis 成长", - "description": "Tabularis 是一个免费的开源项目。如果您觉得有用,请考虑支持该项目并与社区联系。", - "starTitle": "在 GitHub 上 Star", - "starDesc": "一个 Star 可以帮助其他人发现这个项目", - "discordTitle": "加入 Discord", - "discordDesc": "与社区聊天、获取帮助、建议功能", - "dismiss": "稍后再说" - }, - "whatsNew": { - "title": "新功能", - "subtitle": "版本 {{version}}", - "features": "新功能", - "bugFixes": "错误修复", - "breakingChanges": "重大变更", - "readMore": "了解更多", - "dismiss": "知道了" - }, - "dump": { - "title": "导出数据库", - "dumpDatabase": "导出数据库", - "importDatabase": "运行 SQL 文件...", - "importTitle": "导入数据库", - "includeStructure": "结构 (DDL)", - "includeData": "数据 (INSERT)", - "selectTables": "选择表", - "selectAll": "全选", - "deselectAll": "取消全选", - "export": "导出", - "success": "数据库导出成功", - "failure": "导出失败:", - "errorNoOption": "请至少选择结构或数据", - "errorNoTables": "请至少选择一个表", - "importSuccess": "SQL 文件执行成功", - "importFailure": "导入失败:", - "importCancelled": "导入已取消", - "importFailed": "导入失败", - "importingFrom": "从以下文件导入", - "statementsExecuted": "{{count}} / {{total}} 语句", - "confirmImport": "确定要导入 \"{{file}}\" 吗?\n这可能会覆盖现有数据。", - "elapsedTime": "已用时间" - }, - "geometryInput": { - "sqlMode": "SQL 模式", - "wktMode": "WKT 模式", - "sqlHelper": "输入完整的 SQL 函数(例如 ST_GeomFromText('POINT(30 40)', 4326))", - "sqlPlaceholder": "ST_GeomFromText('POINT(30 40)', 4326)", - "wktPlaceholder": "POINT(30 40)", - "toggleTooltip": "SQL 函数" - }, - "jsonInput": { - "placeholder": "输入 JSON...", - "format": "格式化", - "valid": "JSON 格式正确", - "invalid": "JSON 格式错误", - "mode": { - "code": "代码", - "tree": "树形", - "raw": "原始" - }, - "expand": "展开", - "search": "搜索" - }, - "jsonViewer": { - "close": "关闭", - "save": "保存" - }, - "jsonCell": { - "expand": "展开/收起 JSON 树", - "openViewer": "打开 JSON 查看器" - }, - "rowEditor": { - "title": "编辑行", - "subtitle": "行 #{{row}}", - "enterValue": "输入值..." - }, - "contextMenu": { - "openSidebar": "打开侧边栏编辑器", - "openJsonEditor": "在 JSON 编辑器中打开" - }, - "blobInput": { - "noData": "无 BLOB 数据", - "uploadFile": "上传文件", - "download": "下载", - "delete": "删除", - "truncatedWarning": "仅预览 - 未加载完整数据", - "downloadDisabledTruncated": "下载不可用 - 仅加载了预览", - "downloading": "下载中...", - "uploading": "上传中...", - "openSidebar": "在编辑器中打开", - "imagePreview": "图片预览" - }, - "visualExplainPage": { - "title": "可视化执行计划", - "noFile": "未加载文件", - "openFile": "打开文件", - "reload": "重新加载", - "loading": "正在加载执行计划…", - "emptyHint": "选择一个包含 EXPLAIN 计划(PostgreSQL JSON 或文本格式)的文件以进行可视化。" - }, - "taskManager": { - "header": { - "title": "任务管理器", - "subtitle": "插件进程和系统资源", - "description": "实时监控插件进程、CPU、RAM 和磁盘使用情况", - "open": "打开任务管理器", - "refresh": "刷新" - }, - "killModal": { - "title": "强制终止插件进程", - "subtitle": "此操作无法立即撤销", - "descriptionBefore": "终止", - "descriptionAfter": "将强制停止其进程。使用此插件的任何活动数据库连接将停止工作,直到插件重新启动。", - "warning": "通过此插件的活动查询和连接将被中断。", - "cancel": "取消", - "confirm": "强制终止" - }, - "systemResources": { - "title": "系统资源", - "cpu": "CPU", - "ram": "内存", - "diskRead": "磁盘读取/s", - "diskWrite": "磁盘写入/s", - "processCount_one": "{{count}} 个系统进程正在运行", - "processCount_other": "{{count}} 个系统进程正在运行" - }, - "tabularisProcess": { - "title": "Tabularis 进程", - "cpu": "CPU", - "ram": "内存", - "diskRead": "磁盘读取/s", - "diskWrite": "磁盘写入/s", - "childCount_one": "{{count}} 个子进程", - "childCount_other": "{{count}} 个子进程", - "noChildren": "无子进程", - "treeTotal": "树总计:{{size}}", - "treeTotalTooltip": "整个进程树的 RSS 总和 — 可能重复计算共享内存", - "loadingProcesses": "加载进程中...", - "colPid": "PID", - "colName": "名称", - "colCpu": "CPU", - "colRam": "内存", - "refresh": "刷新" - }, - "pluginProcesses": { - "title": "插件进程", - "loading": "加载进程中...", - "empty": "无插件进程在运行", - "emptyHint": "安装并启用插件以在此处查看它们", - "colPlugin": "插件", - "colPid": "PID", - "colCpu": "CPU", - "colRam": "内存", - "colDiskRw": "磁盘 R/W", - "colStatus": "状态", - "colActions": "操作", - "restart": "重启", - "kill": "终止", - "collapseChildren": "折叠子进程", - "childCount_one": "{{count}} 个子进程", - "childCount_other": "{{count}} 个子进程", - "childProcess": "子进程", - "status": { - "running": "运行中", - "stopped": "已停止", - "unknown": "未知" - } - } - }, - "groups": { - "newGroup": "新建分组", - "rename": "重命名", - "delete": "删除", - "deleteConfirm": "确定要删除分组 \"{{name}}\" 吗?此分组中的连接将移至未分组。", - "deleteTitle": "删除分组", - "connection": "连接", - "connections": "连接", - "ungrouped": "未分组", - "removeFromGroup": "从分组中移除", - "groupName": "分组名称", - "createError": "创建分组失败" - }, - "queryModal": { - "database": "数据库", - "noDatabase": "无数据库" - }, - "clipboardImport": { - "title": "从剪贴板导入", - "subtitle": "粘贴结构化数据,导入前预览模式", - "selectTablePlaceholder": "选择一个表...", - "contextMenuLabel": "从剪贴板导入...", - "firstRowHeader": "第一行作为标题", - "tableName": "表名", - "tableNamePlaceholder": "例如:销售数据", - "aiSuggest": "AI 建议", - "tableExists": "已存在", - "mode": "模式", - "createNew": "创建新表", - "appendTo": "追加到现有表", - "onConflict": "如果存在", - "conflictFail": "报错", - "conflictAppend": "追加行", - "conflictReplace": "替换表", - "schemaPreview": "列结构", - "dataPreview": "数据预览", - "sample": "示例值", - "lowConfidence": "检测到混合类型,默认为 TEXT", - "rowsTotal_one": "{{count}} 行", - "rowsTotal_other": "{{count}} 行", - "showingFirst": "前 {{count}} 行", - "import_one": "导入 {{count}} 行", - "import_other": "导入 {{count}} 行", - "importing": "导入中...", - "success_one": "已将 {{count}} 行导入到 \"{{table}}\"", - "success_other": "已将 {{count}} 行导入到 \"{{table}}\"", - "tableCreated": "新表已创建", - "openTable": "关闭", - "noData": "剪贴板中没有数据", - "retry": "重试", - "warningsCount_one": "{{count}} 条解析警告", - "warningsCount_other": "{{count}} 条解析警告", - "columnsLabel": "列", - "rowsLabel": "行", - "stepConfigure": "配置目标", - "stepReview": "查看并调整", - "modeCreateHint": "将创建一个新表", - "modeAppendHint": "行将追加到现有表", - "maximize": "最大化", - "minimize": "最小化", - "nSelected": "已选 {{count}} 列", - "deleteSelected": "删除所选", - "deleteColumn": "删除列", - "sourceColumn": "剪贴板列", - "targetColumn": "目标列", - "targetColumnPlaceholder": "选择目标...", - "skipColumn": "跳过(不导入)", - "createNewColumn": "创建新列" - }, - "aiActivity": { - "title": "AI 活动", - "description": "MCP 工具调用的审计日志,以及等待批准的查询。仅本地存储。", - "tabs": { - "events": "事件", - "sessions": "会话" - }, - "empty": "暂无 MCP 活动。", - "eventsCount_other": "{{count}} 个事件", - "blockedCount_other": "{{count}} 个被阻止", - "errorsCount_other": "{{count}} 个错误", - "sessionsCount_other": "{{count}} 个会话", - "events": "事件", - "runQueries": "查询", - "connections": "连接", - "client": "客户端", - "rowsReturned": "返回的行数", - "approvalId": "审批 ID", - "searchQuery": "搜索查询…", - "allTools": "所有工具", - "allStatuses": "所有状态", - "clearAll": "清空", - "clearConfirm": "删除全部 AI 活动历史?此操作不可撤销。", - "exportNotebook": "导出为 Notebook", - "exportSuccess": "已导出到 {{path}}", - "viewDetails": "查看详情", - "copyQuery": "复制查询", - "openVisualExplain": "在 Visual Explain 中打开", - "copied": "已复制到剪贴板", - "detailTitle": "事件详情", - "col": { - "timestamp": "时间", - "tool": "工具", - "connection": "连接", - "query": "查询", - "kind": "类型", - "duration": "耗时", - "status": "状态", - "actions": "操作" - }, - "sort": { - "sortBy": "按 {{field}} 排序", - "sortByPlaceholder": "排序方式…", - "toggleAscending": "升序排列", - "toggleDescending": "降序排列", - "ascending": "升序", - "descending": "降序", - "started": "开始时间", - "eventCount": "事件数", - "runQueries": "执行查询数" - }, - "searchSessions": "搜索会话、客户端、连接…", - "filteredFrom": "共 {{total}}", - "noMatches": "没有会话匹配当前筛选条件。", - "status": { - "success": "成功", - "blocked_readonly": "已阻止 (只读)", - "blocked_pending_approval": "待审批", - "denied": "已拒绝", - "error": "错误", - "timeout": "超时" - }, - "queryKind": { - "select": "读取", - "write": "写入", - "ddl": "DDL", - "unknown": "未知" - } - }, - "aiApproval": { - "title": "AI 请求执行数据库写入", - "subtitle": "在 {{connection}} 上 — 请审核后再执行。", - "subtitleWithClient": "{{client}} 在 {{connection}} 上 — 请审核后再执行。", - "query": "查询", - "editQuery": "批准前编辑", - "lockQuery": "锁定查询", - "preflightPlan": "预先执行计划", - "expandPlan": "展开", - "collapsePlan": "收起", - "explainUnavailable": "此查询无法 EXPLAIN。", - "explainFailed": "EXPLAIN 失败: {{error}}", - "reasonLabel": "理由 (可选)", - "reasonPlaceholder": "例如:在生产环境中风险较大,请确认…", - "approve": "批准", - "deny": "拒绝" - }, - "discordCallout": { - "title": "全新的 Discord 社区!", - "body": "我们为 Tabularis 用户开设了专属社区:获取帮助、分享技巧、共建路线图。", - "cta": "立即加入", - "dismiss": "关闭" - }, - "k8sConnections": { - "title": "Kubernetes 连接", - "add": "添加", - "empty": "没有已保存的 Kubernetes 连接。点击“添加”创建一个。", - "name": "名称", - "namePlaceholder": "我的 K8s 集群", - "context": "上下文", - "chooseContext": "选择上下文...", - "namespace": "命名空间", - "chooseNamespace": "选择命名空间...", - "resourceType": "资源类型", - "resourceTypeService": "Service", - "resourceTypePod": "Pod", - "resourceName": "资源名称", - "chooseResource": "选择资源...", - "port": "容器端口", - "test": "测试", - "testing": "测试中...", - "errors": { - "nameRequired": "连接名称为必填项", - "contextRequired": "Kubernetes 上下文为必填项", - "namespaceRequired": "命名空间为必填项", - "resourceTypeInvalid": "资源类型必须为 \"service\" 或 \"pod\"", - "resourceNameRequired": "资源名称为必填项", - "portInvalid": "端口必须介于 1 和 65535 之间" - } - } -} diff --git a/src/i18n/registries/pluginBuiltinSettings.ts b/src/i18n/registries/pluginBuiltinSettings.ts index 9868e08a..bdb1da00 100644 --- a/src/i18n/registries/pluginBuiltinSettings.ts +++ b/src/i18n/registries/pluginBuiltinSettings.ts @@ -3,7 +3,7 @@ import type { MessageDescriptor } from "@lingui/core"; /** * Keyed by `${pluginId}.${def.key}.label` and `${pluginId}.${def.key}.description` - * to mirror the i18next key shape used at the call sites. + * to mirror the key shape built at the call sites. */ export const pluginBuiltinSettings: Record = { "mysql.maxAllowedPacket.label": msg`Max Allowed Packet`, diff --git a/src/main.tsx b/src/main.tsx index 1b2fabd9..67e095b6 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -5,9 +5,8 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import { App } from './App'; import './index.css'; -import './i18n/config'; import { I18nProvider } from '@lingui/react'; -import { i18n, dynamicActivate } from './i18n/lingui'; +import { i18n, dynamicActivate, detectLocale } from './i18n/lingui'; import { DatabaseProvider } from './contexts/DatabaseProvider'; import { SettingsProvider } from './contexts/SettingsProvider'; import { SavedQueriesProvider } from './contexts/SavedQueriesProvider'; @@ -17,7 +16,7 @@ import { ThemeProvider } from './contexts/ThemeProvider'; import { UpdateProvider } from './contexts/UpdateProvider'; void (async () => { - await dynamicActivate("en"); + await dynamicActivate(detectLocale()); ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( diff --git a/src/utils/openSourceLibraries.ts b/src/utils/openSourceLibraries.ts index 90b35b2e..3f0eb811 100644 --- a/src/utils/openSourceLibraries.ts +++ b/src/utils/openSourceLibraries.ts @@ -33,14 +33,13 @@ export const OPEN_SOURCE_LIBRARY_SECTIONS: readonly OpenSourceLibrarySection[] = { name: "buffer", version: "^6.0.3" }, { name: "clsx", version: "^2.1.1" }, { name: "dagre", version: "^0.8.5" }, - { name: "i18next", version: "^25.10.10" }, - { name: "i18next-browser-languagedetector", version: "^8.2.1" }, + { name: "@lingui/core", version: "^6.4.0" }, + { name: "@lingui/react", version: "^6.4.0" }, { name: "lucide-react", version: "^0.563.0" }, { name: "monaco-editor", version: "^0.55.1" }, { name: "process", version: "^0.11.10" }, { name: "react", version: "^19.2.4" }, { name: "react-dom", version: "^19.2.4" }, - { name: "react-i18next", version: "^16.6.6" }, { name: "react-markdown", version: "^10.1.0" }, { name: "react-router-dom", version: "^7.13.2" }, { name: "recharts", version: "^3.8.1" }, diff --git a/tests/setup.ts b/tests/setup.ts index 3ece45a0..ba7c816c 100644 --- a/tests/setup.ts +++ b/tests/setup.ts @@ -39,29 +39,43 @@ vi.mock("@tauri-apps/plugin-opener", () => ({ openUrl: vi.fn(), })); -// Mock react-i18next -vi.mock("react-i18next", () => ({ - useTranslation: () => ({ - t: (key: string, options?: Record) => { - if (options) { - // Simple interpolation for testing - let result = key; - Object.entries(options).forEach(([k, v]) => { - result = result.replace(`{{${k}}}`, String(v)); - }); - return result; - } - return key; - }, - i18n: { - language: "en", - changeLanguage: vi.fn(), - }, - }), - initReactI18next: { - type: "3rdParty", - init: vi.fn(), +// Mock Lingui so components render their source English without an I18nProvider. +// `t` handles both the tagged-template macro (t`...${x}...`) and the descriptor +// form (t({ message, context })); `i18n._` resolves a MessageDescriptor to its +// message. Mirrors how the macros behave at runtime for source-text catalogs. +const linguiT = ( + strings: TemplateStringsArray | string | { message?: string; id?: string }, + ...values: unknown[] +): string => { + if (Array.isArray(strings)) { + return strings.reduce( + (acc: string, s: string, i: number) => acc + s + (i < values.length ? String(values[i]) : ""), + "", + ); + } + if (typeof strings === "object" && strings !== null) { + return strings.message ?? strings.id ?? ""; + } + return String(strings); +}; +const linguiI18n = { + _: (d: { message?: string; id?: string } | string, values?: Record) => { + let msg = typeof d === "string" ? d : (d?.message ?? d?.id ?? ""); + if (values) for (const [k, v] of Object.entries(values)) msg = msg.replaceAll(`{${k}}`, String(v)); + return msg; }, + locale: "en", + load: vi.fn(), + activate: vi.fn(), +}; +vi.mock("@lingui/react/macro", () => ({ + useLingui: () => ({ t: linguiT, i18n: linguiI18n }), + Trans: ({ children }: { children?: unknown }) => children, +})); +vi.mock("@lingui/react", () => ({ + useLingui: () => ({ i18n: linguiI18n, _: linguiI18n._ }), + I18nProvider: ({ children }: { children?: unknown }) => children, + Trans: ({ children }: { children?: unknown }) => children, })); // Mock Monaco Editor diff --git a/vite.config.ts b/vite.config.ts index 05193a10..8de0b6b5 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -31,7 +31,7 @@ export default defineConfig({ recharts: ['recharts'], xyflow: ['@xyflow/react', 'dagre'], 'react-vendor': ['react', 'react-dom', 'react-router-dom'], - i18n: ['i18next', 'react-i18next', 'i18next-browser-languagedetector'], + i18n: ['@lingui/core', '@lingui/react'], markdown: ['react-markdown'], table: ['@tanstack/react-table', '@tanstack/react-virtual'], wkx: ['wkx', 'buffer', 'util'], diff --git a/vitest.config.ts b/vitest.config.ts index d01ea666..aa03fe2e 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -4,7 +4,9 @@ import react from '@vitejs/plugin-react'; import path from 'path'; export default defineConfig({ - plugins: [react()], + // Mirror vite.config's Lingui macro transform so `t`/`msg`/`useLingui` macros are + // compiled in tests too (otherwise @lingui/*/macro falls back to babel-plugin-macros). + plugins: [react({ babel: { plugins: ['@lingui/babel-plugin-lingui-macro'] } })], resolve: { alias: { '@': path.resolve(__dirname, './src'), From 5dccbe8b60b59f7714e65cdd1911ea7000d7f93f Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 11:47:10 +0200 Subject: [PATCH 14/22] test(i18n): migrate assertions from i18next keys to lingui source text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The i18next->Lingui migration (Tasks 3-5) silently broke 18 test files (the build-only gate missed them). With the macro plugin + provider mock now in place, the residual 69 failures were assertion drift — tests asserting old i18next keys that components no longer render. Updated them to the source English the components now emit (verified against component/registry source). Notes: - QuerySelectionModal uses the standalone plural macro (resolves via the @lingui/core singleton, not useLingui), so it mocks @lingui/core locally. - SettingsProvider test now asserts dynamicActivate (not changeLanguage). - openSourceLibraries counts updated for the i18next->lingui dependency swap. Suite: 132 files / 2584 tests green. --- .../AppearanceSection.test.tsx | 10 +-- .../sidebar/DiscordCommunityCallout.test.tsx | 14 ++-- .../layout/sidebar/SidebarViewItem.test.tsx | 6 +- .../modals/K8sConnectionsModal.test.tsx | 16 ++--- .../modals/NewConnectionModal.test.tsx | 16 ++--- .../modals/QuerySelectionModal.test.tsx | 65 +++++++++++++++---- .../ui/EditorErrorBoundary.test.tsx | 21 +++--- tests/components/ui/FieldEditor.test.tsx | 24 +++---- tests/components/ui/JsonCell.test.tsx | 10 +-- .../ui/JsonExpansionEditor.test.tsx | 16 ++--- tests/components/ui/JsonInput.test.tsx | 14 ++-- tests/components/ui/JsonTreeView.test.tsx | 10 +-- tests/components/ui/MultiResultPanel.test.tsx | 14 ++-- tests/contexts/SettingsProvider.test.tsx | 27 ++++---- tests/utils/explainPlan.test.ts | 8 ++- tests/utils/openSourceLibraries.test.ts | 4 +- 16 files changed, 164 insertions(+), 111 deletions(-) diff --git a/src/components/modals/NewConnectionModal/AppearanceSection.test.tsx b/src/components/modals/NewConnectionModal/AppearanceSection.test.tsx index f64c9fc7..970d0010 100644 --- a/src/components/modals/NewConnectionModal/AppearanceSection.test.tsx +++ b/src/components/modals/NewConnectionModal/AppearanceSection.test.tsx @@ -96,7 +96,7 @@ describe("AppearanceSection — icon tabs", () => { it("renders 4 tabs", () => { render( {}} connectionId="1" />); expect(screen.getByRole("tab", { name: /default/i })).toBeInTheDocument(); - expect(screen.getByRole("tab", { name: /pack/i })).toBeInTheDocument(); + expect(screen.getByRole("tab", { name: /icon/i })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: /emoji/i })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: /image/i })).toBeInTheDocument(); }); @@ -104,7 +104,7 @@ describe("AppearanceSection — icon tabs", () => { it("picks a pack icon and emits IconOverride", () => { const onChange = vi.fn(); render(); - fireEvent.click(screen.getByRole("tab", { name: /pack/i })); + fireEvent.click(screen.getByRole("tab", { name: /icon/i })); fireEvent.click(screen.getByRole("button", { name: "pick-server" })); expect(onChange).toHaveBeenCalledWith({ icon: { type: "pack", id: "server" } }); }); @@ -197,7 +197,7 @@ describe("AppearanceSection — icon tabs", () => { it("filters pack icons by search term", () => { render( {}} connectionId="1" />); - fireEvent.click(screen.getByRole("tab", { name: /pack/i })); + fireEvent.click(screen.getByRole("tab", { name: /icon/i })); const allInitial = screen.getAllByRole("button", { name: /^pick-/i }); // The mocked dynamicIconImports has 5 icons (all shown since < RESULT_LIMIT of 120) expect(allInitial.length).toBeGreaterThan(0); @@ -222,7 +222,7 @@ describe("AppearanceSection — icon tabs", () => { connectionId="1" /> ); - expect(screen.getByRole("tab", { name: /pack/i })).toHaveAttribute("aria-selected", "true"); + expect(screen.getByRole("tab", { name: /icon/i })).toHaveAttribute("aria-selected", "true"); }); it("resets to derived tab when value.icon type changes externally after a user click", () => { @@ -241,6 +241,6 @@ describe("AppearanceSection — icon tabs", () => { /> ); // Tab must follow the new icon type, not stay stuck on the user's previous choice - expect(screen.getByRole("tab", { name: /pack/i })).toHaveAttribute("aria-selected", "true"); + expect(screen.getByRole("tab", { name: /icon/i })).toHaveAttribute("aria-selected", "true"); }); }); diff --git a/tests/components/layout/sidebar/DiscordCommunityCallout.test.tsx b/tests/components/layout/sidebar/DiscordCommunityCallout.test.tsx index 0b4a89f8..bdbe5571 100644 --- a/tests/components/layout/sidebar/DiscordCommunityCallout.test.tsx +++ b/tests/components/layout/sidebar/DiscordCommunityCallout.test.tsx @@ -28,8 +28,12 @@ describe("DiscordCommunityCallout", () => { expect(screen.getByTestId("discord-callout")).toBeInTheDocument(); expect(screen.getByTestId("discord-callout-pulse")).toBeInTheDocument(); - expect(screen.getByText("discordCallout.title")).toBeInTheDocument(); - expect(screen.getByText("discordCallout.body")).toBeInTheDocument(); + expect(screen.getByText("Brand-new Discord community!")).toBeInTheDocument(); + expect( + screen.getByText( + "We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap.", + ), + ).toBeInTheDocument(); expect(storage.getItem).toHaveBeenCalledWith(DISCORD_CALLOUT_STORAGE_KEY); }); @@ -45,7 +49,7 @@ describe("DiscordCommunityCallout", () => { const storage = createMemoryStorage(); render(); - fireEvent.click(screen.getByLabelText("discordCallout.dismiss")); + fireEvent.click(screen.getByLabelText("Dismiss")); expect(storage.setItem).toHaveBeenCalledWith(DISCORD_CALLOUT_STORAGE_KEY, "true"); expect(screen.queryByTestId("discord-callout")).not.toBeInTheDocument(); @@ -55,7 +59,7 @@ describe("DiscordCommunityCallout", () => { const storage = createMemoryStorage(); render(); - fireEvent.click(screen.getByText("discordCallout.cta")); + fireEvent.click(screen.getByText("Join now")); expect(openUrl).toHaveBeenCalledWith("https://discord.com/invite/K2hmhfHRSt"); expect(storage.setItem).toHaveBeenCalledWith(DISCORD_CALLOUT_STORAGE_KEY, "true"); @@ -71,7 +75,7 @@ describe("DiscordCommunityCallout", () => { }; render(); - fireEvent.click(screen.getByLabelText("discordCallout.dismiss")); + fireEvent.click(screen.getByLabelText("Dismiss")); expect(screen.queryByTestId("discord-callout")).not.toBeInTheDocument(); }); diff --git a/tests/components/layout/sidebar/SidebarViewItem.test.tsx b/tests/components/layout/sidebar/SidebarViewItem.test.tsx index a9a90385..4f19ff27 100644 --- a/tests/components/layout/sidebar/SidebarViewItem.test.tsx +++ b/tests/components/layout/sidebar/SidebarViewItem.test.tsx @@ -99,7 +99,7 @@ describe("SidebarViewItem", () => { // Wait for columns to load await waitFor(() => { - expect(screen.getByText("sidebar.columns")).toBeInTheDocument(); + expect(screen.getByText("columns")).toBeInTheDocument(); }); // Should display column names @@ -130,14 +130,14 @@ describe("SidebarViewItem", () => { // Expand fireEvent.click(expandButton); await waitFor(() => { - expect(screen.getByText("sidebar.columns")).toBeInTheDocument(); + expect(screen.getByText("columns")).toBeInTheDocument(); }); // Collapse fireEvent.click(expandButton); // Columns should not be visible - expect(screen.queryByText("sidebar.columns")).not.toBeInTheDocument(); + expect(screen.queryByText("columns")).not.toBeInTheDocument(); }); it("displays column count in folder header", async () => { diff --git a/tests/components/modals/K8sConnectionsModal.test.tsx b/tests/components/modals/K8sConnectionsModal.test.tsx index 007dac00..10777dcd 100644 --- a/tests/components/modals/K8sConnectionsModal.test.tsx +++ b/tests/components/modals/K8sConnectionsModal.test.tsx @@ -79,27 +79,27 @@ function renderModal(defaultPort: number | null) { } async function fillRequiredFields() { - fireEvent.change(screen.getByPlaceholderText("k8sConnections.namePlaceholder"), { + fireEvent.change(screen.getByPlaceholderText("My K8s cluster"), { target: { value: "cluster" }, }); await waitFor(() => { expect(screen.getByRole("option", { name: "ctx" })).toBeInTheDocument(); }); - fireEvent.change(screen.getByLabelText("k8sConnections.chooseContext"), { + fireEvent.change(screen.getByLabelText("Choose a context..."), { target: { value: "ctx" }, }); await waitFor(() => { expect(screen.getByRole("option", { name: "db" })).toBeInTheDocument(); }); - fireEvent.change(screen.getByLabelText("k8sConnections.chooseNamespace"), { + fireEvent.change(screen.getByLabelText("Choose a namespace..."), { target: { value: "db" }, }); await waitFor(() => { expect(screen.getByRole("option", { name: "mysql-svc" })).toBeInTheDocument(); }); - fireEvent.change(screen.getByLabelText("k8sConnections.chooseResource"), { + fireEvent.change(screen.getByLabelText("Choose a resource..."), { target: { value: "mysql-svc" }, }); } @@ -137,7 +137,7 @@ describe("K8sConnectionsModal port defaults", () => { it("does not fall back to MySQL port when the driver has no default port", () => { renderModal(null); - fireEvent.click(screen.getByText("k8sConnections.add")); + fireEvent.click(screen.getByText("Add")); const portInput = screen.getByRole("spinbutton") as HTMLInputElement; expect(portInput.value).toBe(""); @@ -150,7 +150,7 @@ describe("K8sConnectionsModal port defaults", () => { , ); - fireEvent.click(screen.getByText("k8sConnections.add")); + fireEvent.click(screen.getByText("Add")); const portInput = screen.getByRole("spinbutton") as HTMLInputElement; expect(portInput.value).toBe("3306"); @@ -163,7 +163,7 @@ describe("K8sConnectionsModal port defaults", () => { it("clearing a manual port falls back to the provided driver default instead of 0", async () => { renderModal(15432); - fireEvent.click(screen.getByText("k8sConnections.add")); + fireEvent.click(screen.getByText("Add")); await fillRequiredFields(); const portInput = screen.getByRole("spinbutton") as HTMLInputElement; @@ -171,7 +171,7 @@ describe("K8sConnectionsModal port defaults", () => { fireEvent.change(portInput, { target: { value: "7777" } }); fireEvent.change(portInput, { target: { value: "" } }); - fireEvent.click(screen.getByText("common.save")); + fireEvent.click(screen.getByText("Save")); await waitFor(() => { expect(k8sMocks.saveK8sConnection).toHaveBeenCalledWith( diff --git a/tests/components/modals/NewConnectionModal.test.tsx b/tests/components/modals/NewConnectionModal.test.tsx index 87103539..7a6a5b13 100644 --- a/tests/components/modals/NewConnectionModal.test.tsx +++ b/tests/components/modals/NewConnectionModal.test.tsx @@ -114,8 +114,8 @@ function renderModal() { async function openInlineK8s() { renderModal(); fireEvent.click(screen.getByText("Kubernetes")); - fireEvent.click(screen.getByLabelText("newConnection.useK8s")); - fireEvent.click(screen.getByText("newConnection.createInlineK8s")); + fireEvent.click(screen.getByLabelText("Use Kubernetes Port-Forward")); + fireEvent.click(screen.getByText("Inline")); await waitFor(() => { expect(screen.getByRole("option", { name: "ctx" })).toBeInTheDocument(); @@ -123,25 +123,25 @@ async function openInlineK8s() { } async function chooseServiceResource() { - fireEvent.change(screen.getByLabelText("newConnection.chooseContext"), { + fireEvent.change(screen.getByLabelText("Choose a context..."), { target: { value: "ctx" }, }); await waitFor(() => { expect(screen.getByRole("option", { name: "db" })).toBeInTheDocument(); }); - fireEvent.change(screen.getByLabelText("newConnection.chooseNamespace"), { + fireEvent.change(screen.getByLabelText("Choose a namespace..."), { target: { value: "db" }, }); - fireEvent.change(screen.getByLabelText("newConnection.k8sSelectType"), { + fireEvent.change(screen.getByLabelText("Select type..."), { target: { value: "service" }, }); await waitFor(() => { expect(screen.getByRole("option", { name: "mysql-svc" })).toBeInTheDocument(); }); - fireEvent.change(screen.getByLabelText("newConnection.chooseResource"), { + fireEvent.change(screen.getByLabelText("Choose a resource..."), { target: { value: "mysql-svc" }, }); } @@ -166,7 +166,7 @@ describe("NewConnectionModal K8s port defaults", () => { expect(portInput).toHaveAttribute("type", "number"); expect(portInput).toHaveValue(15432); - fireEvent.click(screen.getByText("newConnection.testConnection")); + fireEvent.click(screen.getByText("Test Connection")); await waitFor(() => { expect(invoke).toHaveBeenCalledWith( @@ -205,7 +205,7 @@ describe("NewConnectionModal K8s port defaults", () => { expect(portInput).toHaveValue(6543); }); - fireEvent.click(screen.getByText("newConnection.testConnection")); + fireEvent.click(screen.getByText("Test Connection")); await waitFor(() => { expect(invoke).toHaveBeenCalledWith( diff --git a/tests/components/modals/QuerySelectionModal.test.tsx b/tests/components/modals/QuerySelectionModal.test.tsx index 63bf5f48..6ac0e3a1 100644 --- a/tests/components/modals/QuerySelectionModal.test.tsx +++ b/tests/components/modals/QuerySelectionModal.test.tsx @@ -2,6 +2,45 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; import { render, screen, fireEvent } from "@testing-library/react"; import { QuerySelectionModal } from "../../../src/components/modals/QuerySelectionModal"; +// QuerySelectionModal uses the standalone `plural` macro, which the Lingui babel +// plugin compiles into a call on the global `i18n` singleton from @lingui/core +// (not the mocked useLingui `t`). Mock that singleton to render the source ICU +// message: pick the plural form by count and substitute `#` with the count. +vi.mock("@lingui/core", async (importOriginal) => { + const actual = await importOriginal(); + const renderIcu = (message: string, values?: Record) => { + if (!values) return message; + // {count, plural, one {# query found} other {# queries found}} + const pluralMatch = message.match( + /^\{(\w+),\s*plural,\s*(.+)\}$/s, + ); + if (pluralMatch) { + const [, varName, body] = pluralMatch; + const count = Number(values[varName]); + const forms: Record = {}; + const formRe = /(\w+|=\d+)\s*\{([^{}]*)\}/g; + let m: RegExpExecArray | null; + while ((m = formRe.exec(body)) !== null) forms[m[1]] = m[2]; + const chosen = + forms[`=${count}`] ?? (count === 1 ? forms.one : forms.other) ?? forms.other ?? ""; + return chosen.replace(/#/g, String(count)); + } + let out = message; + for (const [k, v] of Object.entries(values)) out = out.replaceAll(`{${k}}`, String(v)); + return out; + }; + const i18n = { + _: (id: string | { id?: string; message?: string }, values?: Record) => { + const message = typeof id === "string" ? id : (id?.message ?? id?.id ?? ""); + return renderIcu(message, values); + }, + locale: "en", + load: vi.fn(), + activate: vi.fn(), + }; + return { ...actual, i18n }; +}); + // Mock the Modal component to just render children vi.mock("../../../src/components/ui/Modal", () => ({ Modal: ({ @@ -51,41 +90,41 @@ describe("QuerySelectionModal", () => { it("renders the title", () => { renderModal(); expect( - screen.getByText("editor.querySelection.title"), + screen.getByText("Select Query to Execute"), ).toBeInTheDocument(); }); it("renders query count in header", () => { renderModal(); expect( - screen.getByText(/editor\.querySelection\.queriesFound/), + screen.getByText(/queries found/), ).toBeInTheDocument(); }); it("renders Run All button", () => { renderModal(); expect( - screen.getByText("editor.querySelection.runAll"), + screen.getByText("Run All"), ).toBeInTheDocument(); }); it("renders Run Selected button", () => { renderModal(); expect( - screen.getByText(/editor\.querySelection\.runSelected/), + screen.getByText(/Run Selected/), ).toBeInTheDocument(); }); it("calls onRunAll with all queries when Run All is clicked", () => { renderModal(); - fireEvent.click(screen.getByText("editor.querySelection.runAll")); + fireEvent.click(screen.getByText("Run All")); expect(mockOnRunAll).toHaveBeenCalledWith(queries); }); it("calls onClose when close button is clicked", () => { renderModal(); // Close button is the first button in the header (next to title) - const title = screen.getByText("editor.querySelection.title"); + const title = screen.getByText("Select Query to Execute"); const header = title.closest("div")!.parentElement!; const closeBtn = header.querySelector("button"); expect(closeBtn).not.toBeNull(); @@ -102,7 +141,7 @@ describe("QuerySelectionModal", () => { it("Run Selected is disabled when no queries are selected", () => { renderModal(); const runSelectedBtn = screen - .getByText(/editor\.querySelection\.runSelected/) + .getByText(/Run Selected/) .closest("button"); expect(runSelectedBtn).toBeDisabled(); }); @@ -136,7 +175,7 @@ describe("QuerySelectionModal", () => { renderModal(); fireEvent.keyDown(window, { key: " " }); const runSelectedBtn = screen - .getByText(/editor\.querySelection\.runSelected/) + .getByText(/Run Selected/) .closest("button"); expect(runSelectedBtn).not.toBeDisabled(); fireEvent.click(runSelectedBtn!); @@ -146,18 +185,18 @@ describe("QuerySelectionModal", () => { it("shows Select All toggle", () => { renderModal(); expect( - screen.getByText("editor.querySelection.selectAll"), + screen.getByText("Select All"), ).toBeInTheDocument(); }); it("toggles all selections when Select All is clicked", () => { renderModal(); - fireEvent.click(screen.getByText("editor.querySelection.selectAll")); + fireEvent.click(screen.getByText("Select All")); expect( - screen.getByText("editor.querySelection.deselectAll"), + screen.getByText("Deselect All"), ).toBeInTheDocument(); const runSelectedBtn = screen - .getByText(/editor\.querySelection\.runSelected/) + .getByText(/Run Selected/) .closest("button"); fireEvent.click(runSelectedBtn!); expect(mockOnRunSelected).toHaveBeenCalledWith(queries); @@ -165,7 +204,7 @@ describe("QuerySelectionModal", () => { it("shows inline run button on hover for each query row", () => { renderModal(); - const runButtons = screen.getAllByTitle("editor.querySelection.runSingle"); + const runButtons = screen.getAllByTitle("Run this query"); expect(runButtons.length).toBe(queries.length); }); }); diff --git a/tests/components/ui/EditorErrorBoundary.test.tsx b/tests/components/ui/EditorErrorBoundary.test.tsx index 42ccf95d..7b5fbf9d 100644 --- a/tests/components/ui/EditorErrorBoundary.test.tsx +++ b/tests/components/ui/EditorErrorBoundary.test.tsx @@ -78,7 +78,7 @@ describe("EditorErrorBoundary", () => { renderAtEditor(); expect(screen.getByRole("alert")).toBeInTheDocument(); - expect(screen.getByText("editor.errorBoundary.title")).toBeInTheDocument(); + expect(screen.getByRole("heading")).toBeInTheDocument(); expect(screen.getByText("boom")).toBeInTheDocument(); }); @@ -98,7 +98,7 @@ describe("EditorErrorBoundary", () => { expect(screen.getByText("boom")).toBeInTheDocument(); shouldThrow = false; - fireEvent.click(screen.getByText("editor.errorBoundary.retry")); + fireEvent.click(screen.getByText("Try again")); expect(screen.getByTestId("recovered")).toBeInTheDocument(); expect(screen.queryByRole("alert")).not.toBeInTheDocument(); @@ -107,7 +107,9 @@ describe("EditorErrorBoundary", () => { it("navigates to /connections when the user clicks back to connections", () => { renderAtEditor(); - fireEvent.click(screen.getByText("editor.errorBoundary.backToConnections")); + // Buttons in order: retry, close-current-tab, back-to-connections. + const buttons = screen.getAllByRole("button"); + fireEvent.click(buttons[buttons.length - 1]); expect(screen.getByTestId("connections-page")).toBeInTheDocument(); }); @@ -120,7 +122,8 @@ describe("EditorErrorBoundary", () => { expect(screen.getByText("boom")).toBeInTheDocument(); shouldThrow = false; - fireEvent.click(screen.getByText("editor.errorBoundary.closeCurrentTab")); + // With an active tab, buttons are: retry, close-current-tab, back-to-connections. + fireEvent.click(screen.getAllByRole("button")[1]); expect(closeTab).toHaveBeenCalledWith("tab-1"); expect(screen.getByTestId("recovered")).toBeInTheDocument(); @@ -132,11 +135,9 @@ describe("EditorErrorBoundary", () => { renderAtEditor(, ctx); - expect( - screen.queryByText("editor.errorBoundary.closeCurrentTab"), - ).not.toBeInTheDocument(); - expect( - screen.getByText("editor.errorBoundary.retry"), - ).toBeInTheDocument(); + // Without an active tab the close-current-tab button is omitted, leaving + // only retry and back-to-connections. + expect(screen.getAllByRole("button")).toHaveLength(2); + expect(screen.getByText("Try again")).toBeInTheDocument(); }); }); diff --git a/tests/components/ui/FieldEditor.test.tsx b/tests/components/ui/FieldEditor.test.tsx index 0bb9e743..8f0b6208 100644 --- a/tests/components/ui/FieldEditor.test.tsx +++ b/tests/components/ui/FieldEditor.test.tsx @@ -146,9 +146,9 @@ describe("FieldEditor", () => { /> ); - expect(screen.getByTitle("dataGrid.setGenerate")).toBeInTheDocument(); - expect(screen.getByTitle("dataGrid.setNull")).toBeInTheDocument(); - expect(screen.getByTitle("dataGrid.setEmpty")).toBeInTheDocument(); + expect(screen.getByTitle("Set GENERATED")).toBeInTheDocument(); + expect(screen.getByTitle("Set NULL")).toBeInTheDocument(); + expect(screen.getByTitle("Set EMPTY")).toBeInTheDocument(); }); it("should call onChange with null when SET GENERATED is clicked", () => { @@ -164,7 +164,7 @@ describe("FieldEditor", () => { /> ); - const generateBtn = screen.getByTitle("dataGrid.setGenerate"); + const generateBtn = screen.getByTitle("Set GENERATED"); fireEvent.click(generateBtn); expect(onChange).toHaveBeenCalledWith(null); @@ -182,7 +182,7 @@ describe("FieldEditor", () => { /> ); - const nullBtn = screen.getByTitle("dataGrid.setNull"); + const nullBtn = screen.getByTitle("Set NULL"); fireEvent.click(nullBtn); expect(onChange).toHaveBeenCalledWith(null); @@ -201,7 +201,7 @@ describe("FieldEditor", () => { /> ); - const defaultBtn = screen.getByTitle("dataGrid.setDefault"); + const defaultBtn = screen.getByTitle("Set DEFAULT"); fireEvent.click(defaultBtn); expect(onChange).toHaveBeenCalledWith("__USE_DEFAULT__"); @@ -220,7 +220,7 @@ describe("FieldEditor", () => { /> ); - const defaultBtn = screen.getByTitle("dataGrid.setDefault"); + const defaultBtn = screen.getByTitle("Set DEFAULT"); fireEvent.click(defaultBtn); expect(onChange).toHaveBeenCalledWith(null); @@ -238,7 +238,7 @@ describe("FieldEditor", () => { /> ); - const emptyBtn = screen.getByTitle("dataGrid.setEmpty"); + const emptyBtn = screen.getByTitle("Set EMPTY"); fireEvent.click(emptyBtn); expect(onChange).toHaveBeenCalledWith(" "); @@ -257,7 +257,7 @@ describe("FieldEditor", () => { /> ); - expect(screen.queryByTitle("dataGrid.setGenerate")).not.toBeInTheDocument(); + expect(screen.queryByTitle("Set GENERATED")).not.toBeInTheDocument(); }); it("should not show quick actions when field has no special properties", () => { @@ -275,9 +275,9 @@ describe("FieldEditor", () => { /> ); - expect(screen.queryByTitle("dataGrid.setGenerate")).not.toBeInTheDocument(); - expect(screen.queryByTitle("dataGrid.setNull")).not.toBeInTheDocument(); - expect(screen.queryByTitle("dataGrid.setDefault")).not.toBeInTheDocument(); + expect(screen.queryByTitle("Set GENERATED")).not.toBeInTheDocument(); + expect(screen.queryByTitle("Set NULL")).not.toBeInTheDocument(); + expect(screen.queryByTitle("Set DEFAULT")).not.toBeInTheDocument(); }); it("should format geometric values for display (WKB to WKT)", () => { diff --git a/tests/components/ui/JsonCell.test.tsx b/tests/components/ui/JsonCell.test.tsx index bced60c8..e732e9db 100644 --- a/tests/components/ui/JsonCell.test.tsx +++ b/tests/components/ui/JsonCell.test.tsx @@ -38,13 +38,13 @@ describe("JsonCell", () => { it("renders no icon buttons for null value", () => { render(); expect( - screen.queryByRole("button", { name: /expand|viewer/i }), + screen.queryByRole("button", { name: /toggle|viewer/i }), ).toBeNull(); }); it("renders both icon buttons when value is non-null", () => { render(); - expect(screen.getByRole("button", { name: /expand/i })).toBeInTheDocument(); + expect(screen.getByRole("button", { name: /toggle/i })).toBeInTheDocument(); expect(screen.getByRole("button", { name: /viewer/i })).toBeInTheDocument(); }); @@ -58,13 +58,13 @@ describe("JsonCell", () => { it("calls onToggleExpand when chevron clicked", () => { const onToggleExpand = vi.fn(); render(); - fireEvent.click(screen.getByRole("button", { name: /expand/i })); + fireEvent.click(screen.getByRole("button", { name: /toggle/i })); expect(onToggleExpand).toHaveBeenCalledTimes(1); }); it("applies rotated chevron class when expanded", () => { render(); - const chevron = screen.getByRole("button", { name: /expand/i }); + const chevron = screen.getByRole("button", { name: /toggle/i }); expect(chevron.className).toMatch(/rotate-90/); }); @@ -107,7 +107,7 @@ describe("JsonCell", () => { it("hides icons when isPendingDelete is true", () => { render(); - expect(screen.queryByRole("button", { name: /expand/i })).toBeNull(); + expect(screen.queryByRole("button", { name: /toggle/i })).toBeNull(); expect(screen.queryByRole("button", { name: /viewer/i })).toBeNull(); }); }); diff --git a/tests/components/ui/JsonExpansionEditor.test.tsx b/tests/components/ui/JsonExpansionEditor.test.tsx index d2d0d13c..1e0a4f90 100644 --- a/tests/components/ui/JsonExpansionEditor.test.tsx +++ b/tests/components/ui/JsonExpansionEditor.test.tsx @@ -31,26 +31,26 @@ describe("JsonExpansionEditor", () => { it("renders save and cancel buttons when editable", () => { render(); - expect(screen.getByText("common.cancel")).toBeInTheDocument(); - expect(screen.getByText("jsonViewer.save")).toBeInTheDocument(); + expect(screen.getByText("Cancel")).toBeInTheDocument(); + expect(screen.getByText("Save")).toBeInTheDocument(); }); it("hides buttons when read-only", () => { render(); - expect(screen.queryByText("common.cancel")).toBeNull(); - expect(screen.queryByText("jsonViewer.save")).toBeNull(); + expect(screen.queryByText("Cancel")).toBeNull(); + expect(screen.queryByText("Save")).toBeNull(); }); it("disables save while no edits", () => { render(); - const save = screen.getByText("jsonViewer.save"); + const save = screen.getByText("Save"); expect(save).toBeDisabled(); }); it("calls onCancel when cancel clicked", () => { const onCancel = vi.fn(); render(); - fireEvent.click(screen.getByText("common.cancel")); + fireEvent.click(screen.getByText("Cancel")); expect(onCancel).toHaveBeenCalledTimes(1); }); @@ -59,7 +59,7 @@ describe("JsonExpansionEditor", () => { render(); const editor = screen.getByTestId("json-code-editor"); fireEvent.change(editor, { target: { value: '{"a":2}' } }); - fireEvent.click(screen.getByText("jsonViewer.save")); + fireEvent.click(screen.getByText("Save")); expect(onSave).toHaveBeenCalledWith({ a: 2 }); }); @@ -68,7 +68,7 @@ describe("JsonExpansionEditor", () => { const editor = screen.getByTestId("json-code-editor"); fireEvent.change(editor, { target: { value: "{ broken" } }); expect(screen.getByTestId("json-expansion-error")).toBeInTheDocument(); - expect(screen.getByText("jsonViewer.save")).toBeDisabled(); + expect(screen.getByText("Save")).toBeDisabled(); }); it("formats incoming object as pretty-printed JSON", () => { diff --git a/tests/components/ui/JsonInput.test.tsx b/tests/components/ui/JsonInput.test.tsx index 2b366c76..f4d7e450 100644 --- a/tests/components/ui/JsonInput.test.tsx +++ b/tests/components/ui/JsonInput.test.tsx @@ -110,7 +110,7 @@ describe("JsonInput", () => { }); expect(onChange).not.toHaveBeenCalled(); - expect(screen.getByText("jsonInput.invalid")).toBeInTheDocument(); + expect(screen.getByText("Invalid JSON")).toBeInTheDocument(); }); it("emits parsed values when Raw mode edits produce valid JSON", () => { @@ -124,7 +124,7 @@ describe("JsonInput", () => { }); expect(onChange).toHaveBeenLastCalledWith({ a: 3 }); - expect(screen.getByText("jsonInput.valid")).toBeInTheDocument(); + expect(screen.getByText("Valid JSON")).toBeInTheDocument(); }); it("emits raw values from Tree mode edits", () => { @@ -142,9 +142,9 @@ describe("JsonInput", () => { fireEvent.click(getTab("tree")); - expect(screen.queryByTitle("jsonInput.format")).not.toBeInTheDocument(); - expect(screen.queryByText("jsonInput.valid")).not.toBeInTheDocument(); - expect(screen.queryByText("jsonInput.invalid")).not.toBeInTheDocument(); + expect(screen.queryByTitle("Format")).not.toBeInTheDocument(); + expect(screen.queryByText("Valid JSON")).not.toBeInTheDocument(); + expect(screen.queryByText("Invalid JSON")).not.toBeInTheDocument(); }); it("Format button pretty-prints minified JSON in Raw mode", () => { @@ -156,7 +156,7 @@ describe("JsonInput", () => { const raw = screen.getByTestId("json-input-raw") as HTMLTextAreaElement; fireEvent.change(raw, { target: { value: '{"a":1,"b":2}' } }); - fireEvent.click(screen.getByTitle("jsonInput.format")); + fireEvent.click(screen.getByTitle("Format")); expect(raw.value).toBe('{\n "a": 1,\n "b": 2\n}'); expect(onChange).toHaveBeenLastCalledWith({ a: 1, b: 2 }); @@ -216,7 +216,7 @@ describe("JsonInput", () => { it("hides the Format button when readOnly", () => { render(); - expect(screen.queryByTitle("jsonInput.format")).not.toBeInTheDocument(); + expect(screen.queryByTitle("Format")).not.toBeInTheDocument(); }); }); }); diff --git a/tests/components/ui/JsonTreeView.test.tsx b/tests/components/ui/JsonTreeView.test.tsx index c826b556..61118fb4 100644 --- a/tests/components/ui/JsonTreeView.test.tsx +++ b/tests/components/ui/JsonTreeView.test.tsx @@ -175,7 +175,7 @@ describe("JsonTreeView", () => { describe("search", () => { it("renders a controlled search input when no external searchQuery is provided", () => { render(); - const input = screen.getByPlaceholderText("jsonInput.search"); + const input = screen.getByPlaceholderText("Search"); expect(input).toBeInTheDocument(); expect((input as HTMLInputElement).value).toBe(""); }); @@ -183,14 +183,14 @@ describe("JsonTreeView", () => { it("does not render the internal search input when searchQuery is provided", () => { render(); expect( - screen.queryByPlaceholderText("jsonInput.search"), + screen.queryByPlaceholderText("Search"), ).not.toBeInTheDocument(); }); it("forwards typed text from the internal input to the editor's searchText", () => { render(); const input = screen.getByPlaceholderText( - "jsonInput.search", + "Search", ) as HTMLInputElement; fireEvent.change(input, { target: { value: "Alice" } }); @@ -201,7 +201,7 @@ describe("JsonTreeView", () => { it("clears the editor's searchText when the internal input is cleared", () => { render(); const input = screen.getByPlaceholderText( - "jsonInput.search", + "Search", ) as HTMLInputElement; fireEvent.change(input, { target: { value: "Alice" } }); @@ -215,7 +215,7 @@ describe("JsonTreeView", () => { it("forwards the user's text verbatim so the library can do case-insensitive matching", () => { render(); const input = screen.getByPlaceholderText( - "jsonInput.search", + "Search", ) as HTMLInputElement; fireEvent.change(input, { target: { value: "alice" } }); diff --git a/tests/components/ui/MultiResultPanel.test.tsx b/tests/components/ui/MultiResultPanel.test.tsx index 1fcb98d1..4cdd2e8f 100644 --- a/tests/components/ui/MultiResultPanel.test.tsx +++ b/tests/components/ui/MultiResultPanel.test.tsx @@ -106,8 +106,8 @@ describe("MultiResultPanel", () => { activeResultId="r-0" />, ); - // i18n mock interpolates {{index}} so we get "editor.multiResult.query" with index values - const tabTexts = screen.getAllByText(/editor\.multiResult\.query/); + // Lingui mock renders source text; tab label is `${prefix} ${n}` → "Query 1", "Query 2" + const tabTexts = screen.getAllByText(/Query/); expect(tabTexts).toHaveLength(2); }); @@ -123,7 +123,7 @@ describe("MultiResultPanel", () => { />, ); expect( - screen.getByText("editor.executingQuery"), + screen.getByText("Executing query..."), ).toBeInTheDocument(); }); @@ -160,7 +160,7 @@ describe("MultiResultPanel", () => { />, ); expect(screen.getByTestId("data-grid")).toBeInTheDocument(); - expect(screen.getByText(/editor\.rowsRetrieved/)).toBeInTheDocument(); + expect(screen.getByText(/rows retrieved/)).toBeInTheDocument(); }); it("calls onSelectResult when clicking a tab", () => { @@ -179,7 +179,7 @@ describe("MultiResultPanel", () => { const buttons = screen.getAllByRole("button"); // Find a button that is a tab for query 2 (it won't have the rerun button since it's loading) const tabButtons = buttons.filter((btn) => - btn.textContent?.includes("editor.multiResult.query"), + btn.textContent?.includes("Query"), ); if (tabButtons.length >= 2) { fireEvent.click(tabButtons[1]); @@ -204,7 +204,7 @@ describe("MultiResultPanel", () => { />, ); // Only the first entry should have a rerun button - const rerunButtons = screen.getAllByTitle("editor.multiResult.rerun"); + const rerunButtons = screen.getAllByTitle("Re-run query"); expect(rerunButtons).toHaveLength(1); }); @@ -223,7 +223,7 @@ describe("MultiResultPanel", () => { activeResultId="r-0" />, ); - fireEvent.click(screen.getByTitle("editor.multiResult.rerun")); + fireEvent.click(screen.getByTitle("Re-run query")); expect(mockOnRerunEntry).toHaveBeenCalledWith("r-0"); }); diff --git a/tests/contexts/SettingsProvider.test.tsx b/tests/contexts/SettingsProvider.test.tsx index 0c09aa4f..b1ffb2d1 100644 --- a/tests/contexts/SettingsProvider.test.tsx +++ b/tests/contexts/SettingsProvider.test.tsx @@ -8,16 +8,21 @@ import type { Settings } from "../../src/contexts/SettingsContext"; vi.mock("@tauri-apps/api/core"); -// Mock react-i18next -const mockChangeLanguage = vi.fn(); -vi.mock("react-i18next", () => ({ - useTranslation: () => ({ - t: (key: string) => key, - i18n: { - changeLanguage: mockChangeLanguage, - language: "en", - }, - }), +// Mock the Lingui locale bridge. SettingsProvider activates the resolved locale +// via dynamicActivate (no more i18next changeLanguage). +const { mockDynamicActivate } = vi.hoisted(() => ({ mockDynamicActivate: vi.fn() })); +vi.mock("../../src/i18n/lingui", () => ({ + dynamicActivate: mockDynamicActivate, + SUPPORTED_LANGUAGES: [ + { id: "en", label: "English" }, + { id: "it", label: "Italiano" }, + { id: "es", label: "Español" }, + { id: "zh", label: "中文" }, + { id: "fr", label: "Français" }, + { id: "de", label: "Deutsch" }, + { id: "ja", label: "日本語" }, + { id: "ru", label: "Русский" }, + ], })); describe("SettingsProvider", () => { @@ -259,7 +264,7 @@ describe("SettingsProvider", () => { expect(result.current.settings.language).toBe("it"); }); - expect(mockChangeLanguage).toHaveBeenCalledWith("it"); + expect(mockDynamicActivate).toHaveBeenCalledWith("it"); }); it("should apply font settings to document", async () => { diff --git a/tests/utils/explainPlan.test.ts b/tests/utils/explainPlan.test.ts index 9b8810a5..3a0ff81c 100644 --- a/tests/utils/explainPlan.test.ts +++ b/tests/utils/explainPlan.test.ts @@ -376,12 +376,16 @@ describe("explainPlan", () => { ); expect(legend).toHaveLength(2); - expect(legend[0]).toBe("editor.visualExplain.postgresAnalyzeLegend1"); + expect(legend[0].message).toBe( + "PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.", + ); }); it("should return sqlite notes", () => { const legend = getExplainDriverLegend(makePlan({ driver: "sqlite" })); - expect(legend[0]).toBe("editor.visualExplain.sqliteLegend1"); + expect(legend[0].message).toBe( + "SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.", + ); }); }); diff --git a/tests/utils/openSourceLibraries.test.ts b/tests/utils/openSourceLibraries.test.ts index 1464c0bf..e719c96a 100644 --- a/tests/utils/openSourceLibraries.test.ts +++ b/tests/utils/openSourceLibraries.test.ts @@ -8,7 +8,7 @@ import { describe("openSourceLibraries", () => { it("should expose all direct dependencies declared by the project manifests", () => { expect(OPEN_SOURCE_LIBRARY_SECTIONS).toHaveLength(4); - expect(getOpenSourceLibraryTotal()).toBe(91); + expect(getOpenSourceLibraryTotal()).toBe(90); }); it("should keep section counts aligned with manifest groups", () => { @@ -20,7 +20,7 @@ describe("openSourceLibraries", () => { ); expect(counts).toEqual({ - "npm-runtime": 28, + "npm-runtime": 27, "npm-tooling": 24, "cargo-runtime": 37, "cargo-tooling": 2, From 24084c583cdebf513321bc6f093b12c8ae4abe7c Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 12:10:02 +0200 Subject: [PATCH 15/22] fix(plugin-api): keep usePluginTranslation backwards-compatible The native-only Lingui port routed plugin translations through i18n.load + i18n._, which broke two long-standing guarantees of the public PluginTranslator contract: per-plugin key namespacing (flat load -> cross-plugin collisions) and {{var}} interpolation (Lingui only does ICU {var}). Restore BC with a self-contained, Lingui-independent plugin store (src/i18n/ pluginI18n.ts): keys scoped per plugin id, active-language -> English -> key fallback, and {{var}} interpolation. As an additive bonus for new authors it also interpolates ICU {var}, so plugins can author Lingui-style placeholders. usePluginTranslation re-renders on locale change (reads the active Lingui locale). Signature unchanged: (key, options?) => string. Docs (types/hooks/README) updated. plugin-api check:sync OK; app build + 2584 tests green. --- packages/plugin-api/README.md | 2 +- packages/plugin-api/src/hooks.ts | 7 ++-- packages/plugin-api/src/types.ts | 6 ++-- src/contexts/PluginSlotProvider.tsx | 30 ++-------------- src/hooks/usePluginApi.ts | 20 +++++++---- src/i18n/pluginI18n.ts | 56 +++++++++++++++++++++++++++++ tests/setup.ts | 10 +++--- 7 files changed, 87 insertions(+), 44 deletions(-) create mode 100644 src/i18n/pluginI18n.ts diff --git a/packages/plugin-api/README.md b/packages/plugin-api/README.md index d1fdcea3..64576444 100644 --- a/packages/plugin-api/README.md +++ b/packages/plugin-api/README.md @@ -41,7 +41,7 @@ export default MySlot.component; | `usePluginModal()` | `{ openModal, closeModal }` | Host-managed modal with custom content | | `usePluginSetting(pluginId)` | `{ getSetting, setSetting, setSettings }` | Read/write the plugin's own settings | | `usePluginTheme()` | `{ themeId, themeName, isDark, colors }` | Current theme tokens | -| `usePluginTranslation(pluginId)` | `t(key)` | Plugin-scoped i18next translator | +| `usePluginTranslation(pluginId)` | `t(key, options?)` | Plugin-scoped translator from `locales/.json` (`{{var}}` + ICU `{var}`) | | `openUrl(url)` | `Promise` | Open a URL in the system browser | All hooks must run inside a React component loaded by Tabularis. Calling them outside the host throws a clear error instead of failing silently. diff --git a/packages/plugin-api/src/hooks.ts b/packages/plugin-api/src/hooks.ts index 621b1d86..c00faecc 100644 --- a/packages/plugin-api/src/hooks.ts +++ b/packages/plugin-api/src/hooks.ts @@ -41,8 +41,11 @@ export function usePluginSetting(pluginId: string): UsePluginSettingReturn { } /** - * Access the plugin's translations. Uses the plugin id as the i18next - * namespace — the host registers it automatically from locales/*.json. + * Access the plugin's translations, scoped to your plugin id. The host loads your + * bundle's `locales/.json` automatically. Returns `(key, options?) => string`: + * missing keys fall back to the key, and both `{{var}}` (i18next) and `{var}` + * (ICU/Lingui) placeholders interpolate from `options`. The host runtime is Lingui; + * new plugins may author ICU `{var}` strings, existing `{{var}}` ones keep working. */ export function usePluginTranslation(pluginId: string): PluginTranslator { return getHost().usePluginTranslation(pluginId); diff --git a/packages/plugin-api/src/types.ts b/packages/plugin-api/src/types.ts index 7864cf43..3956fb99 100644 --- a/packages/plugin-api/src/types.ts +++ b/packages/plugin-api/src/types.ts @@ -108,8 +108,10 @@ export interface UsePluginThemeReturn { } /** - * Minimal i18next-compatible translator signature. - * Plugins should treat this as read-only. + * Plugin translator: `(key, options?) => string`. Resolves against your plugin's + * own `locales/.json` (active language → English → the key itself) and + * interpolates placeholders from `options`. Accepts both `{{var}}` (i18next, kept + * for backwards compatibility) and `{var}` (ICU/Lingui) syntax. Read-only. */ export type PluginTranslator = (key: string, options?: Record) => string; diff --git a/src/contexts/PluginSlotProvider.tsx b/src/contexts/PluginSlotProvider.tsx index 7284f0bd..c9466d55 100644 --- a/src/contexts/PluginSlotProvider.tsx +++ b/src/contexts/PluginSlotProvider.tsx @@ -3,6 +3,7 @@ import * as React from "react"; import * as ReactJSXRuntime from "react/jsx-runtime"; import { invoke } from "@tauri-apps/api/core"; import { i18n } from "../i18n/lingui"; +import { loadPluginTranslations } from "../i18n/pluginI18n"; import { PluginSlotContext } from "./PluginSlotContext"; import type { PluginSlotRegistryType } from "./PluginSlotContext"; @@ -36,33 +37,6 @@ function exposePluginGlobals() { (window as unknown as Record).__TABULARIS_API_VERSION__ = HOST_API_VERSION; } -/** - * Loads translation files for a plugin and merges them into the Lingui catalog. - * Tries the current language first, then falls back to 'en'. - * Missing locale files are silently skipped. - * Plugin keys are used verbatim as Lingui message ids, so plugins should namespace - * them (e.g. ".key") to avoid clashing with host or other-plugin messages. - */ -const loadedPluginLocales = new Set(); -async function loadPluginTranslations(pluginId: string): Promise { - const langs = Array.from(new Set([i18n.locale?.split("-")[0], "en"])).filter(Boolean) as string[]; - for (const lang of langs) { - const cacheKey = `${lang}:${pluginId}`; - if (loadedPluginLocales.has(cacheKey)) continue; - try { - const raw = await invoke("read_plugin_file", { - pluginId, - filePath: `locales/${lang}.json`, - }); - const translations = JSON.parse(raw) as Record; - i18n.load(lang, translations); - loadedPluginLocales.add(cacheKey); - } catch { - // Locale file absent or invalid — silently skip. - } - } -} - /** * Load all UI extension contributions from a plugin's pre-built IIFE bundle. * @@ -182,7 +156,7 @@ export const PluginSlotProvider = ({ children }: PluginSlotProviderProps) => { if (cancelled) break; try { const manifest = await invoke("get_plugin_manifest", { pluginId }); - await loadPluginTranslations(pluginId); + await loadPluginTranslations(pluginId, i18n.locale); const pluginContributions = await loadExternalPluginContributions(manifest); loaded.push(...pluginContributions); } catch (err) { diff --git a/src/hooks/usePluginApi.ts b/src/hooks/usePluginApi.ts index 9e206b48..d4a4f5e4 100644 --- a/src/hooks/usePluginApi.ts +++ b/src/hooks/usePluginApi.ts @@ -10,6 +10,7 @@ import { SettingsContext } from "../contexts/SettingsContext"; import { PluginModalContext } from "../contexts/PluginModalContext"; import type { PluginModalOptions } from "../contexts/PluginModalContext"; import { toErrorMessage } from "../utils/errors"; +import { translatePlugin } from "../i18n/pluginI18n"; /** * Hook for plugin components to execute read-only database queries. @@ -143,14 +144,21 @@ export function usePluginSetting(pluginId: string) { } /** - * Hook for plugin components to access their own translations. Returns a runtime - * translate function; the plugin's locale files are merged into the Lingui catalog - * by the loader before the component mounts. Keys are looked up verbatim as message - * ids, so plugins should namespace them (e.g. ".key"). + * Hook for plugin components to access their own translations. Returns a + * `PluginTranslator` — `(key, options?) => string` — with the same behaviour + * plugins have always relied on: keys are scoped to this plugin, missing keys + * fall back to the key itself, and `{{var}}` placeholders interpolate from + * `options`. The plugin's `locales/.json` is loaded by the host before the + * component mounts. Re-renders on locale change (reads the active Lingui locale). */ -export function usePluginTranslation(_pluginId: string) { +export function usePluginTranslation(pluginId: string) { const { i18n } = useLingui(); - return (id: string, values?: Record) => i18n._(id, values); + const locale = i18n.locale; + return useCallback( + (key: string, options?: Record) => + translatePlugin(pluginId, locale, key, options), + [pluginId, locale], + ); } /** diff --git a/src/i18n/pluginI18n.ts b/src/i18n/pluginI18n.ts new file mode 100644 index 00000000..d3675555 --- /dev/null +++ b/src/i18n/pluginI18n.ts @@ -0,0 +1,56 @@ +import { invoke } from "@tauri-apps/api/core"; + +/** + * Plugin translations are kept in a self-contained, i18next-compatible store — + * deliberately NOT routed through Lingui. This preserves the public plugin API + * contract (`PluginTranslator`, BC since the i18next era): short keys scoped per + * plugin (so two plugins may both ship "greeting"), `{{var}}` interpolation, and + * "return the key on miss". Plugin bundles are pre-built and never see the Lingui + * macro, so they rely on this runtime behaviour rather than the host catalog. + */ + +// pluginId -> lang -> (key -> translated string) +const store = new Map>>(); +// `${pluginId}:${lang}` we've already tried to load (success or not), so we don't refetch. +const attempted = new Set(); + +/** Load a plugin's locale bundle (current language + English fallback) into the store. */ +export async function loadPluginTranslations(pluginId: string, locale: string): Promise { + const langs = Array.from(new Set([locale?.split("-")[0], "en"])).filter(Boolean) as string[]; + for (const lang of langs) { + const cacheKey = `${pluginId}:${lang}`; + if (attempted.has(cacheKey)) continue; + attempted.add(cacheKey); + try { + const raw = await invoke("read_plugin_file", { + pluginId, + filePath: `locales/${lang}.json`, + }); + const translations = JSON.parse(raw) as Record; + if (!store.has(pluginId)) store.set(pluginId, new Map()); + store.get(pluginId)!.set(lang, translations); + } catch { + // Locale file absent or invalid — silently skip (English/key fallback applies). + } + } +} + +/** + * i18next-compatible lookup: current language → English fallback → the key itself. + * Interpolates both `{{var}}` (i18next, BC for existing plugins) and `{var}` (ICU, + * so new authors can write Lingui/ICU-style placeholders) from `options`. + */ +export function translatePlugin( + pluginId: string, + locale: string, + key: string, + options?: Record, +): string { + const lang = locale?.split("-")[0] ?? "en"; + const byLang = store.get(pluginId); + const raw = byLang?.get(lang)?.[key] ?? byLang?.get("en")?.[key] ?? key; + if (!options) return raw; + return raw + .replace(/\{\{\s*(\w+)\s*\}\}/g, (m, name) => (name in options ? String(options[name]) : m)) + .replace(/\{\s*(\w+)\s*\}/g, (m, name) => (name in options ? String(options[name]) : m)); +} diff --git a/tests/setup.ts b/tests/setup.ts index ba7c816c..19afbb7c 100644 --- a/tests/setup.ts +++ b/tests/setup.ts @@ -43,10 +43,9 @@ vi.mock("@tauri-apps/plugin-opener", () => ({ // `t` handles both the tagged-template macro (t`...${x}...`) and the descriptor // form (t({ message, context })); `i18n._` resolves a MessageDescriptor to its // message. Mirrors how the macros behave at runtime for source-text catalogs. -const linguiT = ( - strings: TemplateStringsArray | string | { message?: string; id?: string }, - ...values: unknown[] -): string => { +// Loosely typed: the macro `t` is called both as a tagged template and with a +// descriptor object, which TS can't narrow cleanly via Array.isArray here. +const linguiT = (strings: unknown, ...values: unknown[]): string => { if (Array.isArray(strings)) { return strings.reduce( (acc: string, s: string, i: number) => acc + s + (i < values.length ? String(values[i]) : ""), @@ -54,7 +53,8 @@ const linguiT = ( ); } if (typeof strings === "object" && strings !== null) { - return strings.message ?? strings.id ?? ""; + const d = strings as { message?: string; id?: string }; + return d.message ?? d.id ?? ""; } return String(strings); }; From 9c0fe062097e15b5c5f3074ad887f5cf46c59945 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 12:36:22 +0200 Subject: [PATCH 16/22] feat(create-plugin): scaffold Lingui i18n + fix dead --with-ui manifest New plugins generated with --with-ui now ship working i18n out of the box: - locales/en.json + de.json at the plugin root (host reads locales/.json), authored Lingui/ICU-style with {var} placeholders. - ui/src/index.tsx uses usePluginTranslation(pluginId) for its label + toast. - justfile dev-install copies locales/ into the installed plugin (all 3 OSes). - READMEs document the i18n workflow: ICU {var} for new keys, legacy {{var}} still supported, active-lang -> en -> key fallback. Also fixes a pre-existing bug that made --with-ui non-functional: scaffold.ts computed UI_EXTENSIONS_ENTRY but the manifest template never referenced it, so the built UI bundle was installed yet never declared -> the host never loaded it (nor its locales). The manifest now includes ui_extensions when --with-ui; the no-UI manifest stays unchanged. Smoke test asserts both the locales file and the manifest ui_extensions wiring. create-plugin unit tests green; scaffold verified for --with-ui and no-UI. --- packages/create-plugin/README.md | 18 +++++++++---- packages/create-plugin/scripts/smoke.ts | 15 +++++++++-- packages/create-plugin/src/scaffold.ts | 7 ++++- .../templates/rust-driver/justfile.tmpl | 9 +++++++ .../templates/rust-driver/manifest.json.tmpl | 2 +- .../ui-extension-locales/locales/de.json.tmpl | 4 +++ .../ui-extension-locales/locales/en.json.tmpl | 5 ++++ .../templates/ui-extension/README.md | 26 +++++++++++++++++++ .../templates/ui-extension/src/index.tsx.tmpl | 16 +++++++----- 9 files changed, 87 insertions(+), 15 deletions(-) create mode 100644 packages/create-plugin/templates/ui-extension-locales/locales/de.json.tmpl create mode 100644 packages/create-plugin/templates/ui-extension-locales/locales/en.json.tmpl diff --git a/packages/create-plugin/README.md b/packages/create-plugin/README.md index 69b769c6..7024fb61 100644 --- a/packages/create-plugin/README.md +++ b/packages/create-plugin/README.md @@ -92,13 +92,21 @@ my-driver/ With `--with-ui`: ``` -my-driver/ui/ -├── package.json -├── tsconfig.json -├── vite.config.ts -└── src/index.tsx # defineSlot("data-grid.toolbar.actions", …) +my-driver/ +├── locales/ +│ ├── en.json # plugin UI strings (Lingui/ICU `{var}` placeholders) +│ └── de.json # per-language overrides; missing keys fall back to en +└── ui/ + ├── package.json + ├── tsconfig.json + ├── vite.config.ts + └── src/index.tsx # defineSlot("data-grid.toolbar.actions", …) + usePluginTranslation ``` +The UI scaffold is wired for i18n out of the box: strings live in `locales/.json` +and are read via `usePluginTranslation(pluginId)`. The host runtime is Lingui — author +new keys ICU-style (`{var}`); legacy i18next `{{var}}` placeholders still work. + ## Requirements - Node 18.17 or newer. diff --git a/packages/create-plugin/scripts/smoke.ts b/packages/create-plugin/scripts/smoke.ts index 5b5112bf..c86f3822 100644 --- a/packages/create-plugin/scripts/smoke.ts +++ b/packages/create-plugin/scripts/smoke.ts @@ -11,7 +11,7 @@ */ import { execFileSync } from "node:child_process"; -import { existsSync, mkdtempSync, rmSync, statSync } from "node:fs"; +import { existsSync, mkdtempSync, readFileSync, rmSync, statSync } from "node:fs"; import { tmpdir } from "node:os"; import { dirname, join, resolve } from "node:path"; import { fileURLToPath } from "node:url"; @@ -45,12 +45,23 @@ function scaffoldOne(kind: "network" | "file", withUi: boolean): void { } if (withUi) { - for (const expected of ["ui/package.json", "ui/vite.config.ts", "ui/src/index.tsx"]) { + for (const expected of [ + "ui/package.json", + "ui/vite.config.ts", + "ui/src/index.tsx", + "locales/en.json", + ]) { const p = join(target, expected); if (!existsSync(p) || statSync(p).size === 0) { throw new Error(`missing or empty: ${p}`); } } + // The UI bundle must be declared in the manifest, or the host never loads it + // (and never reads the plugin's locales). + const manifest = JSON.parse(readFileSync(join(target, "manifest.json"), "utf8")); + if (!manifest.ui_extensions?.length) { + throw new Error("manifest.json is missing ui_extensions for a --with-ui scaffold"); + } } step(`cargo check ${label}`); diff --git a/packages/create-plugin/src/scaffold.ts b/packages/create-plugin/src/scaffold.ts index 998f86e1..3db76b4f 100644 --- a/packages/create-plugin/src/scaffold.ts +++ b/packages/create-plugin/src/scaffold.ts @@ -61,8 +61,10 @@ function buildVars(opts: ScaffoldOptions): Record { YEAR: String(new Date().getUTCFullYear()), PLUGIN_API_VERSION: opts.pluginApiVersion, MIN_TABULARIS_VERSION: opts.minTabularisVersion, + // Appended verbatim after the manifest's `data_types` array. Declares the UI + // bundle so the host actually loads it (and its locales); empty without --with-ui. UI_EXTENSIONS_ENTRY: opts.withUi - ? ` {\n "slot": "data-grid.toolbar.actions",\n "module": "ui/dist/index.js"\n }\n ` + ? `,\n "ui_extensions": [\n {\n "slot": "data-grid.toolbar.actions",\n "module": "ui/dist/index.js"\n }\n ]` : "", }; } @@ -124,6 +126,9 @@ export function scaffold(opts: ScaffoldOptions): void { if (opts.withUi) { copyTemplate("ui-extension", join(opts.targetDir, "ui"), vars); + // Plugin translations are read by the host from `/locales/.json` + // (project root, not the ui/ subworkspace), so seed them there. + copyTemplate("ui-extension-locales", opts.targetDir, vars); } if (opts.gitInit) { diff --git a/packages/create-plugin/templates/rust-driver/justfile.tmpl b/packages/create-plugin/templates/rust-driver/justfile.tmpl index e3c3f10f..1de9506c 100644 --- a/packages/create-plugin/templates/rust-driver/justfile.tmpl +++ b/packages/create-plugin/templates/rust-driver/justfile.tmpl @@ -66,6 +66,9 @@ dev-install: build mkdir -p ~/.local/share/tabularis/plugins/${ID}/ui/dist; \ cp ui/dist/index.js ~/.local/share/tabularis/plugins/${ID}/ui/dist/; \ fi + @if [ -d locales ]; then \ + cp -r locales ~/.local/share/tabularis/plugins/${ID}/; \ + fi @echo "Installed to ~/.local/share/tabularis/plugins/${ID}" @echo "Restart Tabularis (or toggle the plugin in Settings) to pick up changes." @@ -78,6 +81,9 @@ dev-install: build mkdir -p "$HOME/Library/Application Support/tabularis/plugins/${ID}/ui/dist"; \ cp ui/dist/index.js "$HOME/Library/Application Support/tabularis/plugins/${ID}/ui/dist/"; \ fi + @if [ -d locales ]; then \ + cp -r locales "$HOME/Library/Application Support/tabularis/plugins/${ID}/"; \ + fi @echo "Installed to ~/Library/Application Support/tabularis/plugins/${ID}" @echo "Restart Tabularis (or toggle the plugin in Settings) to pick up changes." @@ -91,6 +97,9 @@ dev-install: build New-Item -ItemType Directory -Force -Path (Join-Path $dest "ui\dist") | Out-Null Copy-Item "ui\dist\index.js" (Join-Path $dest "ui\dist") } + if (Test-Path "locales") { + Copy-Item -Recurse -Force "locales" $dest + } Write-Host "Installed to $dest" Write-Host "Restart Tabularis (or toggle the plugin in Settings) to pick up changes." diff --git a/packages/create-plugin/templates/rust-driver/manifest.json.tmpl b/packages/create-plugin/templates/rust-driver/manifest.json.tmpl index 14501aea..eedcb191 100644 --- a/packages/create-plugin/templates/rust-driver/manifest.json.tmpl +++ b/packages/create-plugin/templates/rust-driver/manifest.json.tmpl @@ -34,5 +34,5 @@ "requires_length": false, "requires_precision": false } - ] + ]${UI_EXTENSIONS_ENTRY} } diff --git a/packages/create-plugin/templates/ui-extension-locales/locales/de.json.tmpl b/packages/create-plugin/templates/ui-extension-locales/locales/de.json.tmpl new file mode 100644 index 00000000..b31a09a7 --- /dev/null +++ b/packages/create-plugin/templates/ui-extension-locales/locales/de.json.tmpl @@ -0,0 +1,4 @@ +{ + "toolbar.greeting": "Hallo von ${DISPLAY_NAME}! Aktive Tabelle: {table}", + "toolbar.noTable": "(keine)" +} diff --git a/packages/create-plugin/templates/ui-extension-locales/locales/en.json.tmpl b/packages/create-plugin/templates/ui-extension-locales/locales/en.json.tmpl new file mode 100644 index 00000000..de153db4 --- /dev/null +++ b/packages/create-plugin/templates/ui-extension-locales/locales/en.json.tmpl @@ -0,0 +1,5 @@ +{ + "toolbar.label": "${DISPLAY_NAME}", + "toolbar.greeting": "Hello from ${DISPLAY_NAME}! Active table: {table}", + "toolbar.noTable": "(none)" +} diff --git a/packages/create-plugin/templates/ui-extension/README.md b/packages/create-plugin/templates/ui-extension/README.md index ccea3709..fa8f4ee3 100644 --- a/packages/create-plugin/templates/ui-extension/README.md +++ b/packages/create-plugin/templates/ui-extension/README.md @@ -17,6 +17,32 @@ pnpm build - Types for the slot context, hooks, and the `defineSlot` helper come from [`@tabularis/plugin-api`](https://www.npmjs.com/package/@tabularis/plugin-api). - React, `react/jsx-runtime`, and `@tabularis/plugin-api` are Vite externals — the host injects them at load time, so nothing is double-bundled. +## Translations (i18n) + +The host runtime is [Lingui](https://lingui.dev/). Plugin strings live in +`../locales/.json` at the **plugin root** (not this `ui/` folder) — `just +dev-install` copies them next to `manifest.json`, and the host loads them +automatically. + +In components, call `usePluginTranslation(pluginId)`: + +```tsx +const t = usePluginTranslation(pluginId); +t("toolbar.label"); +t("toolbar.greeting", { table: context.tableName }); +``` + +Authoring rules: + +- **Author new keys Lingui/ICU-style** with single-brace `{var}` placeholders. +- Legacy i18next `{{var}}` placeholders still interpolate, for backwards + compatibility. +- Resolution order is **active language → English (`en.json`) → the key itself**, + so a missing translation degrades gracefully. + +`locales/en.json` is the source of truth; add `locales/de.json`, etc. for each +language you support (only the keys that differ — the rest fall back to English). + ## Adding more slots Slot names and their context shapes live in `@tabularis/plugin-api`'s `SlotContextMap` type. Pick another slot, call `defineSlot` a second time with a different target, and expose both components by splitting the entry into separate files (Vite's `lib.entry` can be an object of entries) or by registering multiple `ui_extensions` entries in `manifest.json` pointing at different built modules. diff --git a/packages/create-plugin/templates/ui-extension/src/index.tsx.tmpl b/packages/create-plugin/templates/ui-extension/src/index.tsx.tmpl index c8b73715..1f635a9b 100644 --- a/packages/create-plugin/templates/ui-extension/src/index.tsx.tmpl +++ b/packages/create-plugin/templates/ui-extension/src/index.tsx.tmpl @@ -4,18 +4,22 @@ // slot — you'll see the button in the top-right of any data grid view // when the active connection uses this driver. // +// Strings come from this plugin's `locales/.json` via +// `usePluginTranslation`. Author them Lingui/ICU-style — `{var}` placeholders — +// (the legacy i18next `{{var}}` form keeps working too). The host resolves the +// active language, falling back to English and then the key itself. +// // See the full slot list at: // https://github.com/TabularisDB/tabularis/blob/main/plugins/PLUGIN_GUIDE.md#available-slots -import { defineSlot, usePluginToast } from "@tabularis/plugin-api"; +import { defineSlot, usePluginToast, usePluginTranslation } from "@tabularis/plugin-api"; -const Toolbar = defineSlot("data-grid.toolbar.actions", ({ context }) => { +const Toolbar = defineSlot("data-grid.toolbar.actions", ({ context, pluginId }) => { const { showInfo } = usePluginToast(); + const t = usePluginTranslation(pluginId); const handleClick = () => { - showInfo( - "Hello from ${DISPLAY_NAME}! Active table: " + (context.tableName ?? "(none)"), - ); + showInfo(t("toolbar.greeting", { table: context.tableName ?? t("toolbar.noTable") })); }; return ( @@ -32,7 +36,7 @@ const Toolbar = defineSlot("data-grid.toolbar.actions", ({ context }) => { cursor: "pointer", }} > - ${DISPLAY_NAME} + {t("toolbar.label")} ); }); From ace3c34b48e90c980df75db213161a0eefa361e4 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 13:02:13 +0200 Subject: [PATCH 17/22] fix(i18n): split 12 same-namespace duplicate-English collisions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The context=top-level-namespace strategy could not distinguish two divergent keys that share both English text AND namespace, so they collapsed to one catalog entry and one (arbitrary) translation. Give each its full key as a distinct context so they stay separate. Examples now correct: - ja "View Definition": sidebar.viewDefinition ビュー定義 vs viewTriggerDefinition 定義を表示 - ru "Export Connections": exportTitle (noun) vs export (verb) - it "Installed": filterInstalled Installati vs installed Installato 24 call sites re-contexted; manifest split accordingly. Backfilled from the (git-restored, then re-removed) old locale json. Divergence audit: 0 collisions. extract --clean drops the now-orphaned namespace-context entries (1207->1205 real msgids). 0 unmatched across all 7 locales; build + 2584 tests green. --- scripts/i18n/manifest.json | 383 ++++++++++++------ src/components/layout/ExplorerSidebar.tsx | 10 +- .../layout/sidebar/SidebarDatabaseItem.tsx | 2 +- .../modals/CreateForeignKeyModal.tsx | 4 +- src/components/modals/CreateIndexModal.tsx | 4 +- src/components/modals/DumpDatabaseModal.tsx | 2 +- .../modals/PluginInstallErrorModal.tsx | 2 +- .../modals/PluginStartErrorModal.tsx | 2 +- src/components/modals/QuerySelectionModal.tsx | 2 +- src/components/modals/QuickNavigatorModal.tsx | 2 +- src/components/modals/TabSwitcherModal.tsx | 2 +- src/components/modals/ViewEditorModal.tsx | 4 +- .../visual-explain/ExplainNodeDetails.tsx | 2 +- .../visual-explain/ExplainSummaryBar.tsx | 2 +- .../visual-explain/ExplainTableView.tsx | 2 +- src/components/notebook/NotebookToolbar.tsx | 2 +- src/components/settings/PluginsTab.tsx | 6 +- .../ai-activity/AiActivitySessionsTab.tsx | 4 +- src/components/ui/ExplainPlanNode.tsx | 2 +- src/locales/de/messages.po | 88 +++- src/locales/de/messages.ts | 2 +- src/locales/en/messages.po | 88 +++- src/locales/en/messages.ts | 2 +- src/locales/es/messages.po | 90 +++- src/locales/es/messages.ts | 2 +- src/locales/fr/messages.po | 90 +++- src/locales/fr/messages.ts | 2 +- src/locales/it/messages.po | 90 +++- src/locales/it/messages.ts | 2 +- src/locales/ja/messages.po | 90 +++- src/locales/ja/messages.ts | 2 +- src/locales/ru/messages.po | 88 +++- src/locales/ru/messages.ts | 2 +- src/locales/zh/messages.po | 90 +++- src/locales/zh/messages.ts | 2 +- src/pages/Connections.tsx | 4 +- 36 files changed, 885 insertions(+), 288 deletions(-) diff --git a/scripts/i18n/manifest.json b/scripts/i18n/manifest.json index 43812409..0825622f 100644 --- a/scripts/i18n/manifest.json +++ b/scripts/i18n/manifest.json @@ -9,17 +9,6 @@ "groups.createError" ] }, - "Export Connections\u0004connections": { - "kind": "harmful", - "context": "connections", - "message": "Export Connections", - "stem": null, - "forms": null, - "originalKeys": [ - "connections.exportTitle", - "connections.export" - ] - }, "The exported file will contain your database and SSH passwords in plaintext. Please store it securely.": { "kind": "plain", "context": null, @@ -1994,17 +1983,6 @@ "editor.visualExplain.underEstimate" ] }, - "Table\u0004editor": { - "kind": "harmful", - "context": "editor", - "message": "Table", - "stem": null, - "forms": null, - "originalKeys": [ - "editor.visualExplain.relation", - "editor.visualExplain.tableView" - ] - }, "Est. Rows": { "kind": "plain", "context": null, @@ -4111,18 +4089,6 @@ "settings.plugins.overviewDesc" ] }, - "Installed\u0004settings": { - "kind": "harmful", - "context": "settings", - "message": "Installed", - "stem": null, - "forms": null, - "originalKeys": [ - "settings.plugins.installedMetric", - "settings.plugins.filterInstalled", - "settings.plugins.installed" - ] - }, "Enabled": { "kind": "plain", "context": null, @@ -4678,17 +4644,6 @@ "aiActivity.sort.started" ] }, - "Events\u0004aiActivity": { - "kind": "harmful", - "context": "aiActivity", - "message": "Events", - "stem": null, - "forms": null, - "originalKeys": [ - "aiActivity.sort.eventCount", - "aiActivity.events" - ] - }, "Run queries": { "kind": "plain", "context": null, @@ -5094,17 +5049,6 @@ "editor.notebook.runAllTooltip" ] }, - "Run All\u0004editor": { - "kind": "harmful", - "context": "editor", - "message": "Run All", - "stem": null, - "forms": null, - "originalKeys": [ - "editor.notebook.runAll", - "editor.querySelection.runAll" - ] - }, "Stop execution when a cell fails": { "kind": "plain", "context": null, @@ -5899,17 +5843,6 @@ "createFk.nameRequired" ] }, - "Create Foreign Key\u0004createFk": { - "kind": "harmful", - "context": "createFk", - "message": "Create Foreign Key", - "stem": null, - "forms": null, - "originalKeys": [ - "createFk.title", - "createFk.create" - ] - }, "SQLite does not support dropping FKs via ALTER TABLE.": { "kind": "plain", "context": null, @@ -6000,17 +5933,6 @@ "createIndex.colRequired" ] }, - "Create Index\u0004createIndex": { - "kind": "harmful", - "context": "createIndex", - "message": "Create Index", - "stem": null, - "forms": null, - "originalKeys": [ - "createIndex.title", - "createIndex.create" - ] - }, "Index Name": { "kind": "plain", "context": null, @@ -6215,17 +6137,6 @@ "dump.failure" ] }, - "Dump Database\u0004dump": { - "kind": "harmful", - "context": "dump", - "message": "Dump Database", - "stem": null, - "forms": null, - "originalKeys": [ - "dump.title", - "dump.dumpDatabase" - ] - }, "Structure (DDL)": { "kind": "plain", "context": null, @@ -7770,17 +7681,6 @@ "settings.plugins.installError.subtitle" ] }, - "Error Details\u0004settings": { - "kind": "harmful", - "context": "settings", - "message": "Error Details", - "stem": null, - "forms": null, - "originalKeys": [ - "settings.plugins.installError.details", - "settings.plugins.startError.details" - ] - }, "Copy": { "kind": "plain", "context": null, @@ -8076,17 +7976,6 @@ "editor.quickNavigator.navigationHint" ] }, - "Esc to close\u0004editor": { - "kind": "harmful", - "context": "editor", - "message": "Esc to close", - "stem": null, - "forms": null, - "originalKeys": [ - "editor.quickNavigator.escHint", - "editor.tabSwitcher.escHint" - ] - }, "Please fill in all required fields": { "kind": "plain", "context": null, @@ -8694,17 +8583,6 @@ "views.saveError" ] }, - "Create View\u0004views": { - "kind": "harmful", - "context": "views", - "message": "Create View", - "stem": null, - "forms": null, - "originalKeys": [ - "views.createView", - "views.create" - ] - }, "Edit View": { "kind": "plain", "context": null, @@ -10367,17 +10245,6 @@ "sidebar.failDropView" ] }, - "View Definition\u0004sidebar": { - "kind": "harmful", - "context": "sidebar", - "message": "View Definition", - "stem": null, - "forms": null, - "originalKeys": [ - "sidebar.viewDefinition", - "sidebar.viewTriggerDefinition" - ] - }, "Drop Trigger": { "kind": "plain", "context": null, @@ -12128,5 +11995,255 @@ "originalKeys": [ "dump.errorNoTables" ] + }, + "Export Connections\u0004connections.exportTitle": { + "kind": "harmful", + "context": "connections.exportTitle", + "message": "Export Connections", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.exportTitle" + ] + }, + "Export Connections\u0004connections.export": { + "kind": "harmful", + "context": "connections.export", + "message": "Export Connections", + "stem": null, + "forms": null, + "originalKeys": [ + "connections.export" + ] + }, + "Table\u0004editor.visualExplain.relation": { + "kind": "harmful", + "context": "editor.visualExplain.relation", + "message": "Table", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.relation" + ] + }, + "Table\u0004editor.visualExplain.tableView": { + "kind": "harmful", + "context": "editor.visualExplain.tableView", + "message": "Table", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.visualExplain.tableView" + ] + }, + "Installed\u0004settings.plugins.installedMetric": { + "kind": "harmful", + "context": "settings.plugins.installedMetric", + "message": "Installed", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.installedMetric" + ] + }, + "Installed\u0004settings.plugins.filterInstalled": { + "kind": "harmful", + "context": "settings.plugins.filterInstalled", + "message": "Installed", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.filterInstalled" + ] + }, + "Installed\u0004settings.plugins.installed": { + "kind": "harmful", + "context": "settings.plugins.installed", + "message": "Installed", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.installed" + ] + }, + "Events\u0004aiActivity.sort.eventCount": { + "kind": "harmful", + "context": "aiActivity.sort.eventCount", + "message": "Events", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.sort.eventCount" + ] + }, + "Events\u0004aiActivity.events": { + "kind": "harmful", + "context": "aiActivity.events", + "message": "Events", + "stem": null, + "forms": null, + "originalKeys": [ + "aiActivity.events" + ] + }, + "Run All\u0004editor.notebook.runAll": { + "kind": "harmful", + "context": "editor.notebook.runAll", + "message": "Run All", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.notebook.runAll" + ] + }, + "Run All\u0004editor.querySelection.runAll": { + "kind": "harmful", + "context": "editor.querySelection.runAll", + "message": "Run All", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.querySelection.runAll" + ] + }, + "Create Foreign Key\u0004createFk.title": { + "kind": "harmful", + "context": "createFk.title", + "message": "Create Foreign Key", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.title" + ] + }, + "Create Foreign Key\u0004createFk.create": { + "kind": "harmful", + "context": "createFk.create", + "message": "Create Foreign Key", + "stem": null, + "forms": null, + "originalKeys": [ + "createFk.create" + ] + }, + "Create Index\u0004createIndex.title": { + "kind": "harmful", + "context": "createIndex.title", + "message": "Create Index", + "stem": null, + "forms": null, + "originalKeys": [ + "createIndex.title" + ] + }, + "Create Index\u0004createIndex.create": { + "kind": "harmful", + "context": "createIndex.create", + "message": "Create Index", + "stem": null, + "forms": null, + "originalKeys": [ + "createIndex.create" + ] + }, + "Dump Database\u0004dump.title": { + "kind": "harmful", + "context": "dump.title", + "message": "Dump Database", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.title" + ] + }, + "Dump Database\u0004dump.dumpDatabase": { + "kind": "harmful", + "context": "dump.dumpDatabase", + "message": "Dump Database", + "stem": null, + "forms": null, + "originalKeys": [ + "dump.dumpDatabase" + ] + }, + "Error Details\u0004settings.plugins.installError.details": { + "kind": "harmful", + "context": "settings.plugins.installError.details", + "message": "Error Details", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.installError.details" + ] + }, + "Error Details\u0004settings.plugins.startError.details": { + "kind": "harmful", + "context": "settings.plugins.startError.details", + "message": "Error Details", + "stem": null, + "forms": null, + "originalKeys": [ + "settings.plugins.startError.details" + ] + }, + "Esc to close\u0004editor.quickNavigator.escHint": { + "kind": "harmful", + "context": "editor.quickNavigator.escHint", + "message": "Esc to close", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.quickNavigator.escHint" + ] + }, + "Esc to close\u0004editor.tabSwitcher.escHint": { + "kind": "harmful", + "context": "editor.tabSwitcher.escHint", + "message": "Esc to close", + "stem": null, + "forms": null, + "originalKeys": [ + "editor.tabSwitcher.escHint" + ] + }, + "Create View\u0004views.createView": { + "kind": "harmful", + "context": "views.createView", + "message": "Create View", + "stem": null, + "forms": null, + "originalKeys": [ + "views.createView" + ] + }, + "Create View\u0004views.create": { + "kind": "harmful", + "context": "views.create", + "message": "Create View", + "stem": null, + "forms": null, + "originalKeys": [ + "views.create" + ] + }, + "View Definition\u0004sidebar.viewDefinition": { + "kind": "harmful", + "context": "sidebar.viewDefinition", + "message": "View Definition", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.viewDefinition" + ] + }, + "View Definition\u0004sidebar.viewTriggerDefinition": { + "kind": "harmful", + "context": "sidebar.viewTriggerDefinition", + "message": "View Definition", + "stem": null, + "forms": null, + "originalKeys": [ + "sidebar.viewTriggerDefinition" + ] } } diff --git a/src/components/layout/ExplorerSidebar.tsx b/src/components/layout/ExplorerSidebar.tsx index f15c8a74..70116a9b 100644 --- a/src/components/layout/ExplorerSidebar.tsx +++ b/src/components/layout/ExplorerSidebar.tsx @@ -550,7 +550,7 @@ This may overwrite existing data.`, className="w-full flex items-center gap-3 px-3 py-2 text-sm text-secondary hover:bg-surface-secondary hover:text-primary transition-colors text-left whitespace-nowrap" > - {t({ message: "Dump Database", context: "dump" })} + {t({ message: "Dump Database", context: "dump.dumpDatabase" })} @@ -1995,7 +1995,7 @@ This may overwrite existing data.`, : contextMenu.type === "routine" ? [ { - label: t({ message: "View Definition", context: "sidebar" }), + label: t({ message: "View Definition", context: "sidebar.viewDefinition" }), icon: FileText, action: async () => { try { @@ -2033,7 +2033,7 @@ This may overwrite existing data.`, const triggerSchema = triggerData?.schema ?? activeSchema ?? undefined; return [ { - label: t({ message: "View Definition", context: "sidebar" }), + label: t({ message: "View Definition", context: "sidebar.viewTriggerDefinition" }), icon: FileText, action: async () => { try { @@ -2115,7 +2115,7 @@ This may overwrite existing data.`, action: () => handleImportDatabase(contextMenu.id), }, { - label: t({ message: "Dump Database", context: "dump" }), + label: t({ message: "Dump Database", context: "dump.dumpDatabase" }), icon: Download, action: () => setDumpModal({ database: contextMenu.id }), }, diff --git a/src/components/layout/sidebar/SidebarDatabaseItem.tsx b/src/components/layout/sidebar/SidebarDatabaseItem.tsx index d6f562f9..0385d368 100644 --- a/src/components/layout/sidebar/SidebarDatabaseItem.tsx +++ b/src/components/layout/sidebar/SidebarDatabaseItem.tsx @@ -203,7 +203,7 @@ export const SidebarDatabaseItem = ({ diff --git a/src/components/modals/CreateForeignKeyModal.tsx b/src/components/modals/CreateForeignKeyModal.tsx index 35d5facc..3d1414d4 100644 --- a/src/components/modals/CreateForeignKeyModal.tsx +++ b/src/components/modals/CreateForeignKeyModal.tsx @@ -178,7 +178,7 @@ export const CreateForeignKeyModal = ({
-

{t({ message: "Create Foreign Key", context: "createFk" })}

+

{t({ message: "Create Foreign Key", context: "createFk.title" })}

{tableName}

@@ -276,7 +276,7 @@ export const CreateForeignKeyModal = ({ className="bg-blue-600 hover:bg-blue-500 disabled:opacity-50 disabled:cursor-not-allowed text-white px-6 py-2 rounded-lg font-medium text-sm flex items-center gap-2 shadow-lg shadow-blue-900/20 transition-all" > {loading && } - {t({ message: "Create Foreign Key", context: "createFk" })} + {t({ message: "Create Foreign Key", context: "createFk.create" })} diff --git a/src/components/modals/CreateIndexModal.tsx b/src/components/modals/CreateIndexModal.tsx index abfb8379..5e7bede1 100644 --- a/src/components/modals/CreateIndexModal.tsx +++ b/src/components/modals/CreateIndexModal.tsx @@ -127,7 +127,7 @@ export const CreateIndexModal = ({
-

{t({ message: "Create Index", context: "createIndex" })}

+

{t({ message: "Create Index", context: "createIndex.title" })}

{tableName}

@@ -212,7 +212,7 @@ export const CreateIndexModal = ({ className="bg-blue-600 hover:bg-blue-500 disabled:opacity-50 disabled:cursor-not-allowed text-white px-6 py-2 rounded-lg font-medium text-sm flex items-center gap-2 shadow-lg shadow-blue-900/20 transition-all" > {loading && } - {t({ message: "Create Index", context: "createIndex" })} + {t({ message: "Create Index", context: "createIndex.create" })} diff --git a/src/components/modals/DumpDatabaseModal.tsx b/src/components/modals/DumpDatabaseModal.tsx index c53c8925..50f4fabd 100644 --- a/src/components/modals/DumpDatabaseModal.tsx +++ b/src/components/modals/DumpDatabaseModal.tsx @@ -135,7 +135,7 @@ export const DumpDatabaseModal = ({

- {t({ message: "Dump Database", context: "dump" })} - {databaseName} + {t({ message: "Dump Database", context: "dump.title" })} - {databaseName}

diff --git a/src/components/modals/PluginInstallErrorModal.tsx b/src/components/modals/PluginInstallErrorModal.tsx index aa62ed0d..f40f5953 100644 --- a/src/components/modals/PluginInstallErrorModal.tsx +++ b/src/components/modals/PluginInstallErrorModal.tsx @@ -56,7 +56,7 @@ export const PluginInstallErrorModal = ({
- {t({ message: "Error Details", context: "settings" })} + {t({ message: "Error Details", context: "settings.plugins.installError.details" })}
diff --git a/src/components/modals/TabSwitcherModal.tsx b/src/components/modals/TabSwitcherModal.tsx index f892edca..0121b155 100644 --- a/src/components/modals/TabSwitcherModal.tsx +++ b/src/components/modals/TabSwitcherModal.tsx @@ -95,7 +95,7 @@ export const TabSwitcherModal = ({ {/* Footer */}
{plural(tabs.length, { one: "# tab", other: "# tabs" })} - {t({ message: "Esc to close", context: "editor" })} + {t({ message: "Esc to close", context: "editor.tabSwitcher.escHint" })}
diff --git a/src/components/modals/ViewEditorModal.tsx b/src/components/modals/ViewEditorModal.tsx index 0e9cab02..3aca32b7 100644 --- a/src/components/modals/ViewEditorModal.tsx +++ b/src/components/modals/ViewEditorModal.tsx @@ -169,7 +169,7 @@ export const ViewEditorModal = ({

- {isNewView ? t({ message: "Create View", context: "views" }) : t`Edit View`} + {isNewView ? t({ message: "Create View", context: "views.createView" }) : t`Edit View`}

{isNewView @@ -315,7 +315,7 @@ export const ViewEditorModal = ({ className="px-4 py-2 bg-blue-600 hover:bg-blue-500 disabled:opacity-50 text-white rounded-lg text-sm font-medium transition-colors flex items-center gap-2" > {saving && } - {isNewView ? t({ message: "Create View", context: "views" }) : t`Save Changes`} + {isNewView ? t({ message: "Create View", context: "views.create" }) : t`Save Changes`}

diff --git a/src/components/modals/visual-explain/ExplainNodeDetails.tsx b/src/components/modals/visual-explain/ExplainNodeDetails.tsx index 833dc786..3f12a8b5 100644 --- a/src/components/modals/visual-explain/ExplainNodeDetails.tsx +++ b/src/components/modals/visual-explain/ExplainNodeDetails.tsx @@ -24,7 +24,7 @@ export function ExplainNodeDetails({ const generalEntries: [string, string][] = [ [t`Operation`, node.node_type], ...(node.relation - ? [[t({ message: "Table", context: "editor" }), node.relation] as [string, string]] + ? [[t({ message: "Table", context: "editor.visualExplain.relation" }), node.relation] as [string, string]] : []), ...(node.startup_cost != null && node.total_cost != null ? [ diff --git a/src/components/modals/visual-explain/ExplainSummaryBar.tsx b/src/components/modals/visual-explain/ExplainSummaryBar.tsx index 4235027d..992da9e2 100644 --- a/src/components/modals/visual-explain/ExplainSummaryBar.tsx +++ b/src/components/modals/visual-explain/ExplainSummaryBar.tsx @@ -80,7 +80,7 @@ export const ExplainSummaryBar = memo( className={toggleButtonClass("table")} > - {t({ message: "Table", context: "editor" })} + {t({ message: "Table", context: "editor.visualExplain.tableView" })}
+ - {t("taskManager.pluginProcesses.colPid")} + {t`PID`} - + + - {t("taskManager.pluginProcesses.colDiskRw")} + {t`Disk R/W`} + - {t("taskManager.pluginProcesses.colActions")} + {t({ message: "Actions", context: "taskManager" })}
- {t({ message: "Table", context: "editor" })} + {t({ message: "Table", context: "editor.visualExplain.relation" })} {t`Cost`} diff --git a/src/components/notebook/NotebookToolbar.tsx b/src/components/notebook/NotebookToolbar.tsx index 7c113fc4..6aef1bc8 100644 --- a/src/components/notebook/NotebookToolbar.tsx +++ b/src/components/notebook/NotebookToolbar.tsx @@ -180,7 +180,7 @@ export function NotebookToolbar({ )} - {t({ message: "Run All", context: "editor" })} + {t({ message: "Run All", context: "editor.notebook.runAll" })} diff --git a/src/components/settings/PluginsTab.tsx b/src/components/settings/PluginsTab.tsx index 34908e90..b1003064 100644 --- a/src/components/settings/PluginsTab.tsx +++ b/src/components/settings/PluginsTab.tsx @@ -730,7 +730,7 @@ export function PluginsTab({ } value={installedPlugins.length} - label={t({ message: "Installed", context: "settings" })} + label={t({ message: "Installed", context: "settings.plugins.installedMetric" })} colorClass="text-green-400" bgClass="bg-green-500/10" /> @@ -804,7 +804,7 @@ export function PluginsTab({ }, { id: "installed" as const, - label: t({ message: "Installed", context: "settings" }), + label: t({ message: "Installed", context: "settings.plugins.filterInstalled" }), count: allDrivers.length + installedPlugins.filter( @@ -1125,7 +1125,7 @@ export function PluginsTab({ : "bg-green-500/10 text-green-400 border-green-500/25", )} > - {t({ message: "Installed", context: "settings" })} v + {t({ message: "Installed", context: "settings.plugins.installed" })} v {plugin.installed_version} ) : undefined; diff --git a/src/components/settings/ai-activity/AiActivitySessionsTab.tsx b/src/components/settings/ai-activity/AiActivitySessionsTab.tsx index 1ec6f87a..060793f5 100644 --- a/src/components/settings/ai-activity/AiActivitySessionsTab.tsx +++ b/src/components/settings/ai-activity/AiActivitySessionsTab.tsx @@ -45,7 +45,7 @@ export function AiActivitySessionsTab() { const sortOptions: SessionSortField[] = ["started", "events", "runQueries"]; const sortLabels: Record = { started: t`Started`, - events: t({ message: "Events", context: "aiActivity" }), + events: t({ message: "Events", context: "aiActivity.sort.eventCount" }), runQueries: t`Run queries`, }; @@ -209,7 +209,7 @@ function SessionCard({ session, expanded, onToggle }: SessionCardProps) {
- {t({ message: "Events", context: "aiActivity" })}: {session.eventCount} + {t({ message: "Events", context: "aiActivity.events" })}: {session.eventCount} {t`Queries`}: {session.runQueryCount} diff --git a/src/components/ui/ExplainPlanNode.tsx b/src/components/ui/ExplainPlanNode.tsx index 9490eb82..e314235c 100644 --- a/src/components/ui/ExplainPlanNode.tsx +++ b/src/components/ui/ExplainPlanNode.tsx @@ -55,7 +55,7 @@ export const ExplainPlanNodeComponent = memo(
{node.node_type}
{node.relation && (
- {t({ message: "Table", context: "editor" })}: {node.relation} + {t({ message: "Table", context: "editor.visualExplain.relation" })}: {node.relation}
)}
diff --git a/src/locales/de/messages.po b/src/locales/de/messages.po index 826f6f07..1dfb67ef 100644 --- a/src/locales/de/messages.po +++ b/src/locales/de/messages.po @@ -1207,12 +1207,22 @@ msgid "Create a new database view" msgstr "Neue Datenbankansicht erstellen" #: src/components/modals/CreateForeignKeyModal.tsx -msgctxt "createFk" +msgctxt "createFk.create" msgid "Create Foreign Key" msgstr "Fremdschlüssel erstellen" +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk.title" +msgid "Create Foreign Key" +msgstr "Fremdschlüssel erstellen" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex.create" +msgid "Create Index" +msgstr "Index erstellen" + #: src/components/modals/CreateIndexModal.tsx -msgctxt "createIndex" +msgctxt "createIndex.title" msgid "Create Index" msgstr "Index erstellen" @@ -1258,7 +1268,12 @@ msgid "Create Trigger" msgstr "" #: src/components/modals/ViewEditorModal.tsx -msgctxt "views" +msgctxt "views.create" +msgid "Create View" +msgstr "Ansicht erstellen" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views.createView" msgid "Create View" msgstr "Ansicht erstellen" @@ -1639,8 +1654,12 @@ msgstr "Ansicht löschen" #: src/components/layout/ExplorerSidebar.tsx #: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgctxt "dump.dumpDatabase" +msgid "Dump Database" +msgstr "Datenbank sichern" + #: src/components/modals/DumpDatabaseModal.tsx -msgctxt "dump" +msgctxt "dump.title" msgid "Dump Database" msgstr "Datenbank sichern" @@ -1904,14 +1923,22 @@ msgid "Error" msgstr "Fehler" #: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings.plugins.installError.details" +msgid "Error Details" +msgstr "Fehlerdetails" + #: src/components/modals/PluginStartErrorModal.tsx -msgctxt "settings" +msgctxt "settings.plugins.startError.details" msgid "Error Details" msgstr "Fehlerdetails" #: src/components/modals/QuickNavigatorModal.tsx +msgctxt "editor.quickNavigator.escHint" +msgid "Esc to close" +msgstr "Esc zum Schließen" + #: src/components/modals/TabSwitcherModal.tsx -msgctxt "editor" +msgctxt "editor.tabSwitcher.escHint" msgid "Esc to close" msgstr "Esc zum Schließen" @@ -1941,7 +1968,12 @@ msgid "Events" msgstr "Ereignisse" #: src/components/settings/ai-activity/AiActivitySessionsTab.tsx -msgctxt "aiActivity" +msgctxt "aiActivity.events" +msgid "Events" +msgstr "Ereignisse" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity.sort.eventCount" msgid "Events" msgstr "Ereignisse" @@ -2074,7 +2106,12 @@ msgid "Export as Notebook" msgstr "Als Notebook exportieren" #: src/pages/Connections.tsx -msgctxt "connections" +msgctxt "connections.export" +msgid "Export Connections" +msgstr "Verbindungen exportieren" + +#: src/pages/Connections.tsx +msgctxt "connections.exportTitle" msgid "Export Connections" msgstr "Verbindungen exportieren" @@ -2639,7 +2676,17 @@ msgid "Installed" msgstr "Installiert" #: src/components/settings/PluginsTab.tsx -msgctxt "settings" +msgctxt "settings.plugins.filterInstalled" +msgid "Installed" +msgstr "Installiert" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installed" +msgid "Installed" +msgstr "Installiert" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installedMetric" msgid "Installed" msgstr "Installiert" @@ -4005,9 +4052,13 @@ msgstr "Zeilen werden an eine bestehende Tabelle angehängt" msgid "Run" msgstr "Ausführen" -#: src/components/modals/QuerySelectionModal.tsx #: src/components/notebook/NotebookToolbar.tsx -msgctxt "editor" +msgctxt "editor.notebook.runAll" +msgid "Run All" +msgstr "Alle ausführen" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor.querySelection.runAll" msgid "Run All" msgstr "Alle ausführen" @@ -4736,10 +4787,14 @@ msgid "table" msgstr "Tabelle" #: src/components/modals/visual-explain/ExplainNodeDetails.tsx -#: src/components/modals/visual-explain/ExplainSummaryBar.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx -msgctxt "editor" +msgctxt "editor.visualExplain.relation" +msgid "Table" +msgstr "Tabelle" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgctxt "editor.visualExplain.tableView" msgid "Table" msgstr "Tabelle" @@ -5188,10 +5243,15 @@ msgid "View created successfully" msgstr "Ansicht erfolgreich erstellt" #: src/components/layout/ExplorerSidebar.tsx -msgctxt "sidebar" +msgctxt "sidebar.viewDefinition" msgid "View Definition" msgstr "Ansichtsdefinition" +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar.viewTriggerDefinition" +msgid "View Definition" +msgstr "" + #: src/components/modals/ViewEditorModal.tsx msgid "View Definition (SQL)" msgstr "Ansichtsdefinition (SQL)" diff --git a/src/locales/de/messages.ts b/src/locales/de/messages.ts index 7d9e021b..0ae804ab 100644 --- a/src/locales/de/messages.ts +++ b/src/locales/de/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Maximale Verlaufseinträge\"],\"-6AWa-\":[\"Verbindungen importieren\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Trennen\"],\"-PLZfh\":[\"Aktualisierung der Modelle fehlgeschlagen\"],\"-T5W2e\":[\"Treiberhinweise\"],\"-ZgeeE\":[\"Bearbeitungsverlauf\"],\"-aYrdc\":[\"Version \",[\"0\"],\" ist verfügbar\"],\"-fBGXl\":[\"Höchste Kosten\"],\"-jIQDz\":[\"Zelle einklappen\"],\"-u1eRo\":[\"Keine Datenbank\"],\"-yoeVU\":[\"Schema wird geladen...\"],\"-zy2Nq\":[\"Typ\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"Freigabe-ID\"],\"0E5-gF\":[\"Möchtest du diese Verbindung wirklich löschen?\"],\"0HCubq\":[\"Vergrößern\"],\"0Kmdvy\":[\"Benutzerdefinierte Schrift\"],\"0Nj13E\":[\"SQL generieren\"],\"0ROgz5\":[\"JSON eingeben...\"],\"0SY9sU\":[\"Trennen von der Datenbank fehlgeschlagen\"],\"0b3kL9\":[\"Datenbank auswählen\"],\"0caMy7\":[\"Verlauf\"],\"0mx5ow\":[\"Abfrage\"],\"0n9BtL\":[\"Vorschau\"],\"0pHB9N\":[\"Als table.column kopieren\"],\"0sQzZK\":[\"Datenbanken filtern...\"],\"0uPP9X\":[\"FK-Name (optional)\"],\"0wxuek\":[\"Aktuelle Version\"],\"0x09Aw\":[\"Bei Fehler stoppen umgeschaltet\"],\"0yBP6v\":[\"Entwicklung unterstützen\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen\"],\"other\":[\"#\",\" Zeilen\"]}]],\"0yVAoD\":[\"Zeilen zählen\"],\"0zxJ87\":[\"Keine Logs verfügbar\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Ansicht bearbeiten\"],\"11fGJ6\":[\"Abfragen\"],\"13hIUA\":[[\"0\"],\" API-Schlüssel\"],\"14qNWF\":[\"SSH-Verbindung auswählen\"],\"17qHRP\":[\"Neue Verbindung\"],\"1Dn6bg\":[\"Aus Zwischenablage importieren\"],\"1Dnd0I\":[\"Zeilenanzahl laden\"],\"1FjTLW\":[\"z. B. python3\"],\"1GOvbo\":[\"Ollama verbunden (\",[\"0\"],\" Modelle gefunden)\"],\"1I6UoR\":[\"Ansichten\"],\"1U7hS5\":[\"Länge\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Editor-Schriftfamilie\"],\"1ekzlY\":[\"Plugin-Prozesse\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Themaauswahl\"],\"1xVZkL\":[\"Keine Modelle gefunden\"],\"26Joci\":[[\"0\"],\" Zeilen abgerufen\"],\"2Bf-Qe\":[\"Neue Konsole\"],\"2CrSmP\":[\"Hilf tabularis zu wachsen\"],\"2D9F8_\":[\"Duplizieren der Verbindung fehlgeschlagen\"],\"2Eoi_a\":[\"Details anzeigen\"],\"2F4pE5\":[\"Rust-Build und Tests\"],\"2Fsd9r\":[\"Diesen Monat\"],\"2JzKXI\":[\"GENERATED setzen\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Alle auswählen\"],\"2SO5RM\":[\"Kubernetes ist für diesen Treiber nicht verfügbar.\"],\"2Uh5GA\":[\"Cargo-Ökosystem\"],\"2YylFp\":[\"Neue visuelle Abfrage\"],\"2luuSG\":[\"Erneut versuchen\"],\"2wxgft\":[\"Umbenennen\"],\"2yG2GC\":[\"Pausiert Schreibvorgänge (oder jede Abfrage) und fragt den Nutzer vor der Ausführung.\"],\"30-b5r\":[\"Löschen\"],\"31kwdN\":[\"Filter duplizieren\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Alle Tools\"],\"3Am5DS\":[\"Tab-Ansicht\"],\"3BhBCj\":[\"Ereignisse\"],\"3FVg9_\":[\"Lokale Spalte\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Ausführen\"],\"3L0HCz\":[\"Keine Plugins entsprechen der Suche.\"],\"3Nv3JV\":[\"Abfrage wird ausgeführt...\"],\"3TSz9S\":[\"Minimieren\"],\"3UW8fG\":[\"Updates werden von \",[\"0\"],\" verwaltet\"],\"3YvS-c\":[\"Neuer Tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook-Zellnamen-Prompt\"],\"3qkggm\":[\"Vollbild\"],\"3rBJ1T\":[\"Schema anzeigen\"],\"3xZ-xV\":[\"Aktuellen Zeitstempel einfügen\"],\"40Gx0U\":[\"Zeitzone\"],\"41GP4f\":[\"Wähle das Standard-Trennzeichen für das Kopieren oder Exportieren von Zeilen als CSV.\"],\"42iaEi\":[\"PostgreSQL ohne ANALYZE zeigt nur Schätzungen des Planners.\"],\"44cXI8\":[\"Nach \",[\"colName\"],\" ASC sortieren\"],\"4AF7FO\":[\"Datenbanken verwalten\"],\"4CK17g\":[\"Möchtest du die Ansicht \\\"\",[\"name\"],\"\\\" wirklich ändern?\"],\"4DDaw-\":[\"Wähle mindestens eine Datenbank aus\"],\"4D_Nvt\":[\"Erstellen der Gruppe fehlgeschlagen\"],\"4RiR6c\":[\"Als HTML exportieren\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Kindprozess\"],\"other\":[\"#\",\" Kindprozesse\"]}]],\"4VyuY3\":[\"Möchtest du wirklich alle Logs löschen?\"],\"4WWqS3\":[\"JSON-Baum ein-/ausklappen\"],\"4cEClj\":[\"Sitzungen\"],\"4cmfYp\":[\"Zeile duplizieren\"],\"4lIZTB\":[\"Frontend-Entwicklungsabhängigkeiten\"],\"4oYjvJ\":[\"In Abfrage suchen…\"],\"4tMxW4\":[\"Verknüpften Datensatz anzeigen\"],\"4yJcjm\":[\"Typ auswählen...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Filterpanel schließen (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Semikolon (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Ereignis\"],\"other\":[\"#\",\" Ereignisse\"]}]],\"5I2fxu\":[\"/pfad/zu/id_rsa\"],\"5NZpX8\":[\"Listenansicht\"],\"5To6Z6\":[\"Abfrage kopieren\"],\"5gqNQl\":[\"Rasteransicht\"],\"5igIzr\":[\"Import abgebrochen\"],\"5nTIup\":[\"Ansicht wird bearbeitet: \",[\"name\"]],\"66bEht\":[\"Projektstatus\"],\"6PIJVc\":[\"Start\"],\"6QvP0l\":[\"Als JSON exportieren\"],\"6W41Xq\":[\"Task-Manager\"],\"6WngBH\":[\"NULL setzen\"],\"6YtxFj\":[\"Name\"],\"6_dCYd\":[\"Übersicht\"],\"6gvoHP\":[\"Fehlermeldung kopieren\"],\"6oCVzX\":[\"Der Kubernetes-Kontext ist erforderlich\"],\"6wQO0f\":[\"Daten anzeigen\"],\"6z9W13\":[\"Neu starten\"],\"71agNy\":[\"Namen für unbenannte Zellen mit KI generieren\"],\"74J3FG\":[\"Erste Version\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Verstanden\"],\"77nSMU\":[\"Den gesamten KI-Aktivitätsverlauf löschen? Unwiderruflich.\"],\"79UVYW\":[\"Esc zum Schließen\"],\"7ABmyQ\":[\"Erneut versuchen\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" von \",[\"0\"],\" aktiv\"],\"7E864M\":[\"Datenbanktyp\"],\"7FqaG1\":[\"Passe die Anweisungen für die KI-Analyse von EXPLAIN-Abfrageplänen an. Verwende \",[\"LANGUAGE\"],\" für die Ausgabesprache.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Gemischte Typen erkannt, Standard TEXT\"],\"7RSQQd\":[\"Passwörter im Keychain speichern\"],\"7VpPHA\":[\"Bestätigen\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fehlgeschlagen\"],\"7sMeHQ\":[\"Schlüssel\"],\"7sNhEz\":[\"Benutzername\"],\"7tATh2\":[\"Abfrage ausführen\"],\"7yb4gk\":[\"Fehlgeschlagen: \"],\"8-4V8D\":[\"Tabellen\"],\"82G-l5\":[\"Das Model Context Protocol (MCP) ermöglicht KI-Assistenten (wie Claude), sich mit deinen lokalen Tools zu verbinden. Tabularis stellt einen MCP-Server bereit, über den KI dein Datenbankschema lesen und Abfragen sicher ausführen kann.\"],\"83VjWE\":[\"Neues Notebook\"],\"86IgoU\":[\"Abfrage ausführen (im Editor)\"],\"86fCgf\":[\"Passe die Anweisungen für die KI-Namensgenerierung von Abfrage-Ergebnis-Tabs an. Die SQL-Abfrage wird als Benutzernachricht gesendet.\"],\"87a_t_\":[\"Beschriftung\"],\"8CWirf\":[\"MCP-Server\"],\"8S8aIX\":[\"Verbindungszustandsprüfung\"],\"8TMaZI\":[\"Zeitstempel\"],\"8Tg_JR\":[\"Benutzerdefiniert\"],\"8UFKYr\":[\"Abfrage zum Ausführen auswählen\"],\"8VKSGV\":[\"SQL generieren\"],\"8Wjy6z\":[\"Tabs links schließen\"],\"8ZsakT\":[\"Passwort\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL-Editor\"],\"8bRgTe\":[\"KI-Anbieter nicht konfiguriert. Bitte gehe zu Einstellungen > KI.\"],\"8c_W0h\":[\"Ältere Versionen\"],\"8guEQP\":[\"Ansichten aktualisieren\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN ist leichtgewichtig und hauptsächlich strukturell.\"],\"8q_sOc\":[\"Entfernen\"],\"8t-akp\":[\"erste \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Verbindungsname\"],\"91gnWY\":[\"Logs exportieren\"],\"91rtHL\":[\"Neue Ansicht erstellen\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Neue Gruppe\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Ansicht erfolgreich aktualisiert\"],\"9NzDFn\":[\"Willkommensbildschirm beim Start der Anwendung anzeigen.\"],\"9OoUS3\":[\"Neue SSH-Verbindung erstellen\"],\"9QGRD5\":[\"Zielspalte\"],\"9QTny9\":[\"Abfrage fehlgeschlagen.\"],\"9S-fyV\":[\"Vorab-Ausführungsplan\"],\"9SJ_Sx\":[\"Systemressourcen\"],\"9UQ730\":[\"Klonen\"],\"9X6cky\":[\"NEIN\"],\"9XUV5V\":[\"Keine Daten in der Zwischenablage\"],\"9mMU1R\":[\"Zeit\"],\"9mvFo_\":[\"Zeit\"],\"9npOH9\":[\"Datei öffnen\"],\"9uI_rE\":[\"Rückgängig\"],\"9xUjzm\":[\"Alle auswählen\"],\"9y_02p\":[\"Mit der Community chatten, Hilfe bekommen, Features vorschlagen\"],\"A1pPcI\":[\"SSH-Host\"],\"A1taO8\":[\"Suchen\"],\"A6C0pv\":[\"Gesamtkosten\"],\"A7WG0p\":[\"Plugin deaktiviert\"],\"A7yRz3\":[\"Ansichtsdefinition ist erforderlich\"],\"A9Uyp6\":[\"Import fehlgeschlagen: \"],\"ABEd-z\":[\"Verwende deinen Paketmanager, um Tabularis zu aktualisieren.\"],\"AMdgKV\":[\"Prompt für Explain-Plan-Analyse\"],\"ANSTMe\":[\"In der aktuellen Planzusammenfassung wurden keine größeren Probleme erkannt.\"],\"ANzIr7\":[\"Abfrageverlauf\"],\"AOnaU7\":[\"übersprungen\"],\"AVlZoM\":[\"Umgebung\"],\"AXTVsE\":[\"Vollständig prüfen\"],\"AXdRYR\":[\"Aktuelle Logs\"],\"Aa-YkQ\":[\"Notebook exportieren\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Nach Level filtern\"],\"AlPiMN\":[\"Klicken, um zur Seite zu springen\"],\"An-1rA\":[\"Zeilen zurück\"],\"AnV8j-\":[\"Spalte ändern\"],\"AvEr_L\":[\"Neue Konsole\"],\"AvYbUL\":[\"Auf GitHub mit Stern markieren\"],\"Aw_eOs\":[\"Erfordert Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Keine Ergebnisse gefunden\"],\"B0mJGb\":[\"Rohausgabe\"],\"B1c58n\":[\"Spalte ändern\"],\"B3toQF\":[\"Objekte\"],\"B5nKny\":[\"/absoluter/pfad/zum/ordner\"],\"B5xevr\":[\"Der Verbindungsname ist erforderlich\"],\"BAVvWJ\":[\"ER-Diagramm\"],\"BBtVak\":[\"Alle einklappen\"],\"BEVzjL\":[\"Import fehlgeschlagen\"],\"BFxXo5\":[\"Alle ausführen\"],\"BJe2lZ\":[\"Seitenleiste umschalten\"],\"BK3WCj\":[\"Laden des Registry fehlgeschlagen\"],\"BKbO3i\":[\"Notebook bearbeitet\"],\"BMB51y\":[\"In Konsole ausführen\"],\"BNW_Z4\":[\"z. B. active_users, order_summary\"],\"BUO_JN\":[\"Abfrage kopieren\"],\"BYkhHY\":[\"Beim Start nach Updates suchen\"],\"BbHofF\":[\"Verbindungen exportieren\"],\"BeSg6-\":[\"Anwendungslogs zur Fehlersuche im Speicher sammeln\"],\"BgAyQH\":[\"Sortierung löschen\"],\"BinTJI\":[\"npm-Ökosystem\"],\"BkFson\":[\"Automatisch paginiert\"],\"Bpglf1\":[\"Nach oben\"],\"BrGo6h\":[\"Notebooks suchen\"],\"BxiAN_\":[\"Abfrage löschen\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Frontend-Abhängigkeiten\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Keine Filter —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Wird heruntergeladen...\"],\"CUxwxn\":[\"Alle Tabellen anzeigen\"],\"CWMXbw\":[\"stoppt den Prozess sofort. Alle aktiven Datenbankverbindungen über dieses Plugin funktionieren erst wieder, wenn das Plugin neu gestartet wird.\"],\"CZt6BX\":[\"MANUELLE KONFIGURATION\"],\"Ca8ixZ\":[\"Löschen\"],\"CbJBQS\":[\"Aktualisierung fehlgeschlagen: \"],\"Cdz-YU\":[\"Gestapelte Ansicht\"],\"CpeQf9\":[\"Schleifen\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Wähle das Modell, das für Generierung und Erklärung verwendet werden soll.\"],\"DB8zMK\":[\"Anwenden\"],\"DDXf5E\":[\"SQL-Funktionen\"],\"DEwnwi\":[\"Löschen\"],\"DNTvdl\":[\"Im Editor öffnen\"],\"DPc2P9\":[\"Zelle löschen\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Zeilenhöhe\"],\"Dd7YLj\":[\"Vielleicht später\"],\"Deej3j\":[\"Ungültiges JSON\"],\"DfKhk_\":[\"Aktualisieren\"],\"DiRiTz\":[\"Paketseite öffnen\"],\"DlRHAD\":[\"EXPLAIN wird ausgeführt...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Fehler\"],\"other\":[\"#\",\" Fehler\"]}]],\"Dvdihe\":[\"Auf \",[\"0\"],\" — vor Ausführung prüfen.\"],\"DzFLzw\":[\"JA\"],\"E-JUtQ\":[\"Freigabe\"],\"E0kcnZ\":[\"Allgemein\"],\"E2mje_\":[\"Abfrage zum Erklären auswählen\"],\"EDieyg\":[\"Möchtest du diese SSH-Verbindung wirklich löschen?\"],\"EHZxPj\":[\"Aufklappen\"],\"EL4oDO\":[\"Neue Version verfügbar\"],\"EPi4gT\":[\"Sortieren nach \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Ungruppiert\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Unbekannt\"],\"EhADgB\":[\"Spalte löschen\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Du bist auf dem neuesten Stand\"],\"Em6JFd\":[\"Zeilen zählen\"],\"EnGiqG\":[[\"0\"],\" Elemente\"],\"Ew1n5z\":[\"Plugins suchen…\"],\"F18WP3\":[\"Parameter\"],\"F3uc1x\":[\"Die exportierte Datei enthält deine Datenbank- und SSH-Passwörter im Klartext. Bewahre sie sicher auf.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" Zeilen\"],\"other\":[\"#\",\" Zeilen\"]}]],\"F6pfE9\":[\"Aktiv\"],\"F8tXg7\":[\"Datenvorschau\"],\"F9-6yK\":[\"Standard-Kopierformat\"],\"F9lxfG\":[\"Entfernen\"],\"F9nsa2\":[\"Die Verlaufsdatei war beschädigt und wurde beiseitegelegt. Neue Abfragen werden wie gewohnt aufgezeichnet. Sicherungsdatei:\"],\"FF_oap\":[\"Standardwert\"],\"FK8rlP\":[\"Noch keine SSH-Verbindungen konfiguriert\"],\"FMRcH8\":[\"Erste Zeile als Kopfzeile\"],\"FNvDMc\":[\"Diese Woche\"],\"FQe1FI\":[\"Geschätzte Zeilen\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warnung\"],\"FZg3wM\":[\"Operation\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Wähle ein unabhängiges Thema für den SQL-Editor oder halte es mit dem App-Thema synchron.\"],\"FsvZQL\":[\"Zelle \",[\"n\"],\" bearbeitet\"],\"FtwKL9\":[\"Tab wechseln\"],\"FznI3z\":[\"Fremdschlüssel \\\"\",[\"name\"],\"\\\" löschen?\"],\"G6W8j1\":[\"Vorschau fehlgeschlagen: \"],\"G8Q5Zq\":[\"Der Namespace ist erforderlich\"],\"GAohqx\":[\"Spalte löschen\"],\"GJR99u\":[\"Löschen der Spalte fehlgeschlagen: \"],\"GKfzzM\":[\"Verbindung auswählen...\"],\"GS-Mus\":[\"Exportieren\"],\"GUaLUq\":[\"Laden des Schemas fehlgeschlagen: \"],\"GXP-Iw\":[\"SQL-Zelle hinzufügen\"],\"Gj1mLb\":[\"Zellen neu angeordnet\"],\"GlbqG2\":[\"Auf Treiber-Standard zurücksetzen\"],\"Gs5AlY\":[\"Öffnen\"],\"GtmO8_\":[\"von\"],\"GxkJXS\":[\"Wird hochgeladen...\"],\"H-o4D2\":[\"Neue Spalte erstellen\"],\"H2B-KW\":[\"Wähle das Standardformat beim Kopieren von Zeilen mit Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Wiederholen\"],\"H7mlCc\":[\"/absoluter/pfad/zu/db.sqlite\"],\"H86f9p\":[\"Verkleinern\"],\"H9P8CD\":[\"den ersten Filter hinzufügen\"],\"HAQlGl\":[\"KI-Aktivität\"],\"HKNZrs\":[\"Index-Bedingung\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"#\",\" Zeilen löschen\"],\"other\":[\"#\",\" Zeilen löschen\"]}]],\"HPuCiP\":[\"Ordnerpfad\"],\"HUs1R3\":[\"Keine geöffneten Tabs für diese Verbindung.\"],\"HV4Isp\":[\"SSH-Passwort eingeben\"],\"HVC8Hh\":[\"In Zwischenablage kopiert\"],\"HWEpq8\":[\"Datenträger schreiben/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Speichern der Ansicht fehlgeschlagen: \"],\"He8v1Y\":[\"Von \\\"Alle anwenden\\\" abwählen\"],\"HehHP1\":[\"Standard-Layout\"],\"HilYn4\":[\"Dieses Notebook ist leer. Füge eine Zelle hinzu, um zu beginnen.\"],\"HjxVK_\":[\"Schneller Verbindungstest\"],\"HmMnRx\":[\"WKT-Modus\"],\"HoKCiI\":[\"Die App wird nach der Installation automatisch neu gestartet\"],\"HpK_8d\":[\"Neu laden\"],\"Hpi4Jm\":[\"Jetzt beitreten\"],\"HuA3RU\":[\"Tabulator\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"SSH inline konfigurieren\"],\"I5VBsr\":[\"Wie App\"],\"I8yrPb\":[\"Tabelle ersetzen\"],\"I92BdB\":[\"Aus Gruppe entfernen\"],\"I92fr4\":[\"Später erinnern\"],\"I99Miw\":[\"Kosten\"],\"IETZIR\":[\"Zellnamen bearbeiten\"],\"IG9wzA\":[\"Einfügen der Zeile fehlgeschlagen: \"],\"ILleOG\":[\"Der Ressourcentyp muss \\\"service\\\" oder \\\"pod\\\" sein\"],\"IQ3gAw\":[\"Datei hochladen\"],\"IUwGEM\":[\"Änderungen speichern\"],\"IUwmLq\":[\"Direkte Abhängigkeiten, deklariert in package.json und src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Open-Source-Bibliotheken\"],\"I_43p6\":[\"Sicherheit\"],\"Iaizf4\":[\"Darstellung\"],\"Il3FBB\":[\"Strukturiertes Filterpanel ein-/ausblenden\"],\"IniZRK\":[\"Download nicht verfügbar - nur Vorschau geladen\"],\"Isaozb\":[\"Überprüfen & anpassen\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Aktive Abfragen und Verbindungen über dieses Plugin werden unterbrochen.\"],\"J6v1s_\":[\"Standard-Modell\"],\"JE-DVk\":[\"Interpreter\"],\"JEGlfK\":[\"Start\"],\"JKDPqP\":[\"Zuerst einen Kontext auswählen\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"SSH-Tunnel verwenden\"],\"JRz8tw\":[\"MySQL und MariaDB liefern echte Metriken nur bei unterstützten EXPLAIN ANALYZE- oder ANALYZE FORMAT-Varianten.\"],\"JUICth\":[\"PNG, JPG, WebP oder SVG · max. 512 KB\"],\"JY5Oyv\":[\"Datenbank\"],\"JlFRIB\":[\"Sitzungszeitzone, die nach dem Verbindungsaufbau an MySQL gesendet wird.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Abgelehnt\"],\"K3H9p5\":[\"Nicht gesetzt\"],\"K5Dgu_\":[\"Datenbanken\"],\"K8IGKf\":[\"Authentifizierungstyp\"],\"KAYNSW\":[\"Wie viele Logs im Speicher behalten werden sollen (1-10000)\"],\"KHTGbr\":[\"Vorab-EXPLAIN\"],\"KHvda8\":[\"Nicht Null\"],\"KJKNaZ\":[\"Als `column` kopieren\"],\"KM5Kc8\":[\"Mindestens eine Spalte muss ausgewählt werden\"],\"KSCnVQ\":[\"Typ\"],\"KUjOb9\":[\"läuft\"],\"KXBdwy\":[\"Routinen aktualisieren\"],\"KXNyX7\":[\"DEFAULT setzen\"],\"Kd70-v\":[\"Aus Zwischenablage importieren...\"],\"KhI4oS\":[\"Referenzierte Zeile in \",[\"0\"],\" öffnen\"],\"KhgrNu\":[\"MCP-Server-Integration\"],\"KirERL\":[\"Zeitüberschreitung\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Löschen des Index fehlgeschlagen: \"],\"KzeARD\":[\"Löschen der Tabelle fehlgeschlagen: \"],\"L-rMC9\":[\"Auf Standard zurücksetzen\"],\"L3HXkQ\":[\"Fehlerbehebungen\"],\"LCZ7Dy\":[\"Namen kopieren\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"Indizes\"],\"LMeAoR\":[\"Zeilen\"],\"LPCdc-\":[\"Prompt für Abfrage-Tabnamen\"],\"LPFmga\":[\"Für \\\"Alle anwenden\\\" auswählen\"],\"LYzbQ2\":[\"Tool\"],\"Lbis_V\":[\"Schnellnavigation\"],\"Lcpbe2\":[\"Der Plugin-Prozess konnte nicht gestartet werden. Prüfe die Fehlerdetails unten.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN wird nur für DML-Statements (SELECT, INSERT, UPDATE, DELETE) unterstützt. DDL-Statements wie CREATE, DROP oder ALTER können nicht erklärt werden.\"],\"LnT0hQ\":[\"Spalte hinzufügen\"],\"LvutiO\":[\"KI-Vorschlag\"],\"M-rHQO\":[\"Vollbild verlassen\"],\"M0XJba\":[\"Möchtest du den gesamten Abfrageverlauf für diese Verbindung wirklich löschen?\"],\"M1co_O\":[\"Konfiguriert\"],\"M73whl\":[\"Kontext\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Alle anzeigen\"],\"MXdOwj\":[\"Verbindungen trennen\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"K8s-Verbindung auswählen\"],\"Mc1tjS\":[\"Aktiviere ANALYZE, um tatsächliche Zeilen, Laufzeit, Schleifen und Buffer zu prüfen.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" weitere Zeilen\"],\"Mp0jQ_\":[\"Dieser Treiber unterstützt Primärschlüssel nur beim Erstellen einer Tabelle\"],\"MqpZwN\":[\"Tabularis-Prozess\"],\"MxIx43\":[\"↑↓ zum Navigieren, Enter zum Öffnen\"],\"MygtgQ\":[\"Markdown-Zelle hinzufügen\"],\"N40H-G\":[\"Alle\"],\"N5UQxq\":[\"Ollama wurde auf Port \",[\"0\"],\" nicht erkannt. Läuft es?\"],\"N6GBcC\":[\"Löschen bestätigen\"],\"N6aqHp\":[\"Ausgeführte Abfragen\"],\"N9_S15\":[\"Eine neue Tabelle wird erstellt\"],\"NBdMa1\":[\"Langsamster Schritt\"],\"NC2AI2\":[\"Länge\"],\"NCzNnx\":[\"Aufsteigend sortieren\"],\"NT4Ubs\":[\"Benutzerdefinierten Schlüssel löschen und auf Umgebungsvariable zurücksetzen (falls vorhanden)\"],\"NUjrCO\":[\"Keine Favoriten entsprechen deiner Suche\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Baum-Gesamt: \",[\"0\"]],\"Nc2VQn\":[\"An bestehende anhängen\"],\"NgFERn\":[\"Zu Favoriten hinzufügen\"],\"NktMHG\":[\"Datenbankname\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Testen\"],\"Nq5QTk\":[\"n-te erklären\"],\"O2STgu\":[\"Export fehlgeschlagen: \"],\"O8SV8O\":[\"Wird heruntergeladen...\"],\"O9_WW6\":[\"Verbindung\"],\"OGEsKj\":[\"Alle Zellen ausführen\"],\"OGWdBg\":[\"Ansichtsname\"],\"OHqT6w\":[\"Tastenkombination drücken...\"],\"OXJsaG\":[\"Ungültiger Parametername\"],\"OfhWJH\":[\"Zurücksetzen\"],\"OlAl5i\":[\"Alle ausklappen\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Discord beitreten\"],\"P1YGsb\":[\"SQL-Generierung\"],\"P2m1xb\":[\"Bei Fehler stoppen\"],\"P3Qlys\":[\"Keine Verbindungs-ID\"],\"P6Y3Yf\":[\"Führe diesen Befehl im Terminal aus und starte anschließend Claude Code neu.\"],\"PCdj-c\":[\"Alle abwählen\"],\"PMnFt9\":[\"Datenträger lesen/s\"],\"PQU2Va\":[\"Vorschlag mit Eingabetaste übernehmen\"],\"PRnH8G\":[\"von \",[\"0\"]],\"PY8UF3\":[\"Parallel umgeschaltet (Zelle \",[\"n\"],\")\"],\"PiH3UR\":[\"Kopiert!\"],\"Pia95d\":[\"Spaltenname ist erforderlich\"],\"PrElXQ\":[\"Aktualisieren\"],\"PrixCC\":[\"Zeilen werden an eine bestehende Tabelle angehängt\"],\"Pujgbb\":[\"Ziel konfigurieren\"],\"Pw_eQV\":[\"Plugin konnte nicht gestartet werden\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Keine gespeicherten Abfragen\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Keine Kindprozesse\"],\"QCxMC0\":[\"Automatisch nach neuen Versionen suchen, wenn die App gestartet wird\"],\"QEazml\":[\"Auswahl löschen\"],\"QHcLEN\":[\"Verbunden\"],\"QLHHFO\":[\"Nur-Lese-Modus\"],\"QOvAW3\":[\"Neue Funktionen\"],\"QULGRi\":[\"Keine gültigen Abfragen gefunden\"],\"QZwllF\":[\"Durchsuchen...\"],\"QbkSr_\":[\"EXPLAIN nicht verfügbar.\"],\"QeHFYZ\":[\"EXPLAIN fehlgeschlagen: \",[\"0\"]],\"Qll2Tb\":[\"Abst.\"],\"Qoq-GP\":[\"Mehr lesen\"],\"Qu4Hog\":[\"Notebook erfolgreich importiert\"],\"R-A2Vd\":[\"Keine Daten zum Anzeigen\"],\"R0Hkb2\":[[\"0\"],\" Datenbank(en) ausgewählt\"],\"R1nHhB\":[\"Bereits vorhanden\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"In Konsole umwandeln\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Einrichtung\"],\"RF-HyV\":[\"Wähle deine bevorzugte Sprache. \\\"Auto\\\" verwendet die Systemsprache.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Namen kopieren\"],\"RI-HZc\":[[\"0\"],\"-Schlüssel eingeben\"],\"RJrE17\":[\"Möchtest du die Ansicht \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Ein Stern hilft anderen, das Projekt zu entdecken\"],\"Rb3Tdm\":[\"Notebook-Name\"],\"RcbKJ3\":[\"Bei Aktualisierung\"],\"RkefFq\":[\"Führt vor dem Modal ein EXPLAIN aus, damit der Plan sichtbar ist.\"],\"RnF_hl\":[\"Plugin-Registry wird geladen...\"],\"Rns7_C\":[\"Diese Aktion kann nicht sofort rückgängig gemacht werden\"],\"RoKRqW\":[\"Verfügbare Plugins\"],\"RphpKk\":[\"Erscheinungsbild\"],\"Rt8sHM\":[\"Sortier- oder temporäre Arbeit erkannt\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Aktiviert\"],\"S1veKH\":[\"Auswahl zurücksetzen\"],\"S5zeZU\":[\"Vorschau umschalten\"],\"S8Yqbl\":[\"Einfügen\"],\"SDND4q\":[\"Nicht konfiguriert\"],\"SJRy3D\":[\"(Automatisch generiert)\"],\"SSwIjo\":[\"EMPTY setzen\"],\"SgvA_r\":[\"Drücke Ausführen (Ctrl/Command+F5), um Tabellendaten zu laden\"],\"SlfejT\":[\"Fehler\"],\"SoATkx\":[\"Zelle kopieren\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"Endpoint-URL\"],\"T7w5CQ\":[\"Erstellen einer neuen Zeile fehlgeschlagen: \"],\"T9947j\":[\"Wert (z. B. 'Text' oder 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Zum vertikalen Layout wechseln\"],\"TK5oex\":[\"Prompt speichern\"],\"TKQ7K-\":[\"Installieren\"],\"TKZreP\":[\"Erforderlich\"],\"TMLAx2\":[\"Erforderlich\"],\"TO08JI\":[\"Fremdschlüssel\"],\"TQloo1\":[\"Fremdschlüssel erstellen\"],\"TVKqvO\":[\"Zeile bearbeiten\"],\"TYSdQ3\":[\"SELECT-Abfrage ausführen\"],\"TfDFHS\":[\"Lange Zeilen im Editor umbrechen statt horizontal zu scrollen.\"],\"Tibfjs\":[\"Keine gespeicherten Verbindungen — erstelle unten eine\"],\"Tj36Dr\":[\"Auf Standard zurücksetzen\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Sperren\"],\"TpwXyg\":[\"Fehlen Zeitwerte, hat der Server wahrscheinlich nur einen geschätzten Plan geliefert.\"],\"Tw2M1h\":[\"Installation fehlgeschlagen\"],\"Ty-rm9\":[\"SSH-Verbindungen\"],\"Tz0i8g\":[\"Einstellungen\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes-Verbindungen\"],\"U4uzyV\":[\"Neuigkeiten\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Ausführung stoppen, wenn eine Zelle fehlschlägt\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" auf \",[\"1\"],\" — vor Ausführung prüfen.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Konfiguration für \",[\"clientName\"],\" erfolgreich installiert! Starte die App neu, um sie anzuwenden.\"],\"URmyfc\":[\"Details\"],\"UWQBvp\":[\"SQL-Vorlagen generieren\"],\"UawTKZ\":[\"Optional. Gib die ausführbare Datei an, die zum Starten dieses Plugins verwendet wird (z. B. python3 unter macOS/Linux, python oder ein vollständiger Pfad unter Windows). Leer lassen, um den Standard zu verwenden.\"],\"Ub8sf5\":[\"SQLite unterstützt das Löschen von Fremdschlüsseln via ALTER TABLE nicht.\"],\"UbbJ8j\":[\"Keine Optionen gefunden\"],\"Ubs68g\":[\"Allgemein\"],\"UftN8J\":[\"Diese Verbindungen lehnen Schreibvorgänge ab. Andere verhalten sich normal.\"],\"UnQNah\":[\"Möchtest du die Spalte \\\"\",[\"0\"],\"\\\" aus der Tabelle \\\"\",[\"tableName\"],\"\\\" wirklich löschen?\\n\\nWARNUNG: Dadurch werden alle Daten in dieser Spalte dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.\"],\"UncTTh\":[\"Summe des RSS über den Prozessbaum — gemeinsam genutzter Speicher kann doppelt gezählt werden\"],\"UpjgFm\":[\"Parameter geändert\"],\"UsAnu1\":[\"ANALYZE führt die Abfrage aus. Bei datenverändernden Statements mit Vorsicht verwenden.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tabgröße\"],\"UzWGWO\":[\"Zum SQL-WHERE-Eingabefeld wechseln\"],\"V-chk5\":[\"Wie oft geprüft werden soll, ob aktive Verbindungen noch erreichbar sind. Setze 0, um die Prüfung zu deaktivieren.\"],\"V-pw1j\":[\"Tabellenname\"],\"V2T0Uw\":[\"Noch keine gespeicherten Notebooks.\"],\"V3aNwx\":[\"Dateneditor\"],\"VGYp2r\":[\"Auf alle anwenden\"],\"VH8S7x\":[\"Zwischenablage-Spalte\"],\"VIAEcS\":[\"Laden der Datenbanken fehlgeschlagen. Prüfe deine Anmeldedaten.\"],\"VKdztF\":[\"Zeilen anhängen\"],\"VLiHXI\":[\"Daten analysieren\"],\"VMbmXc\":[\"Möchtest du \\\"\",[\"pluginName\"],\"\\\" wirklich entfernen? Dadurch werden die Plugin-Dateien gelöscht.\"],\"VO3weF\":[\"Keine Datei geladen\"],\"VOZlKc\":[\"Datenbank importieren\"],\"VPzsIz\":[\"Name wird generiert...\"],\"VUul0v\":[\"Das Beenden von\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Alle Abfragen\"],\"Vi2Pqx\":[\"von\"],\"Vl2zn2\":[\"gestoppt\"],\"Vo4uBA\":[\"Bei der Installation des Plugins ist ein Fehler aufgetreten. Siehe Details unten.\"],\"VqqyOs\":[\"Führe eine Abfrage aus, um Ergebnisse zu sehen\"],\"VzhDFh\":[\"Blockiere jede Nicht-SELECT-Anweisung über MCP, außer für die unten erlaubten Verbindungen.\"],\"W3uwpT\":[\"Alle Tabs schließen\"],\"W4MKLh\":[\"z.B. In Prod riskant, bestätigen…\"],\"WA8RND\":[\"Möchtest du die Tabelle \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"WG8Qgt\":[\"Tabelle löschen\"],\"WLnvCZ\":[\"Benutzername eingeben\"],\"WM-__8\":[\"Verbindungen suchen...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen in \\\"\",[\"tableName\"],\"\\\" importiert\"],\"other\":[\"#\",\" Zeilen in \\\"\",[\"tableName\"],\"\\\" importiert\"]}]],\"WTfntM\":[\"Möchtest du die Abfrage \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"WarTN_\":[\"erfolgreich\"],\"WcF1uL\":[\"Gruppenname\"],\"Weq9zb\":[\"Allgemein\"],\"WmPpB1\":[\"Ausführungsplan wird geladen…\"],\"Wu7cK0\":[\"Keine Datenbanken gefunden\"],\"WvoUQF\":[\"Zelle \",[\"n\"],\" gelöscht\"],\"Ww3pDD\":[\"MANUELLER BEFEHL\"],\"X-20AU\":[\"Prompt für Abfrage-Tabnamen eingeben...\"],\"X-U6_w\":[\"Schriftfamilie\"],\"X5fs0g\":[\"Erstelle deine erste Verbindung, um loszulegen.\"],\"X7Ayjp\":[\"Passwort im System-Keychain gespeichert\"],\"X9kySA\":[\"Favoriten\"],\"XJOV1Y\":[\"Aktivität\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Abfrageerklärung\"],\"XVF2Pf\":[\"Schemata bearbeiten\"],\"XW6OYF\":[\"Dieses Plugin benötigt möglicherweise einen Interpreter (z. B. Python). Verwende die Plugin-Einstellungen, um den Interpreter-Pfad zu konfigurieren.\"],\"XZB6Xr\":[\"Maximale Log-Einträge\"],\"Xcffv2\":[\"Zeigt die Schaltflächen AI Assist und Explain im Editor an\"],\"XeqTSh\":[\"Join-Typ\"],\"XmJfZT\":[\"name\"],\"XoQfG1\":[\"SSH-Benutzer\"],\"XwI0Vw\":[\"Auto (System)\"],\"XyDlLX\":[\"Indexname\"],\"Y2P2aK\":[\"Wähle die zu ladenden Schemata aus:\"],\"Y8HYw2\":[\"Wert\"],\"Y8zX3R\":[\"In Editor einfügen\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Suchen...\"],\"YWlnMZ\":[\"Ollama-Port\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Durchsuche und installiere Plugins aus dem Registry.\"],\"Y_3yKT\":[\"In neuem Tab öffnen\"],\"YiAQ_Q\":[\"Tabellen aktualisieren\"],\"Ysjr9Y\":[\"SQL-Vorschau\"],\"YswNf7\":[\"Alle Level\"],\"YtNwr6\":[\"Maximale Anzahl an Abfrageverlaufseinträgen pro Verbindung.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Wird geladen...\"],\"Z7ZXbT\":[\"Freigeben\"],\"Z8JpBH\":[\"Als Notebook exportieren\"],\"Z8fBIc\":[\"Tatsächliche Zeilen übersteigen die Schätzung\"],\"ZC2VJP\":[\"Ausführen\"],\"ZCIS4k\":[\"keine aktiven Filter\"],\"ZF1_UT\":[\"SSL-Modus\"],\"ZGjBPa\":[\"Logs löschen\"],\"ZHQTlM\":[\"Importiere aus\"],\"ZIFDoJ\":[\"Bitte wähle mindestens Struktur oder Daten\"],\"ZIZA6o\":[\"Vor Freigabe bearbeiten\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Parser-Warnungen\"],\"other\":[\"#\",\" Parser-Warnungen\"]}]],\"ZVn8p2\":[\"Zeigt Zeilennummern im Rand des Editors an.\"],\"ZYnwzF\":[\"Getrennt\"],\"Za3_fO\":[\"Fehler\"],\"Zf7LHg\":[\"Keine Kontexte gefunden (ist kubectl installiert?)\"],\"Zfotp5\":[\"Große Schätzabweichungen deuten meist auf veraltete Statistiken oder Prädikate hin, die der Planner schlecht modellieren kann.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Schemata konnten nicht geladen werden\"],\"ZqXGPF\":[\"Löschen der Ansicht fehlgeschlagen: \"],\"ZuL73E\":[\"Neue Datenbankansicht erstellen\"],\"_-bi4r\":[\"Referenzierte Tabelle\"],\"_AEYGI\":[\"Noch kein Ausführungsverlauf\"],\"_FdpZc\":[\"Laden der Ansichtsdefinition fehlgeschlagen: \"],\"_FxSdi\":[\"Durchsuche die direkten Open-Source-Abhängigkeiten, die in App, Backend und Tooling verwendet werden.\"],\"_JyTG8\":[\"Explain-Prompt eingeben...\"],\"_Ltc_k\":[\"Zusätzlich\"],\"_Q2Wix\":[\"Zeilen\"],\"_TK1zF\":[\"Gespeicherte Verbindung\"],\"_bJFBE\":[\"Verbindungs-Timeout\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Baum\"],\"_dqduX\":[\"Nächste Seite\"],\"_fwE6J\":[\"Älter\"],\"_n04sB\":[\"Beenden\"],\"_otxbQ\":[\"Schlüsseldatei\"],\"_pezIT\":[\"Verbindung zu \",[\"0\"],\" fehlgeschlagen. Bitte prüfe deine Einstellungen oder stelle sicher, dass die Datenbank läuft.\"],\"_srfkj\":[\"Benutzerdefinierter Schlüssel erfolgreich gelöscht\"],\"_t6aFo\":[\"MySQL und MariaDB können je nach Serverversion auf EXPLAIN FORMAT=JSON oder tabellarisches EXPLAIN zurückfallen.\"],\"_xTbaM\":[\"Spalten\"],\"_yxaaL\":[\"Eindeutiger Index\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis ist ein freies Open-Source-Projekt. Wenn du es nützlich findest, unterstütze das Projekt und vernetze dich mit der Community.\"],\"a9CASo\":[\"SQLite unterstützt nur das Umbenennen von Spalten. Andere Änderungen erfordern, dass die Tabelle manuell neu erstellt wird.\"],\"aAIQg2\":[\"Darstellung\"],\"aC_vCa\":[\"Namen mit KI generieren\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Wähle einen Knoten aus, um Details zu sehen\"],\"aHKcKc\":[\"Vorherige Seite\"],\"aI-5wG\":[\"CA prüfen\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Standardwert\"],\"aScJP1\":[\"Diese Abfrage ausführen\"],\"aVNbN8\":[\"Filterbedingungen\"],\"aWhdMQ\":[\"Vorhandene SSH-Verbindung verwenden\"],\"aXYd8V\":[\"Zeitlimit\"],\"aX_S_r\":[\"Seite \",[\"0\"],\" von \",[\"totalPages\"]],\"agZcf8\":[\"Generiertes SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [Felder]\"],\"alplHn\":[\"Abfrageplan wird mit KI analysiert...\"],\"anBcU3\":[\"Wenn dir tabularis gefällt und du mehr Funktionen sehen möchtest, unterstütze das Projekt durch Code-Beiträge, Bug-Reports oder einen Stern auf GitHub.\"],\"arHmj2\":[\"Möchtest du diese Abfrage wirklich aus dem Verlauf löschen?\"],\"arKcqW\":[\"Ältere Server können auf geschätzte Pläne mit weniger Metriken zurückfallen.\"],\"arcpYe\":[\"Freigabe erforderlich\"],\"aurEkh\":[\"Prozesse werden geladen…\"],\"avtdsd\":[\"SQL-Modus\"],\"az8lvo\":[\"Aus\"],\"b1Ah3z\":[\"Fokussiert auf\"],\"b392Dr\":[\"Alle ausklappen\"],\"b5S_PU\":[\"Datenbankname\"],\"bAvovP\":[\"Nach unten\"],\"bH3JqY\":[\"Keine Tabellen gefunden\"],\"bP5JOn\":[\"Zeilenumbruch\"],\"bcOdok\":[\"Gruppe löschen\"],\"bcqeas\":[\"Alle MCP-Abfragen nur lesen\"],\"bmca5u\":[\"Nur Schreibvorgänge\"],\"bpCiBU\":[\"Schreibvorgänge erlauben\"],\"bqnhqW\":[\"Schätzung übersteigt tatsächliche Zeilen\"],\"bqpcP7\":[\"Datenbank sichern\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Fehler\"],\"bw22Gk\":[\"Spalten-Schema\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Wichtigste Probleme\"],\"cFCKYZ\":[\"Ablehnen\"],\"cFGrCP\":[\"Tabelle\"],\"cGeFup\":[\"Schriftgröße\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Auf Tabelle fokussieren\"],\"cM9NHc\":[\"Herabstufen auf\"],\"cO9-2L\":[\"Deaktivieren\"],\"cSev-j\":[\"Filter\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen importieren\"],\"other\":[\"#\",\" Zeilen importieren\"]}]],\"c_xoSn\":[\"Zelle \",[\"n\"],\" umbenannt\"],\"cd0XEW\":[\"Abfrage speichern\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Gruppe teilen\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" Statements\"],\"d34vwG\":[\"Datenbanken laden\"],\"d6ynQ7\":[\"Absteigend sortieren\"],\"d8_6_v\":[\"abbrechen\"],\"d8wc1_\":[\"Beispielwerte\"],\"dBXoCS\":[\"Eine Umgebungsvariable ist vorhanden, aber du kannst sie überschreiben, indem du oben einen Schlüssel setzt.\"],\"dD7NPy\":[\"Gliederung\"],\"dEgA5A\":[\"Abbrechen\"],\"dMtLDE\":[\"bis\"],\"dPJVhW\":[\"Installation fehlgeschlagen\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Sitzung\"],\"other\":[\"#\",\" Sitzungen\"]}]],\"dTUzKm\":[\"Ausgewählte ausführen (\",[\"0\"],\")\"],\"dU_iQN\":[\"Keine Sitzung entspricht den Filtern.\"],\"dUh9QW\":[\"Planung\"],\"dVoir2\":[\"Markdown-Zelle \",[\"n\"],\" hinzugefügt\"],\"dZ0d2O\":[\"Bitte wähle mindestens eine Tabelle\"],\"dhi13U\":[\"Bild auswählen…\"],\"dli1JX\":[\"Änderungen übernehmen\"],\"dmYV6f\":[\"Routinen\"],\"dohZCo\":[\"Anweisungen für KI-gestützte SQL-Generierung. Verwende \",[\"SCHEMA\"],\" als Platzhalter für die Datenbankstruktur.\"],\"dtxpK2\":[\"Analysieren\"],\"dwW9nJ\":[\"Zeilennummern anzeigen\"],\"dwWVw_\":[\"Willkommensbildschirm anzeigen\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Tab\"],\"other\":[\"#\",\" Tabs\"]}]],\"dxxY9r\":[\"Falls vorhanden\"],\"dyN4j9\":[\"Klicke auf 'Vorschau ausführen', um Ergebnisse zu sehen\"],\"e07Iz5\":[\"Task-Manager öffnen\"],\"e0NzXu\":[\"Dieses Projekt ist Work in Progress (WIP). Die Kernfunktionen sind stabil, aber wir haben große Pläne.\"],\"e1UKxf\":[\"Diese Abfrage speichern\"],\"e34gdU\":[\"Wie lange gewartet wird, bevor abgebrochen wird.\"],\"e62LQd\":[\"Zwangsweise beenden\"],\"e6QZsM\":[\"Editor-Thema\"],\"e8CirT\":[\"Abfrage ausführen\"],\"eD2kUP\":[\"Buffer gelesen\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Prompt für Explain-Plan-Analyse eingeben...\"],\"eIVolo\":[\"Datenträger L/S\"],\"eJOEBy\":[\"Wird exportiert...\"],\"eKHY3W\":[\"Plugin-Einstellungen\"],\"eMb6Ub\":[\"Ressource auswählen...\"],\"ePK91l\":[\"Bearbeiten\"],\"eXweu6\":[\"Zelle ausklappen\"],\"ecNsTE\":[\"Keine Abfragen entsprechen deiner Suche\"],\"ecUA8p\":[\"Heute\"],\"ecpIZP\":[\"Passphrase eingeben, falls der Schlüssel verschlüsselt ist\"],\"esl-Tv\":[\"Ressourcentyp\"],\"exyUec\":[\"Verbindung\"],\"f2AJjl\":[\"Zeile löschen\"],\"f4pD-j\":[\"Verbindungstest fehlgeschlagen\"],\"f7sXvi\":[\"Passwort eingeben\"],\"fAsxc0\":[\"Sequentielle Scans\"],\"fIeFs0\":[\"Wert auswählen...\"],\"fJm92A\":[\"Wählen Sie eine Datei mit einem EXPLAIN-Plan (PostgreSQL JSON- oder Textformat), um ihn zu visualisieren.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Werte\"],\"f_b1TA\":[\"Ausführungsverlauf\"],\"fghnqP\":[\"Zu Verbindung 1-9 wechseln\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Komma (,)\"],\"fp711N\":[\"Blockiert (nur lesen)\"],\"fpzyLj\":[\"Seite \",[\"0\"],\" von \",[\"1\"]],\"fuA6oy\":[\"Socket-Timeout\"],\"fvImQM\":[[\"0\"],\" ausgewählt\"],\"fwr_nh\":[\"Installiere Erweiterungen, verwalte Plugin-Treiber und behalte Laufzeiteinstellungen im Blick.\"],\"g0ZzK4\":[\"Gültiges JSON\"],\"g11hAR\":[\"Neue Zeile\"],\"g8VcMm\":[\"Mein K8s-Cluster\"],\"gCFR_O\":[\"Parallele Ausführung (Alle ausführen)\"],\"gEjU98\":[\"Verbindungen öffnen\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Mindestens eine Spalte ist erforderlich\"],\"gSuQrG\":[\"Keine Verbindung entspricht \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Abfrage erneut ausführen\"],\"gZWMnn\":[\"KI-Analyse\"],\"ghYd73\":[\"Ziel wählen...\"],\"giAqEC\":[\"Neue Tabelle erstellen\"],\"gnQS8X\":[\"Maximale Paketgröße, die vom MySQL-Connector verwendet wird.\"],\"gqV5VL\":[\"Integriert, nicht anpassbar\"],\"gww_XE\":[\"Referenzierte Spalte\"],\"gxXPJ9\":[\"Interpreter konfigurieren\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximieren\"],\"h-XNc9\":[\"CSV-Trennzeichen\"],\"h-kNAk\":[\"z.B. verkaufsdaten\"],\"h3Z_aK\":[\"Markdown hier schreiben...\"],\"h7MgpO\":[\"Tastenkürzel\"],\"h7peZQ\":[\"Erlauben\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Systemprozess läuft\"],\"other\":[\"#\",\" Systemprozesse laufen\"]}]],\"hEZrFh\":[\"SQL-Datei ausführen...\"],\"hEipgW\":[\"Jetzt nach Updates suchen\"],\"hG89Ed\":[\"Bild\"],\"hIHcBE\":[\"Als CSV exportieren\"],\"hItdtk\":[\"Ordner auswählen\"],\"hXFVjo\":[\"Tabellenname ist erforderlich\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Erneut ausführen\"],\"hbz1rh\":[\"Schlüssel\"],\"hdsaJo\":[\"Importiert...\"],\"he3ygx\":[\"Kopieren\"],\"hfGimp\":[\"Namespace auswählen...\"],\"hjjSEi\":[\"Nur-Lese-Verbindungen\"],\"hjwN_s\":[\"Ressourcenname\"],\"hlF1mD\":[\"Auswahl kopieren\"],\"hnboBb\":[\"KI-Analyse des Abfrageplans\"],\"hq4-D2\":[\"Der API-Schlüssel wird sicher im System-Keychain gespeichert. Ein hier gesetzter Schlüssel überschreibt die Umgebungsvariable.\"],\"hqjXdn\":[\"Löschen der SSH-Verbindung fehlgeschlagen\"],\"hqofAK\":[\"SQL kopieren\"],\"hy6L14\":[\"Auf GitHub ansehen\"],\"hyjACX\":[\"Zellen ein-/ausgeklappt\"],\"hz1b5W\":[\"Keine passenden Elemente gefunden\"],\"i1vAVM\":[\"Neue Tabelle erstellen\"],\"i3S5T3\":[\"Favoriten durchsuchen...\"],\"i4_LY_\":[\"Schreiben\"],\"i5HBWh\":[\"Abfrageverlauf zurückgesetzt\"],\"iAVlge\":[\"Passe die Anweisungen für die KI-Namensgenerierung von Notebook-Zellen an. Der Zelleninhalt (SQL oder Markdown) wird als Benutzernachricht gesendet.\"],\"iE1yAB\":[\"Tabellen filtern...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Verbinden\"],\"iSryJ2\":[\"Mein SSH-Server\"],\"iT7UeX\":[\"Index hinzufügen\"],\"iUWwuR\":[\"Herunterladen und installieren\"],\"ia7i08\":[\"Zuerst Kontext/Namespace/Typ auswählen\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Gespeichert\"],\"igcsfY\":[\"Keine Plugins im Registry verfügbar.\"],\"ij-Elv\":[\"Bildvorschau\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" erklärbare Abfragen gefunden\"],\"other\":[\"#\",\" erklärbare Abfragen gefunden\"]}]],\"ioL38P\":[\"Überwache Plugin-Prozesse, CPU, RAM und Datenträgernutzung in Echtzeit\"],\"ixlL_e\":[\"SSH-Schlüsseldatei (optional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Modell auswählen\"],\"j3gyYH\":[\"Alle anwenden\"],\"j5CWO4\":[\"Aktuell\"],\"j9HPuI\":[\"Zeile #\",[\"0\"]],\"jBtpMP\":[\"Alle Status\"],\"jEu4bB\":[\"Spalten\"],\"jEyQIs\":[\"Keine Routinen gefunden\"],\"jHc1By\":[\"Ansicht löschen\"],\"jI6sj4\":[\"Kosten, Laufzeit und Zeilenschätzungen sind im Vergleich zu PostgreSQL und MySQL oft nicht verfügbar.\"],\"jIxQCZ\":[\"Für deine Plattform nicht verfügbar\"],\"jKIncn\":[\"Datenbankname ist erforderlich\"],\"jPSk57\":[\"Grund (optional)\"],\"jUNY_d\":[\"View\"],\"jVqjDo\":[\"Ungültiges Notebook-Dateiformat\"],\"jWSZ-A\":[\"Nur Vorschau - vollständige Daten nicht geladen\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket-Timeout in Millisekunden.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Verbindungsname ist erforderlich\"],\"jsQZMk\":[\"KI\"],\"juO8wz\":[\"Kindprozess\"],\"jx0t66\":[\"Kindprozesse einklappen\"],\"jxShEf\":[\"Ansicht erstellen\"],\"jz5PKx\":[\"Ansichtsdefinition\"],\"k-0mL-\":[\"Spalte hinzufügen\"],\"k-XiMX\":[\"Rohtext\"],\"k2UnVy\":[\"Hash-Bedingung\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"Sekunden\"],\"kBiBq7\":[\"Index \\\"\",[\"name\"],\"\\\" löschen?\"],\"kEYasw\":[\"Diagramm umschalten\"],\"kI1qVD\":[\"Formatieren\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen · \",[\"1\"],\" ms\"],\"other\":[\"#\",\" Zeilen · \",[\"2\"],\" ms\"]}]],\"kJDmsI\":[\"Ereignisdetails\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registry\"],\"kY-q3P\":[[\"label\"],\" ist erforderlich\"],\"kexIdC\":[\"Kubernetes-Port-Forward verwenden\"],\"kj2-CR\":[\"Fehlerdetails\"],\"krksx_\":[\"Erfolg\"],\"kwY6nh\":[\"Schließen\"],\"kx0s-n\":[\"Ergebnisse\"],\"kxUEfE\":[\"Abrufen der Routinen-Definition fehlgeschlagen: \"],\"l2Op2p\":[\"Abfrageparameter\"],\"l9Ivba\":[\"Plugin-Prozesse und Systemressourcen\"],\"lBdPxu\":[\"Akzentfarbe\"],\"lCF0wC\":[\"Aktualisieren\"],\"lEQRwq\":[\"Daten (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Neue Tabelle erstellt\"],\"lOekZ3\":[\"Zum horizontalen Layout wechseln\"],\"lUA1C1\":[\"Passphrase für SSH-Schlüssel (optional)\"],\"lVeG20\":[\"Rust-Abhängigkeiten\"],\"lXAG6D\":[\"Anweisungen für KI-gestützte Abfrageerklärungen. Verwende \",[\"LANGUAGE\"],\" als Platzhalter für die Ausgabesprache.\"],\"lbbYjy\":[\"Bearbeite die rohe Konfigurationsdatei direkt. Ein Neustart ist erforderlich, um Änderungen anzuwenden.\"],\"lhKW0m\":[\"SQL-Zelle \",[\"n\"],\" hinzugefügt\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Ergebnisse pro Seite (Limit)\"],\"lkz6PL\":[\"Dauer\"],\"lmVGeo\":[\"Fremdschlüssel hinzufügen\"],\"lnnx3E\":[\"Verbinde Tabularis mit Claude Desktop, Cursor und mehr\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Hinzufügen\"],\"m2Q_r8\":[\"JSON in Text-Spalten erkennen\"],\"m2tskz\":[\"Erfolg\"],\"mA-qpe\":[\"Alle Ausführungen abgeschlossen\"],\"mBhhbA\":[\"Logs in die Zwischenablage exportiert\"],\"mCNdzH\":[\"Zelle ausführen\"],\"mO95sp\":[\"Panel schließen\"],\"mP7dLi\":[\"Schriftnamen oben eingeben\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" blockiert\"],\"other\":[\"#\",\" blockiert\"]}]],\"mS74ir\":[\"Speichern der SSH-Verbindung fehlgeschlagen\"],\"mSqtw8\":[\"Vorschau ausführen\"],\"mURmfQ\":[\"Ansichtsdefinition (SQL)\"],\"mX_isJ\":[\"Vertikal\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Struktur (DDL)\"],\"mrk4Cf\":[\"Nach \",[\"colName\"],\" DESC sortieren\"],\"msJ8t1\":[\"Wir haben einen eigenen Treffpunkt für Tabularis-Nutzer eröffnet: Hilfe, Tipps und Mitgestaltung der Roadmap.\"],\"mtvVdV\":[\"Verarbeitete Zeilen\"],\"mx4evv\":[\"Tabelle erstellen\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Herunterladen\"],\"n7JDTx\":[\"Installiere und aktiviere Plugins, um sie hier zu sehen\"],\"nDDJir\":[\"Suche Sitzung, Client, Verbindung…\"],\"nHP-Kr\":[\"Keine aktive Sitzung. Bitte wähle eine Verbindung aus.\"],\"nKhCjW\":[\"Tabellen auswählen\"],\"nNmhuY\":[\"Index erstellen\"],\"nNwvm4\":[\"Fehler\"],\"nOVim5\":[\"Speichern der Verbindung fehlgeschlagen\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Erfordert Erweiterung: \",[\"0\"]],\"ngO6Pv\":[\"Erlaubt der Eingabetaste (zusätzlich zu Tab), den aktiven Autovervollständigungsvorschlag zu übernehmen. Bei deaktivierter Option fügt Enter immer einen Zeilenumbruch ein.\"],\"nhmF3p\":[\"Verbindungen\"],\"noM5A_\":[\"Erstelle deine erste Verbindung\"],\"nohy4m\":[\"Noch keine MCP-Aktivität.\"],\"nr-axf\":[\"Plugin entfernen\"],\"nsPFX9\":[\"In Visual Explain öffnen\"],\"nuBbBr\":[\"Diagramm\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Ändern\"],\"o21Y-P\":[\"Einträge\"],\"o3tP_A\":[\"Index löschen\"],\"o45L8r\":[\"Gib deinen Verbindungsnamen an\"],\"o53XGh\":[\"Ausgewählte Zeile(n) kopieren\"],\"o7J4JM\":[\"Filter\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Level\"],\"oGiIL7\":[\"Standard-Anbieter\"],\"oJ4rAm\":[\"Verbindung verloren\"],\"oJlXF2\":[\"Notebook importieren\"],\"oMFv82\":[\"Vertikal teilen\"],\"oOFiQg\":[\"Begrenzt die Anzahl der pro Abfrage geladenen Zeilen, um Performance-Probleme zu vermeiden. Setze den Wert auf 0, um die Begrenzung zu deaktivieren (nicht empfohlen).\"],\"oT9ZD3\":[\"Übersicht ausblenden\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Diagramm geändert (Zelle \",[\"n\"],\")\"],\"oWfclW\":[\"Zeigt JSON-Viewer-Bedienelemente, wenn eine nicht typisierte Text-Zelle ein JSON-Objekt oder -Array enthält. Verursacht kleine Parse-Kosten pro Zelle.\"],\"obpbdz\":[\"Konfigurationsdatei nicht gefunden (manuell erstellen)\"],\"odZgfC\":[\"KI-CLIENTS\"],\"ogZhXn\":[\"Wähle die Standard-Layout-Richtung für ER-Diagramme\"],\"ohUJJM\":[\"Plugins\"],\"ok3hJJ\":[\"Installiert\"],\"olAdaI\":[\"Tatsächliche Zeilen\"],\"olWzar\":[\"Plugin-Prozess zwangsweise beenden\"],\"ovBPCi\":[\"Standard\"],\"owzTWN\":[\"KI-Modelle von Anbietern aktualisiert\"],\"oxYi6j\":[\"Passt die in der gesamten Anwendung verwendete Grundschriftgröße an (10-20 px).\"],\"p--hsQ\":[\"Eine Datenbankverbindung wurde verloren\"],\"p6NueD\":[\"NEU\"],\"pOYHox\":[\"Aktionen\"],\"pR9bTR\":[\"Keine BLOB-Daten\"],\"pRDT0m\":[\"Tabelle\"],\"pS8S5q\":[\"z. B. users, orders, products\"],\"pSws_M\":[\"Tabellenname\"],\"pVLbKZ\":[\"Ansicht erfolgreich erstellt\"],\"pWT04I\":[\"Prüfung läuft...\"],\"pZJ_6D\":[\"Indexname ist erforderlich\"],\"pddYFG\":[\"Prompt für Notebook-Zellnamen eingeben...\"],\"pnpyuD\":[\"Logging aktivieren\"],\"pqKMPv\":[\"Erstellen der Tabelle fehlgeschlagen: \"],\"pqaP1h\":[\"Schließen\"],\"pqarBu\":[\"Aufst.\"],\"ptuq35\":[\"z. B. Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"Andere bleiben nur lesbar. Nur markierte dürfen schreiben.\"],\"qIrtcK\":[\"Updates\"],\"qOqy8G\":[\"Konfiguration wird geprüft...\"],\"qWaVNs\":[\"Speichern und neu starten\"],\"qb3LPX\":[\"ER-Diagramm anzeigen\"],\"qkK0vq\":[\"Ansichtsname ist erforderlich\"],\"qki9tG\":[\"Fehler\"],\"qoIir-\":[\"Die Basis-URL deiner OpenAI-kompatiblen API. Beispiele: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Alle einklappen\"],\"r6ncaO\":[\"Tab schließen\"],\"rAJlpP\":[\"Container-Port\"],\"rG3WVm\":[\"Lesen\"],\"rGRCeK\":[\"Abfrageverlauf löschen\"],\"rNIto7\":[\"Der Ressourcenname ist erforderlich\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook erfolgreich exportiert\"],\"rY4sEV\":[\"FK löschen\"],\"rbu0nO\":[\"SSH-Verbindungen verwalten\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Verbindung(en)\"],\"other\":[\"#\",\" Verbindung(en)\"]}]],\"rn2_2V\":[\"Filter entfernen\"],\"roABNH\":[\"Kein Abfrageverlauf\"],\"rtir7c\":[\"unbekannt\"],\"ru0-2W\":[\"Keine aktiven Verbindungen\"],\"rvDPWO\":[\"Größte Schätzabweichung\"],\"rwWjWg\":[\"Release Notes\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Verbindung testen\"],\"sBOaim\":[\"Die Konfigurationsdatei wurde gespeichert. Jetzt neu starten, um die Änderungen anzuwenden?\"],\"sCyv9B\":[\"Modelle aktualisieren\"],\"sSUqe4\":[\"Löschen\"],\"sUBkgN\":[\"SQL wird generiert...\"],\"sZZG3d\":[\"Möchtest du \\\"\",[\"0\"],\"\\\" wirklich importieren?\\nDadurch können vorhandene Daten überschrieben werden.\"],\"sbK5ck\":[\"Verlauf durchsuchen...\"],\"sq_bS6\":[\"Bei Löschen\"],\"suW7-E\":[\"Verbindungs-Timeout in Millisekunden.\"],\"t-R8-P\":[\"Ausführung\"],\"t1OfVY\":[[\"totalLibraries\"],\" Bibliotheken\"],\"t2TMzs\":[\"Tab schließen\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Tabelle auswählen...\"],\"t7KRl1\":[\"Protokoll aller MCP-Aufrufe und ausstehender Freigaben. Lokal gespeichert.\"],\"t9NJIk\":[\"Scan-lastige Operationen erkannt\"],\"tB7xof\":[\"Temporäre oder Sortier-Operationen\"],\"tBBXTO\":[\"Ping-Intervall\"],\"tFrT3w\":[\"Füge dies manuell zur Konfigurationsdatei deines Clients hinzu, falls die automatische Installation fehlschlägt.\"],\"tJ7UbA\":[\"fokussierte erklären\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Horizontal teilen\"],\"tQhW-D\":[\"Log-Einstellungen\"],\"tXFGEx\":[\"Keine Kubernetes-Verbindungen gespeichert. Klicke auf „Hinzufügen“, um eine zu erstellen.\"],\"tXLz_8\":[\"Löschen\"],\"tXpRby\":[\"Datenraster\"],\"tbysEk\":[\"Aktionen\"],\"tdta9X\":[\"Seite \",[\"0\"]],\"tfDRzk\":[\"Speichern\"],\"tfEioV\":[\"Alle SQL-Zellen von oben nach unten ausführen\"],\"tiAIaJ\":[\"SSH-Passwort fehlt. Bitte erneut eingeben.\"],\"tk22BR\":[\"Strukturierte Daten einfügen und Schema vor dem Import prüfen\"],\"tst44n\":[\"Ereignisse\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL-Datei erfolgreich ausgeführt\"],\"u6QeR6\":[\"Jetzt neu starten\"],\"uAQUqI\":[\"Status\"],\"uBAxNB\":[\"Editor\"],\"uFViPK\":[\"Keine SSH-Verbindungen verfügbar\"],\"uHUuhp\":[\"Diese Abfrage erklären\"],\"uHfFzS\":[\"Editor-Schriftgröße\"],\"uJ_3K5\":[\"Notebook \\\"\",[\"0\"],\"\\\" löschen? Dies kann nicht rückgängig gemacht werden.\"],\"uKaNJ3\":[\"Im JSON-Editor öffnen\"],\"uQBwTo\":[\"Schemata\"],\"ub54ff\":[\"Plugin-Center\"],\"ufFyBs\":[\"Datenbank erfolgreich exportiert\"],\"upNmR2\":[\"Seitenleisten-Editor öffnen\"],\"utMia3\":[\"Alle abwählen\"],\"uyNaJg\":[\"1 Element\"],\"v61dnS\":[\"Gib den exakten Modellnamen für deinen OpenAI-kompatiblen Anbieter ein.\"],\"v6oeyr\":[\"Installiert\"],\"v75DGg\":[\"Datei auswählen\"],\"v99dO4\":[\"Primärschlüssel\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Abfragen gefunden\"],\"other\":[\"#\",\" Abfragen gefunden\"]}]],\"vCSBPD\":[\"Filter hinzufügen\"],\"vH7uJj\":[\"Sortieren nach…\"],\"vUOA1-\":[\"Modelle suchen...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE enthält tatsächliche Zeilen, Laufzeit, Schleifen und Buffer-Zähler, sofern verfügbar.\"],\"vXIe7J\":[\"Sprache\"],\"vYf4Jm\":[\"Gib eine vollständige SQL-Funktion ein (z. B. ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Bevorzugen\"],\"vditm4\":[\"Plan erklären\"],\"vks_ls\":[\"Andere Tabs schließen\"],\"vnAnIp\":[\"Modell \",[\"0\"],\" wurde in \",[\"1\"],\" nicht gefunden. Es funktioniert möglicherweise nicht korrekt.\"],\"vqoN5u\":[\"Struktur\"],\"vrAvbP\":[\"Möchtest du die Gruppe \\\"\",[\"0\"],\"\\\" wirklich löschen? Verbindungen in dieser Gruppe werden in Ungruppiert verschoben.\"],\"vtJ2yO\":[\"Explorer\"],\"vujQJ5\":[\"Lokalisierung\"],\"vvJPVL\":[\"Übersicht anzeigen\"],\"vwI5S4\":[\"Erfolg\"],\"vzH-7Z\":[\"Erklären\"],\"w7QmD_\":[\"System-Prompt eingeben...\"],\"w9eMXw\":[\"Trigger\"],\"wCJFlW\":[\"Verstrichene Zeit\"],\"wCfv2R\":[\"Verbindung hinzufügen\"],\"wGfc86\":[\"Gesamten Verlauf löschen\"],\"wGwNv4\":[\"Aktive Datenbank\"],\"wJJ-Wy\":[\"Wird installiert...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffer-Treffer\"],\"wQn-RM\":[\"Spalte hinzufügen\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Angewendet\"],\"wTmVhm\":[\"Löschen\"],\"wZeIWq\":[\"Aus Zwischenablage importieren\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"Ausstehend\"],\"wckWOP\":[\"Verwalten\"],\"wdYcKH\":[\"Geöffnete Tabs\"],\"wja8aL\":[\"Ohne Titel\"],\"wkOAzk\":[\"Keine Notebooks entsprechen der Suche.\"],\"wp49Ao\":[\"Verarbeitung von Einfügungen fehlgeschlagen: \"],\"wqG2hQ\":[\"Überspringen (nicht importieren)\"],\"wwrAsK\":[\"Bitte fülle alle erforderlichen Felder aus\"],\"wwu18a\":[\"Symbol\"],\"x2fr_j\":[\"Graph\"],\"xANKBj\":[\"Funktionen\"],\"xBwjck\":[\"Ein Neustart ist erforderlich, um Änderungen anzuwenden.\"],\"xDAtGP\":[\"Nachricht\"],\"xECY01\":[\"Prozeduren\"],\"xGPNgZ\":[\"Prompt-Anpassung\"],\"xNgtS-\":[\"Keine Ansichten gefunden\"],\"xOPa1b\":[\"Der Port muss zwischen 1 und 65535 liegen\"],\"xY9s5E\":[\"Zeitüberschreitung\"],\"xaVUr1\":[\"Franz jagt im komplett verwahrlosten Taxi quer durch Bayern\"],\"xbvTzL\":[\"Dateipfad\"],\"xlew5F\":[\"Leeren\"],\"xmNyKz\":[\"Wird getestet...\"],\"xtuh6D\":[\"Explorer ausklappen\"],\"y-Zdqj\":[\"Kontext auswählen...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"JSON-Viewer öffnen\"],\"yQXjG5\":[\"Alle abwählen\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Gestern\"],\"ygCKqB\":[\"Stopp\"],\"ykCc6r\":[\"Datenbank geändert (Zelle \",[\"n\"],\")\"],\"ynVMSc\":[\"Alle auswählen\"],\"ytdz1d\":[\"KI möchte in die Datenbank schreiben\"],\"yyhzur\":[\"Tabelle erstellen\"],\"yz7wBu\":[\"Schließen\"],\"z0VdfR\":[\"Routine\"],\"z407wX\":[\"SSH-Passwort\"],\"z5kV0h\":[\"Verbindungen\"],\"zBTMzx\":[\"Vorschau\"],\"zCaAKs\":[\"Update-Fehler\"],\"zDAakK\":[\"Diagramm kann ohne Verbindungs-ID nicht angezeigt werden.\"],\"zGe21h\":[\"Dieser Schlüssel wird aus einer Umgebungsvariable geladen\"],\"zGfL5t\":[\"wert\"],\"zL6-4A\":[\"Es laufen keine Plugin-Prozesse\"],\"zLZhCi\":[\"Neue Discord-Community!\"],\"zLlCou\":[\"Spaltennamen kopieren\"],\"zNEL34\":[\"Der Community beitreten\"],\"zNgTlV\":[\"Tabs rechts schließen\"],\"zQz55p\":[\"Struktur anzeigen\"],\"zR0FfH\":[\"Exportiert nach \",[\"target\"]],\"zRZeOc\":[\"Tabellen, Views, Routinen, Trigger suchen...\"],\"zUNMsr\":[\"SSH-Schlüssel\"],\"zXMRzb\":[\"SSH-Port\"],\"zZgoXr\":[\"Keine passende Tabelle\"],\"zaWbms\":[\"Änderungen zurückrollen\"],\"zgClmU\":[\"Konfiguration installieren\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Wert eingeben...\"],\"zvzN4C\":[\"Als aktiv festlegen\"],\"zzDlyQ\":[\"Erfolg\"],\"zzMxrp\":[\"config.json bearbeiten\"],\"zz_Wd_\":[\"Modus\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Maximale Verlaufseinträge\"],\"-6AWa-\":[\"Verbindungen importieren\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Trennen\"],\"-PLZfh\":[\"Aktualisierung der Modelle fehlgeschlagen\"],\"-T5W2e\":[\"Treiberhinweise\"],\"-ZgeeE\":[\"Bearbeitungsverlauf\"],\"-aYrdc\":[\"Version \",[\"0\"],\" ist verfügbar\"],\"-fBGXl\":[\"Höchste Kosten\"],\"-jIQDz\":[\"Zelle einklappen\"],\"-u1eRo\":[\"Keine Datenbank\"],\"-yoeVU\":[\"Schema wird geladen...\"],\"-zy2Nq\":[\"Typ\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"Freigabe-ID\"],\"0E5-gF\":[\"Möchtest du diese Verbindung wirklich löschen?\"],\"0HCubq\":[\"Vergrößern\"],\"0Kmdvy\":[\"Benutzerdefinierte Schrift\"],\"0Nj13E\":[\"SQL generieren\"],\"0ROgz5\":[\"JSON eingeben...\"],\"0SY9sU\":[\"Trennen von der Datenbank fehlgeschlagen\"],\"0b3kL9\":[\"Datenbank auswählen\"],\"0caMy7\":[\"Verlauf\"],\"0mx5ow\":[\"Abfrage\"],\"0n9BtL\":[\"Vorschau\"],\"0pHB9N\":[\"Als table.column kopieren\"],\"0sQzZK\":[\"Datenbanken filtern...\"],\"0uPP9X\":[\"FK-Name (optional)\"],\"0wxuek\":[\"Aktuelle Version\"],\"0x09Aw\":[\"Bei Fehler stoppen umgeschaltet\"],\"0yBP6v\":[\"Entwicklung unterstützen\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen\"],\"other\":[\"#\",\" Zeilen\"]}]],\"0yVAoD\":[\"Zeilen zählen\"],\"0zxJ87\":[\"Keine Logs verfügbar\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Ansicht bearbeiten\"],\"11fGJ6\":[\"Abfragen\"],\"13hIUA\":[[\"0\"],\" API-Schlüssel\"],\"14qNWF\":[\"SSH-Verbindung auswählen\"],\"17qHRP\":[\"Neue Verbindung\"],\"1Dn6bg\":[\"Aus Zwischenablage importieren\"],\"1Dnd0I\":[\"Zeilenanzahl laden\"],\"1FjTLW\":[\"z. B. python3\"],\"1GOvbo\":[\"Ollama verbunden (\",[\"0\"],\" Modelle gefunden)\"],\"1I6UoR\":[\"Ansichten\"],\"1U7hS5\":[\"Länge\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Editor-Schriftfamilie\"],\"1ekzlY\":[\"Plugin-Prozesse\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Themaauswahl\"],\"1xVZkL\":[\"Keine Modelle gefunden\"],\"26Joci\":[[\"0\"],\" Zeilen abgerufen\"],\"2Bf-Qe\":[\"Neue Konsole\"],\"2CrSmP\":[\"Hilf tabularis zu wachsen\"],\"2D9F8_\":[\"Duplizieren der Verbindung fehlgeschlagen\"],\"2Eoi_a\":[\"Details anzeigen\"],\"2F4pE5\":[\"Rust-Build und Tests\"],\"2Fsd9r\":[\"Diesen Monat\"],\"2JzKXI\":[\"GENERATED setzen\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Alle auswählen\"],\"2SO5RM\":[\"Kubernetes ist für diesen Treiber nicht verfügbar.\"],\"2Uh5GA\":[\"Cargo-Ökosystem\"],\"2YylFp\":[\"Neue visuelle Abfrage\"],\"2luuSG\":[\"Erneut versuchen\"],\"2wxgft\":[\"Umbenennen\"],\"2yG2GC\":[\"Pausiert Schreibvorgänge (oder jede Abfrage) und fragt den Nutzer vor der Ausführung.\"],\"30-b5r\":[\"Löschen\"],\"31kwdN\":[\"Filter duplizieren\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Alle Tools\"],\"3Am5DS\":[\"Tab-Ansicht\"],\"3FVg9_\":[\"Lokale Spalte\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Ausführen\"],\"3L0HCz\":[\"Keine Plugins entsprechen der Suche.\"],\"3Nv3JV\":[\"Abfrage wird ausgeführt...\"],\"3TSz9S\":[\"Minimieren\"],\"3UW8fG\":[\"Updates werden von \",[\"0\"],\" verwaltet\"],\"3YvS-c\":[\"Neuer Tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook-Zellnamen-Prompt\"],\"3qkggm\":[\"Vollbild\"],\"3rBJ1T\":[\"Schema anzeigen\"],\"3xZ-xV\":[\"Aktuellen Zeitstempel einfügen\"],\"40Gx0U\":[\"Zeitzone\"],\"41GP4f\":[\"Wähle das Standard-Trennzeichen für das Kopieren oder Exportieren von Zeilen als CSV.\"],\"42iaEi\":[\"PostgreSQL ohne ANALYZE zeigt nur Schätzungen des Planners.\"],\"44cXI8\":[\"Nach \",[\"colName\"],\" ASC sortieren\"],\"4AF7FO\":[\"Datenbanken verwalten\"],\"4CK17g\":[\"Möchtest du die Ansicht \\\"\",[\"name\"],\"\\\" wirklich ändern?\"],\"4DDaw-\":[\"Wähle mindestens eine Datenbank aus\"],\"4D_Nvt\":[\"Erstellen der Gruppe fehlgeschlagen\"],\"4RiR6c\":[\"Als HTML exportieren\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Kindprozess\"],\"other\":[\"#\",\" Kindprozesse\"]}]],\"4VyuY3\":[\"Möchtest du wirklich alle Logs löschen?\"],\"4WWqS3\":[\"JSON-Baum ein-/ausklappen\"],\"4XAQdl\":[\"Index erstellen\"],\"4cEClj\":[\"Sitzungen\"],\"4cmfYp\":[\"Zeile duplizieren\"],\"4hsr6d\":[\"Ansicht erstellen\"],\"4lIZTB\":[\"Frontend-Entwicklungsabhängigkeiten\"],\"4oYjvJ\":[\"In Abfrage suchen…\"],\"4tMxW4\":[\"Verknüpften Datensatz anzeigen\"],\"4yJcjm\":[\"Typ auswählen...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Filterpanel schließen (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Semikolon (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Ereignis\"],\"other\":[\"#\",\" Ereignisse\"]}]],\"5I2fxu\":[\"/pfad/zu/id_rsa\"],\"5NZpX8\":[\"Listenansicht\"],\"5To6Z6\":[\"Abfrage kopieren\"],\"5gqNQl\":[\"Rasteransicht\"],\"5igIzr\":[\"Import abgebrochen\"],\"5nTIup\":[\"Ansicht wird bearbeitet: \",[\"name\"]],\"5qIe8E\":[\"Alle ausführen\"],\"66bEht\":[\"Projektstatus\"],\"6PIJVc\":[\"Start\"],\"6QvP0l\":[\"Als JSON exportieren\"],\"6W41Xq\":[\"Task-Manager\"],\"6WngBH\":[\"NULL setzen\"],\"6YtxFj\":[\"Name\"],\"6_dCYd\":[\"Übersicht\"],\"6dOBsk\":[\"Ansicht erstellen\"],\"6gvoHP\":[\"Fehlermeldung kopieren\"],\"6oCVzX\":[\"Der Kubernetes-Kontext ist erforderlich\"],\"6wQO0f\":[\"Daten anzeigen\"],\"6z9W13\":[\"Neu starten\"],\"71agNy\":[\"Namen für unbenannte Zellen mit KI generieren\"],\"74J3FG\":[\"Erste Version\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Verstanden\"],\"77nSMU\":[\"Den gesamten KI-Aktivitätsverlauf löschen? Unwiderruflich.\"],\"7ABmyQ\":[\"Erneut versuchen\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" von \",[\"0\"],\" aktiv\"],\"7E864M\":[\"Datenbanktyp\"],\"7FqaG1\":[\"Passe die Anweisungen für die KI-Analyse von EXPLAIN-Abfrageplänen an. Verwende \",[\"LANGUAGE\"],\" für die Ausgabesprache.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Gemischte Typen erkannt, Standard TEXT\"],\"7RSQQd\":[\"Passwörter im Keychain speichern\"],\"7VpPHA\":[\"Bestätigen\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fehlgeschlagen\"],\"7sMeHQ\":[\"Schlüssel\"],\"7sNhEz\":[\"Benutzername\"],\"7tATh2\":[\"Abfrage ausführen\"],\"7yb4gk\":[\"Fehlgeschlagen: \"],\"8-4V8D\":[\"Tabellen\"],\"82G-l5\":[\"Das Model Context Protocol (MCP) ermöglicht KI-Assistenten (wie Claude), sich mit deinen lokalen Tools zu verbinden. Tabularis stellt einen MCP-Server bereit, über den KI dein Datenbankschema lesen und Abfragen sicher ausführen kann.\"],\"83VjWE\":[\"Neues Notebook\"],\"86IgoU\":[\"Abfrage ausführen (im Editor)\"],\"86fCgf\":[\"Passe die Anweisungen für die KI-Namensgenerierung von Abfrage-Ergebnis-Tabs an. Die SQL-Abfrage wird als Benutzernachricht gesendet.\"],\"87a_t_\":[\"Beschriftung\"],\"87kWsr\":[\"Verbindungen exportieren\"],\"8CWirf\":[\"MCP-Server\"],\"8S8aIX\":[\"Verbindungszustandsprüfung\"],\"8TMaZI\":[\"Zeitstempel\"],\"8Tg_JR\":[\"Benutzerdefiniert\"],\"8UFKYr\":[\"Abfrage zum Ausführen auswählen\"],\"8VKSGV\":[\"SQL generieren\"],\"8Wjy6z\":[\"Tabs links schließen\"],\"8ZsakT\":[\"Passwort\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL-Editor\"],\"8bRgTe\":[\"KI-Anbieter nicht konfiguriert. Bitte gehe zu Einstellungen > KI.\"],\"8c_W0h\":[\"Ältere Versionen\"],\"8guEQP\":[\"Ansichten aktualisieren\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN ist leichtgewichtig und hauptsächlich strukturell.\"],\"8q_sOc\":[\"Entfernen\"],\"8t-akp\":[\"erste \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Verbindungsname\"],\"91gnWY\":[\"Logs exportieren\"],\"91rtHL\":[\"Neue Ansicht erstellen\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Neue Gruppe\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Ansicht erfolgreich aktualisiert\"],\"9NzDFn\":[\"Willkommensbildschirm beim Start der Anwendung anzeigen.\"],\"9OoUS3\":[\"Neue SSH-Verbindung erstellen\"],\"9QGRD5\":[\"Zielspalte\"],\"9QTny9\":[\"Abfrage fehlgeschlagen.\"],\"9S-fyV\":[\"Vorab-Ausführungsplan\"],\"9SJ_Sx\":[\"Systemressourcen\"],\"9UQ730\":[\"Klonen\"],\"9X6cky\":[\"NEIN\"],\"9XUV5V\":[\"Keine Daten in der Zwischenablage\"],\"9hGjL2\":[\"Index erstellen\"],\"9mMU1R\":[\"Zeit\"],\"9mvFo_\":[\"Zeit\"],\"9npOH9\":[\"Datei öffnen\"],\"9uI_rE\":[\"Rückgängig\"],\"9xUjzm\":[\"Alle auswählen\"],\"9y_02p\":[\"Mit der Community chatten, Hilfe bekommen, Features vorschlagen\"],\"A1pPcI\":[\"SSH-Host\"],\"A1taO8\":[\"Suchen\"],\"A6C0pv\":[\"Gesamtkosten\"],\"A7WG0p\":[\"Plugin deaktiviert\"],\"A7yRz3\":[\"Ansichtsdefinition ist erforderlich\"],\"A9Uyp6\":[\"Import fehlgeschlagen: \"],\"ABEd-z\":[\"Verwende deinen Paketmanager, um Tabularis zu aktualisieren.\"],\"AMdgKV\":[\"Prompt für Explain-Plan-Analyse\"],\"ANSTMe\":[\"In der aktuellen Planzusammenfassung wurden keine größeren Probleme erkannt.\"],\"ANzIr7\":[\"Abfrageverlauf\"],\"AOnaU7\":[\"übersprungen\"],\"AVlZoM\":[\"Umgebung\"],\"AXTVsE\":[\"Vollständig prüfen\"],\"AXdRYR\":[\"Aktuelle Logs\"],\"Aa-YkQ\":[\"Notebook exportieren\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Nach Level filtern\"],\"AlPiMN\":[\"Klicken, um zur Seite zu springen\"],\"An-1rA\":[\"Zeilen zurück\"],\"AnV8j-\":[\"Spalte ändern\"],\"AvEr_L\":[\"Neue Konsole\"],\"AvYbUL\":[\"Auf GitHub mit Stern markieren\"],\"Aw_eOs\":[\"Erfordert Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Keine Ergebnisse gefunden\"],\"B0mJGb\":[\"Rohausgabe\"],\"B1c58n\":[\"Spalte ändern\"],\"B3toQF\":[\"Objekte\"],\"B5nKny\":[\"/absoluter/pfad/zum/ordner\"],\"B5xevr\":[\"Der Verbindungsname ist erforderlich\"],\"BAVvWJ\":[\"ER-Diagramm\"],\"BBtVak\":[\"Alle einklappen\"],\"BEVzjL\":[\"Import fehlgeschlagen\"],\"BHATjK\":[\"Verbindungen exportieren\"],\"BJe2lZ\":[\"Seitenleiste umschalten\"],\"BK3WCj\":[\"Laden des Registry fehlgeschlagen\"],\"BKbO3i\":[\"Notebook bearbeitet\"],\"BMB51y\":[\"In Konsole ausführen\"],\"BNW_Z4\":[\"z. B. active_users, order_summary\"],\"BPkXj7\":[\"Fremdschlüssel erstellen\"],\"BUO_JN\":[\"Abfrage kopieren\"],\"BYkhHY\":[\"Beim Start nach Updates suchen\"],\"BeSg6-\":[\"Anwendungslogs zur Fehlersuche im Speicher sammeln\"],\"BgAyQH\":[\"Sortierung löschen\"],\"BinTJI\":[\"npm-Ökosystem\"],\"BkFson\":[\"Automatisch paginiert\"],\"Bpglf1\":[\"Nach oben\"],\"BrGo6h\":[\"Notebooks suchen\"],\"BxiAN_\":[\"Abfrage löschen\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Frontend-Abhängigkeiten\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Keine Filter —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Wird heruntergeladen...\"],\"CUxwxn\":[\"Alle Tabellen anzeigen\"],\"CWMXbw\":[\"stoppt den Prozess sofort. Alle aktiven Datenbankverbindungen über dieses Plugin funktionieren erst wieder, wenn das Plugin neu gestartet wird.\"],\"CZt6BX\":[\"MANUELLE KONFIGURATION\"],\"Ca8ixZ\":[\"Löschen\"],\"CbJBQS\":[\"Aktualisierung fehlgeschlagen: \"],\"Cdz-YU\":[\"Gestapelte Ansicht\"],\"CpeQf9\":[\"Schleifen\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Wähle das Modell, das für Generierung und Erklärung verwendet werden soll.\"],\"DB8zMK\":[\"Anwenden\"],\"DDXf5E\":[\"SQL-Funktionen\"],\"DEwnwi\":[\"Löschen\"],\"DNTvdl\":[\"Im Editor öffnen\"],\"DPc2P9\":[\"Zelle löschen\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Zeilenhöhe\"],\"Dd7YLj\":[\"Vielleicht später\"],\"Deej3j\":[\"Ungültiges JSON\"],\"DfKhk_\":[\"Aktualisieren\"],\"DiRiTz\":[\"Paketseite öffnen\"],\"DlRHAD\":[\"EXPLAIN wird ausgeführt...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Fehler\"],\"other\":[\"#\",\" Fehler\"]}]],\"Dvdihe\":[\"Auf \",[\"0\"],\" — vor Ausführung prüfen.\"],\"DzFLzw\":[\"JA\"],\"E-JUtQ\":[\"Freigabe\"],\"E0kcnZ\":[\"Allgemein\"],\"E2mje_\":[\"Abfrage zum Erklären auswählen\"],\"EDieyg\":[\"Möchtest du diese SSH-Verbindung wirklich löschen?\"],\"EHZxPj\":[\"Aufklappen\"],\"EL4oDO\":[\"Neue Version verfügbar\"],\"EPi4gT\":[\"Sortieren nach \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Ungruppiert\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Unbekannt\"],\"EhADgB\":[\"Spalte löschen\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Du bist auf dem neuesten Stand\"],\"Em6JFd\":[\"Zeilen zählen\"],\"EnGiqG\":[[\"0\"],\" Elemente\"],\"Ew1n5z\":[\"Plugins suchen…\"],\"F18WP3\":[\"Parameter\"],\"F3uc1x\":[\"Die exportierte Datei enthält deine Datenbank- und SSH-Passwörter im Klartext. Bewahre sie sicher auf.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" Zeilen\"],\"other\":[\"#\",\" Zeilen\"]}]],\"F6pfE9\":[\"Aktiv\"],\"F8tXg7\":[\"Datenvorschau\"],\"F9-6yK\":[\"Standard-Kopierformat\"],\"F9lxfG\":[\"Entfernen\"],\"F9nsa2\":[\"Die Verlaufsdatei war beschädigt und wurde beiseitegelegt. Neue Abfragen werden wie gewohnt aufgezeichnet. Sicherungsdatei:\"],\"FF_oap\":[\"Standardwert\"],\"FK8rlP\":[\"Noch keine SSH-Verbindungen konfiguriert\"],\"FMRcH8\":[\"Erste Zeile als Kopfzeile\"],\"FNvDMc\":[\"Diese Woche\"],\"FQe1FI\":[\"Geschätzte Zeilen\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warnung\"],\"FZg3wM\":[\"Operation\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Wähle ein unabhängiges Thema für den SQL-Editor oder halte es mit dem App-Thema synchron.\"],\"FsvZQL\":[\"Zelle \",[\"n\"],\" bearbeitet\"],\"FtwKL9\":[\"Tab wechseln\"],\"FznI3z\":[\"Fremdschlüssel \\\"\",[\"name\"],\"\\\" löschen?\"],\"G6W8j1\":[\"Vorschau fehlgeschlagen: \"],\"G8Q5Zq\":[\"Der Namespace ist erforderlich\"],\"GAohqx\":[\"Spalte löschen\"],\"GJR99u\":[\"Löschen der Spalte fehlgeschlagen: \"],\"GKfzzM\":[\"Verbindung auswählen...\"],\"GS-Mus\":[\"Exportieren\"],\"GUaLUq\":[\"Laden des Schemas fehlgeschlagen: \"],\"GXP-Iw\":[\"SQL-Zelle hinzufügen\"],\"Gj1mLb\":[\"Zellen neu angeordnet\"],\"GlbqG2\":[\"Auf Treiber-Standard zurücksetzen\"],\"Gq1YzP\":[\"Ereignisse\"],\"Gs5AlY\":[\"Öffnen\"],\"GtmO8_\":[\"von\"],\"GxkJXS\":[\"Wird hochgeladen...\"],\"H-o4D2\":[\"Neue Spalte erstellen\"],\"H2B-KW\":[\"Wähle das Standardformat beim Kopieren von Zeilen mit Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Wiederholen\"],\"H7mlCc\":[\"/absoluter/pfad/zu/db.sqlite\"],\"H86f9p\":[\"Verkleinern\"],\"H9P8CD\":[\"den ersten Filter hinzufügen\"],\"HAQlGl\":[\"KI-Aktivität\"],\"HKNZrs\":[\"Index-Bedingung\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"#\",\" Zeilen löschen\"],\"other\":[\"#\",\" Zeilen löschen\"]}]],\"HPuCiP\":[\"Ordnerpfad\"],\"HUs1R3\":[\"Keine geöffneten Tabs für diese Verbindung.\"],\"HV4Isp\":[\"SSH-Passwort eingeben\"],\"HVC8Hh\":[\"In Zwischenablage kopiert\"],\"HWEpq8\":[\"Datenträger schreiben/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Speichern der Ansicht fehlgeschlagen: \"],\"He8v1Y\":[\"Von \\\"Alle anwenden\\\" abwählen\"],\"HehHP1\":[\"Standard-Layout\"],\"HilYn4\":[\"Dieses Notebook ist leer. Füge eine Zelle hinzu, um zu beginnen.\"],\"HjxVK_\":[\"Schneller Verbindungstest\"],\"HmMnRx\":[\"WKT-Modus\"],\"HoKCiI\":[\"Die App wird nach der Installation automatisch neu gestartet\"],\"HpK_8d\":[\"Neu laden\"],\"Hpi4Jm\":[\"Jetzt beitreten\"],\"HuA3RU\":[\"Tabulator\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"SSH inline konfigurieren\"],\"I5VBsr\":[\"Wie App\"],\"I8yrPb\":[\"Tabelle ersetzen\"],\"I92BdB\":[\"Aus Gruppe entfernen\"],\"I92fr4\":[\"Später erinnern\"],\"I99Miw\":[\"Kosten\"],\"IETZIR\":[\"Zellnamen bearbeiten\"],\"IG9wzA\":[\"Einfügen der Zeile fehlgeschlagen: \"],\"ILleOG\":[\"Der Ressourcentyp muss \\\"service\\\" oder \\\"pod\\\" sein\"],\"IQ3gAw\":[\"Datei hochladen\"],\"IUwGEM\":[\"Änderungen speichern\"],\"IUwmLq\":[\"Direkte Abhängigkeiten, deklariert in package.json und src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Open-Source-Bibliotheken\"],\"I_43p6\":[\"Sicherheit\"],\"Iaizf4\":[\"Darstellung\"],\"Il3FBB\":[\"Strukturiertes Filterpanel ein-/ausblenden\"],\"IniZRK\":[\"Download nicht verfügbar - nur Vorschau geladen\"],\"Isaozb\":[\"Überprüfen & anpassen\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Aktive Abfragen und Verbindungen über dieses Plugin werden unterbrochen.\"],\"J6v1s_\":[\"Standard-Modell\"],\"JE-DVk\":[\"Interpreter\"],\"JEGlfK\":[\"Start\"],\"JKDPqP\":[\"Zuerst einen Kontext auswählen\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"SSH-Tunnel verwenden\"],\"JRz8tw\":[\"MySQL und MariaDB liefern echte Metriken nur bei unterstützten EXPLAIN ANALYZE- oder ANALYZE FORMAT-Varianten.\"],\"JUICth\":[\"PNG, JPG, WebP oder SVG · max. 512 KB\"],\"JY5Oyv\":[\"Datenbank\"],\"JlFRIB\":[\"Sitzungszeitzone, die nach dem Verbindungsaufbau an MySQL gesendet wird.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Abgelehnt\"],\"K3H9p5\":[\"Nicht gesetzt\"],\"K5Dgu_\":[\"Datenbanken\"],\"K8IGKf\":[\"Authentifizierungstyp\"],\"KAYNSW\":[\"Wie viele Logs im Speicher behalten werden sollen (1-10000)\"],\"KHTGbr\":[\"Vorab-EXPLAIN\"],\"KHvda8\":[\"Nicht Null\"],\"KJKNaZ\":[\"Als `column` kopieren\"],\"KM5Kc8\":[\"Mindestens eine Spalte muss ausgewählt werden\"],\"KSCnVQ\":[\"Typ\"],\"KUjOb9\":[\"läuft\"],\"KXBdwy\":[\"Routinen aktualisieren\"],\"KXNyX7\":[\"DEFAULT setzen\"],\"Kd70-v\":[\"Aus Zwischenablage importieren...\"],\"KhI4oS\":[\"Referenzierte Zeile in \",[\"0\"],\" öffnen\"],\"KhgrNu\":[\"MCP-Server-Integration\"],\"KirERL\":[\"Zeitüberschreitung\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Löschen des Index fehlgeschlagen: \"],\"KzeARD\":[\"Löschen der Tabelle fehlgeschlagen: \"],\"L-rMC9\":[\"Auf Standard zurücksetzen\"],\"L3HXkQ\":[\"Fehlerbehebungen\"],\"LCZ7Dy\":[\"Namen kopieren\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"Indizes\"],\"LMeAoR\":[\"Zeilen\"],\"LPCdc-\":[\"Prompt für Abfrage-Tabnamen\"],\"LPFmga\":[\"Für \\\"Alle anwenden\\\" auswählen\"],\"LYzbQ2\":[\"Tool\"],\"Lbis_V\":[\"Schnellnavigation\"],\"Lcpbe2\":[\"Der Plugin-Prozess konnte nicht gestartet werden. Prüfe die Fehlerdetails unten.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN wird nur für DML-Statements (SELECT, INSERT, UPDATE, DELETE) unterstützt. DDL-Statements wie CREATE, DROP oder ALTER können nicht erklärt werden.\"],\"LnT0hQ\":[\"Spalte hinzufügen\"],\"LvutiO\":[\"KI-Vorschlag\"],\"M-rHQO\":[\"Vollbild verlassen\"],\"M0XJba\":[\"Möchtest du den gesamten Abfrageverlauf für diese Verbindung wirklich löschen?\"],\"M1co_O\":[\"Konfiguriert\"],\"M73whl\":[\"Kontext\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Alle anzeigen\"],\"MXdOwj\":[\"Verbindungen trennen\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"K8s-Verbindung auswählen\"],\"Mc1tjS\":[\"Aktiviere ANALYZE, um tatsächliche Zeilen, Laufzeit, Schleifen und Buffer zu prüfen.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" weitere Zeilen\"],\"Mp0jQ_\":[\"Dieser Treiber unterstützt Primärschlüssel nur beim Erstellen einer Tabelle\"],\"MqpZwN\":[\"Tabularis-Prozess\"],\"MxIx43\":[\"↑↓ zum Navigieren, Enter zum Öffnen\"],\"MygtgQ\":[\"Markdown-Zelle hinzufügen\"],\"N40H-G\":[\"Alle\"],\"N5UQxq\":[\"Ollama wurde auf Port \",[\"0\"],\" nicht erkannt. Läuft es?\"],\"N6GBcC\":[\"Löschen bestätigen\"],\"N6aqHp\":[\"Ausgeführte Abfragen\"],\"N9_S15\":[\"Eine neue Tabelle wird erstellt\"],\"NBdMa1\":[\"Langsamster Schritt\"],\"NC2AI2\":[\"Länge\"],\"NCzNnx\":[\"Aufsteigend sortieren\"],\"NT4Ubs\":[\"Benutzerdefinierten Schlüssel löschen und auf Umgebungsvariable zurücksetzen (falls vorhanden)\"],\"NUjrCO\":[\"Keine Favoriten entsprechen deiner Suche\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Baum-Gesamt: \",[\"0\"]],\"Nc2VQn\":[\"An bestehende anhängen\"],\"NgFERn\":[\"Zu Favoriten hinzufügen\"],\"NktMHG\":[\"Datenbankname\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Testen\"],\"Nq5QTk\":[\"n-te erklären\"],\"O2STgu\":[\"Export fehlgeschlagen: \"],\"O8SV8O\":[\"Wird heruntergeladen...\"],\"O9_WW6\":[\"Verbindung\"],\"OGEsKj\":[\"Alle Zellen ausführen\"],\"OGWdBg\":[\"Ansichtsname\"],\"OHqT6w\":[\"Tastenkombination drücken...\"],\"OXJsaG\":[\"Ungültiger Parametername\"],\"OfhWJH\":[\"Zurücksetzen\"],\"OlAl5i\":[\"Alle ausklappen\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Discord beitreten\"],\"P1YGsb\":[\"SQL-Generierung\"],\"P2m1xb\":[\"Bei Fehler stoppen\"],\"P3Qlys\":[\"Keine Verbindungs-ID\"],\"P6Y3Yf\":[\"Führe diesen Befehl im Terminal aus und starte anschließend Claude Code neu.\"],\"PCdj-c\":[\"Alle abwählen\"],\"PMnFt9\":[\"Datenträger lesen/s\"],\"PQU2Va\":[\"Vorschlag mit Eingabetaste übernehmen\"],\"PRnH8G\":[\"von \",[\"0\"]],\"PY8UF3\":[\"Parallel umgeschaltet (Zelle \",[\"n\"],\")\"],\"PiH3UR\":[\"Kopiert!\"],\"Pia95d\":[\"Spaltenname ist erforderlich\"],\"PrElXQ\":[\"Aktualisieren\"],\"PrixCC\":[\"Zeilen werden an eine bestehende Tabelle angehängt\"],\"Pujgbb\":[\"Ziel konfigurieren\"],\"Pw_eQV\":[\"Plugin konnte nicht gestartet werden\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Keine gespeicherten Abfragen\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Keine Kindprozesse\"],\"QCxMC0\":[\"Automatisch nach neuen Versionen suchen, wenn die App gestartet wird\"],\"QEazml\":[\"Auswahl löschen\"],\"QHcLEN\":[\"Verbunden\"],\"QLHHFO\":[\"Nur-Lese-Modus\"],\"QOvAW3\":[\"Neue Funktionen\"],\"QULGRi\":[\"Keine gültigen Abfragen gefunden\"],\"QZwllF\":[\"Durchsuchen...\"],\"QbkSr_\":[\"EXPLAIN nicht verfügbar.\"],\"QeHFYZ\":[\"EXPLAIN fehlgeschlagen: \",[\"0\"]],\"Qll2Tb\":[\"Abst.\"],\"Qoq-GP\":[\"Mehr lesen\"],\"Qu4Hog\":[\"Notebook erfolgreich importiert\"],\"R-A2Vd\":[\"Keine Daten zum Anzeigen\"],\"R0Hkb2\":[[\"0\"],\" Datenbank(en) ausgewählt\"],\"R1nHhB\":[\"Bereits vorhanden\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"In Konsole umwandeln\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Einrichtung\"],\"RF-HyV\":[\"Wähle deine bevorzugte Sprache. \\\"Auto\\\" verwendet die Systemsprache.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Namen kopieren\"],\"RI-HZc\":[[\"0\"],\"-Schlüssel eingeben\"],\"RJrE17\":[\"Möchtest du die Ansicht \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Ein Stern hilft anderen, das Projekt zu entdecken\"],\"Rb3Tdm\":[\"Notebook-Name\"],\"RcbKJ3\":[\"Bei Aktualisierung\"],\"RkefFq\":[\"Führt vor dem Modal ein EXPLAIN aus, damit der Plan sichtbar ist.\"],\"RnF_hl\":[\"Plugin-Registry wird geladen...\"],\"Rns7_C\":[\"Diese Aktion kann nicht sofort rückgängig gemacht werden\"],\"RoKRqW\":[\"Verfügbare Plugins\"],\"RphpKk\":[\"Erscheinungsbild\"],\"Rt8sHM\":[\"Sortier- oder temporäre Arbeit erkannt\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Aktiviert\"],\"S1veKH\":[\"Auswahl zurücksetzen\"],\"S5zeZU\":[\"Vorschau umschalten\"],\"S8Yqbl\":[\"Einfügen\"],\"SDND4q\":[\"Nicht konfiguriert\"],\"SJRy3D\":[\"(Automatisch generiert)\"],\"SSwIjo\":[\"EMPTY setzen\"],\"SgvA_r\":[\"Drücke Ausführen (Ctrl/Command+F5), um Tabellendaten zu laden\"],\"SlfejT\":[\"Fehler\"],\"SoATkx\":[\"Zelle kopieren\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"Endpoint-URL\"],\"T7w5CQ\":[\"Erstellen einer neuen Zeile fehlgeschlagen: \"],\"T9947j\":[\"Wert (z. B. 'Text' oder 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Zum vertikalen Layout wechseln\"],\"TK5oex\":[\"Prompt speichern\"],\"TKQ7K-\":[\"Installieren\"],\"TKZreP\":[\"Erforderlich\"],\"TMLAx2\":[\"Erforderlich\"],\"TO08JI\":[\"Fremdschlüssel\"],\"TVKqvO\":[\"Zeile bearbeiten\"],\"TYSdQ3\":[\"SELECT-Abfrage ausführen\"],\"TfDFHS\":[\"Lange Zeilen im Editor umbrechen statt horizontal zu scrollen.\"],\"Tibfjs\":[\"Keine gespeicherten Verbindungen — erstelle unten eine\"],\"Tj36Dr\":[\"Auf Standard zurücksetzen\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Sperren\"],\"TpwXyg\":[\"Fehlen Zeitwerte, hat der Server wahrscheinlich nur einen geschätzten Plan geliefert.\"],\"Tw2M1h\":[\"Installation fehlgeschlagen\"],\"Ty-rm9\":[\"SSH-Verbindungen\"],\"Tz0i8g\":[\"Einstellungen\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes-Verbindungen\"],\"U4uzyV\":[\"Neuigkeiten\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Ausführung stoppen, wenn eine Zelle fehlschlägt\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" auf \",[\"1\"],\" — vor Ausführung prüfen.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Konfiguration für \",[\"clientName\"],\" erfolgreich installiert! Starte die App neu, um sie anzuwenden.\"],\"URmyfc\":[\"Details\"],\"UWQBvp\":[\"SQL-Vorlagen generieren\"],\"UawTKZ\":[\"Optional. Gib die ausführbare Datei an, die zum Starten dieses Plugins verwendet wird (z. B. python3 unter macOS/Linux, python oder ein vollständiger Pfad unter Windows). Leer lassen, um den Standard zu verwenden.\"],\"Ub8sf5\":[\"SQLite unterstützt das Löschen von Fremdschlüsseln via ALTER TABLE nicht.\"],\"UbbJ8j\":[\"Keine Optionen gefunden\"],\"Ubs68g\":[\"Allgemein\"],\"UftN8J\":[\"Diese Verbindungen lehnen Schreibvorgänge ab. Andere verhalten sich normal.\"],\"UnQNah\":[\"Möchtest du die Spalte \\\"\",[\"0\"],\"\\\" aus der Tabelle \\\"\",[\"tableName\"],\"\\\" wirklich löschen?\\n\\nWARNUNG: Dadurch werden alle Daten in dieser Spalte dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.\"],\"UncTTh\":[\"Summe des RSS über den Prozessbaum — gemeinsam genutzter Speicher kann doppelt gezählt werden\"],\"UpjgFm\":[\"Parameter geändert\"],\"UsAnu1\":[\"ANALYZE führt die Abfrage aus. Bei datenverändernden Statements mit Vorsicht verwenden.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tabgröße\"],\"UzWGWO\":[\"Zum SQL-WHERE-Eingabefeld wechseln\"],\"V-chk5\":[\"Wie oft geprüft werden soll, ob aktive Verbindungen noch erreichbar sind. Setze 0, um die Prüfung zu deaktivieren.\"],\"V-pw1j\":[\"Tabellenname\"],\"V2T0Uw\":[\"Noch keine gespeicherten Notebooks.\"],\"V3aNwx\":[\"Dateneditor\"],\"VGYp2r\":[\"Auf alle anwenden\"],\"VH8S7x\":[\"Zwischenablage-Spalte\"],\"VIAEcS\":[\"Laden der Datenbanken fehlgeschlagen. Prüfe deine Anmeldedaten.\"],\"VKdztF\":[\"Zeilen anhängen\"],\"VLiHXI\":[\"Daten analysieren\"],\"VMbmXc\":[\"Möchtest du \\\"\",[\"pluginName\"],\"\\\" wirklich entfernen? Dadurch werden die Plugin-Dateien gelöscht.\"],\"VO3weF\":[\"Keine Datei geladen\"],\"VOZlKc\":[\"Datenbank importieren\"],\"VPzsIz\":[\"Name wird generiert...\"],\"VUul0v\":[\"Das Beenden von\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Alle Abfragen\"],\"Vi2Pqx\":[\"von\"],\"Vl2zn2\":[\"gestoppt\"],\"Vo4uBA\":[\"Bei der Installation des Plugins ist ein Fehler aufgetreten. Siehe Details unten.\"],\"VqqyOs\":[\"Führe eine Abfrage aus, um Ergebnisse zu sehen\"],\"VzhDFh\":[\"Blockiere jede Nicht-SELECT-Anweisung über MCP, außer für die unten erlaubten Verbindungen.\"],\"W3uwpT\":[\"Alle Tabs schließen\"],\"W4MKLh\":[\"z.B. In Prod riskant, bestätigen…\"],\"W60eXm\":[\"Tabelle\"],\"WA8RND\":[\"Möchtest du die Tabelle \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"WG8Qgt\":[\"Tabelle löschen\"],\"WLnvCZ\":[\"Benutzername eingeben\"],\"WM-__8\":[\"Verbindungen suchen...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen in \\\"\",[\"tableName\"],\"\\\" importiert\"],\"other\":[\"#\",\" Zeilen in \\\"\",[\"tableName\"],\"\\\" importiert\"]}]],\"WTfntM\":[\"Möchtest du die Abfrage \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"WarTN_\":[\"erfolgreich\"],\"WcF1uL\":[\"Gruppenname\"],\"Weq9zb\":[\"Allgemein\"],\"WmPpB1\":[\"Ausführungsplan wird geladen…\"],\"Wu7cK0\":[\"Keine Datenbanken gefunden\"],\"WvoUQF\":[\"Zelle \",[\"n\"],\" gelöscht\"],\"Ww3pDD\":[\"MANUELLER BEFEHL\"],\"X-20AU\":[\"Prompt für Abfrage-Tabnamen eingeben...\"],\"X-U6_w\":[\"Schriftfamilie\"],\"X5fs0g\":[\"Erstelle deine erste Verbindung, um loszulegen.\"],\"X7Ayjp\":[\"Passwort im System-Keychain gespeichert\"],\"X9kySA\":[\"Favoriten\"],\"XJOV1Y\":[\"Aktivität\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Abfrageerklärung\"],\"XVF2Pf\":[\"Schemata bearbeiten\"],\"XW6OYF\":[\"Dieses Plugin benötigt möglicherweise einen Interpreter (z. B. Python). Verwende die Plugin-Einstellungen, um den Interpreter-Pfad zu konfigurieren.\"],\"XZB6Xr\":[\"Maximale Log-Einträge\"],\"Xcffv2\":[\"Zeigt die Schaltflächen AI Assist und Explain im Editor an\"],\"XeqTSh\":[\"Join-Typ\"],\"XmJfZT\":[\"name\"],\"XoQfG1\":[\"SSH-Benutzer\"],\"XwI0Vw\":[\"Auto (System)\"],\"XyDlLX\":[\"Indexname\"],\"Y2P2aK\":[\"Wähle die zu ladenden Schemata aus:\"],\"Y8HYw2\":[\"Wert\"],\"Y8zX3R\":[\"In Editor einfügen\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Suchen...\"],\"YWlnMZ\":[\"Ollama-Port\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Durchsuche und installiere Plugins aus dem Registry.\"],\"Y_3yKT\":[\"In neuem Tab öffnen\"],\"YiAQ_Q\":[\"Tabellen aktualisieren\"],\"Ysjr9Y\":[\"SQL-Vorschau\"],\"YswNf7\":[\"Alle Level\"],\"YtNwr6\":[\"Maximale Anzahl an Abfrageverlaufseinträgen pro Verbindung.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Wird geladen...\"],\"Z7ZXbT\":[\"Freigeben\"],\"Z8JpBH\":[\"Als Notebook exportieren\"],\"Z8fBIc\":[\"Tatsächliche Zeilen übersteigen die Schätzung\"],\"ZC2VJP\":[\"Ausführen\"],\"ZCIS4k\":[\"keine aktiven Filter\"],\"ZF1_UT\":[\"SSL-Modus\"],\"ZGjBPa\":[\"Logs löschen\"],\"ZHQTlM\":[\"Importiere aus\"],\"ZIFDoJ\":[\"Bitte wähle mindestens Struktur oder Daten\"],\"ZIZA6o\":[\"Vor Freigabe bearbeiten\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Parser-Warnungen\"],\"other\":[\"#\",\" Parser-Warnungen\"]}]],\"ZVn8p2\":[\"Zeigt Zeilennummern im Rand des Editors an.\"],\"ZYnwzF\":[\"Getrennt\"],\"Za3_fO\":[\"Fehler\"],\"ZcOxO1\":[\"Fremdschlüssel erstellen\"],\"Zf7LHg\":[\"Keine Kontexte gefunden (ist kubectl installiert?)\"],\"Zfotp5\":[\"Große Schätzabweichungen deuten meist auf veraltete Statistiken oder Prädikate hin, die der Planner schlecht modellieren kann.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Schemata konnten nicht geladen werden\"],\"ZqXGPF\":[\"Löschen der Ansicht fehlgeschlagen: \"],\"ZuL73E\":[\"Neue Datenbankansicht erstellen\"],\"_-bi4r\":[\"Referenzierte Tabelle\"],\"_AEYGI\":[\"Noch kein Ausführungsverlauf\"],\"_FdpZc\":[\"Laden der Ansichtsdefinition fehlgeschlagen: \"],\"_FxSdi\":[\"Durchsuche die direkten Open-Source-Abhängigkeiten, die in App, Backend und Tooling verwendet werden.\"],\"_JyTG8\":[\"Explain-Prompt eingeben...\"],\"_Ltc_k\":[\"Zusätzlich\"],\"_Q2Wix\":[\"Zeilen\"],\"_TK1zF\":[\"Gespeicherte Verbindung\"],\"_bJFBE\":[\"Verbindungs-Timeout\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Baum\"],\"_dqduX\":[\"Nächste Seite\"],\"_fwE6J\":[\"Älter\"],\"_n04sB\":[\"Beenden\"],\"_otxbQ\":[\"Schlüsseldatei\"],\"_pezIT\":[\"Verbindung zu \",[\"0\"],\" fehlgeschlagen. Bitte prüfe deine Einstellungen oder stelle sicher, dass die Datenbank läuft.\"],\"_srfkj\":[\"Benutzerdefinierter Schlüssel erfolgreich gelöscht\"],\"_t6aFo\":[\"MySQL und MariaDB können je nach Serverversion auf EXPLAIN FORMAT=JSON oder tabellarisches EXPLAIN zurückfallen.\"],\"_xTbaM\":[\"Spalten\"],\"_yxaaL\":[\"Eindeutiger Index\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis ist ein freies Open-Source-Projekt. Wenn du es nützlich findest, unterstütze das Projekt und vernetze dich mit der Community.\"],\"a9CASo\":[\"SQLite unterstützt nur das Umbenennen von Spalten. Andere Änderungen erfordern, dass die Tabelle manuell neu erstellt wird.\"],\"aAIQg2\":[\"Darstellung\"],\"aAURrV\":[\"Installiert\"],\"aC_vCa\":[\"Namen mit KI generieren\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Wähle einen Knoten aus, um Details zu sehen\"],\"aHKcKc\":[\"Vorherige Seite\"],\"aI-5wG\":[\"CA prüfen\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Standardwert\"],\"aScJP1\":[\"Diese Abfrage ausführen\"],\"aVNbN8\":[\"Filterbedingungen\"],\"aWhdMQ\":[\"Vorhandene SSH-Verbindung verwenden\"],\"aXYd8V\":[\"Zeitlimit\"],\"aX_S_r\":[\"Seite \",[\"0\"],\" von \",[\"totalPages\"]],\"agZcf8\":[\"Generiertes SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [Felder]\"],\"alplHn\":[\"Abfrageplan wird mit KI analysiert...\"],\"anBcU3\":[\"Wenn dir tabularis gefällt und du mehr Funktionen sehen möchtest, unterstütze das Projekt durch Code-Beiträge, Bug-Reports oder einen Stern auf GitHub.\"],\"arHmj2\":[\"Möchtest du diese Abfrage wirklich aus dem Verlauf löschen?\"],\"arKcqW\":[\"Ältere Server können auf geschätzte Pläne mit weniger Metriken zurückfallen.\"],\"arcpYe\":[\"Freigabe erforderlich\"],\"aurEkh\":[\"Prozesse werden geladen…\"],\"avtdsd\":[\"SQL-Modus\"],\"az8lvo\":[\"Aus\"],\"b1Ah3z\":[\"Fokussiert auf\"],\"b392Dr\":[\"Alle ausklappen\"],\"b5S_PU\":[\"Datenbankname\"],\"bAvovP\":[\"Nach unten\"],\"bH3JqY\":[\"Keine Tabellen gefunden\"],\"bP5JOn\":[\"Zeilenumbruch\"],\"bcOdok\":[\"Gruppe löschen\"],\"bcqeas\":[\"Alle MCP-Abfragen nur lesen\"],\"bmca5u\":[\"Nur Schreibvorgänge\"],\"bpCiBU\":[\"Schreibvorgänge erlauben\"],\"bqnhqW\":[\"Schätzung übersteigt tatsächliche Zeilen\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Fehler\"],\"bw22Gk\":[\"Spalten-Schema\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Wichtigste Probleme\"],\"cFCKYZ\":[\"Ablehnen\"],\"cFGrCP\":[\"Tabelle\"],\"cGeFup\":[\"Schriftgröße\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Auf Tabelle fokussieren\"],\"cM9NHc\":[\"Herabstufen auf\"],\"cO9-2L\":[\"Deaktivieren\"],\"cSev-j\":[\"Filter\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen importieren\"],\"other\":[\"#\",\" Zeilen importieren\"]}]],\"c_xoSn\":[\"Zelle \",[\"n\"],\" umbenannt\"],\"cd0XEW\":[\"Abfrage speichern\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Gruppe teilen\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" Statements\"],\"d34vwG\":[\"Datenbanken laden\"],\"d6ynQ7\":[\"Absteigend sortieren\"],\"d8_6_v\":[\"abbrechen\"],\"d8wc1_\":[\"Beispielwerte\"],\"dBXoCS\":[\"Eine Umgebungsvariable ist vorhanden, aber du kannst sie überschreiben, indem du oben einen Schlüssel setzt.\"],\"dD7NPy\":[\"Gliederung\"],\"dEgA5A\":[\"Abbrechen\"],\"dMtLDE\":[\"bis\"],\"dPJVhW\":[\"Installation fehlgeschlagen\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Sitzung\"],\"other\":[\"#\",\" Sitzungen\"]}]],\"dTUzKm\":[\"Ausgewählte ausführen (\",[\"0\"],\")\"],\"dU_iQN\":[\"Keine Sitzung entspricht den Filtern.\"],\"dUh9QW\":[\"Planung\"],\"dVoir2\":[\"Markdown-Zelle \",[\"n\"],\" hinzugefügt\"],\"dZ0d2O\":[\"Bitte wähle mindestens eine Tabelle\"],\"dhi13U\":[\"Bild auswählen…\"],\"dli1JX\":[\"Änderungen übernehmen\"],\"dmYV6f\":[\"Routinen\"],\"dohZCo\":[\"Anweisungen für KI-gestützte SQL-Generierung. Verwende \",[\"SCHEMA\"],\" als Platzhalter für die Datenbankstruktur.\"],\"dtxpK2\":[\"Analysieren\"],\"dwW9nJ\":[\"Zeilennummern anzeigen\"],\"dwWVw_\":[\"Willkommensbildschirm anzeigen\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Tab\"],\"other\":[\"#\",\" Tabs\"]}]],\"dxxY9r\":[\"Falls vorhanden\"],\"dyN4j9\":[\"Klicke auf 'Vorschau ausführen', um Ergebnisse zu sehen\"],\"e07Iz5\":[\"Task-Manager öffnen\"],\"e0NzXu\":[\"Dieses Projekt ist Work in Progress (WIP). Die Kernfunktionen sind stabil, aber wir haben große Pläne.\"],\"e1UKxf\":[\"Diese Abfrage speichern\"],\"e34gdU\":[\"Wie lange gewartet wird, bevor abgebrochen wird.\"],\"e62LQd\":[\"Zwangsweise beenden\"],\"e6QZsM\":[\"Editor-Thema\"],\"e8CirT\":[\"Abfrage ausführen\"],\"eD2kUP\":[\"Buffer gelesen\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Prompt für Explain-Plan-Analyse eingeben...\"],\"eIVolo\":[\"Datenträger L/S\"],\"eJOEBy\":[\"Wird exportiert...\"],\"eKHY3W\":[\"Plugin-Einstellungen\"],\"eMb6Ub\":[\"Ressource auswählen...\"],\"ePK91l\":[\"Bearbeiten\"],\"eXweu6\":[\"Zelle ausklappen\"],\"ecNsTE\":[\"Keine Abfragen entsprechen deiner Suche\"],\"ecUA8p\":[\"Heute\"],\"ecpIZP\":[\"Passphrase eingeben, falls der Schlüssel verschlüsselt ist\"],\"ejmeDY\":[\"Installiert\"],\"esl-Tv\":[\"Ressourcentyp\"],\"exyUec\":[\"Verbindung\"],\"f2AJjl\":[\"Zeile löschen\"],\"f4pD-j\":[\"Verbindungstest fehlgeschlagen\"],\"f7sXvi\":[\"Passwort eingeben\"],\"fAsxc0\":[\"Sequentielle Scans\"],\"fIeFs0\":[\"Wert auswählen...\"],\"fJm92A\":[\"Wählen Sie eine Datei mit einem EXPLAIN-Plan (PostgreSQL JSON- oder Textformat), um ihn zu visualisieren.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Werte\"],\"f_b1TA\":[\"Ausführungsverlauf\"],\"fghnqP\":[\"Zu Verbindung 1-9 wechseln\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Komma (,)\"],\"fp711N\":[\"Blockiert (nur lesen)\"],\"fpzyLj\":[\"Seite \",[\"0\"],\" von \",[\"1\"]],\"fuA6oy\":[\"Socket-Timeout\"],\"fvImQM\":[[\"0\"],\" ausgewählt\"],\"fwr_nh\":[\"Installiere Erweiterungen, verwalte Plugin-Treiber und behalte Laufzeiteinstellungen im Blick.\"],\"g0ZzK4\":[\"Gültiges JSON\"],\"g11hAR\":[\"Neue Zeile\"],\"g8VcMm\":[\"Mein K8s-Cluster\"],\"gCFR_O\":[\"Parallele Ausführung (Alle ausführen)\"],\"gEjU98\":[\"Verbindungen öffnen\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Mindestens eine Spalte ist erforderlich\"],\"gSuQrG\":[\"Keine Verbindung entspricht \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Abfrage erneut ausführen\"],\"gZWMnn\":[\"KI-Analyse\"],\"ghYd73\":[\"Ziel wählen...\"],\"giAqEC\":[\"Neue Tabelle erstellen\"],\"gnQS8X\":[\"Maximale Paketgröße, die vom MySQL-Connector verwendet wird.\"],\"gqV5VL\":[\"Integriert, nicht anpassbar\"],\"gww_XE\":[\"Referenzierte Spalte\"],\"gxXPJ9\":[\"Interpreter konfigurieren\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximieren\"],\"h-XNc9\":[\"CSV-Trennzeichen\"],\"h-kNAk\":[\"z.B. verkaufsdaten\"],\"h3Z_aK\":[\"Markdown hier schreiben...\"],\"h7MgpO\":[\"Tastenkürzel\"],\"h7peZQ\":[\"Erlauben\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Systemprozess läuft\"],\"other\":[\"#\",\" Systemprozesse laufen\"]}]],\"hEZrFh\":[\"SQL-Datei ausführen...\"],\"hEipgW\":[\"Jetzt nach Updates suchen\"],\"hG89Ed\":[\"Bild\"],\"hIHcBE\":[\"Als CSV exportieren\"],\"hItdtk\":[\"Ordner auswählen\"],\"hXFVjo\":[\"Tabellenname ist erforderlich\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Erneut ausführen\"],\"hbz1rh\":[\"Schlüssel\"],\"hdsaJo\":[\"Importiert...\"],\"he3ygx\":[\"Kopieren\"],\"hfGimp\":[\"Namespace auswählen...\"],\"hjjSEi\":[\"Nur-Lese-Verbindungen\"],\"hjwN_s\":[\"Ressourcenname\"],\"hlF1mD\":[\"Auswahl kopieren\"],\"hnboBb\":[\"KI-Analyse des Abfrageplans\"],\"hnvu2p\":[\"Fehlerdetails\"],\"hq4-D2\":[\"Der API-Schlüssel wird sicher im System-Keychain gespeichert. Ein hier gesetzter Schlüssel überschreibt die Umgebungsvariable.\"],\"hqjXdn\":[\"Löschen der SSH-Verbindung fehlgeschlagen\"],\"hqofAK\":[\"SQL kopieren\"],\"hy6L14\":[\"Auf GitHub ansehen\"],\"hyjACX\":[\"Zellen ein-/ausgeklappt\"],\"hz1b5W\":[\"Keine passenden Elemente gefunden\"],\"i1vAVM\":[\"Neue Tabelle erstellen\"],\"i3S5T3\":[\"Favoriten durchsuchen...\"],\"i4_LY_\":[\"Schreiben\"],\"i5HBWh\":[\"Abfrageverlauf zurückgesetzt\"],\"i5zCt4\":[\"Tabelle\"],\"iAVlge\":[\"Passe die Anweisungen für die KI-Namensgenerierung von Notebook-Zellen an. Der Zelleninhalt (SQL oder Markdown) wird als Benutzernachricht gesendet.\"],\"iE1yAB\":[\"Tabellen filtern...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Verbinden\"],\"iSryJ2\":[\"Mein SSH-Server\"],\"iT7UeX\":[\"Index hinzufügen\"],\"iUWwuR\":[\"Herunterladen und installieren\"],\"ia7i08\":[\"Zuerst Kontext/Namespace/Typ auswählen\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Gespeichert\"],\"igcsfY\":[\"Keine Plugins im Registry verfügbar.\"],\"ij-Elv\":[\"Bildvorschau\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" erklärbare Abfragen gefunden\"],\"other\":[\"#\",\" erklärbare Abfragen gefunden\"]}]],\"ioL38P\":[\"Überwache Plugin-Prozesse, CPU, RAM und Datenträgernutzung in Echtzeit\"],\"ixlL_e\":[\"SSH-Schlüsseldatei (optional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Modell auswählen\"],\"j3gyYH\":[\"Alle anwenden\"],\"j5CWO4\":[\"Aktuell\"],\"j9HPuI\":[\"Zeile #\",[\"0\"]],\"jBtpMP\":[\"Alle Status\"],\"jEu4bB\":[\"Spalten\"],\"jEyQIs\":[\"Keine Routinen gefunden\"],\"jHc1By\":[\"Ansicht löschen\"],\"jI6sj4\":[\"Kosten, Laufzeit und Zeilenschätzungen sind im Vergleich zu PostgreSQL und MySQL oft nicht verfügbar.\"],\"jIxQCZ\":[\"Für deine Plattform nicht verfügbar\"],\"jKIncn\":[\"Datenbankname ist erforderlich\"],\"jPSk57\":[\"Grund (optional)\"],\"jUNY_d\":[\"View\"],\"jVqjDo\":[\"Ungültiges Notebook-Dateiformat\"],\"jWSZ-A\":[\"Nur Vorschau - vollständige Daten nicht geladen\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket-Timeout in Millisekunden.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Verbindungsname ist erforderlich\"],\"jsQZMk\":[\"KI\"],\"juO8wz\":[\"Kindprozess\"],\"jx0t66\":[\"Kindprozesse einklappen\"],\"k-0mL-\":[\"Spalte hinzufügen\"],\"k-XiMX\":[\"Rohtext\"],\"k2UnVy\":[\"Hash-Bedingung\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"Sekunden\"],\"kBiBq7\":[\"Index \\\"\",[\"name\"],\"\\\" löschen?\"],\"kEYasw\":[\"Diagramm umschalten\"],\"kI1qVD\":[\"Formatieren\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen · \",[\"1\"],\" ms\"],\"other\":[\"#\",\" Zeilen · \",[\"2\"],\" ms\"]}]],\"kJDmsI\":[\"Ereignisdetails\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registry\"],\"kY-q3P\":[[\"label\"],\" ist erforderlich\"],\"kexIdC\":[\"Kubernetes-Port-Forward verwenden\"],\"krksx_\":[\"Erfolg\"],\"ktYUe9\":[\"Alle ausführen\"],\"kwY6nh\":[\"Schließen\"],\"kx0s-n\":[\"Ergebnisse\"],\"kxUEfE\":[\"Abrufen der Routinen-Definition fehlgeschlagen: \"],\"l2Op2p\":[\"Abfrageparameter\"],\"l9Ivba\":[\"Plugin-Prozesse und Systemressourcen\"],\"lBdPxu\":[\"Akzentfarbe\"],\"lCF0wC\":[\"Aktualisieren\"],\"lEQRwq\":[\"Daten (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Neue Tabelle erstellt\"],\"lOekZ3\":[\"Zum horizontalen Layout wechseln\"],\"lUA1C1\":[\"Passphrase für SSH-Schlüssel (optional)\"],\"lVeG20\":[\"Rust-Abhängigkeiten\"],\"lXAG6D\":[\"Anweisungen für KI-gestützte Abfrageerklärungen. Verwende \",[\"LANGUAGE\"],\" als Platzhalter für die Ausgabesprache.\"],\"lbbYjy\":[\"Bearbeite die rohe Konfigurationsdatei direkt. Ein Neustart ist erforderlich, um Änderungen anzuwenden.\"],\"lhKW0m\":[\"SQL-Zelle \",[\"n\"],\" hinzugefügt\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Ergebnisse pro Seite (Limit)\"],\"lkz6PL\":[\"Dauer\"],\"lmVGeo\":[\"Fremdschlüssel hinzufügen\"],\"lnnx3E\":[\"Verbinde Tabularis mit Claude Desktop, Cursor und mehr\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Hinzufügen\"],\"m2Q_r8\":[\"JSON in Text-Spalten erkennen\"],\"m2tskz\":[\"Erfolg\"],\"mA-qpe\":[\"Alle Ausführungen abgeschlossen\"],\"mBhhbA\":[\"Logs in die Zwischenablage exportiert\"],\"mCNdzH\":[\"Zelle ausführen\"],\"mO95sp\":[\"Panel schließen\"],\"mP7dLi\":[\"Schriftnamen oben eingeben\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" blockiert\"],\"other\":[\"#\",\" blockiert\"]}]],\"mS74ir\":[\"Speichern der SSH-Verbindung fehlgeschlagen\"],\"mSqtw8\":[\"Vorschau ausführen\"],\"mURmfQ\":[\"Ansichtsdefinition (SQL)\"],\"mX_isJ\":[\"Vertikal\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Struktur (DDL)\"],\"mrk4Cf\":[\"Nach \",[\"colName\"],\" DESC sortieren\"],\"msJ8t1\":[\"Wir haben einen eigenen Treffpunkt für Tabularis-Nutzer eröffnet: Hilfe, Tipps und Mitgestaltung der Roadmap.\"],\"mtvVdV\":[\"Verarbeitete Zeilen\"],\"mx4evv\":[\"Tabelle erstellen\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Herunterladen\"],\"n7JDTx\":[\"Installiere und aktiviere Plugins, um sie hier zu sehen\"],\"nDDJir\":[\"Suche Sitzung, Client, Verbindung…\"],\"nHP-Kr\":[\"Keine aktive Sitzung. Bitte wähle eine Verbindung aus.\"],\"nKhCjW\":[\"Tabellen auswählen\"],\"nNwvm4\":[\"Fehler\"],\"nOVim5\":[\"Speichern der Verbindung fehlgeschlagen\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Ereignisse\"],\"nf14vn\":[\"Erfordert Erweiterung: \",[\"0\"]],\"ngO6Pv\":[\"Erlaubt der Eingabetaste (zusätzlich zu Tab), den aktiven Autovervollständigungsvorschlag zu übernehmen. Bei deaktivierter Option fügt Enter immer einen Zeilenumbruch ein.\"],\"nhmF3p\":[\"Verbindungen\"],\"noM5A_\":[\"Erstelle deine erste Verbindung\"],\"nohy4m\":[\"Noch keine MCP-Aktivität.\"],\"nr-axf\":[\"Plugin entfernen\"],\"nsPFX9\":[\"In Visual Explain öffnen\"],\"nuBbBr\":[\"Diagramm\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Datenbank sichern\"],\"o-XJ9D\":[\"Ändern\"],\"o21Y-P\":[\"Einträge\"],\"o3tP_A\":[\"Index löschen\"],\"o45L8r\":[\"Gib deinen Verbindungsnamen an\"],\"o53XGh\":[\"Ausgewählte Zeile(n) kopieren\"],\"o7J4JM\":[\"Filter\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Level\"],\"oGiIL7\":[\"Standard-Anbieter\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Verbindung verloren\"],\"oJlXF2\":[\"Notebook importieren\"],\"oMFv82\":[\"Vertikal teilen\"],\"oOFiQg\":[\"Begrenzt die Anzahl der pro Abfrage geladenen Zeilen, um Performance-Probleme zu vermeiden. Setze den Wert auf 0, um die Begrenzung zu deaktivieren (nicht empfohlen).\"],\"oT9ZD3\":[\"Übersicht ausblenden\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Diagramm geändert (Zelle \",[\"n\"],\")\"],\"oWfclW\":[\"Zeigt JSON-Viewer-Bedienelemente, wenn eine nicht typisierte Text-Zelle ein JSON-Objekt oder -Array enthält. Verursacht kleine Parse-Kosten pro Zelle.\"],\"obpbdz\":[\"Konfigurationsdatei nicht gefunden (manuell erstellen)\"],\"odZgfC\":[\"KI-CLIENTS\"],\"ogZhXn\":[\"Wähle die Standard-Layout-Richtung für ER-Diagramme\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Tatsächliche Zeilen\"],\"olWzar\":[\"Plugin-Prozess zwangsweise beenden\"],\"ovBPCi\":[\"Standard\"],\"owzTWN\":[\"KI-Modelle von Anbietern aktualisiert\"],\"oxYi6j\":[\"Passt die in der gesamten Anwendung verwendete Grundschriftgröße an (10-20 px).\"],\"p--hsQ\":[\"Eine Datenbankverbindung wurde verloren\"],\"p6NueD\":[\"NEU\"],\"pOYHox\":[\"Aktionen\"],\"pR9bTR\":[\"Keine BLOB-Daten\"],\"pS8S5q\":[\"z. B. users, orders, products\"],\"pSws_M\":[\"Tabellenname\"],\"pVLbKZ\":[\"Ansicht erfolgreich erstellt\"],\"pWT04I\":[\"Prüfung läuft...\"],\"pZJ_6D\":[\"Indexname ist erforderlich\"],\"pddYFG\":[\"Prompt für Notebook-Zellnamen eingeben...\"],\"pnpyuD\":[\"Logging aktivieren\"],\"pqKMPv\":[\"Erstellen der Tabelle fehlgeschlagen: \"],\"pqaP1h\":[\"Schließen\"],\"pqarBu\":[\"Aufst.\"],\"ptuq35\":[\"z. B. Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"Andere bleiben nur lesbar. Nur markierte dürfen schreiben.\"],\"qA5jLs\":[\"Fehlerdetails\"],\"qIrtcK\":[\"Updates\"],\"qOqy8G\":[\"Konfiguration wird geprüft...\"],\"qWaVNs\":[\"Speichern und neu starten\"],\"qb3LPX\":[\"ER-Diagramm anzeigen\"],\"qkK0vq\":[\"Ansichtsname ist erforderlich\"],\"qki9tG\":[\"Fehler\"],\"qoIir-\":[\"Die Basis-URL deiner OpenAI-kompatiblen API. Beispiele: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Alle einklappen\"],\"r6ncaO\":[\"Tab schließen\"],\"rAJlpP\":[\"Container-Port\"],\"rG3WVm\":[\"Lesen\"],\"rGRCeK\":[\"Abfrageverlauf löschen\"],\"rNIto7\":[\"Der Ressourcenname ist erforderlich\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook erfolgreich exportiert\"],\"rY4sEV\":[\"FK löschen\"],\"rbu0nO\":[\"SSH-Verbindungen verwalten\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Verbindung(en)\"],\"other\":[\"#\",\" Verbindung(en)\"]}]],\"rn2_2V\":[\"Filter entfernen\"],\"roABNH\":[\"Kein Abfrageverlauf\"],\"rtir7c\":[\"unbekannt\"],\"ru0-2W\":[\"Keine aktiven Verbindungen\"],\"rvDPWO\":[\"Größte Schätzabweichung\"],\"rwWjWg\":[\"Release Notes\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Verbindung testen\"],\"sBOaim\":[\"Die Konfigurationsdatei wurde gespeichert. Jetzt neu starten, um die Änderungen anzuwenden?\"],\"sCyv9B\":[\"Modelle aktualisieren\"],\"sSUqe4\":[\"Löschen\"],\"sUBkgN\":[\"SQL wird generiert...\"],\"sZZG3d\":[\"Möchtest du \\\"\",[\"0\"],\"\\\" wirklich importieren?\\nDadurch können vorhandene Daten überschrieben werden.\"],\"sbK5ck\":[\"Verlauf durchsuchen...\"],\"sq_bS6\":[\"Bei Löschen\"],\"suW7-E\":[\"Verbindungs-Timeout in Millisekunden.\"],\"suqtBX\":[\"Esc zum Schließen\"],\"t-R8-P\":[\"Ausführung\"],\"t1OfVY\":[[\"totalLibraries\"],\" Bibliotheken\"],\"t2TMzs\":[\"Tab schließen\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Tabelle auswählen...\"],\"t7KRl1\":[\"Protokoll aller MCP-Aufrufe und ausstehender Freigaben. Lokal gespeichert.\"],\"t9NJIk\":[\"Scan-lastige Operationen erkannt\"],\"tB7xof\":[\"Temporäre oder Sortier-Operationen\"],\"tBBXTO\":[\"Ping-Intervall\"],\"tFrT3w\":[\"Füge dies manuell zur Konfigurationsdatei deines Clients hinzu, falls die automatische Installation fehlschlägt.\"],\"tJ7UbA\":[\"fokussierte erklären\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Horizontal teilen\"],\"tQhW-D\":[\"Log-Einstellungen\"],\"tT-BQX\":[\"Installiert\"],\"tXFGEx\":[\"Keine Kubernetes-Verbindungen gespeichert. Klicke auf „Hinzufügen“, um eine zu erstellen.\"],\"tXLz_8\":[\"Löschen\"],\"tXpRby\":[\"Datenraster\"],\"tbysEk\":[\"Aktionen\"],\"tdta9X\":[\"Seite \",[\"0\"]],\"tfDRzk\":[\"Speichern\"],\"tfEioV\":[\"Alle SQL-Zellen von oben nach unten ausführen\"],\"tiAIaJ\":[\"SSH-Passwort fehlt. Bitte erneut eingeben.\"],\"tk22BR\":[\"Strukturierte Daten einfügen und Schema vor dem Import prüfen\"],\"tst44n\":[\"Ereignisse\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL-Datei erfolgreich ausgeführt\"],\"u6QeR6\":[\"Jetzt neu starten\"],\"uAQUqI\":[\"Status\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc zum Schließen\"],\"uFViPK\":[\"Keine SSH-Verbindungen verfügbar\"],\"uHUuhp\":[\"Diese Abfrage erklären\"],\"uHfFzS\":[\"Editor-Schriftgröße\"],\"uJ_3K5\":[\"Notebook \\\"\",[\"0\"],\"\\\" löschen? Dies kann nicht rückgängig gemacht werden.\"],\"uKaNJ3\":[\"Im JSON-Editor öffnen\"],\"uQBwTo\":[\"Schemata\"],\"ub54ff\":[\"Plugin-Center\"],\"ufFyBs\":[\"Datenbank erfolgreich exportiert\"],\"upNmR2\":[\"Seitenleisten-Editor öffnen\"],\"upwIY4\":[\"Ansichtsdefinition\"],\"utMia3\":[\"Alle abwählen\"],\"uyNaJg\":[\"1 Element\"],\"v61dnS\":[\"Gib den exakten Modellnamen für deinen OpenAI-kompatiblen Anbieter ein.\"],\"v6oeyr\":[\"Installiert\"],\"v75DGg\":[\"Datei auswählen\"],\"v99dO4\":[\"Primärschlüssel\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Abfragen gefunden\"],\"other\":[\"#\",\" Abfragen gefunden\"]}]],\"vCSBPD\":[\"Filter hinzufügen\"],\"vH7uJj\":[\"Sortieren nach…\"],\"vUOA1-\":[\"Modelle suchen...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE enthält tatsächliche Zeilen, Laufzeit, Schleifen und Buffer-Zähler, sofern verfügbar.\"],\"vXIe7J\":[\"Sprache\"],\"vYf4Jm\":[\"Gib eine vollständige SQL-Funktion ein (z. B. ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Bevorzugen\"],\"vditm4\":[\"Plan erklären\"],\"vks_ls\":[\"Andere Tabs schließen\"],\"vnAnIp\":[\"Modell \",[\"0\"],\" wurde in \",[\"1\"],\" nicht gefunden. Es funktioniert möglicherweise nicht korrekt.\"],\"vqoN5u\":[\"Struktur\"],\"vrAvbP\":[\"Möchtest du die Gruppe \\\"\",[\"0\"],\"\\\" wirklich löschen? Verbindungen in dieser Gruppe werden in Ungruppiert verschoben.\"],\"vtJ2yO\":[\"Explorer\"],\"vujQJ5\":[\"Lokalisierung\"],\"vvJPVL\":[\"Übersicht anzeigen\"],\"vwI5S4\":[\"Erfolg\"],\"vzH-7Z\":[\"Erklären\"],\"w7QmD_\":[\"System-Prompt eingeben...\"],\"w9eMXw\":[\"Trigger\"],\"wCJFlW\":[\"Verstrichene Zeit\"],\"wCfv2R\":[\"Verbindung hinzufügen\"],\"wGfc86\":[\"Gesamten Verlauf löschen\"],\"wGwNv4\":[\"Aktive Datenbank\"],\"wJJ-Wy\":[\"Wird installiert...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffer-Treffer\"],\"wQn-RM\":[\"Spalte hinzufügen\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Angewendet\"],\"wTmVhm\":[\"Löschen\"],\"wZeIWq\":[\"Aus Zwischenablage importieren\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"Ausstehend\"],\"wckWOP\":[\"Verwalten\"],\"wdYcKH\":[\"Geöffnete Tabs\"],\"wja8aL\":[\"Ohne Titel\"],\"wkOAzk\":[\"Keine Notebooks entsprechen der Suche.\"],\"wp49Ao\":[\"Verarbeitung von Einfügungen fehlgeschlagen: \"],\"wqG2hQ\":[\"Überspringen (nicht importieren)\"],\"wwrAsK\":[\"Bitte fülle alle erforderlichen Felder aus\"],\"wwu18a\":[\"Symbol\"],\"x2fr_j\":[\"Graph\"],\"xANKBj\":[\"Funktionen\"],\"xBwjck\":[\"Ein Neustart ist erforderlich, um Änderungen anzuwenden.\"],\"xDAtGP\":[\"Nachricht\"],\"xECY01\":[\"Prozeduren\"],\"xGPNgZ\":[\"Prompt-Anpassung\"],\"xNgtS-\":[\"Keine Ansichten gefunden\"],\"xOPa1b\":[\"Der Port muss zwischen 1 und 65535 liegen\"],\"xY9s5E\":[\"Zeitüberschreitung\"],\"xaVUr1\":[\"Franz jagt im komplett verwahrlosten Taxi quer durch Bayern\"],\"xbvTzL\":[\"Dateipfad\"],\"xlew5F\":[\"Leeren\"],\"xmNyKz\":[\"Wird getestet...\"],\"xtuh6D\":[\"Explorer ausklappen\"],\"y-Zdqj\":[\"Kontext auswählen...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"JSON-Viewer öffnen\"],\"yQXjG5\":[\"Alle abwählen\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Gestern\"],\"ygCKqB\":[\"Stopp\"],\"ykCc6r\":[\"Datenbank geändert (Zelle \",[\"n\"],\")\"],\"ynVMSc\":[\"Alle auswählen\"],\"ytdz1d\":[\"KI möchte in die Datenbank schreiben\"],\"yyhzur\":[\"Tabelle erstellen\"],\"yz7wBu\":[\"Schließen\"],\"z0VdfR\":[\"Routine\"],\"z407wX\":[\"SSH-Passwort\"],\"z4oF5T\":[\"Datenbank sichern\"],\"z5kV0h\":[\"Verbindungen\"],\"zBTMzx\":[\"Vorschau\"],\"zCaAKs\":[\"Update-Fehler\"],\"zDAakK\":[\"Diagramm kann ohne Verbindungs-ID nicht angezeigt werden.\"],\"zGe21h\":[\"Dieser Schlüssel wird aus einer Umgebungsvariable geladen\"],\"zGfL5t\":[\"wert\"],\"zL6-4A\":[\"Es laufen keine Plugin-Prozesse\"],\"zLZhCi\":[\"Neue Discord-Community!\"],\"zLlCou\":[\"Spaltennamen kopieren\"],\"zNEL34\":[\"Der Community beitreten\"],\"zNgTlV\":[\"Tabs rechts schließen\"],\"zQz55p\":[\"Struktur anzeigen\"],\"zR0FfH\":[\"Exportiert nach \",[\"target\"]],\"zRZeOc\":[\"Tabellen, Views, Routinen, Trigger suchen...\"],\"zUNMsr\":[\"SSH-Schlüssel\"],\"zXMRzb\":[\"SSH-Port\"],\"zZgoXr\":[\"Keine passende Tabelle\"],\"zaWbms\":[\"Änderungen zurückrollen\"],\"zgClmU\":[\"Konfiguration installieren\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Wert eingeben...\"],\"zvzN4C\":[\"Als aktiv festlegen\"],\"zzDlyQ\":[\"Erfolg\"],\"zzMxrp\":[\"config.json bearbeiten\"],\"zz_Wd_\":[\"Modus\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po index 2422c6a8..81bc775b 100644 --- a/src/locales/en/messages.po +++ b/src/locales/en/messages.po @@ -1203,12 +1203,22 @@ msgid "Create a new database view" msgstr "Create a new database view" #: src/components/modals/CreateForeignKeyModal.tsx -msgctxt "createFk" +msgctxt "createFk.create" msgid "Create Foreign Key" msgstr "Create Foreign Key" +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk.title" +msgid "Create Foreign Key" +msgstr "Create Foreign Key" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex.create" +msgid "Create Index" +msgstr "Create Index" + #: src/components/modals/CreateIndexModal.tsx -msgctxt "createIndex" +msgctxt "createIndex.title" msgid "Create Index" msgstr "Create Index" @@ -1254,7 +1264,12 @@ msgid "Create Trigger" msgstr "Create Trigger" #: src/components/modals/ViewEditorModal.tsx -msgctxt "views" +msgctxt "views.create" +msgid "Create View" +msgstr "Create View" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views.createView" msgid "Create View" msgstr "Create View" @@ -1635,8 +1650,12 @@ msgstr "Drop View" #: src/components/layout/ExplorerSidebar.tsx #: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgctxt "dump.dumpDatabase" +msgid "Dump Database" +msgstr "Dump Database" + #: src/components/modals/DumpDatabaseModal.tsx -msgctxt "dump" +msgctxt "dump.title" msgid "Dump Database" msgstr "Dump Database" @@ -1900,14 +1919,22 @@ msgid "Error" msgstr "Error" #: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings.plugins.installError.details" +msgid "Error Details" +msgstr "Error Details" + #: src/components/modals/PluginStartErrorModal.tsx -msgctxt "settings" +msgctxt "settings.plugins.startError.details" msgid "Error Details" msgstr "Error Details" #: src/components/modals/QuickNavigatorModal.tsx +msgctxt "editor.quickNavigator.escHint" +msgid "Esc to close" +msgstr "Esc to close" + #: src/components/modals/TabSwitcherModal.tsx -msgctxt "editor" +msgctxt "editor.tabSwitcher.escHint" msgid "Esc to close" msgstr "Esc to close" @@ -1937,7 +1964,12 @@ msgid "Events" msgstr "Events" #: src/components/settings/ai-activity/AiActivitySessionsTab.tsx -msgctxt "aiActivity" +msgctxt "aiActivity.events" +msgid "Events" +msgstr "Events" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity.sort.eventCount" msgid "Events" msgstr "Events" @@ -2070,7 +2102,12 @@ msgid "Export as Notebook" msgstr "Export as Notebook" #: src/pages/Connections.tsx -msgctxt "connections" +msgctxt "connections.export" +msgid "Export Connections" +msgstr "Export Connections" + +#: src/pages/Connections.tsx +msgctxt "connections.exportTitle" msgid "Export Connections" msgstr "Export Connections" @@ -2635,7 +2672,17 @@ msgid "Installed" msgstr "Installed" #: src/components/settings/PluginsTab.tsx -msgctxt "settings" +msgctxt "settings.plugins.filterInstalled" +msgid "Installed" +msgstr "Installed" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installed" +msgid "Installed" +msgstr "Installed" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installedMetric" msgid "Installed" msgstr "Installed" @@ -4001,9 +4048,13 @@ msgstr "Rows will be added to an existing table" msgid "Run" msgstr "Run" -#: src/components/modals/QuerySelectionModal.tsx #: src/components/notebook/NotebookToolbar.tsx -msgctxt "editor" +msgctxt "editor.notebook.runAll" +msgid "Run All" +msgstr "Run All" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor.querySelection.runAll" msgid "Run All" msgstr "Run All" @@ -4732,10 +4783,14 @@ msgid "table" msgstr "table" #: src/components/modals/visual-explain/ExplainNodeDetails.tsx -#: src/components/modals/visual-explain/ExplainSummaryBar.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx -msgctxt "editor" +msgctxt "editor.visualExplain.relation" +msgid "Table" +msgstr "Table" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgctxt "editor.visualExplain.tableView" msgid "Table" msgstr "Table" @@ -5184,7 +5239,12 @@ msgid "View created successfully" msgstr "View created successfully" #: src/components/layout/ExplorerSidebar.tsx -msgctxt "sidebar" +msgctxt "sidebar.viewDefinition" +msgid "View Definition" +msgstr "View Definition" + +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar.viewTriggerDefinition" msgid "View Definition" msgstr "View Definition" diff --git a/src/locales/en/messages.ts b/src/locales/en/messages.ts index 8821dc96..fe04cedd 100644 --- a/src/locales/en/messages.ts +++ b/src/locales/en/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Max History Entries\"],\"-6AWa-\":[\"Import Connections\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Disconnect\"],\"-PLZfh\":[\"Failed to refresh models\"],\"-T5W2e\":[\"Driver Notes\"],\"-ZgeeE\":[\"Edit history\"],\"-aYrdc\":[\"Version \",[\"0\"],\" is available\"],\"-fBGXl\":[\"Highest Cost\"],\"-jIQDz\":[\"Collapse Cell\"],\"-u1eRo\":[\"No database\"],\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"Approval ID\"],\"0E5-gF\":[\"Are you sure you want to delete this connection?\"],\"0HCubq\":[\"Expand\"],\"0Kmdvy\":[\"Custom Font\"],\"0Nj13E\":[\"Generate SQL\"],\"0ROgz5\":[\"Enter JSON...\"],\"0SY9sU\":[\"Failed to disconnect from database\"],\"0b3kL9\":[\"Select a database\"],\"0caMy7\":[\"History\"],\"0mx5ow\":[\"Query\"],\"0n9BtL\":[\"Preview\"],\"0pHB9N\":[\"Copy as table.column\"],\"0sQzZK\":[\"Filter databases...\"],\"0uPP9X\":[\"FK Name (Optional)\"],\"0wxuek\":[\"Current Version\"],\"0x09Aw\":[\"Toggled stop on error\"],\"0yBP6v\":[\"Support the Development\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"0yVAoD\":[\"Count rows\"],\"0zxJ87\":[\"No logs available\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Edit View\"],\"11fGJ6\":[\"Queries\"],\"13hIUA\":[[\"0\"],\" API Key\"],\"14qNWF\":[\"Select SSH Connection\"],\"17qHRP\":[\"New connection\"],\"1Dn6bg\":[\"Import from Clipboard\"],\"1Dnd0I\":[\"Load row count\"],\"1FjTLW\":[\"e.g. python3\"],\"1GOvbo\":[\"Ollama connected (\",[\"0\"],\" models found)\"],\"1I6UoR\":[\"Views\"],\"1U7hS5\":[\"Len\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Editor Font Family\"],\"1ekzlY\":[\"Plugin Processes\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Theme Selection\"],\"1xVZkL\":[\"No models found\"],\"26Joci\":[[\"0\"],\" rows retrieved\"],\"2Bf-Qe\":[\"New console\"],\"2CrSmP\":[\"Help tabularis grow\"],\"2D9F8_\":[\"Failed to duplicate connection\"],\"2Eoi_a\":[\"View details\"],\"2F4pE5\":[\"Rust Build and Test\"],\"2Fsd9r\":[\"This Month\"],\"2JzKXI\":[\"Set GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Select All\"],\"2SO5RM\":[\"Kubernetes is not available for this driver.\"],\"2Uh5GA\":[\"Cargo ecosystem\"],\"2YylFp\":[\"New Visual Query\"],\"2luuSG\":[\"Try again\"],\"2wxgft\":[\"Rename\"],\"2yG2GC\":[\"Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database.\"],\"30-b5r\":[\"Delete\"],\"31kwdN\":[\"Duplicate filter\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"All tools\"],\"3Am5DS\":[\"Tab view\"],\"3BhBCj\":[\"Events\"],\"3FVg9_\":[\"Local Column\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Run\"],\"3L0HCz\":[\"No plugins match your search.\"],\"3Nv3JV\":[\"Executing query...\"],\"3TSz9S\":[\"Minimize\"],\"3UW8fG\":[\"Updates managed by \",[\"0\"]],\"3YvS-c\":[\"New tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook Cell Name Prompt\"],\"3qkggm\":[\"Fullscreen\"],\"3rBJ1T\":[\"View Schema\"],\"3xZ-xV\":[\"Insert Current Timestamp\"],\"40Gx0U\":[\"Timezone\"],\"41GP4f\":[\"Choose the default delimiter character used when copying or exporting rows as CSV.\"],\"42iaEi\":[\"PostgreSQL without ANALYZE shows planner estimates only.\"],\"44cXI8\":[\"Sort by \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Manage Databases\"],\"4CK17g\":[\"Are you sure you want to modify view \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Select at least one database\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Export as HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" child process\"],\"other\":[\"#\",\" child processes\"]}]],\"4VyuY3\":[\"Are you sure you want to clear all logs?\"],\"4WWqS3\":[\"Toggle inline JSON tree\"],\"4cEClj\":[\"Sessions\"],\"4cmfYp\":[\"Duplicate Row\"],\"4lIZTB\":[\"Frontend Dev Dependencies\"],\"4oYjvJ\":[\"Search query…\"],\"4tMxW4\":[\"Preview related record\"],\"4yJcjm\":[\"Select type...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Close filter panel (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Semicolon (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" event\"],\"other\":[\"#\",\" events\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"List view\"],\"5To6Z6\":[\"Copy query\"],\"5gqNQl\":[\"Grid view\"],\"5igIzr\":[\"Import cancelled\"],\"5nTIup\":[\"Editing view: \",[\"name\"]],\"66bEht\":[\"Project Status\"],\"6PIJVc\":[\"Startup\"],\"6QvP0l\":[\"Export as JSON\"],\"6W41Xq\":[\"Task Manager\"],\"6WngBH\":[\"Set NULL\"],\"6YtxFj\":[\"Name\"],\"6_dCYd\":[\"Overview\"],\"6gvoHP\":[\"Copy error message\"],\"6oCVzX\":[\"Kubernetes context is required\"],\"6wQO0f\":[\"Show Data\"],\"6z9W13\":[\"Restart\"],\"71agNy\":[\"Generate names for unnamed cells with AI\"],\"74J3FG\":[\"Initial version\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Got it\"],\"77nSMU\":[\"Delete the entire AI activity history? This cannot be undone.\"],\"79UVYW\":[\"Esc to close\"],\"7ABmyQ\":[\"Try again\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" of \",[\"0\"],\" active\"],\"7E864M\":[\"Database Type\"],\"7FqaG1\":[\"Customize instructions for AI analysis of EXPLAIN query plans. Use {\",[\"LANGUAGE\"],\"} for the output language.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Mixed types detected, defaulted to TEXT\"],\"7RSQQd\":[\"Save passwords in Keychain\"],\"7VpPHA\":[\"Confirm\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"failed\"],\"7sMeHQ\":[\"Key\"],\"7sNhEz\":[\"Username\"],\"7tATh2\":[\"Run Query\"],\"7yb4gk\":[\"Failed: \"],\"8-4V8D\":[\"Tables\"],\"82G-l5\":[\"The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely.\"],\"83VjWE\":[\"New Notebook\"],\"86IgoU\":[\"Run query (in editor)\"],\"86fCgf\":[\"Customize instructions for AI query result tab name generation. The SQL query is sent as the user message.\"],\"87a_t_\":[\"Label\"],\"8CWirf\":[\"MCP Server\"],\"8S8aIX\":[\"Connection Health Check\"],\"8TMaZI\":[\"Timestamp\"],\"8Tg_JR\":[\"Custom\"],\"8UFKYr\":[\"Select Query to Execute\"],\"8VKSGV\":[\"Generate SQL\"],\"8Wjy6z\":[\"Close Tabs to Left\"],\"8ZsakT\":[\"Password\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL Editor\"],\"8bRgTe\":[\"AI Provider not configured. Please go to Settings > AI.\"],\"8c_W0h\":[\"Older versions\"],\"8guEQP\":[\"Refresh Views\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.\"],\"8q_sOc\":[\"Remove\"],\"8t-akp\":[\"showing first \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Connection Name\"],\"91gnWY\":[\"Export Logs\"],\"91rtHL\":[\"Create New View\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"View updated successfully\"],\"9NzDFn\":[\"Display the welcome screen when the application starts.\"],\"9OoUS3\":[\"Create New SSH Connection\"],\"9QGRD5\":[\"Target column\"],\"9QTny9\":[\"Query failed.\"],\"9S-fyV\":[\"Pre-flight execution plan\"],\"9SJ_Sx\":[\"System Resources\"],\"9UQ730\":[\"Clone\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"No data found in clipboard\"],\"9mMU1R\":[\"Time\"],\"9mvFo_\":[\"Time\"],\"9npOH9\":[\"Open file\"],\"9uI_rE\":[\"Undo\"],\"9xUjzm\":[\"Select All\"],\"9y_02p\":[\"Chat with the community, get help, suggest features\"],\"A1pPcI\":[\"SSH Host\"],\"A1taO8\":[\"Search\"],\"A6C0pv\":[\"Total Cost\"],\"A7WG0p\":[\"Plugin disabled\"],\"A7yRz3\":[\"View definition is required\"],\"A9Uyp6\":[\"Import failed: \"],\"ABEd-z\":[\"Use your package manager to update Tabularis.\"],\"AMdgKV\":[\"Explain Plan Analysis Prompt\"],\"ANSTMe\":[\"No major issues detected in the current plan summary.\"],\"ANzIr7\":[\"Query History\"],\"AOnaU7\":[\"skipped\"],\"AVlZoM\":[\"Environment\"],\"AXTVsE\":[\"Verify Full\"],\"AXdRYR\":[\"Current Logs\"],\"Aa-YkQ\":[\"Export Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filter by level\"],\"AlPiMN\":[\"Click to jump to page\"],\"An-1rA\":[\"Rows returned\"],\"AnV8j-\":[\"Modify Column\"],\"AvEr_L\":[\"New Console\"],\"AvYbUL\":[\"Star on GitHub\"],\"Aw_eOs\":[\"Requires Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No results found\"],\"B0mJGb\":[\"Raw Output\"],\"B1c58n\":[\"Modify Column\"],\"B3toQF\":[\"Objects\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"Connection name is required\"],\"BAVvWJ\":[\"ER Diagram\"],\"BBtVak\":[\"Collapse All\"],\"BEVzjL\":[\"Import failed\"],\"BFxXo5\":[\"Run All\"],\"BJe2lZ\":[\"Toggle sidebar\"],\"BK3WCj\":[\"Failed to load registry\"],\"BKbO3i\":[\"Edited notebook\"],\"BMB51y\":[\"Run in console\"],\"BNW_Z4\":[\"e.g. active_users, order_summary\"],\"BUO_JN\":[\"Copy Query\"],\"BYkhHY\":[\"Check for updates on startup\"],\"BbHofF\":[\"Export Connections\"],\"BeSg6-\":[\"Collect application logs in memory for debugging\"],\"BgAyQH\":[\"Clear sort\"],\"BinTJI\":[\"npm ecosystem\"],\"BkFson\":[\"Auto paginated\"],\"Bpglf1\":[\"Move Up\"],\"BrGo6h\":[\"Search notebooks\"],\"BxiAN_\":[\"Delete Query\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Frontend Dependencies\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"No filters —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Downloading...\"],\"CUxwxn\":[\"Show All Tables\"],\"CWMXbw\":[\"will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted.\"],\"CZt6BX\":[\"MANUAL CONFIGURATION\"],\"Ca8ixZ\":[\"Delete\"],\"CbJBQS\":[\"Update failed: \"],\"Cdz-YU\":[\"Stacked view\"],\"CpeQf9\":[\"Loops\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Select the model to be used for generation and explanation.\"],\"DB8zMK\":[\"Apply\"],\"DDXf5E\":[\"SQL Functions\"],\"DEwnwi\":[\"Delete\"],\"DNTvdl\":[\"Open in Editor\"],\"DPc2P9\":[\"Delete Cell\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Line Height\"],\"Dd7YLj\":[\"Maybe later\"],\"Deej3j\":[\"Invalid JSON\"],\"DfKhk_\":[\"Update\"],\"DiRiTz\":[\"Open package page\"],\"DlRHAD\":[\"Running EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" error\"],\"other\":[\"#\",\" errors\"]}]],\"Dvdihe\":[\"On \",[\"0\"],\" — review and decide before it executes.\"],\"DzFLzw\":[\"YES\"],\"E-JUtQ\":[\"Approval gate\"],\"E0kcnZ\":[\"General\"],\"E2mje_\":[\"Select Query to Explain\"],\"EDieyg\":[\"Are you sure you want to delete this SSH connection?\"],\"EHZxPj\":[\"Expand\"],\"EL4oDO\":[\"New Version Available\"],\"EPi4gT\":[\"Sort by \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Unknown\"],\"EhADgB\":[\"Delete Column\"],\"EkH9pt\":[\"Update\"],\"Ekblrc\":[\"You're up to date\"],\"Em6JFd\":[\"Count Rows\"],\"EnGiqG\":[[\"0\"],\" elements\"],\"Ew1n5z\":[\"Search plugins…\"],\"F18WP3\":[\"Parameters\"],\"F3uc1x\":[\"The exported file will contain your database and SSH passwords in plaintext. Please store it securely.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"F6pfE9\":[\"Active\"],\"F8tXg7\":[\"Data Preview\"],\"F9-6yK\":[\"Default Copy Format\"],\"F9lxfG\":[\"Remove\"],\"F9nsa2\":[\"The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:\"],\"FF_oap\":[\"Default\"],\"FK8rlP\":[\"No SSH connections configured yet\"],\"FMRcH8\":[\"First row as header\"],\"FNvDMc\":[\"This Week\"],\"FQe1FI\":[\"Est. Rows\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operation\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Choose an independent theme for the SQL editor, or keep it in sync with the app theme.\"],\"FsvZQL\":[\"Edited cell \",[\"n\"]],\"FtwKL9\":[\"Switch tab\"],\"FznI3z\":[\"Delete foreign key \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Preview failed: \"],\"G8Q5Zq\":[\"Namespace is required\"],\"GAohqx\":[\"Delete column\"],\"GJR99u\":[\"Failed to delete column: \"],\"GKfzzM\":[\"Choose a connection...\"],\"GS-Mus\":[\"Export\"],\"GUaLUq\":[\"Failed to load schema: \"],\"GXP-Iw\":[\"Add SQL Cell\"],\"Gj1mLb\":[\"Reordered cells\"],\"GlbqG2\":[\"Reset to driver default\"],\"Gs5AlY\":[\"Open\"],\"GtmO8_\":[\"from\"],\"GxkJXS\":[\"Uploading...\"],\"H-o4D2\":[\"Create new column\"],\"H2B-KW\":[\"Choose the default format when copying rows with Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Redo\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"Collapse\"],\"H9P8CD\":[\"add the first filter\"],\"HAQlGl\":[\"AI Activity\"],\"HKNZrs\":[\"Index Cond.\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Delete \",\"#\",\" row\"],\"other\":[\"Delete \",\"#\",\" rows\"]}]],\"HPuCiP\":[\"Folder Path\"],\"HUs1R3\":[\"No open tabs for this connection.\"],\"HV4Isp\":[\"Enter SSH password\"],\"HVC8Hh\":[\"Copied to clipboard\"],\"HWEpq8\":[\"Disk Write/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Failed to save view: \"],\"He8v1Y\":[\"Deselect from Apply All\"],\"HehHP1\":[\"Default Layout\"],\"HilYn4\":[\"This notebook is empty. Add a cell to get started.\"],\"HjxVK_\":[\"Quick connection test\"],\"HmMnRx\":[\"WKT Mode\"],\"HoKCiI\":[\"The app will restart automatically after installation\"],\"HpK_8d\":[\"Reload\"],\"Hpi4Jm\":[\"Join now\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configure SSH Inline\"],\"I5VBsr\":[\"Same as App\"],\"I8yrPb\":[\"Replace table\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Remind Me Later\"],\"I99Miw\":[\"Cost\"],\"IETZIR\":[\"Edit cell name\"],\"IG9wzA\":[\"Failed to insert row: \"],\"ILleOG\":[\"Resource type must be \\\"service\\\" or \\\"pod\\\"\"],\"IQ3gAw\":[\"Upload File\"],\"IUwGEM\":[\"Save Changes\"],\"IUwmLq\":[\"Direct dependencies declared in package.json and src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Open Source Libraries\"],\"I_43p6\":[\"Safety\"],\"Iaizf4\":[\"Appearance\"],\"Il3FBB\":[\"Toggle structured filter panel\"],\"IniZRK\":[\"Download unavailable - only preview loaded\"],\"Isaozb\":[\"Review & adjust\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Active queries and connections through this plugin will be interrupted.\"],\"J6v1s_\":[\"Default Model\"],\"JE-DVk\":[\"Interpreter\"],\"JEGlfK\":[\"Started\"],\"JKDPqP\":[\"Select a context first\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Use SSH Tunnel\"],\"JRz8tw\":[\"MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants.\"],\"JUICth\":[\"PNG, JPG, WebP or SVG · max 512 KB\"],\"JY5Oyv\":[\"Database\"],\"JlFRIB\":[\"Session timezone sent to MySQL after connect.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Denied\"],\"K3H9p5\":[\"Unset\"],\"K5Dgu_\":[\"Databases\"],\"K8IGKf\":[\"Authentication Type\"],\"KAYNSW\":[\"How many logs to keep in memory (1-10000)\"],\"KHTGbr\":[\"Pre-flight EXPLAIN\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copy as `column`\"],\"KM5Kc8\":[\"At least one column must be selected\"],\"KSCnVQ\":[\"Kind\"],\"KUjOb9\":[\"running\"],\"KXBdwy\":[\"Refresh Routines\"],\"KXNyX7\":[\"Set DEFAULT\"],\"Kd70-v\":[\"Import from Clipboard...\"],\"KhI4oS\":[\"Open referenced row in \",[\"0\"]],\"KhgrNu\":[\"MCP Server Integration\"],\"KirERL\":[\"Timeout\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Failed to delete index: \"],\"KzeARD\":[\"Failed to delete table: \"],\"L-rMC9\":[\"Reset to default\"],\"L3HXkQ\":[\"Bug Fixes\"],\"LCZ7Dy\":[\"Copy Name\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"indexes\"],\"LMeAoR\":[\"rows\"],\"LPCdc-\":[\"Query Tab Name Prompt\"],\"LPFmga\":[\"Select for Apply All\"],\"LYzbQ2\":[\"Tool\"],\"Lbis_V\":[\"Quick Navigator\"],\"Lcpbe2\":[\"The plugin process could not be launched. Check the error details below.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained.\"],\"LnT0hQ\":[\"Add Column\"],\"LvutiO\":[\"AI Suggest\"],\"M-rHQO\":[\"Exit Fullscreen\"],\"M0XJba\":[\"Are you sure you want to clear all query history for this connection?\"],\"M1co_O\":[\"Configured\"],\"M73whl\":[\"Context\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Show All\"],\"MXdOwj\":[\"Separate Connections\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Select K8s Connection\"],\"Mc1tjS\":[\"Enable ANALYZE to inspect actual rows, timing, loops, and buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" more rows\"],\"Mp0jQ_\":[\"This driver only supports primary keys at table creation time\"],\"MqpZwN\":[\"Tabularis Process\"],\"MxIx43\":[\"↑↓ to navigate, Enter to open\"],\"MygtgQ\":[\"Add Markdown Cell\"],\"N40H-G\":[\"All\"],\"N5UQxq\":[\"Ollama not detected on port \",[\"0\"],\". Is it running?\"],\"N6GBcC\":[\"Confirm Delete\"],\"N6aqHp\":[\"Run queries\"],\"N9_S15\":[\"A new table will be created\"],\"NBdMa1\":[\"Slowest Step\"],\"NC2AI2\":[\"Length\"],\"NCzNnx\":[\"Sort ascending\"],\"NT4Ubs\":[\"Delete custom key and revert to environment variable (if present)\"],\"NUjrCO\":[\"No favorites match your search\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Tree total: \",[\"0\"]],\"Nc2VQn\":[\"Append to existing\"],\"NgFERn\":[\"Add to Favorites\"],\"NktMHG\":[\"Database name\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Test\"],\"Nq5QTk\":[\"explain Nth\"],\"O2STgu\":[\"Export failed: \"],\"O8SV8O\":[\"Downloading...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Run All Cells\"],\"OGWdBg\":[\"View Name\"],\"OHqT6w\":[\"Press key combination...\"],\"OXJsaG\":[\"Invalid parameter name\"],\"OfhWJH\":[\"Reset\"],\"OlAl5i\":[\"Expand all\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Join Discord\"],\"P1YGsb\":[\"SQL Generation\"],\"P2m1xb\":[\"Stop on Error\"],\"P3Qlys\":[\"No Connection ID\"],\"P6Y3Yf\":[\"Run this command in your terminal, then restart Claude Code.\"],\"PCdj-c\":[\"Deselect All\"],\"PMnFt9\":[\"Disk Read/s\"],\"PQU2Va\":[\"Accept Suggestion with Enter\"],\"PRnH8G\":[\"of \",[\"0\"]],\"PY8UF3\":[\"Toggled parallel (cell \",[\"n\"],\")\"],\"PiH3UR\":[\"Copied!\"],\"Pia95d\":[\"Column name is required\"],\"PrElXQ\":[\"Update\"],\"PrixCC\":[\"Rows will be added to an existing table\"],\"Pujgbb\":[\"Configure destination\"],\"Pw_eQV\":[\"Plugin Failed to Start\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"No saved queries\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"No child processes\"],\"QCxMC0\":[\"Automatically check for new versions when the app launches\"],\"QEazml\":[\"Delete selected\"],\"QHcLEN\":[\"Connected\"],\"QLHHFO\":[\"Read-only mode\"],\"QOvAW3\":[\"New Features\"],\"QULGRi\":[\"No valid queries found\"],\"QZwllF\":[\"Browse...\"],\"QbkSr_\":[\"EXPLAIN unavailable for this query.\"],\"QeHFYZ\":[\"EXPLAIN failed: \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"Read more\"],\"Qu4Hog\":[\"Notebook imported successfully\"],\"R-A2Vd\":[\"No data to display\"],\"R0Hkb2\":[[\"0\"],\" database(s) selected\"],\"R1nHhB\":[\"Already exists\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convert to Console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Setup\"],\"RF-HyV\":[\"Choose your preferred language. 'Auto' will use your system language.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copy name\"],\"RI-HZc\":[\"Enter \",[\"0\"],\" Key\"],\"RJrE17\":[\"Are you sure you want to drop view \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"A star helps others discover the project\"],\"Rb3Tdm\":[\"Notebook name\"],\"RcbKJ3\":[\"On Update\"],\"RkefFq\":[\"Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan.\"],\"RnF_hl\":[\"Loading plugin registry...\"],\"Rns7_C\":[\"This action cannot be undone immediately\"],\"RoKRqW\":[\"Available Plugins\"],\"RphpKk\":[\"Appearance\"],\"Rt8sHM\":[\"Sort or temp work detected\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Enabled\"],\"S1veKH\":[\"Revert Selected\"],\"S5zeZU\":[\"Toggle Preview\"],\"S8Yqbl\":[\"Insert\"],\"SDND4q\":[\"Not configured\"],\"SJRy3D\":[\"(Auto-generated)\"],\"SSwIjo\":[\"Set EMPTY\"],\"SgvA_r\":[\"Press Run (Ctrl/Command+F5) to load table data\"],\"SlfejT\":[\"Error\"],\"SoATkx\":[\"Copy Cell\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"Endpoint URL\"],\"T7w5CQ\":[\"Failed to create new row: \"],\"T9947j\":[\"Value (e.g. 'text' or 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Switch to Vertical Layout\"],\"TK5oex\":[\"Save Prompt\"],\"TKQ7K-\":[\"Install\"],\"TKZreP\":[\"Require\"],\"TMLAx2\":[\"Required\"],\"TO08JI\":[\"foreign keys\"],\"TQloo1\":[\"Create Foreign Key\"],\"TVKqvO\":[\"Edit Row\"],\"TYSdQ3\":[\"Run SELECT query\"],\"TfDFHS\":[\"Wrap long lines in the editor instead of scrolling horizontally.\"],\"Tibfjs\":[\"No saved connections — create one below\"],\"Tj36Dr\":[\"Reset to Default\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Lock query\"],\"TpwXyg\":[\"If timing is missing, the server likely returned an estimate-only plan.\"],\"Tw2M1h\":[\"Installation Failed\"],\"Ty-rm9\":[\"SSH Connections\"],\"Tz0i8g\":[\"Settings\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes Connections\"],\"U4uzyV\":[\"What's New\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Stop execution when a cell fails\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" on \",[\"1\"],\" — review and decide before it executes.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configuration installed successfully for \",[\"clientName\"],\"! Restart the app to apply.\"],\"URmyfc\":[\"Details\"],\"UWQBvp\":[\"Generate SQL templates\"],\"UawTKZ\":[\"Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default.\"],\"Ub8sf5\":[\"SQLite does not support dropping FKs via ALTER TABLE.\"],\"UbbJ8j\":[\"No options found\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"These connections will reject writes from MCP. Other connections behave normally.\"],\"UnQNah\":[\"Are you sure you want to delete column \\\"\",[\"0\"],\"\\\" from table \\\"\",[\"tableName\"],\"\\\"?\\n\\nWARNING: This will permanently delete all data in this column. This action cannot be undone.\"],\"UncTTh\":[\"Sum of RSS across the process tree — may overcount shared memory\"],\"UpjgFm\":[\"Changed parameters\"],\"UsAnu1\":[\"ANALYZE executes the query. Use with caution on data-modifying statements.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tab Size\"],\"UzWGWO\":[\"Switch to SQL WHERE input\"],\"V-chk5\":[\"How often to check if active connections are still alive. Set to 0 to disable.\"],\"V-pw1j\":[\"Table name\"],\"V2T0Uw\":[\"No saved notebooks yet.\"],\"V3aNwx\":[\"Data Editor\"],\"VGYp2r\":[\"Apply to all\"],\"VH8S7x\":[\"Clipboard column\"],\"VIAEcS\":[\"Failed to load databases. Check your credentials.\"],\"VKdztF\":[\"Append rows\"],\"VLiHXI\":[\"Analyze Data\"],\"VMbmXc\":[\"Are you sure you want to remove \\\"\",[\"pluginName\"],\"\\\"? This will delete the plugin files.\"],\"VO3weF\":[\"No file loaded\"],\"VOZlKc\":[\"Import Database\"],\"VPzsIz\":[\"Generating name...\"],\"VUul0v\":[\"Killing\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"All queries\"],\"Vi2Pqx\":[\"by\"],\"Vl2zn2\":[\"stopped\"],\"Vo4uBA\":[\"An error occurred while installing the plugin. See the details below.\"],\"VqqyOs\":[\"Execute a query to see results\"],\"VzhDFh\":[\"Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below.\"],\"W3uwpT\":[\"Close All Tabs\"],\"W4MKLh\":[\"e.g. Looks risky on prod, please confirm…\"],\"WA8RND\":[\"Are you sure you want to delete table \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Delete Table\"],\"WLnvCZ\":[\"Enter username\"],\"WM-__8\":[\"Search connections...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row imported into \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" rows imported into \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Are you sure you want to delete query \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"succeeded\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"General\"],\"WmPpB1\":[\"Loading explain plan…\"],\"Wu7cK0\":[\"No databases found\"],\"WvoUQF\":[\"Deleted cell \",[\"n\"]],\"Ww3pDD\":[\"MANUAL COMMAND\"],\"X-20AU\":[\"Enter query tab name prompt...\"],\"X-U6_w\":[\"Font Family\"],\"X5fs0g\":[\"Create your first connection to get started.\"],\"X7Ayjp\":[\"Password saved in system keychain\"],\"X9kySA\":[\"Favorites\"],\"XJOV1Y\":[\"Activity\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Query Explanation\"],\"XVF2Pf\":[\"Edit Schemas\"],\"XW6OYF\":[\"This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path.\"],\"XZB6Xr\":[\"Max Log Entries\"],\"Xcffv2\":[\"Show AI Assist and Explain buttons in the editor\"],\"XeqTSh\":[\"Join Type\"],\"XmJfZT\":[\"name\"],\"XoQfG1\":[\"SSH User\"],\"XwI0Vw\":[\"Auto (System)\"],\"XyDlLX\":[\"Index Name\"],\"Y2P2aK\":[\"Select schemas to load:\"],\"Y8HYw2\":[\"value\"],\"Y8zX3R\":[\"Insert to Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Search...\"],\"YWlnMZ\":[\"Ollama Port\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Browse and install plugins from the registry.\"],\"Y_3yKT\":[\"Open in New Tab\"],\"YiAQ_Q\":[\"Refresh Tables\"],\"Ysjr9Y\":[\"SQL Preview\"],\"YswNf7\":[\"All levels\"],\"YtNwr6\":[\"Maximum number of query history entries stored per connection.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Loading...\"],\"Z7ZXbT\":[\"Approve\"],\"Z8JpBH\":[\"Export as Notebook\"],\"Z8fBIc\":[\"Actual rows exceed estimate\"],\"ZC2VJP\":[\"Execute\"],\"ZCIS4k\":[\"no active filters\"],\"ZF1_UT\":[\"SSL Mode\"],\"ZGjBPa\":[\"Clear Logs\"],\"ZHQTlM\":[\"Importing from\"],\"ZIFDoJ\":[\"Please select at least Structure or Data\"],\"ZIZA6o\":[\"Edit before approving\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" parsing warning\"],\"other\":[\"#\",\" parsing warnings\"]}]],\"ZVn8p2\":[\"Display line numbers in the editor gutter.\"],\"ZYnwzF\":[\"Disconnected\"],\"Za3_fO\":[\"Error\"],\"Zf7LHg\":[\"No contexts found (is kubectl installed?)\"],\"Zfotp5\":[\"Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well.\"],\"ZiFjhs\":[\"Select *\"],\"ZpzHz0\":[\"Failed to load schemas\"],\"ZqXGPF\":[\"Failed to drop view: \"],\"ZuL73E\":[\"Create a new database view\"],\"_-bi4r\":[\"Referenced Table\"],\"_AEYGI\":[\"No execution history yet\"],\"_FdpZc\":[\"Failed to load view definition: \"],\"_FxSdi\":[\"Browse the direct open source dependencies used across the app, backend, and tooling.\"],\"_JyTG8\":[\"Enter explain prompt...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"rows\"],\"_TK1zF\":[\"Saved Connection\"],\"_bJFBE\":[\"Connect Timeout\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Tree\"],\"_dqduX\":[\"Next page\"],\"_fwE6J\":[\"Older\"],\"_n04sB\":[\"Kill\"],\"_otxbQ\":[\"Key file\"],\"_pezIT\":[\"Failed to connect to \",[\"0\"],\". Please check your settings or ensuring the database is running.\"],\"_srfkj\":[\"Custom key deleted successfully\"],\"_t6aFo\":[\"MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version.\"],\"_xTbaM\":[\"columns\"],\"_yxaaL\":[\"Unique Index\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.\"],\"a9CASo\":[\"SQLite only supports renaming columns. Other modifications require recreating the table manually.\"],\"aAIQg2\":[\"Appearance\"],\"aC_vCa\":[\"Generate name with AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Select a node to view details\"],\"aHKcKc\":[\"Previous page\"],\"aI-5wG\":[\"Verify CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Default Value\"],\"aScJP1\":[\"Run this query\"],\"aVNbN8\":[\"Filter conditions\"],\"aWhdMQ\":[\"Use Existing SSH Connection\"],\"aXYd8V\":[\"Timeout\"],\"aX_S_r\":[\"Page \",[\"0\"],\" of \",[\"totalPages\"]],\"agZcf8\":[\"Generated SQL: \",[\"tableName\"]],\"ajqPzi\":[\"Select [fields]\"],\"alplHn\":[\"Analyzing query plan with AI...\"],\"anBcU3\":[\"If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo.\"],\"arHmj2\":[\"Are you sure you want to delete this query from history?\"],\"arKcqW\":[\"Older servers may fall back to estimated plans with fewer metrics.\"],\"arcpYe\":[\"Approval required\"],\"aurEkh\":[\"Loading processes…\"],\"avtdsd\":[\"SQL Mode\"],\"az8lvo\":[\"Off\"],\"b1Ah3z\":[\"Focused on\"],\"b392Dr\":[\"Expand All\"],\"b5S_PU\":[\"Database Name\"],\"bAvovP\":[\"Move Down\"],\"bH3JqY\":[\"No tables found\"],\"bP5JOn\":[\"Word Wrap\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Make all MCP queries read-only\"],\"bmca5u\":[\"Writes only\"],\"bpCiBU\":[\"Allow writes from MCP\"],\"bqnhqW\":[\"Estimate exceeds actual rows\"],\"bqpcP7\":[\"Dump Database\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Fail with error\"],\"bw22Gk\":[\"Column Schema\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Top Issues\"],\"cFCKYZ\":[\"Deny\"],\"cFGrCP\":[\"table\"],\"cGeFup\":[\"Font Size\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focus on Table\"],\"cM9NHc\":[\"Downgrade to\"],\"cO9-2L\":[\"Disable\"],\"cSev-j\":[\"Filters\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Import \",\"#\",\" row\"],\"other\":[\"Import \",\"#\",\" rows\"]}]],\"c_xoSn\":[\"Renamed cell \",[\"n\"]],\"cd0XEW\":[\"Save Query\"],\"cnGeoo\":[\"Delete\"],\"cwfPLH\":[\"Split Group\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" statements\"],\"d34vwG\":[\"Load Databases\"],\"d6ynQ7\":[\"Sort descending\"],\"d8_6_v\":[\"cancel\"],\"d8wc1_\":[\"Sample values\"],\"dBXoCS\":[\"An environment variable is present, but you can override it by setting a key above.\"],\"dD7NPy\":[\"Outline\"],\"dEgA5A\":[\"Cancel\"],\"dMtLDE\":[\"to\"],\"dPJVhW\":[\"Installation Failed\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" session\"],\"other\":[\"#\",\" sessions\"]}]],\"dTUzKm\":[\"Run Selected (\",[\"0\"],\")\"],\"dU_iQN\":[\"No sessions match the current filters.\"],\"dUh9QW\":[\"Planning\"],\"dVoir2\":[\"Added Markdown cell \",[\"n\"]],\"dZ0d2O\":[\"Please select at least one table\"],\"dhi13U\":[\"Choose image…\"],\"dli1JX\":[\"Submit Changes\"],\"dmYV6f\":[\"Routines\"],\"dohZCo\":[\"Instructions for AI-powered SQL generation. Use {\",[\"SCHEMA\"],\"} as a placeholder for the database structure.\"],\"dtxpK2\":[\"Analyze\"],\"dwW9nJ\":[\"Show Line Numbers\"],\"dwWVw_\":[\"Show Welcome Screen\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"If exists\"],\"dyN4j9\":[\"Click 'Run Preview' to see results\"],\"e07Iz5\":[\"Open Task Manager\"],\"e0NzXu\":[\"This project is a Work In Progress (WIP). Core features are stable, but we have big plans.\"],\"e1UKxf\":[\"Save this query\"],\"e34gdU\":[\"How long the MCP subprocess will wait for the user's decision before failing the request.\"],\"e62LQd\":[\"Force Kill\"],\"e6QZsM\":[\"Editor Theme\"],\"e8CirT\":[\"Run query\"],\"eD2kUP\":[\"Buffers Read\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Enter explain plan analysis prompt...\"],\"eIVolo\":[\"Disk R/W\"],\"eJOEBy\":[\"Exporting...\"],\"eKHY3W\":[\"Plugin Settings\"],\"eMb6Ub\":[\"Choose a resource...\"],\"ePK91l\":[\"Edit\"],\"eXweu6\":[\"Expand Cell\"],\"ecNsTE\":[\"No queries match your search\"],\"ecUA8p\":[\"Today\"],\"ecpIZP\":[\"Enter key passphrase if encrypted\"],\"esl-Tv\":[\"Resource Type\"],\"exyUec\":[\"Connection\"],\"f2AJjl\":[\"Delete Row\"],\"f4pD-j\":[\"Connection test failed\"],\"f7sXvi\":[\"Enter password\"],\"fAsxc0\":[\"Sequential Scans\"],\"fIeFs0\":[\"Select Value...\"],\"fJm92A\":[\"Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Values\"],\"f_b1TA\":[\"Execution History\"],\"fghnqP\":[\"Switch to connection 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Comma (,)\"],\"fp711N\":[\"Blocked (read-only)\"],\"fpzyLj\":[\"Page \",[\"0\"],\" of \",[\"1\"]],\"fuA6oy\":[\"Socket Timeout\"],\"fvImQM\":[[\"0\"],\" selected\"],\"fwr_nh\":[\"Install extensions, manage plugin drivers, and keep runtime settings under control.\"],\"g0ZzK4\":[\"Valid JSON\"],\"g11hAR\":[\"New Row\"],\"g8VcMm\":[\"My K8s cluster\"],\"gCFR_O\":[\"Parallel Execution (Run All)\"],\"gEjU98\":[\"Open connections\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"At least one column is required\"],\"gSuQrG\":[\"No connections match \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Re-run query\"],\"gZWMnn\":[\"AI Analysis\"],\"ghYd73\":[\"Choose target...\"],\"giAqEC\":[\"Create New Table\"],\"gnQS8X\":[\"Maximum packet size used by the MySQL connector.\"],\"gqV5VL\":[\"Built-in, not customizable\"],\"gww_XE\":[\"Referenced Column\"],\"gxXPJ9\":[\"Configure Interpreter\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximize\"],\"h-XNc9\":[\"CSV Delimiter\"],\"h-kNAk\":[\"e.g. sales_data\"],\"h3Z_aK\":[\"Write Markdown here...\"],\"h7MgpO\":[\"Keyboard Shortcuts\"],\"h7peZQ\":[\"Allow\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" system process running\"],\"other\":[\"#\",\" system processes running\"]}]],\"hEZrFh\":[\"Run SQL File...\"],\"hEipgW\":[\"Check for Updates Now\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Export as CSV\"],\"hItdtk\":[\"Browse folder\"],\"hXFVjo\":[\"Table name is required\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Re-run\"],\"hbz1rh\":[\"keys\"],\"hdsaJo\":[\"Importing...\"],\"he3ygx\":[\"Copy\"],\"hfGimp\":[\"Choose a namespace...\"],\"hjjSEi\":[\"Read-only connections\"],\"hjwN_s\":[\"Resource Name\"],\"hlF1mD\":[\"Copy selection\"],\"hnboBb\":[\"AI Query Plan Analysis\"],\"hq4-D2\":[\"API Key is stored securely in your system keychain. Setting a key here overrides the environment variable.\"],\"hqjXdn\":[\"Failed to delete SSH connection\"],\"hqofAK\":[\"Copy SQL\"],\"hy6L14\":[\"View on GitHub\"],\"hyjACX\":[\"Collapsed/expanded cells\"],\"hz1b5W\":[\"No matching elements found\"],\"i1vAVM\":[\"Create new table\"],\"i3S5T3\":[\"Search favorites...\"],\"i4_LY_\":[\"Write\"],\"i5HBWh\":[\"Query history was reset\"],\"iAVlge\":[\"Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message.\"],\"iE1yAB\":[\"Filter tables...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connect\"],\"iSryJ2\":[\"My SSH Server\"],\"iT7UeX\":[\"Add Index\"],\"iUWwuR\":[\"Download & Install\"],\"ia7i08\":[\"Select context/namespace/type first\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Saved\"],\"igcsfY\":[\"No plugins available in the registry.\"],\"ij-Elv\":[\"Image preview\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" explainable query found\"],\"other\":[\"#\",\" explainable queries found\"]}]],\"ioL38P\":[\"Monitor plugin processes, CPU, RAM and disk usage in real time\"],\"ixlL_e\":[\"SSH Key File (Optional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Select a model\"],\"j3gyYH\":[\"Apply All\"],\"j5CWO4\":[\"Up to date\"],\"j9HPuI\":[\"Row #\",[\"0\"]],\"jBtpMP\":[\"All statuses\"],\"jEu4bB\":[\"Columns\"],\"jEyQIs\":[\"No routines found\"],\"jHc1By\":[\"Drop View\"],\"jI6sj4\":[\"Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL.\"],\"jIxQCZ\":[\"Not available for your platform\"],\"jKIncn\":[\"Database name is required\"],\"jPSk57\":[\"Reason (optional)\"],\"jUNY_d\":[\"view\"],\"jVqjDo\":[\"Invalid notebook file format\"],\"jWSZ-A\":[\"Preview only - full data not loaded\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket timeout in milliseconds.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Connection name is required\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"child process\"],\"jx0t66\":[\"Collapse child processes\"],\"jxShEf\":[\"Create View\"],\"jz5PKx\":[\"View Definition\"],\"k-0mL-\":[\"Add Column\"],\"k-XiMX\":[\"Raw\"],\"k2UnVy\":[\"Hash Cond.\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"seconds\"],\"kBiBq7\":[\"Delete index \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Toggle Chart\"],\"kI1qVD\":[\"Format\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" rows · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Event details\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registry\"],\"kY-q3P\":[[\"label\"],\" is required\"],\"kexIdC\":[\"Use Kubernetes Port-Forward\"],\"kj2-CR\":[\"Error Details\"],\"krksx_\":[\"Success\"],\"kwY6nh\":[\"Dismiss\"],\"kx0s-n\":[\"Results\"],\"kxUEfE\":[\"Failed to get routine definition: \"],\"l2Op2p\":[\"Query Parameters\"],\"l9Ivba\":[\"Plugin processes & system resources\"],\"lBdPxu\":[\"Accent color\"],\"lCF0wC\":[\"Refresh\"],\"lEQRwq\":[\"Data (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"New table created\"],\"lOekZ3\":[\"Switch to Horizontal Layout\"],\"lUA1C1\":[\"SSH Key Passphrase (Optional)\"],\"lVeG20\":[\"Rust Dependencies\"],\"lXAG6D\":[\"Instructions for AI-powered query explanation. Use {\",[\"LANGUAGE\"],\"} as a placeholder for the output language.\"],\"lbbYjy\":[\"Directly edit the raw configuration file. A restart is required to apply changes.\"],\"lhKW0m\":[\"Added SQL cell \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Result Page Size (Limit)\"],\"lkz6PL\":[\"Duration\"],\"lmVGeo\":[\"Add Foreign Key\"],\"lnnx3E\":[\"Connect Tabularis to Claude Desktop, Cursor, and more\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Add\"],\"m2Q_r8\":[\"Detect JSON in text columns\"],\"m2tskz\":[\"Success\"],\"mA-qpe\":[\"Run All Complete\"],\"mBhhbA\":[\"Logs exported to clipboard\"],\"mCNdzH\":[\"Run Cell\"],\"mO95sp\":[\"Close panel\"],\"mP7dLi\":[\"Enter font name above\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" blocked\"],\"other\":[\"#\",\" blocked\"]}]],\"mS74ir\":[\"Failed to save SSH connection\"],\"mSqtw8\":[\"Run Preview\"],\"mURmfQ\":[\"View Definition (SQL)\"],\"mX_isJ\":[\"Vertical\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Structure (DDL)\"],\"mrk4Cf\":[\"Sort by \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap.\"],\"mtvVdV\":[\"Rows Processed\"],\"mx4evv\":[\"Create Table\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Download\"],\"n7JDTx\":[\"Install and enable plugins to see them here\"],\"nDDJir\":[\"Search session, client, connection…\"],\"nHP-Kr\":[\"No active session. Please select a connection.\"],\"nKhCjW\":[\"Select Tables\"],\"nNmhuY\":[\"Create Index\"],\"nNwvm4\":[\"Error\"],\"nOVim5\":[\"Failed to save connection\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Requires extension: \",[\"0\"]],\"ngO6Pv\":[\"Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Create your first connection\"],\"nohy4m\":[\"No MCP activity yet.\"],\"nr-axf\":[\"Remove Plugin\"],\"nsPFX9\":[\"Open in Visual Explain\"],\"nuBbBr\":[\"Chart\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Change\"],\"o21Y-P\":[\"entries\"],\"o3tP_A\":[\"Delete Index\"],\"o45L8r\":[\"Provide your connection name\"],\"o53XGh\":[\"Copy selected row(s)\"],\"o7J4JM\":[\"Filter\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Level\"],\"oGiIL7\":[\"Default Provider\"],\"oJ4rAm\":[\"Connection Lost\"],\"oJlXF2\":[\"Import Notebook\"],\"oMFv82\":[\"Split Vertical\"],\"oOFiQg\":[\"Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended).\"],\"oT9ZD3\":[\"Hide overview\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Changed chart (cell \",[\"n\"],\")\"],\"oWfclW\":[\"Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.\"],\"obpbdz\":[\"Config file not found (create manually)\"],\"odZgfC\":[\"AI CLIENTS\"],\"ogZhXn\":[\"Choose the default layout direction for ER diagrams\"],\"ohUJJM\":[\"Plugins\"],\"ok3hJJ\":[\"Installed\"],\"olAdaI\":[\"Actual Rows\"],\"olWzar\":[\"Force Kill Plugin Process\"],\"ovBPCi\":[\"Default\"],\"owzTWN\":[\"AI models refreshed from providers\"],\"oxYi6j\":[\"Adjust the base font size used throughout the application (10-20px).\"],\"p--hsQ\":[\"A database connection was lost\"],\"p6NueD\":[\"NEW\"],\"pOYHox\":[\"Actions\"],\"pR9bTR\":[\"No BLOB data\"],\"pRDT0m\":[\"Table\"],\"pS8S5q\":[\"e.g. users, orders, products\"],\"pSws_M\":[\"Table Name\"],\"pVLbKZ\":[\"View created successfully\"],\"pWT04I\":[\"Checking...\"],\"pZJ_6D\":[\"Index name is required\"],\"pddYFG\":[\"Enter notebook cell name prompt...\"],\"pnpyuD\":[\"Enable Logging\"],\"pqKMPv\":[\"Failed to create table: \"],\"pqaP1h\":[\"Dismiss\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"e.g., Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"All other connections stay read-only. Only the connections checked here may execute writes.\"],\"qIrtcK\":[\"Updates\"],\"qOqy8G\":[\"Checking configuration...\"],\"qWaVNs\":[\"Save & Restart\"],\"qb3LPX\":[\"View ER Diagram\"],\"qkK0vq\":[\"View name is required\"],\"qki9tG\":[\"Error\"],\"qoIir-\":[\"The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Collapse all\"],\"r6ncaO\":[\"Close tab\"],\"rAJlpP\":[\"Container Port\"],\"rG3WVm\":[\"Select\"],\"rGRCeK\":[\"Clear Query History\"],\"rNIto7\":[\"Resource name is required\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exported successfully\"],\"rY4sEV\":[\"Delete FK\"],\"rbu0nO\":[\"Manage SSH Connections\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connection\"],\"other\":[\"#\",\" connections\"]}]],\"rn2_2V\":[\"Remove filter\"],\"roABNH\":[\"No query history\"],\"rtir7c\":[\"unknown\"],\"ru0-2W\":[\"No active connections\"],\"rvDPWO\":[\"Estimate Gap\"],\"rwWjWg\":[\"Release Notes\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Test Connection\"],\"sBOaim\":[\"The configuration file has been saved. Restart now to apply the changes?\"],\"sCyv9B\":[\"Refresh Models\"],\"sSUqe4\":[\"Delete\"],\"sUBkgN\":[\"Generating SQL...\"],\"sZZG3d\":[\"Are you sure you want to import \\\"\",[\"0\"],\"\\\"?\\nThis may overwrite existing data.\"],\"sbK5ck\":[\"Search history...\"],\"sq_bS6\":[\"On Delete\"],\"suW7-E\":[\"Connection timeout in milliseconds.\"],\"t-R8-P\":[\"Execution\"],\"t1OfVY\":[[\"totalLibraries\"],\" libraries\"],\"t2TMzs\":[\"Close Tab\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Select a table...\"],\"t7KRl1\":[\"Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere.\"],\"t9NJIk\":[\"Scan-heavy operations detected\"],\"tB7xof\":[\"Temp or Sort Ops\"],\"tBBXTO\":[\"Ping Interval\"],\"tFrT3w\":[\"Add this to your client config file manually if automatic install fails.\"],\"tJ7UbA\":[\"explain focused\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Split Horizontal\"],\"tQhW-D\":[\"Log Settings\"],\"tXFGEx\":[\"No Kubernetes connections saved. Click \\\"Add\\\" to create one.\"],\"tXLz_8\":[\"Delete\"],\"tXpRby\":[\"Data Grid\"],\"tbysEk\":[\"Actions\"],\"tdta9X\":[\"Page \",[\"0\"]],\"tfDRzk\":[\"Save\"],\"tfEioV\":[\"Execute all SQL cells top to bottom\"],\"tiAIaJ\":[\"SSH Password missing. Please re-enter.\"],\"tk22BR\":[\"Paste structured data and preview the schema before importing\"],\"tst44n\":[\"Events\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL file executed successfully\"],\"u6QeR6\":[\"Restart Now\"],\"uAQUqI\":[\"Status\"],\"uBAxNB\":[\"Editor\"],\"uFViPK\":[\"No SSH connections available\"],\"uHUuhp\":[\"Explain this query\"],\"uHfFzS\":[\"Editor Font Size\"],\"uJ_3K5\":[\"Delete notebook \\\"\",[\"0\"],\"\\\"? This cannot be undone.\"],\"uKaNJ3\":[\"Open in JSON Editor\"],\"uQBwTo\":[\"Schemas\"],\"ub54ff\":[\"Plugin Center\"],\"ufFyBs\":[\"Database exported successfully\"],\"upNmR2\":[\"Open Sidebar Editor\"],\"utMia3\":[\"Deselect All\"],\"uyNaJg\":[\"1 element\"],\"v61dnS\":[\"Enter the exact model name for your OpenAI-compatible provider.\"],\"v6oeyr\":[\"Installed\"],\"v75DGg\":[\"Browse file\"],\"v99dO4\":[\"Primary Key\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query found\"],\"other\":[\"#\",\" queries found\"]}]],\"vCSBPD\":[\"Add filter\"],\"vH7uJj\":[\"Sort by…\"],\"vUOA1-\":[\"Search models...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.\"],\"vXIe7J\":[\"Language\"],\"vYf4Jm\":[\"Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Prefer\"],\"vditm4\":[\"Explain Plan\"],\"vks_ls\":[\"Close Other Tabs\"],\"vnAnIp\":[\"Model <0>\",[\"0\"],\" not found in <1>\",[\"1\"],\". It may not work correctly.\"],\"vqoN5u\":[\"Structure\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Explorer\"],\"vujQJ5\":[\"Localization\"],\"vvJPVL\":[\"Show overview\"],\"vwI5S4\":[\"Success\"],\"vzH-7Z\":[\"Explain\"],\"w7QmD_\":[\"Enter system prompt...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Elapsed time\"],\"wCfv2R\":[\"Add Connection\"],\"wGfc86\":[\"Clear All History\"],\"wGwNv4\":[\"Active database\"],\"wJJ-Wy\":[\"Installing...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers Hit\"],\"wQn-RM\":[\"Add Column\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Applied\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Import from Clipboard\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"Pending approval\"],\"wckWOP\":[\"Manage\"],\"wdYcKH\":[\"Open Tabs\"],\"wja8aL\":[\"Untitled\"],\"wkOAzk\":[\"No notebooks match your search.\"],\"wp49Ao\":[\"Failed to process insertions: \"],\"wqG2hQ\":[\"Skip (do not import)\"],\"wwrAsK\":[\"Please fill in all required fields\"],\"wwu18a\":[\"Icon\"],\"x2fr_j\":[\"Graph\"],\"xANKBj\":[\"Functions\"],\"xBwjck\":[\"A restart is required to apply changes.\"],\"xDAtGP\":[\"Message\"],\"xECY01\":[\"Procedures\"],\"xGPNgZ\":[\"Prompt Customization\"],\"xNgtS-\":[\"No views found\"],\"xOPa1b\":[\"Port must be between 1 and 65535\"],\"xY9s5E\":[\"Timeout\"],\"xaVUr1\":[\"The quick brown fox jumps over the lazy dog\"],\"xbvTzL\":[\"File Path\"],\"xlew5F\":[\"Clear\"],\"xmNyKz\":[\"Testing...\"],\"xtuh6D\":[\"Expand Explorer\"],\"y-Zdqj\":[\"Choose a context...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Open JSON viewer\"],\"yQXjG5\":[\"Deselect All\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Yesterday\"],\"ygCKqB\":[\"Stop\"],\"ykCc6r\":[\"Changed database (cell \",[\"n\"],\")\"],\"ynVMSc\":[\"Select All\"],\"ytdz1d\":[\"AI requested a database write\"],\"yyhzur\":[\"Create Table\"],\"yz7wBu\":[\"Close\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"SSH Password\"],\"z5kV0h\":[\"Connections\"],\"zBTMzx\":[\"Preview\"],\"zCaAKs\":[\"Update Error\"],\"zDAakK\":[\"Cannot display diagram without a connection ID.\"],\"zGe21h\":[\"This key is loaded from an environment variable\"],\"zGfL5t\":[\"value\"],\"zL6-4A\":[\"No plugin processes are running\"],\"zLZhCi\":[\"Brand-new Discord community!\"],\"zLlCou\":[\"Copy column name\"],\"zNEL34\":[\"Join the Community\"],\"zNgTlV\":[\"Close Tabs to Right\"],\"zQz55p\":[\"Inspect structure\"],\"zR0FfH\":[\"Exported to \",[\"target\"]],\"zRZeOc\":[\"Search tables, views, routines, triggers...\"],\"zUNMsr\":[\"SSH Key\"],\"zXMRzb\":[\"SSH Port\"],\"zZgoXr\":[\"No tables match\"],\"zaWbms\":[\"Rollback Changes\"],\"zgClmU\":[\"Install Config\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Enter value...\"],\"zvzN4C\":[\"Set as Active\"],\"zzDlyQ\":[\"Success\"],\"zzMxrp\":[\"Edit config.json\"],\"zz_Wd_\":[\"Mode\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Max History Entries\"],\"-6AWa-\":[\"Import Connections\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Disconnect\"],\"-PLZfh\":[\"Failed to refresh models\"],\"-T5W2e\":[\"Driver Notes\"],\"-ZgeeE\":[\"Edit history\"],\"-aYrdc\":[\"Version \",[\"0\"],\" is available\"],\"-fBGXl\":[\"Highest Cost\"],\"-jIQDz\":[\"Collapse Cell\"],\"-u1eRo\":[\"No database\"],\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"Approval ID\"],\"0E5-gF\":[\"Are you sure you want to delete this connection?\"],\"0HCubq\":[\"Expand\"],\"0Kmdvy\":[\"Custom Font\"],\"0Nj13E\":[\"Generate SQL\"],\"0ROgz5\":[\"Enter JSON...\"],\"0SY9sU\":[\"Failed to disconnect from database\"],\"0b3kL9\":[\"Select a database\"],\"0caMy7\":[\"History\"],\"0mx5ow\":[\"Query\"],\"0n9BtL\":[\"Preview\"],\"0pHB9N\":[\"Copy as table.column\"],\"0sQzZK\":[\"Filter databases...\"],\"0uPP9X\":[\"FK Name (Optional)\"],\"0wxuek\":[\"Current Version\"],\"0x09Aw\":[\"Toggled stop on error\"],\"0yBP6v\":[\"Support the Development\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"0yVAoD\":[\"Count rows\"],\"0zxJ87\":[\"No logs available\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Edit View\"],\"11fGJ6\":[\"Queries\"],\"13hIUA\":[[\"0\"],\" API Key\"],\"14qNWF\":[\"Select SSH Connection\"],\"17qHRP\":[\"New connection\"],\"1Dn6bg\":[\"Import from Clipboard\"],\"1Dnd0I\":[\"Load row count\"],\"1FjTLW\":[\"e.g. python3\"],\"1GOvbo\":[\"Ollama connected (\",[\"0\"],\" models found)\"],\"1I6UoR\":[\"Views\"],\"1U7hS5\":[\"Len\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Editor Font Family\"],\"1ekzlY\":[\"Plugin Processes\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Theme Selection\"],\"1xVZkL\":[\"No models found\"],\"26Joci\":[[\"0\"],\" rows retrieved\"],\"2Bf-Qe\":[\"New console\"],\"2CrSmP\":[\"Help tabularis grow\"],\"2D9F8_\":[\"Failed to duplicate connection\"],\"2Eoi_a\":[\"View details\"],\"2F4pE5\":[\"Rust Build and Test\"],\"2Fsd9r\":[\"This Month\"],\"2JzKXI\":[\"Set GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Select All\"],\"2SO5RM\":[\"Kubernetes is not available for this driver.\"],\"2Uh5GA\":[\"Cargo ecosystem\"],\"2YylFp\":[\"New Visual Query\"],\"2luuSG\":[\"Try again\"],\"2wxgft\":[\"Rename\"],\"2yG2GC\":[\"Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database.\"],\"30-b5r\":[\"Delete\"],\"31kwdN\":[\"Duplicate filter\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"All tools\"],\"3Am5DS\":[\"Tab view\"],\"3FVg9_\":[\"Local Column\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Run\"],\"3L0HCz\":[\"No plugins match your search.\"],\"3Nv3JV\":[\"Executing query...\"],\"3TSz9S\":[\"Minimize\"],\"3UW8fG\":[\"Updates managed by \",[\"0\"]],\"3YvS-c\":[\"New tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook Cell Name Prompt\"],\"3qkggm\":[\"Fullscreen\"],\"3rBJ1T\":[\"View Schema\"],\"3xZ-xV\":[\"Insert Current Timestamp\"],\"40Gx0U\":[\"Timezone\"],\"41GP4f\":[\"Choose the default delimiter character used when copying or exporting rows as CSV.\"],\"42iaEi\":[\"PostgreSQL without ANALYZE shows planner estimates only.\"],\"44cXI8\":[\"Sort by \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Manage Databases\"],\"4CK17g\":[\"Are you sure you want to modify view \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Select at least one database\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Export as HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" child process\"],\"other\":[\"#\",\" child processes\"]}]],\"4VyuY3\":[\"Are you sure you want to clear all logs?\"],\"4WWqS3\":[\"Toggle inline JSON tree\"],\"4XAQdl\":[\"Create Index\"],\"4cEClj\":[\"Sessions\"],\"4cmfYp\":[\"Duplicate Row\"],\"4hsr6d\":[\"Create View\"],\"4lIZTB\":[\"Frontend Dev Dependencies\"],\"4oYjvJ\":[\"Search query…\"],\"4tMxW4\":[\"Preview related record\"],\"4yJcjm\":[\"Select type...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Close filter panel (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Semicolon (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" event\"],\"other\":[\"#\",\" events\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"List view\"],\"5To6Z6\":[\"Copy query\"],\"5gqNQl\":[\"Grid view\"],\"5igIzr\":[\"Import cancelled\"],\"5nTIup\":[\"Editing view: \",[\"name\"]],\"5qIe8E\":[\"Run All\"],\"66bEht\":[\"Project Status\"],\"6PIJVc\":[\"Startup\"],\"6QvP0l\":[\"Export as JSON\"],\"6W41Xq\":[\"Task Manager\"],\"6WngBH\":[\"Set NULL\"],\"6YtxFj\":[\"Name\"],\"6_dCYd\":[\"Overview\"],\"6dOBsk\":[\"Create View\"],\"6gvoHP\":[\"Copy error message\"],\"6oCVzX\":[\"Kubernetes context is required\"],\"6wQO0f\":[\"Show Data\"],\"6z9W13\":[\"Restart\"],\"71agNy\":[\"Generate names for unnamed cells with AI\"],\"74J3FG\":[\"Initial version\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Got it\"],\"77nSMU\":[\"Delete the entire AI activity history? This cannot be undone.\"],\"7ABmyQ\":[\"Try again\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" of \",[\"0\"],\" active\"],\"7E864M\":[\"Database Type\"],\"7FqaG1\":[\"Customize instructions for AI analysis of EXPLAIN query plans. Use {\",[\"LANGUAGE\"],\"} for the output language.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Mixed types detected, defaulted to TEXT\"],\"7RSQQd\":[\"Save passwords in Keychain\"],\"7VpPHA\":[\"Confirm\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"failed\"],\"7sMeHQ\":[\"Key\"],\"7sNhEz\":[\"Username\"],\"7tATh2\":[\"Run Query\"],\"7yb4gk\":[\"Failed: \"],\"8-4V8D\":[\"Tables\"],\"82G-l5\":[\"The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely.\"],\"83VjWE\":[\"New Notebook\"],\"86IgoU\":[\"Run query (in editor)\"],\"86fCgf\":[\"Customize instructions for AI query result tab name generation. The SQL query is sent as the user message.\"],\"87a_t_\":[\"Label\"],\"87kWsr\":[\"Export Connections\"],\"8CWirf\":[\"MCP Server\"],\"8S8aIX\":[\"Connection Health Check\"],\"8TMaZI\":[\"Timestamp\"],\"8Tg_JR\":[\"Custom\"],\"8UFKYr\":[\"Select Query to Execute\"],\"8VKSGV\":[\"Generate SQL\"],\"8Wjy6z\":[\"Close Tabs to Left\"],\"8ZsakT\":[\"Password\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL Editor\"],\"8bRgTe\":[\"AI Provider not configured. Please go to Settings > AI.\"],\"8c_W0h\":[\"Older versions\"],\"8guEQP\":[\"Refresh Views\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.\"],\"8q_sOc\":[\"Remove\"],\"8t-akp\":[\"showing first \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Connection Name\"],\"91gnWY\":[\"Export Logs\"],\"91rtHL\":[\"Create New View\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"View updated successfully\"],\"9NzDFn\":[\"Display the welcome screen when the application starts.\"],\"9OoUS3\":[\"Create New SSH Connection\"],\"9QGRD5\":[\"Target column\"],\"9QTny9\":[\"Query failed.\"],\"9S-fyV\":[\"Pre-flight execution plan\"],\"9SJ_Sx\":[\"System Resources\"],\"9UQ730\":[\"Clone\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"No data found in clipboard\"],\"9hGjL2\":[\"Create Index\"],\"9mMU1R\":[\"Time\"],\"9mvFo_\":[\"Time\"],\"9npOH9\":[\"Open file\"],\"9uI_rE\":[\"Undo\"],\"9xUjzm\":[\"Select All\"],\"9y_02p\":[\"Chat with the community, get help, suggest features\"],\"A1pPcI\":[\"SSH Host\"],\"A1taO8\":[\"Search\"],\"A6C0pv\":[\"Total Cost\"],\"A7WG0p\":[\"Plugin disabled\"],\"A7yRz3\":[\"View definition is required\"],\"A9Uyp6\":[\"Import failed: \"],\"ABEd-z\":[\"Use your package manager to update Tabularis.\"],\"AMdgKV\":[\"Explain Plan Analysis Prompt\"],\"ANSTMe\":[\"No major issues detected in the current plan summary.\"],\"ANzIr7\":[\"Query History\"],\"AOnaU7\":[\"skipped\"],\"AVlZoM\":[\"Environment\"],\"AXTVsE\":[\"Verify Full\"],\"AXdRYR\":[\"Current Logs\"],\"Aa-YkQ\":[\"Export Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filter by level\"],\"AlPiMN\":[\"Click to jump to page\"],\"An-1rA\":[\"Rows returned\"],\"AnV8j-\":[\"Modify Column\"],\"AvEr_L\":[\"New Console\"],\"AvYbUL\":[\"Star on GitHub\"],\"Aw_eOs\":[\"Requires Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No results found\"],\"B0mJGb\":[\"Raw Output\"],\"B1c58n\":[\"Modify Column\"],\"B3toQF\":[\"Objects\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"Connection name is required\"],\"BAVvWJ\":[\"ER Diagram\"],\"BBtVak\":[\"Collapse All\"],\"BEVzjL\":[\"Import failed\"],\"BHATjK\":[\"Export Connections\"],\"BJe2lZ\":[\"Toggle sidebar\"],\"BK3WCj\":[\"Failed to load registry\"],\"BKbO3i\":[\"Edited notebook\"],\"BMB51y\":[\"Run in console\"],\"BNW_Z4\":[\"e.g. active_users, order_summary\"],\"BPkXj7\":[\"Create Foreign Key\"],\"BUO_JN\":[\"Copy Query\"],\"BYkhHY\":[\"Check for updates on startup\"],\"BeSg6-\":[\"Collect application logs in memory for debugging\"],\"BgAyQH\":[\"Clear sort\"],\"BinTJI\":[\"npm ecosystem\"],\"BkFson\":[\"Auto paginated\"],\"Bpglf1\":[\"Move Up\"],\"BrGo6h\":[\"Search notebooks\"],\"BxiAN_\":[\"Delete Query\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Frontend Dependencies\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"No filters —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Downloading...\"],\"CUxwxn\":[\"Show All Tables\"],\"CWMXbw\":[\"will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted.\"],\"CZt6BX\":[\"MANUAL CONFIGURATION\"],\"Ca8ixZ\":[\"Delete\"],\"CbJBQS\":[\"Update failed: \"],\"Cdz-YU\":[\"Stacked view\"],\"CpeQf9\":[\"Loops\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Select the model to be used for generation and explanation.\"],\"DB8zMK\":[\"Apply\"],\"DDXf5E\":[\"SQL Functions\"],\"DEwnwi\":[\"Delete\"],\"DNTvdl\":[\"Open in Editor\"],\"DPc2P9\":[\"Delete Cell\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Line Height\"],\"Dd7YLj\":[\"Maybe later\"],\"Deej3j\":[\"Invalid JSON\"],\"DfKhk_\":[\"Update\"],\"DiRiTz\":[\"Open package page\"],\"DlRHAD\":[\"Running EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" error\"],\"other\":[\"#\",\" errors\"]}]],\"Dvdihe\":[\"On \",[\"0\"],\" — review and decide before it executes.\"],\"DzFLzw\":[\"YES\"],\"E-JUtQ\":[\"Approval gate\"],\"E0kcnZ\":[\"General\"],\"E2mje_\":[\"Select Query to Explain\"],\"EDieyg\":[\"Are you sure you want to delete this SSH connection?\"],\"EHZxPj\":[\"Expand\"],\"EL4oDO\":[\"New Version Available\"],\"EPi4gT\":[\"Sort by \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Unknown\"],\"EhADgB\":[\"Delete Column\"],\"EkH9pt\":[\"Update\"],\"Ekblrc\":[\"You're up to date\"],\"Em6JFd\":[\"Count Rows\"],\"EnGiqG\":[[\"0\"],\" elements\"],\"Ew1n5z\":[\"Search plugins…\"],\"F18WP3\":[\"Parameters\"],\"F3uc1x\":[\"The exported file will contain your database and SSH passwords in plaintext. Please store it securely.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"F6pfE9\":[\"Active\"],\"F8tXg7\":[\"Data Preview\"],\"F9-6yK\":[\"Default Copy Format\"],\"F9lxfG\":[\"Remove\"],\"F9nsa2\":[\"The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:\"],\"FF_oap\":[\"Default\"],\"FK8rlP\":[\"No SSH connections configured yet\"],\"FMRcH8\":[\"First row as header\"],\"FNvDMc\":[\"This Week\"],\"FQe1FI\":[\"Est. Rows\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operation\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Choose an independent theme for the SQL editor, or keep it in sync with the app theme.\"],\"FsvZQL\":[\"Edited cell \",[\"n\"]],\"FtwKL9\":[\"Switch tab\"],\"FznI3z\":[\"Delete foreign key \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Preview failed: \"],\"G8Q5Zq\":[\"Namespace is required\"],\"GAohqx\":[\"Delete column\"],\"GJR99u\":[\"Failed to delete column: \"],\"GKfzzM\":[\"Choose a connection...\"],\"GS-Mus\":[\"Export\"],\"GUaLUq\":[\"Failed to load schema: \"],\"GXP-Iw\":[\"Add SQL Cell\"],\"Gj1mLb\":[\"Reordered cells\"],\"GlbqG2\":[\"Reset to driver default\"],\"Gq1YzP\":[\"Events\"],\"Gs5AlY\":[\"Open\"],\"GtmO8_\":[\"from\"],\"GxkJXS\":[\"Uploading...\"],\"H-o4D2\":[\"Create new column\"],\"H2B-KW\":[\"Choose the default format when copying rows with Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Redo\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"Collapse\"],\"H9P8CD\":[\"add the first filter\"],\"HAQlGl\":[\"AI Activity\"],\"HKNZrs\":[\"Index Cond.\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Delete \",\"#\",\" row\"],\"other\":[\"Delete \",\"#\",\" rows\"]}]],\"HPuCiP\":[\"Folder Path\"],\"HUs1R3\":[\"No open tabs for this connection.\"],\"HV4Isp\":[\"Enter SSH password\"],\"HVC8Hh\":[\"Copied to clipboard\"],\"HWEpq8\":[\"Disk Write/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Failed to save view: \"],\"He8v1Y\":[\"Deselect from Apply All\"],\"HehHP1\":[\"Default Layout\"],\"HilYn4\":[\"This notebook is empty. Add a cell to get started.\"],\"HjxVK_\":[\"Quick connection test\"],\"HmMnRx\":[\"WKT Mode\"],\"HoKCiI\":[\"The app will restart automatically after installation\"],\"HpK_8d\":[\"Reload\"],\"Hpi4Jm\":[\"Join now\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configure SSH Inline\"],\"I5VBsr\":[\"Same as App\"],\"I8yrPb\":[\"Replace table\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Remind Me Later\"],\"I99Miw\":[\"Cost\"],\"IETZIR\":[\"Edit cell name\"],\"IG9wzA\":[\"Failed to insert row: \"],\"ILleOG\":[\"Resource type must be \\\"service\\\" or \\\"pod\\\"\"],\"IQ3gAw\":[\"Upload File\"],\"IUwGEM\":[\"Save Changes\"],\"IUwmLq\":[\"Direct dependencies declared in package.json and src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Open Source Libraries\"],\"I_43p6\":[\"Safety\"],\"Iaizf4\":[\"Appearance\"],\"Il3FBB\":[\"Toggle structured filter panel\"],\"IniZRK\":[\"Download unavailable - only preview loaded\"],\"Isaozb\":[\"Review & adjust\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Active queries and connections through this plugin will be interrupted.\"],\"J6v1s_\":[\"Default Model\"],\"JE-DVk\":[\"Interpreter\"],\"JEGlfK\":[\"Started\"],\"JKDPqP\":[\"Select a context first\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Use SSH Tunnel\"],\"JRz8tw\":[\"MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants.\"],\"JUICth\":[\"PNG, JPG, WebP or SVG · max 512 KB\"],\"JY5Oyv\":[\"Database\"],\"JlFRIB\":[\"Session timezone sent to MySQL after connect.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Denied\"],\"K3H9p5\":[\"Unset\"],\"K5Dgu_\":[\"Databases\"],\"K8IGKf\":[\"Authentication Type\"],\"KAYNSW\":[\"How many logs to keep in memory (1-10000)\"],\"KHTGbr\":[\"Pre-flight EXPLAIN\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copy as `column`\"],\"KM5Kc8\":[\"At least one column must be selected\"],\"KSCnVQ\":[\"Kind\"],\"KUjOb9\":[\"running\"],\"KXBdwy\":[\"Refresh Routines\"],\"KXNyX7\":[\"Set DEFAULT\"],\"Kd70-v\":[\"Import from Clipboard...\"],\"KhI4oS\":[\"Open referenced row in \",[\"0\"]],\"KhgrNu\":[\"MCP Server Integration\"],\"KirERL\":[\"Timeout\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Failed to delete index: \"],\"KzeARD\":[\"Failed to delete table: \"],\"L-rMC9\":[\"Reset to default\"],\"L3HXkQ\":[\"Bug Fixes\"],\"LCZ7Dy\":[\"Copy Name\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"indexes\"],\"LMeAoR\":[\"rows\"],\"LPCdc-\":[\"Query Tab Name Prompt\"],\"LPFmga\":[\"Select for Apply All\"],\"LYzbQ2\":[\"Tool\"],\"Lbis_V\":[\"Quick Navigator\"],\"Lcpbe2\":[\"The plugin process could not be launched. Check the error details below.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained.\"],\"LnT0hQ\":[\"Add Column\"],\"LvutiO\":[\"AI Suggest\"],\"M-rHQO\":[\"Exit Fullscreen\"],\"M0XJba\":[\"Are you sure you want to clear all query history for this connection?\"],\"M1co_O\":[\"Configured\"],\"M73whl\":[\"Context\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Show All\"],\"MXdOwj\":[\"Separate Connections\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Select K8s Connection\"],\"Mc1tjS\":[\"Enable ANALYZE to inspect actual rows, timing, loops, and buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" more rows\"],\"Mp0jQ_\":[\"This driver only supports primary keys at table creation time\"],\"MqpZwN\":[\"Tabularis Process\"],\"MxIx43\":[\"↑↓ to navigate, Enter to open\"],\"MygtgQ\":[\"Add Markdown Cell\"],\"N40H-G\":[\"All\"],\"N5UQxq\":[\"Ollama not detected on port \",[\"0\"],\". Is it running?\"],\"N6GBcC\":[\"Confirm Delete\"],\"N6aqHp\":[\"Run queries\"],\"N9_S15\":[\"A new table will be created\"],\"NBdMa1\":[\"Slowest Step\"],\"NC2AI2\":[\"Length\"],\"NCzNnx\":[\"Sort ascending\"],\"NT4Ubs\":[\"Delete custom key and revert to environment variable (if present)\"],\"NUjrCO\":[\"No favorites match your search\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Tree total: \",[\"0\"]],\"Nc2VQn\":[\"Append to existing\"],\"NgFERn\":[\"Add to Favorites\"],\"NktMHG\":[\"Database name\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Test\"],\"Nq5QTk\":[\"explain Nth\"],\"O2STgu\":[\"Export failed: \"],\"O8SV8O\":[\"Downloading...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Run All Cells\"],\"OGWdBg\":[\"View Name\"],\"OHqT6w\":[\"Press key combination...\"],\"OXJsaG\":[\"Invalid parameter name\"],\"OfhWJH\":[\"Reset\"],\"OlAl5i\":[\"Expand all\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Join Discord\"],\"P1YGsb\":[\"SQL Generation\"],\"P2m1xb\":[\"Stop on Error\"],\"P3Qlys\":[\"No Connection ID\"],\"P6Y3Yf\":[\"Run this command in your terminal, then restart Claude Code.\"],\"PCdj-c\":[\"Deselect All\"],\"PMnFt9\":[\"Disk Read/s\"],\"PQU2Va\":[\"Accept Suggestion with Enter\"],\"PRnH8G\":[\"of \",[\"0\"]],\"PY8UF3\":[\"Toggled parallel (cell \",[\"n\"],\")\"],\"PiH3UR\":[\"Copied!\"],\"Pia95d\":[\"Column name is required\"],\"PrElXQ\":[\"Update\"],\"PrixCC\":[\"Rows will be added to an existing table\"],\"Pujgbb\":[\"Configure destination\"],\"Pw_eQV\":[\"Plugin Failed to Start\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"No saved queries\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"No child processes\"],\"QCxMC0\":[\"Automatically check for new versions when the app launches\"],\"QEazml\":[\"Delete selected\"],\"QHcLEN\":[\"Connected\"],\"QLHHFO\":[\"Read-only mode\"],\"QOvAW3\":[\"New Features\"],\"QULGRi\":[\"No valid queries found\"],\"QZwllF\":[\"Browse...\"],\"QbkSr_\":[\"EXPLAIN unavailable for this query.\"],\"QeHFYZ\":[\"EXPLAIN failed: \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"Read more\"],\"Qu4Hog\":[\"Notebook imported successfully\"],\"R-A2Vd\":[\"No data to display\"],\"R0Hkb2\":[[\"0\"],\" database(s) selected\"],\"R1nHhB\":[\"Already exists\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convert to Console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Setup\"],\"RF-HyV\":[\"Choose your preferred language. 'Auto' will use your system language.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copy name\"],\"RI-HZc\":[\"Enter \",[\"0\"],\" Key\"],\"RJrE17\":[\"Are you sure you want to drop view \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"A star helps others discover the project\"],\"Rb3Tdm\":[\"Notebook name\"],\"RcbKJ3\":[\"On Update\"],\"RkefFq\":[\"Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan.\"],\"RnF_hl\":[\"Loading plugin registry...\"],\"Rns7_C\":[\"This action cannot be undone immediately\"],\"RoKRqW\":[\"Available Plugins\"],\"RphpKk\":[\"Appearance\"],\"Rt8sHM\":[\"Sort or temp work detected\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Enabled\"],\"S1veKH\":[\"Revert Selected\"],\"S5zeZU\":[\"Toggle Preview\"],\"S8Yqbl\":[\"Insert\"],\"SDND4q\":[\"Not configured\"],\"SJRy3D\":[\"(Auto-generated)\"],\"SSwIjo\":[\"Set EMPTY\"],\"SgvA_r\":[\"Press Run (Ctrl/Command+F5) to load table data\"],\"SlfejT\":[\"Error\"],\"SoATkx\":[\"Copy Cell\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"Endpoint URL\"],\"T7w5CQ\":[\"Failed to create new row: \"],\"T9947j\":[\"Value (e.g. 'text' or 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Switch to Vertical Layout\"],\"TK5oex\":[\"Save Prompt\"],\"TKQ7K-\":[\"Install\"],\"TKZreP\":[\"Require\"],\"TMLAx2\":[\"Required\"],\"TO08JI\":[\"foreign keys\"],\"TVKqvO\":[\"Edit Row\"],\"TYSdQ3\":[\"Run SELECT query\"],\"TfDFHS\":[\"Wrap long lines in the editor instead of scrolling horizontally.\"],\"Tibfjs\":[\"No saved connections — create one below\"],\"Tj36Dr\":[\"Reset to Default\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Lock query\"],\"TpwXyg\":[\"If timing is missing, the server likely returned an estimate-only plan.\"],\"Tw2M1h\":[\"Installation Failed\"],\"Ty-rm9\":[\"SSH Connections\"],\"Tz0i8g\":[\"Settings\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes Connections\"],\"U4uzyV\":[\"What's New\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Stop execution when a cell fails\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" on \",[\"1\"],\" — review and decide before it executes.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configuration installed successfully for \",[\"clientName\"],\"! Restart the app to apply.\"],\"URmyfc\":[\"Details\"],\"UWQBvp\":[\"Generate SQL templates\"],\"UawTKZ\":[\"Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default.\"],\"Ub8sf5\":[\"SQLite does not support dropping FKs via ALTER TABLE.\"],\"UbbJ8j\":[\"No options found\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"These connections will reject writes from MCP. Other connections behave normally.\"],\"UnQNah\":[\"Are you sure you want to delete column \\\"\",[\"0\"],\"\\\" from table \\\"\",[\"tableName\"],\"\\\"?\\n\\nWARNING: This will permanently delete all data in this column. This action cannot be undone.\"],\"UncTTh\":[\"Sum of RSS across the process tree — may overcount shared memory\"],\"UpjgFm\":[\"Changed parameters\"],\"UsAnu1\":[\"ANALYZE executes the query. Use with caution on data-modifying statements.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tab Size\"],\"UzWGWO\":[\"Switch to SQL WHERE input\"],\"V-chk5\":[\"How often to check if active connections are still alive. Set to 0 to disable.\"],\"V-pw1j\":[\"Table name\"],\"V2T0Uw\":[\"No saved notebooks yet.\"],\"V3aNwx\":[\"Data Editor\"],\"VGYp2r\":[\"Apply to all\"],\"VH8S7x\":[\"Clipboard column\"],\"VIAEcS\":[\"Failed to load databases. Check your credentials.\"],\"VKdztF\":[\"Append rows\"],\"VLiHXI\":[\"Analyze Data\"],\"VMbmXc\":[\"Are you sure you want to remove \\\"\",[\"pluginName\"],\"\\\"? This will delete the plugin files.\"],\"VO3weF\":[\"No file loaded\"],\"VOZlKc\":[\"Import Database\"],\"VPzsIz\":[\"Generating name...\"],\"VUul0v\":[\"Killing\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"All queries\"],\"Vi2Pqx\":[\"by\"],\"Vl2zn2\":[\"stopped\"],\"Vo4uBA\":[\"An error occurred while installing the plugin. See the details below.\"],\"VqqyOs\":[\"Execute a query to see results\"],\"VzhDFh\":[\"Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below.\"],\"W3uwpT\":[\"Close All Tabs\"],\"W4MKLh\":[\"e.g. Looks risky on prod, please confirm…\"],\"W60eXm\":[\"Table\"],\"WA8RND\":[\"Are you sure you want to delete table \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Delete Table\"],\"WLnvCZ\":[\"Enter username\"],\"WM-__8\":[\"Search connections...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row imported into \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" rows imported into \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Are you sure you want to delete query \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"succeeded\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"General\"],\"WmPpB1\":[\"Loading explain plan…\"],\"Wu7cK0\":[\"No databases found\"],\"WvoUQF\":[\"Deleted cell \",[\"n\"]],\"Ww3pDD\":[\"MANUAL COMMAND\"],\"X-20AU\":[\"Enter query tab name prompt...\"],\"X-U6_w\":[\"Font Family\"],\"X5fs0g\":[\"Create your first connection to get started.\"],\"X7Ayjp\":[\"Password saved in system keychain\"],\"X9kySA\":[\"Favorites\"],\"XJOV1Y\":[\"Activity\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Query Explanation\"],\"XVF2Pf\":[\"Edit Schemas\"],\"XW6OYF\":[\"This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path.\"],\"XZB6Xr\":[\"Max Log Entries\"],\"Xcffv2\":[\"Show AI Assist and Explain buttons in the editor\"],\"XeqTSh\":[\"Join Type\"],\"XmJfZT\":[\"name\"],\"XoQfG1\":[\"SSH User\"],\"XwI0Vw\":[\"Auto (System)\"],\"XyDlLX\":[\"Index Name\"],\"Y2P2aK\":[\"Select schemas to load:\"],\"Y8HYw2\":[\"value\"],\"Y8zX3R\":[\"Insert to Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Search...\"],\"YWlnMZ\":[\"Ollama Port\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Browse and install plugins from the registry.\"],\"Y_3yKT\":[\"Open in New Tab\"],\"YiAQ_Q\":[\"Refresh Tables\"],\"Ysjr9Y\":[\"SQL Preview\"],\"YswNf7\":[\"All levels\"],\"YtNwr6\":[\"Maximum number of query history entries stored per connection.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Loading...\"],\"Z7ZXbT\":[\"Approve\"],\"Z8JpBH\":[\"Export as Notebook\"],\"Z8fBIc\":[\"Actual rows exceed estimate\"],\"ZC2VJP\":[\"Execute\"],\"ZCIS4k\":[\"no active filters\"],\"ZF1_UT\":[\"SSL Mode\"],\"ZGjBPa\":[\"Clear Logs\"],\"ZHQTlM\":[\"Importing from\"],\"ZIFDoJ\":[\"Please select at least Structure or Data\"],\"ZIZA6o\":[\"Edit before approving\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" parsing warning\"],\"other\":[\"#\",\" parsing warnings\"]}]],\"ZVn8p2\":[\"Display line numbers in the editor gutter.\"],\"ZYnwzF\":[\"Disconnected\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Create Foreign Key\"],\"Zf7LHg\":[\"No contexts found (is kubectl installed?)\"],\"Zfotp5\":[\"Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well.\"],\"ZiFjhs\":[\"Select *\"],\"ZpzHz0\":[\"Failed to load schemas\"],\"ZqXGPF\":[\"Failed to drop view: \"],\"ZuL73E\":[\"Create a new database view\"],\"_-bi4r\":[\"Referenced Table\"],\"_AEYGI\":[\"No execution history yet\"],\"_FdpZc\":[\"Failed to load view definition: \"],\"_FxSdi\":[\"Browse the direct open source dependencies used across the app, backend, and tooling.\"],\"_JyTG8\":[\"Enter explain prompt...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"rows\"],\"_TK1zF\":[\"Saved Connection\"],\"_bJFBE\":[\"Connect Timeout\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Tree\"],\"_dqduX\":[\"Next page\"],\"_fwE6J\":[\"Older\"],\"_n04sB\":[\"Kill\"],\"_otxbQ\":[\"Key file\"],\"_pezIT\":[\"Failed to connect to \",[\"0\"],\". Please check your settings or ensuring the database is running.\"],\"_srfkj\":[\"Custom key deleted successfully\"],\"_t6aFo\":[\"MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version.\"],\"_xTbaM\":[\"columns\"],\"_yxaaL\":[\"Unique Index\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.\"],\"a9CASo\":[\"SQLite only supports renaming columns. Other modifications require recreating the table manually.\"],\"aAIQg2\":[\"Appearance\"],\"aAURrV\":[\"Installed\"],\"aC_vCa\":[\"Generate name with AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Select a node to view details\"],\"aHKcKc\":[\"Previous page\"],\"aI-5wG\":[\"Verify CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Default Value\"],\"aScJP1\":[\"Run this query\"],\"aVNbN8\":[\"Filter conditions\"],\"aWhdMQ\":[\"Use Existing SSH Connection\"],\"aXYd8V\":[\"Timeout\"],\"aX_S_r\":[\"Page \",[\"0\"],\" of \",[\"totalPages\"]],\"agZcf8\":[\"Generated SQL: \",[\"tableName\"]],\"ajqPzi\":[\"Select [fields]\"],\"alplHn\":[\"Analyzing query plan with AI...\"],\"anBcU3\":[\"If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo.\"],\"arHmj2\":[\"Are you sure you want to delete this query from history?\"],\"arKcqW\":[\"Older servers may fall back to estimated plans with fewer metrics.\"],\"arcpYe\":[\"Approval required\"],\"aurEkh\":[\"Loading processes…\"],\"avtdsd\":[\"SQL Mode\"],\"az8lvo\":[\"Off\"],\"b1Ah3z\":[\"Focused on\"],\"b392Dr\":[\"Expand All\"],\"b5S_PU\":[\"Database Name\"],\"bAvovP\":[\"Move Down\"],\"bH3JqY\":[\"No tables found\"],\"bP5JOn\":[\"Word Wrap\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Make all MCP queries read-only\"],\"bmca5u\":[\"Writes only\"],\"bpCiBU\":[\"Allow writes from MCP\"],\"bqnhqW\":[\"Estimate exceeds actual rows\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Fail with error\"],\"bw22Gk\":[\"Column Schema\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Top Issues\"],\"cFCKYZ\":[\"Deny\"],\"cFGrCP\":[\"table\"],\"cGeFup\":[\"Font Size\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focus on Table\"],\"cM9NHc\":[\"Downgrade to\"],\"cO9-2L\":[\"Disable\"],\"cSev-j\":[\"Filters\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Import \",\"#\",\" row\"],\"other\":[\"Import \",\"#\",\" rows\"]}]],\"c_xoSn\":[\"Renamed cell \",[\"n\"]],\"cd0XEW\":[\"Save Query\"],\"cnGeoo\":[\"Delete\"],\"cwfPLH\":[\"Split Group\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" statements\"],\"d34vwG\":[\"Load Databases\"],\"d6ynQ7\":[\"Sort descending\"],\"d8_6_v\":[\"cancel\"],\"d8wc1_\":[\"Sample values\"],\"dBXoCS\":[\"An environment variable is present, but you can override it by setting a key above.\"],\"dD7NPy\":[\"Outline\"],\"dEgA5A\":[\"Cancel\"],\"dMtLDE\":[\"to\"],\"dPJVhW\":[\"Installation Failed\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" session\"],\"other\":[\"#\",\" sessions\"]}]],\"dTUzKm\":[\"Run Selected (\",[\"0\"],\")\"],\"dU_iQN\":[\"No sessions match the current filters.\"],\"dUh9QW\":[\"Planning\"],\"dVoir2\":[\"Added Markdown cell \",[\"n\"]],\"dZ0d2O\":[\"Please select at least one table\"],\"dhi13U\":[\"Choose image…\"],\"dli1JX\":[\"Submit Changes\"],\"dmYV6f\":[\"Routines\"],\"dohZCo\":[\"Instructions for AI-powered SQL generation. Use {\",[\"SCHEMA\"],\"} as a placeholder for the database structure.\"],\"dtxpK2\":[\"Analyze\"],\"dwW9nJ\":[\"Show Line Numbers\"],\"dwWVw_\":[\"Show Welcome Screen\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"If exists\"],\"dyN4j9\":[\"Click 'Run Preview' to see results\"],\"e07Iz5\":[\"Open Task Manager\"],\"e0NzXu\":[\"This project is a Work In Progress (WIP). Core features are stable, but we have big plans.\"],\"e1UKxf\":[\"Save this query\"],\"e34gdU\":[\"How long the MCP subprocess will wait for the user's decision before failing the request.\"],\"e62LQd\":[\"Force Kill\"],\"e6QZsM\":[\"Editor Theme\"],\"e8CirT\":[\"Run query\"],\"eD2kUP\":[\"Buffers Read\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Enter explain plan analysis prompt...\"],\"eIVolo\":[\"Disk R/W\"],\"eJOEBy\":[\"Exporting...\"],\"eKHY3W\":[\"Plugin Settings\"],\"eMb6Ub\":[\"Choose a resource...\"],\"ePK91l\":[\"Edit\"],\"eXweu6\":[\"Expand Cell\"],\"ecNsTE\":[\"No queries match your search\"],\"ecUA8p\":[\"Today\"],\"ecpIZP\":[\"Enter key passphrase if encrypted\"],\"ejmeDY\":[\"Installed\"],\"esl-Tv\":[\"Resource Type\"],\"exyUec\":[\"Connection\"],\"f2AJjl\":[\"Delete Row\"],\"f4pD-j\":[\"Connection test failed\"],\"f7sXvi\":[\"Enter password\"],\"fAsxc0\":[\"Sequential Scans\"],\"fIeFs0\":[\"Select Value...\"],\"fJm92A\":[\"Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Values\"],\"f_b1TA\":[\"Execution History\"],\"fghnqP\":[\"Switch to connection 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Comma (,)\"],\"fp711N\":[\"Blocked (read-only)\"],\"fpzyLj\":[\"Page \",[\"0\"],\" of \",[\"1\"]],\"fuA6oy\":[\"Socket Timeout\"],\"fvImQM\":[[\"0\"],\" selected\"],\"fwr_nh\":[\"Install extensions, manage plugin drivers, and keep runtime settings under control.\"],\"g0ZzK4\":[\"Valid JSON\"],\"g11hAR\":[\"New Row\"],\"g8VcMm\":[\"My K8s cluster\"],\"gCFR_O\":[\"Parallel Execution (Run All)\"],\"gEjU98\":[\"Open connections\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"At least one column is required\"],\"gSuQrG\":[\"No connections match \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Re-run query\"],\"gZWMnn\":[\"AI Analysis\"],\"ghYd73\":[\"Choose target...\"],\"giAqEC\":[\"Create New Table\"],\"gnQS8X\":[\"Maximum packet size used by the MySQL connector.\"],\"gqV5VL\":[\"Built-in, not customizable\"],\"gww_XE\":[\"Referenced Column\"],\"gxXPJ9\":[\"Configure Interpreter\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximize\"],\"h-XNc9\":[\"CSV Delimiter\"],\"h-kNAk\":[\"e.g. sales_data\"],\"h3Z_aK\":[\"Write Markdown here...\"],\"h7MgpO\":[\"Keyboard Shortcuts\"],\"h7peZQ\":[\"Allow\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" system process running\"],\"other\":[\"#\",\" system processes running\"]}]],\"hEZrFh\":[\"Run SQL File...\"],\"hEipgW\":[\"Check for Updates Now\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Export as CSV\"],\"hItdtk\":[\"Browse folder\"],\"hXFVjo\":[\"Table name is required\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Re-run\"],\"hbz1rh\":[\"keys\"],\"hdsaJo\":[\"Importing...\"],\"he3ygx\":[\"Copy\"],\"hfGimp\":[\"Choose a namespace...\"],\"hjjSEi\":[\"Read-only connections\"],\"hjwN_s\":[\"Resource Name\"],\"hlF1mD\":[\"Copy selection\"],\"hnboBb\":[\"AI Query Plan Analysis\"],\"hnvu2p\":[\"Error Details\"],\"hq4-D2\":[\"API Key is stored securely in your system keychain. Setting a key here overrides the environment variable.\"],\"hqjXdn\":[\"Failed to delete SSH connection\"],\"hqofAK\":[\"Copy SQL\"],\"hy6L14\":[\"View on GitHub\"],\"hyjACX\":[\"Collapsed/expanded cells\"],\"hz1b5W\":[\"No matching elements found\"],\"i1vAVM\":[\"Create new table\"],\"i3S5T3\":[\"Search favorites...\"],\"i4_LY_\":[\"Write\"],\"i5HBWh\":[\"Query history was reset\"],\"i5zCt4\":[\"Table\"],\"iAVlge\":[\"Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message.\"],\"iE1yAB\":[\"Filter tables...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connect\"],\"iSryJ2\":[\"My SSH Server\"],\"iT7UeX\":[\"Add Index\"],\"iUWwuR\":[\"Download & Install\"],\"ia7i08\":[\"Select context/namespace/type first\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Saved\"],\"igcsfY\":[\"No plugins available in the registry.\"],\"ij-Elv\":[\"Image preview\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" explainable query found\"],\"other\":[\"#\",\" explainable queries found\"]}]],\"ioL38P\":[\"Monitor plugin processes, CPU, RAM and disk usage in real time\"],\"ixlL_e\":[\"SSH Key File (Optional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Select a model\"],\"j3gyYH\":[\"Apply All\"],\"j5CWO4\":[\"Up to date\"],\"j9HPuI\":[\"Row #\",[\"0\"]],\"jBtpMP\":[\"All statuses\"],\"jEu4bB\":[\"Columns\"],\"jEyQIs\":[\"No routines found\"],\"jHc1By\":[\"Drop View\"],\"jI6sj4\":[\"Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL.\"],\"jIxQCZ\":[\"Not available for your platform\"],\"jKIncn\":[\"Database name is required\"],\"jPSk57\":[\"Reason (optional)\"],\"jUNY_d\":[\"view\"],\"jVqjDo\":[\"Invalid notebook file format\"],\"jWSZ-A\":[\"Preview only - full data not loaded\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket timeout in milliseconds.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Connection name is required\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"child process\"],\"jx0t66\":[\"Collapse child processes\"],\"k-0mL-\":[\"Add Column\"],\"k-XiMX\":[\"Raw\"],\"k2UnVy\":[\"Hash Cond.\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"seconds\"],\"kBiBq7\":[\"Delete index \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Toggle Chart\"],\"kI1qVD\":[\"Format\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" rows · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Event details\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registry\"],\"kY-q3P\":[[\"label\"],\" is required\"],\"kexIdC\":[\"Use Kubernetes Port-Forward\"],\"krksx_\":[\"Success\"],\"ktYUe9\":[\"Run All\"],\"kwY6nh\":[\"Dismiss\"],\"kx0s-n\":[\"Results\"],\"kxUEfE\":[\"Failed to get routine definition: \"],\"l2Op2p\":[\"Query Parameters\"],\"l9Ivba\":[\"Plugin processes & system resources\"],\"lBdPxu\":[\"Accent color\"],\"lCF0wC\":[\"Refresh\"],\"lEQRwq\":[\"Data (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"New table created\"],\"lOekZ3\":[\"Switch to Horizontal Layout\"],\"lUA1C1\":[\"SSH Key Passphrase (Optional)\"],\"lVeG20\":[\"Rust Dependencies\"],\"lXAG6D\":[\"Instructions for AI-powered query explanation. Use {\",[\"LANGUAGE\"],\"} as a placeholder for the output language.\"],\"lbbYjy\":[\"Directly edit the raw configuration file. A restart is required to apply changes.\"],\"lhKW0m\":[\"Added SQL cell \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Result Page Size (Limit)\"],\"lkz6PL\":[\"Duration\"],\"lmVGeo\":[\"Add Foreign Key\"],\"lnnx3E\":[\"Connect Tabularis to Claude Desktop, Cursor, and more\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Add\"],\"m2Q_r8\":[\"Detect JSON in text columns\"],\"m2tskz\":[\"Success\"],\"mA-qpe\":[\"Run All Complete\"],\"mBhhbA\":[\"Logs exported to clipboard\"],\"mCNdzH\":[\"Run Cell\"],\"mO95sp\":[\"Close panel\"],\"mP7dLi\":[\"Enter font name above\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" blocked\"],\"other\":[\"#\",\" blocked\"]}]],\"mS74ir\":[\"Failed to save SSH connection\"],\"mSqtw8\":[\"Run Preview\"],\"mURmfQ\":[\"View Definition (SQL)\"],\"mX_isJ\":[\"Vertical\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Structure (DDL)\"],\"mrk4Cf\":[\"Sort by \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap.\"],\"mtvVdV\":[\"Rows Processed\"],\"mx4evv\":[\"Create Table\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Download\"],\"n7JDTx\":[\"Install and enable plugins to see them here\"],\"nDDJir\":[\"Search session, client, connection…\"],\"nHP-Kr\":[\"No active session. Please select a connection.\"],\"nKhCjW\":[\"Select Tables\"],\"nNwvm4\":[\"Error\"],\"nOVim5\":[\"Failed to save connection\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Events\"],\"nf14vn\":[\"Requires extension: \",[\"0\"]],\"ngO6Pv\":[\"Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Create your first connection\"],\"nohy4m\":[\"No MCP activity yet.\"],\"nr-axf\":[\"Remove Plugin\"],\"nsPFX9\":[\"Open in Visual Explain\"],\"nuBbBr\":[\"Chart\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Dump Database\"],\"o-XJ9D\":[\"Change\"],\"o21Y-P\":[\"entries\"],\"o3tP_A\":[\"Delete Index\"],\"o45L8r\":[\"Provide your connection name\"],\"o53XGh\":[\"Copy selected row(s)\"],\"o7J4JM\":[\"Filter\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Level\"],\"oGiIL7\":[\"Default Provider\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connection Lost\"],\"oJlXF2\":[\"Import Notebook\"],\"oMFv82\":[\"Split Vertical\"],\"oOFiQg\":[\"Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended).\"],\"oT9ZD3\":[\"Hide overview\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Changed chart (cell \",[\"n\"],\")\"],\"oWfclW\":[\"Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.\"],\"obpbdz\":[\"Config file not found (create manually)\"],\"odZgfC\":[\"AI CLIENTS\"],\"ogZhXn\":[\"Choose the default layout direction for ER diagrams\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Actual Rows\"],\"olWzar\":[\"Force Kill Plugin Process\"],\"ovBPCi\":[\"Default\"],\"owzTWN\":[\"AI models refreshed from providers\"],\"oxYi6j\":[\"Adjust the base font size used throughout the application (10-20px).\"],\"p--hsQ\":[\"A database connection was lost\"],\"p6NueD\":[\"NEW\"],\"pOYHox\":[\"Actions\"],\"pR9bTR\":[\"No BLOB data\"],\"pS8S5q\":[\"e.g. users, orders, products\"],\"pSws_M\":[\"Table Name\"],\"pVLbKZ\":[\"View created successfully\"],\"pWT04I\":[\"Checking...\"],\"pZJ_6D\":[\"Index name is required\"],\"pddYFG\":[\"Enter notebook cell name prompt...\"],\"pnpyuD\":[\"Enable Logging\"],\"pqKMPv\":[\"Failed to create table: \"],\"pqaP1h\":[\"Dismiss\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"e.g., Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"All other connections stay read-only. Only the connections checked here may execute writes.\"],\"qA5jLs\":[\"Error Details\"],\"qIrtcK\":[\"Updates\"],\"qOqy8G\":[\"Checking configuration...\"],\"qWaVNs\":[\"Save & Restart\"],\"qb3LPX\":[\"View ER Diagram\"],\"qkK0vq\":[\"View name is required\"],\"qki9tG\":[\"Error\"],\"qoIir-\":[\"The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Collapse all\"],\"r6ncaO\":[\"Close tab\"],\"rAJlpP\":[\"Container Port\"],\"rG3WVm\":[\"Select\"],\"rGRCeK\":[\"Clear Query History\"],\"rNIto7\":[\"Resource name is required\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exported successfully\"],\"rY4sEV\":[\"Delete FK\"],\"rbu0nO\":[\"Manage SSH Connections\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connection\"],\"other\":[\"#\",\" connections\"]}]],\"rn2_2V\":[\"Remove filter\"],\"roABNH\":[\"No query history\"],\"rtir7c\":[\"unknown\"],\"ru0-2W\":[\"No active connections\"],\"rvDPWO\":[\"Estimate Gap\"],\"rwWjWg\":[\"Release Notes\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Test Connection\"],\"sBOaim\":[\"The configuration file has been saved. Restart now to apply the changes?\"],\"sCyv9B\":[\"Refresh Models\"],\"sSUqe4\":[\"Delete\"],\"sUBkgN\":[\"Generating SQL...\"],\"sZZG3d\":[\"Are you sure you want to import \\\"\",[\"0\"],\"\\\"?\\nThis may overwrite existing data.\"],\"sbK5ck\":[\"Search history...\"],\"sq_bS6\":[\"On Delete\"],\"suW7-E\":[\"Connection timeout in milliseconds.\"],\"suqtBX\":[\"Esc to close\"],\"t-R8-P\":[\"Execution\"],\"t1OfVY\":[[\"totalLibraries\"],\" libraries\"],\"t2TMzs\":[\"Close Tab\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Select a table...\"],\"t7KRl1\":[\"Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere.\"],\"t9NJIk\":[\"Scan-heavy operations detected\"],\"tB7xof\":[\"Temp or Sort Ops\"],\"tBBXTO\":[\"Ping Interval\"],\"tFrT3w\":[\"Add this to your client config file manually if automatic install fails.\"],\"tJ7UbA\":[\"explain focused\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Split Horizontal\"],\"tQhW-D\":[\"Log Settings\"],\"tT-BQX\":[\"Installed\"],\"tXFGEx\":[\"No Kubernetes connections saved. Click \\\"Add\\\" to create one.\"],\"tXLz_8\":[\"Delete\"],\"tXpRby\":[\"Data Grid\"],\"tbysEk\":[\"Actions\"],\"tdta9X\":[\"Page \",[\"0\"]],\"tfDRzk\":[\"Save\"],\"tfEioV\":[\"Execute all SQL cells top to bottom\"],\"tiAIaJ\":[\"SSH Password missing. Please re-enter.\"],\"tk22BR\":[\"Paste structured data and preview the schema before importing\"],\"tst44n\":[\"Events\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL file executed successfully\"],\"u6QeR6\":[\"Restart Now\"],\"uAQUqI\":[\"Status\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc to close\"],\"uFViPK\":[\"No SSH connections available\"],\"uHUuhp\":[\"Explain this query\"],\"uHfFzS\":[\"Editor Font Size\"],\"uJ_3K5\":[\"Delete notebook \\\"\",[\"0\"],\"\\\"? This cannot be undone.\"],\"uKaNJ3\":[\"Open in JSON Editor\"],\"uQBwTo\":[\"Schemas\"],\"ub54ff\":[\"Plugin Center\"],\"ufFyBs\":[\"Database exported successfully\"],\"upNmR2\":[\"Open Sidebar Editor\"],\"upwIY4\":[\"View Definition\"],\"utMia3\":[\"Deselect All\"],\"uyNaJg\":[\"1 element\"],\"v61dnS\":[\"Enter the exact model name for your OpenAI-compatible provider.\"],\"v6oeyr\":[\"Installed\"],\"v75DGg\":[\"Browse file\"],\"v99dO4\":[\"Primary Key\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query found\"],\"other\":[\"#\",\" queries found\"]}]],\"vCSBPD\":[\"Add filter\"],\"vH7uJj\":[\"Sort by…\"],\"vUOA1-\":[\"Search models...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.\"],\"vXIe7J\":[\"Language\"],\"vYf4Jm\":[\"Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Prefer\"],\"vditm4\":[\"Explain Plan\"],\"vks_ls\":[\"Close Other Tabs\"],\"vnAnIp\":[\"Model <0>\",[\"0\"],\" not found in <1>\",[\"1\"],\". It may not work correctly.\"],\"vqoN5u\":[\"Structure\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Explorer\"],\"vujQJ5\":[\"Localization\"],\"vvJPVL\":[\"Show overview\"],\"vwI5S4\":[\"Success\"],\"vzH-7Z\":[\"Explain\"],\"w7QmD_\":[\"Enter system prompt...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Elapsed time\"],\"wCfv2R\":[\"Add Connection\"],\"wGfc86\":[\"Clear All History\"],\"wGwNv4\":[\"Active database\"],\"wJJ-Wy\":[\"Installing...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers Hit\"],\"wQn-RM\":[\"Add Column\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Applied\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Import from Clipboard\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"Pending approval\"],\"wckWOP\":[\"Manage\"],\"wdYcKH\":[\"Open Tabs\"],\"wja8aL\":[\"Untitled\"],\"wkOAzk\":[\"No notebooks match your search.\"],\"wp49Ao\":[\"Failed to process insertions: \"],\"wqG2hQ\":[\"Skip (do not import)\"],\"wwrAsK\":[\"Please fill in all required fields\"],\"wwu18a\":[\"Icon\"],\"x2fr_j\":[\"Graph\"],\"xANKBj\":[\"Functions\"],\"xBwjck\":[\"A restart is required to apply changes.\"],\"xDAtGP\":[\"Message\"],\"xECY01\":[\"Procedures\"],\"xGPNgZ\":[\"Prompt Customization\"],\"xNgtS-\":[\"No views found\"],\"xOPa1b\":[\"Port must be between 1 and 65535\"],\"xY9s5E\":[\"Timeout\"],\"xaVUr1\":[\"The quick brown fox jumps over the lazy dog\"],\"xbvTzL\":[\"File Path\"],\"xlew5F\":[\"Clear\"],\"xmNyKz\":[\"Testing...\"],\"xtuh6D\":[\"Expand Explorer\"],\"y-Zdqj\":[\"Choose a context...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Open JSON viewer\"],\"yQXjG5\":[\"Deselect All\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Yesterday\"],\"ygCKqB\":[\"Stop\"],\"ykCc6r\":[\"Changed database (cell \",[\"n\"],\")\"],\"ynVMSc\":[\"Select All\"],\"ytdz1d\":[\"AI requested a database write\"],\"yyhzur\":[\"Create Table\"],\"yz7wBu\":[\"Close\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"SSH Password\"],\"z4oF5T\":[\"Dump Database\"],\"z5kV0h\":[\"Connections\"],\"zBTMzx\":[\"Preview\"],\"zCaAKs\":[\"Update Error\"],\"zDAakK\":[\"Cannot display diagram without a connection ID.\"],\"zGe21h\":[\"This key is loaded from an environment variable\"],\"zGfL5t\":[\"value\"],\"zL6-4A\":[\"No plugin processes are running\"],\"zLZhCi\":[\"Brand-new Discord community!\"],\"zLlCou\":[\"Copy column name\"],\"zNEL34\":[\"Join the Community\"],\"zNgTlV\":[\"Close Tabs to Right\"],\"zQz55p\":[\"Inspect structure\"],\"zR0FfH\":[\"Exported to \",[\"target\"]],\"zRZeOc\":[\"Search tables, views, routines, triggers...\"],\"zUNMsr\":[\"SSH Key\"],\"zXMRzb\":[\"SSH Port\"],\"zZgoXr\":[\"No tables match\"],\"zaWbms\":[\"Rollback Changes\"],\"zgClmU\":[\"Install Config\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Enter value...\"],\"zvzN4C\":[\"Set as Active\"],\"zzDlyQ\":[\"Success\"],\"zzMxrp\":[\"Edit config.json\"],\"zz_Wd_\":[\"Mode\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/es/messages.po b/src/locales/es/messages.po index 40dd54d9..145795b3 100644 --- a/src/locales/es/messages.po +++ b/src/locales/es/messages.po @@ -1207,12 +1207,22 @@ msgid "Create a new database view" msgstr "Crear una nueva vista de base de datos" #: src/components/modals/CreateForeignKeyModal.tsx -msgctxt "createFk" +msgctxt "createFk.create" msgid "Create Foreign Key" msgstr "Crear Clave Foránea" +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk.title" +msgid "Create Foreign Key" +msgstr "Crear Clave Foránea" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex.create" +msgid "Create Index" +msgstr "Crear Índice" + #: src/components/modals/CreateIndexModal.tsx -msgctxt "createIndex" +msgctxt "createIndex.title" msgid "Create Index" msgstr "Crear Índice" @@ -1258,7 +1268,12 @@ msgid "Create Trigger" msgstr "" #: src/components/modals/ViewEditorModal.tsx -msgctxt "views" +msgctxt "views.create" +msgid "Create View" +msgstr "Crear Vista" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views.createView" msgid "Create View" msgstr "Crear Vista" @@ -1639,8 +1654,12 @@ msgstr "Eliminar Vista" #: src/components/layout/ExplorerSidebar.tsx #: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgctxt "dump.dumpDatabase" +msgid "Dump Database" +msgstr "Exportar Base de Datos" + #: src/components/modals/DumpDatabaseModal.tsx -msgctxt "dump" +msgctxt "dump.title" msgid "Dump Database" msgstr "Exportar Base de Datos" @@ -1904,14 +1923,22 @@ msgid "Error" msgstr "Error" #: src/components/modals/PluginInstallErrorModal.tsx -#: src/components/modals/PluginStartErrorModal.tsx -msgctxt "settings" +msgctxt "settings.plugins.installError.details" msgid "Error Details" msgstr "Detalles del error" +#: src/components/modals/PluginStartErrorModal.tsx +msgctxt "settings.plugins.startError.details" +msgid "Error Details" +msgstr "Detalles del Error" + #: src/components/modals/QuickNavigatorModal.tsx +msgctxt "editor.quickNavigator.escHint" +msgid "Esc to close" +msgstr "Esc para cerrar" + #: src/components/modals/TabSwitcherModal.tsx -msgctxt "editor" +msgctxt "editor.tabSwitcher.escHint" msgid "Esc to close" msgstr "Esc para cerrar" @@ -1941,7 +1968,12 @@ msgid "Events" msgstr "Eventos" #: src/components/settings/ai-activity/AiActivitySessionsTab.tsx -msgctxt "aiActivity" +msgctxt "aiActivity.events" +msgid "Events" +msgstr "Eventos" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity.sort.eventCount" msgid "Events" msgstr "Eventos" @@ -2074,7 +2106,12 @@ msgid "Export as Notebook" msgstr "Exportar como Notebook" #: src/pages/Connections.tsx -msgctxt "connections" +msgctxt "connections.export" +msgid "Export Connections" +msgstr "Exportar conexiones" + +#: src/pages/Connections.tsx +msgctxt "connections.exportTitle" msgid "Export Connections" msgstr "Exportar conexiones" @@ -2639,7 +2676,17 @@ msgid "Installed" msgstr "Instalado" #: src/components/settings/PluginsTab.tsx -msgctxt "settings" +msgctxt "settings.plugins.filterInstalled" +msgid "Installed" +msgstr "Instalados" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installed" +msgid "Installed" +msgstr "Instalado" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installedMetric" msgid "Installed" msgstr "Instalados" @@ -4005,12 +4052,16 @@ msgstr "Las filas se añadirán a una tabla existente" msgid "Run" msgstr "Ejecutar" -#: src/components/modals/QuerySelectionModal.tsx #: src/components/notebook/NotebookToolbar.tsx -msgctxt "editor" +msgctxt "editor.notebook.runAll" msgid "Run All" msgstr "Ejecutar Todo" +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor.querySelection.runAll" +msgid "Run All" +msgstr "Ejecutar todas" + #: src/i18n/registries/shortcutLabels.ts msgid "Run All Cells" msgstr "Ejecutar Todas las Celdas" @@ -4736,10 +4787,14 @@ msgid "table" msgstr "tabla" #: src/components/modals/visual-explain/ExplainNodeDetails.tsx -#: src/components/modals/visual-explain/ExplainSummaryBar.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx -msgctxt "editor" +msgctxt "editor.visualExplain.relation" +msgid "Table" +msgstr "Tabla" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgctxt "editor.visualExplain.tableView" msgid "Table" msgstr "Tabla" @@ -5188,10 +5243,15 @@ msgid "View created successfully" msgstr "Vista creada correctamente" #: src/components/layout/ExplorerSidebar.tsx -msgctxt "sidebar" +msgctxt "sidebar.viewDefinition" msgid "View Definition" msgstr "Definición de Vista" +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar.viewTriggerDefinition" +msgid "View Definition" +msgstr "" + #: src/components/modals/ViewEditorModal.tsx msgid "View Definition (SQL)" msgstr "Definición de Vista (SQL)" diff --git a/src/locales/es/messages.ts b/src/locales/es/messages.ts index 54aa9239..0c1da135 100644 --- a/src/locales/es/messages.ts +++ b/src/locales/es/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Máx. Entradas de Historial\"],\"-6AWa-\":[\"Importar conexiones\"],\"-6NyRG\":[\"Cliente\"],\"-K0AvT\":[\"Desconectar\"],\"-PLZfh\":[\"Error al actualizar los modelos\"],\"-T5W2e\":[\"Notas del Driver\"],\"-ZgeeE\":[\"Historial de ediciones\"],\"-aYrdc\":[\"La versión \",[\"0\"],\" está disponible\"],\"-fBGXl\":[\"Costo Mas Alto\"],\"-jIQDz\":[\"Contraer Celda\"],\"-u1eRo\":[\"Sin base de datos\"],\"-yoeVU\":[\"Cargando esquema...\"],\"-zy2Nq\":[\"Tipo\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID aprobación\"],\"0E5-gF\":[\"¿Estás seguro de que deseas eliminar esta conexión?\"],\"0HCubq\":[\"Expandir\"],\"0Kmdvy\":[\"Fuente Personalizada\"],\"0Nj13E\":[\"Generar SQL\"],\"0ROgz5\":[\"Ingrese JSON...\"],\"0SY9sU\":[\"No se pudo desconectar de la base de datos\"],\"0b3kL9\":[\"Selecciona una base de datos\"],\"0caMy7\":[\"Historial\"],\"0mx5ow\":[\"Consulta\"],\"0n9BtL\":[\"Vista Previa\"],\"0pHB9N\":[\"Copiar como tabla.columna\"],\"0sQzZK\":[\"Filtrar bases de datos...\"],\"0uPP9X\":[\"Nombre FK (Opcional)\"],\"0wxuek\":[\"Versión Actual\"],\"0x09Aw\":[\"Detener en error alternado\"],\"0yBP6v\":[\"Apoya el Desarrollo\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas\"],\"other\":[\"#\",\" filas\"]}]],\"0yVAoD\":[\"Contar filas\"],\"0zxJ87\":[\"No hay registros disponibles\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Editar Vista\"],\"11fGJ6\":[\"Consultas\"],\"13hIUA\":[\"Clave API de \",[\"0\"]],\"14qNWF\":[\"Seleccionar Conexión SSH\"],\"17qHRP\":[\"Nueva conexión\"],\"1Dn6bg\":[\"Importar desde Portapapeles\"],\"1Dnd0I\":[\"Cargar conteo de filas\"],\"1FjTLW\":[\"p.ej. python3\"],\"1GOvbo\":[\"Ollama conectado (\",[\"0\"],\" modelos encontrados)\"],\"1I6UoR\":[\"Vistas\"],\"1U7hS5\":[\"Long\"],\"1UTmg5\":[\"Paquete Máximo Permitido\"],\"1b7aSU\":[\"Fuente del Editor\"],\"1ekzlY\":[\"Procesos de Complementos\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Selección de Tema\"],\"1xVZkL\":[\"No se encontraron modelos\"],\"26Joci\":[[\"0\"],\" filas obtenidas\"],\"2Bf-Qe\":[\"Nueva consola\"],\"2CrSmP\":[\"Help tabularis grow\"],\"2D9F8_\":[\"Error al duplicar la conexión\"],\"2Eoi_a\":[\"Ver detalles\"],\"2F4pE5\":[\"Build y Test Rust\"],\"2Fsd9r\":[\"Este Mes\"],\"2JzKXI\":[\"Set GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Seleccionar Todo\"],\"2SO5RM\":[\"Kubernetes no está disponible para este controlador.\"],\"2Uh5GA\":[\"ecosistema Cargo\"],\"2YylFp\":[\"Nueva Consulta Visual\"],\"2luuSG\":[\"Reintentar\"],\"2wxgft\":[\"Renombrar\"],\"2yG2GC\":[\"Pausa las escrituras (o todas las consultas) y pide al usuario que apruebe antes de ejecutar.\"],\"30-b5r\":[\"Eliminar\"],\"31kwdN\":[\"Duplicar filtro\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Todas las herramientas\"],\"3Am5DS\":[\"Vista en pestañas\"],\"3BhBCj\":[\"Eventos\"],\"3FVg9_\":[\"Columna Local\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Ejecutar\"],\"3L0HCz\":[\"Ningún plugin coincide con la búsqueda.\"],\"3Nv3JV\":[\"Ejecutando consulta...\"],\"3TSz9S\":[\"Minimizar\"],\"3UW8fG\":[\"Actualizaciones gestionadas por \",[\"0\"]],\"3YvS-c\":[\"Nueva pestaña\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt Nombre de Celda Notebook\"],\"3qkggm\":[\"Pantalla Completa\"],\"3rBJ1T\":[\"Ver Esquema\"],\"3xZ-xV\":[\"Insertar marca de tiempo actual\"],\"40Gx0U\":[\"Zona Horaria\"],\"41GP4f\":[\"Elige el delimitador predeterminado utilizado al copiar o exportar filas en formato CSV.\"],\"42iaEi\":[\"PostgreSQL sin ANALYZE muestra solo estimaciones del planner.\"],\"44cXI8\":[\"Ordenar por \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gestionar Bases de Datos\"],\"4CK17g\":[\"¿Estás seguro de que deseas modificar la vista \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Selecciona al menos una base de datos\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Exportar como HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" proceso hijo\"],\"other\":[\"#\",\" procesos hijos\"]}]],\"4VyuY3\":[\"¿Estás seguro de que deseas borrar todos los registros?\"],\"4WWqS3\":[\"Expandir/contraer árbol JSON\"],\"4cEClj\":[\"Sesiones\"],\"4cmfYp\":[\"Duplicar Fila\"],\"4lIZTB\":[\"Dependencias Dev Frontend\"],\"4oYjvJ\":[\"Buscar en la consulta…\"],\"4tMxW4\":[\"Vista previa del registro relacionado\"],\"4yJcjm\":[\"Selecciona tipo...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Cerrar panel de filtros (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Punto y coma (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" evento\"],\"other\":[\"#\",\" eventos\"]}]],\"5I2fxu\":[\"/ruta/a/id_rsa\"],\"5NZpX8\":[\"Vista de lista\"],\"5To6Z6\":[\"Copiar consulta\"],\"5gqNQl\":[\"Vista de cuadrícula\"],\"5igIzr\":[\"Importación cancelada\"],\"5nTIup\":[\"Editando vista: \",[\"name\"]],\"66bEht\":[\"Estado del Proyecto\"],\"6PIJVc\":[\"Inicio\"],\"6QvP0l\":[\"Exportar como JSON\"],\"6W41Xq\":[\"Administrador de Tareas\"],\"6WngBH\":[\"Set NULL\"],\"6YtxFj\":[\"Nombre\"],\"6_dCYd\":[\"Resumen\"],\"6gvoHP\":[\"Copiar mensaje de error\"],\"6oCVzX\":[\"El contexto de Kubernetes es obligatorio\"],\"6wQO0f\":[\"Mostrar Datos\"],\"6z9W13\":[\"Reiniciar\"],\"71agNy\":[\"Generar nombres para celdas sin nombre con IA\"],\"74J3FG\":[\"Versión inicial\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Got it\"],\"77nSMU\":[\"¿Borrar todo el historial de actividad IA? Esta acción es irreversible.\"],\"79UVYW\":[\"Esc para cerrar\"],\"7ABmyQ\":[\"Reintentar\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" de \",[\"0\"],\" activos\"],\"7E864M\":[\"Tipo de Base de Datos\"],\"7FqaG1\":[\"Personaliza las instrucciones para el analisis IA de los planes EXPLAIN. Usa \",[\"LANGUAGE\"],\" para el idioma de salida.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Tipos mixtos detectados, por defecto TEXT\"],\"7RSQQd\":[\"Guardar contraseñas en el Llavero\"],\"7VpPHA\":[\"Confirmar\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fallidas\"],\"7sMeHQ\":[\"Clave\"],\"7sNhEz\":[\"Usuario\"],\"7tATh2\":[\"Ejecutar Consulta\"],\"7yb4gk\":[\"Error: \"],\"8-4V8D\":[\"Tablas\"],\"82G-l5\":[\"El Model Context Protocol (MCP) permite a los asistentes de IA (como Claude) conectarse a tus herramientas locales. Tabularis expone un servidor MCP que permite a la IA leer el esquema de tu base de datos y ejecutar consultas de forma segura.\"],\"83VjWE\":[\"Nuevo Notebook\"],\"86IgoU\":[\"Ejecutar consulta (en el editor)\"],\"86fCgf\":[\"Personaliza las instrucciones para la generación de nombres de pestañas de resultados de consulta con IA. La consulta SQL se envía como mensaje del usuario.\"],\"87a_t_\":[\"Etiqueta\"],\"8CWirf\":[\"Servidor MCP\"],\"8S8aIX\":[\"Verificación de Conexión\"],\"8TMaZI\":[\"Marca de Tiempo\"],\"8Tg_JR\":[\"Personalizado\"],\"8UFKYr\":[\"Seleccionar consulta a ejecutar\"],\"8VKSGV\":[\"Generar SQL\"],\"8Wjy6z\":[\"Cerrar Pestañas a la Izquierda\"],\"8ZsakT\":[\"Contraseña\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Editor SQL\"],\"8bRgTe\":[\"Proveedor de IA no configurado. Ve a Configuracion > IA.\"],\"8c_W0h\":[\"Versiones anteriores\"],\"8guEQP\":[\"Actualizar Vistas\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN es ligero y principalmente estructural.\"],\"8q_sOc\":[\"Quitar\"],\"8t-akp\":[\"primeras \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nombre de Conexión\"],\"91gnWY\":[\"Exportar Registros\"],\"91rtHL\":[\"Crear Nueva Vista\"],\"92hf9a\":[\"Quitar\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vista actualizada correctamente\"],\"9NzDFn\":[\"Mostrar la pantalla de bienvenida al iniciar la aplicación.\"],\"9OoUS3\":[\"Crear Nueva Conexión SSH\"],\"9QGRD5\":[\"Columna destino\"],\"9QTny9\":[\"La consulta falló.\"],\"9S-fyV\":[\"Plan de ejecución previo\"],\"9SJ_Sx\":[\"Recursos del Sistema\"],\"9UQ730\":[\"Clonar\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"No hay datos en el portapapeles\"],\"9mMU1R\":[\"Tiempo\"],\"9mvFo_\":[\"Hora\"],\"9npOH9\":[\"Abrir archivo\"],\"9uI_rE\":[\"Deshacer\"],\"9xUjzm\":[\"Seleccionar Todo\"],\"9y_02p\":[\"Chat with the community, get help, suggest features\"],\"A1pPcI\":[\"Host SSH\"],\"A1taO8\":[\"Buscar\"],\"A6C0pv\":[\"Costo Total\"],\"A7WG0p\":[\"Plugin desactivado\"],\"A7yRz3\":[\"La definición de la vista es requerida\"],\"A9Uyp6\":[\"Error en la importación: \"],\"ABEd-z\":[\"Usa tu gestor de paquetes para actualizar Tabularis.\"],\"AMdgKV\":[\"Prompt Analisis del Plan de Ejecucion\"],\"ANSTMe\":[\"No se detectaron problemas importantes en el resumen actual del plan.\"],\"ANzIr7\":[\"Historial de Consultas\"],\"AOnaU7\":[\"omitidas\"],\"AVlZoM\":[\"Variable de Entorno\"],\"AXTVsE\":[\"Verificación completa\"],\"AXdRYR\":[\"Registros Actuales\"],\"Aa-YkQ\":[\"Exportar Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filtrar por nivel\"],\"AlPiMN\":[\"Clic para ir a la página\"],\"An-1rA\":[\"Filas devueltas\"],\"AnV8j-\":[\"Modificar Columna\"],\"AvEr_L\":[\"Nueva Consola\"],\"AvYbUL\":[\"Estrella en GitHub\"],\"Aw_eOs\":[\"Requiere Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No se encontraron resultados\"],\"B0mJGb\":[\"Salida Sin Procesar\"],\"B1c58n\":[\"Modificar Columna\"],\"B3toQF\":[\"Objetos\"],\"B5nKny\":[\"/ruta/absoluta/carpeta\"],\"B5xevr\":[\"El nombre de la conexión es obligatorio\"],\"BAVvWJ\":[\"Diagrama ER\"],\"BBtVak\":[\"Contraer Todo\"],\"BEVzjL\":[\"Importación fallida\"],\"BFxXo5\":[\"Ejecutar Todo\"],\"BJe2lZ\":[\"Mostrar/ocultar barra lateral\"],\"BK3WCj\":[\"Error al cargar el registro\"],\"BKbO3i\":[\"Notebook editado\"],\"BMB51y\":[\"Ejecutar en consola\"],\"BNW_Z4\":[\"ej. usuarios_activos, resumen_pedidos\"],\"BUO_JN\":[\"Copiar Consulta\"],\"BYkhHY\":[\"Buscar actualizaciones al inicio\"],\"BbHofF\":[\"Exportar conexiones\"],\"BeSg6-\":[\"Recopilar registros de la aplicación en memoria para depuración\"],\"BgAyQH\":[\"Quitar ordenamiento\"],\"BinTJI\":[\"ecosistema npm\"],\"BkFson\":[\"Paginación automática\"],\"Bpglf1\":[\"Mover Arriba\"],\"BrGo6h\":[\"Buscar notebooks\"],\"BxiAN_\":[\"Eliminar Consulta\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dependencias Frontend\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Sin filtros —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Descargando...\"],\"CUxwxn\":[\"Mostrar Todas las Tablas\"],\"CWMXbw\":[\"detendrá forzosamente su proceso. Todas las conexiones de base de datos activas que usen este complemento dejarán de funcionar hasta que se reinicie el complemento.\"],\"CZt6BX\":[\"CONFIGURACIÓN MANUAL\"],\"Ca8ixZ\":[\"Eliminar\"],\"CbJBQS\":[\"Error en la actualización: \"],\"Cdz-YU\":[\"Vista apilada\"],\"CpeQf9\":[\"Ciclos\"],\"D2wXBw\":[\"Auto Incremento\"],\"D6Ql0c\":[\"Selecciona el modelo a utilizar para la generación y explicación.\"],\"DB8zMK\":[\"Aplicar\"],\"DDXf5E\":[\"Funciones SQL\"],\"DEwnwi\":[\"Eliminar\"],\"DNTvdl\":[\"Abrir en el Editor\"],\"DPc2P9\":[\"Eliminar Celda\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Altura de Línea\"],\"Dd7YLj\":[\"Maybe later\"],\"Deej3j\":[\"JSON no válido\"],\"DfKhk_\":[\"Actualizar\"],\"DiRiTz\":[\"Abrir página del paquete\"],\"DlRHAD\":[\"Ejecutando EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" error\"],\"other\":[\"#\",\" errores\"]}]],\"Dvdihe\":[\"En \",[\"0\"],\" — revisa y decide antes de ejecutar.\"],\"DzFLzw\":[\"SÍ\"],\"E-JUtQ\":[\"Puerta de aprobación\"],\"E0kcnZ\":[\"General\"],\"E2mje_\":[\"Seleccionar consulta a analizar\"],\"EDieyg\":[\"¿Estás seguro de que deseas eliminar esta conexión SSH?\"],\"EHZxPj\":[\"Expandir\"],\"EL4oDO\":[\"Nueva Versión Disponible\"],\"EPi4gT\":[\"Ordenar por \",[\"field\"]],\"EWPtMO\":[\"Código\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Desconocido\"],\"EhADgB\":[\"Eliminar Columna\"],\"EkH9pt\":[\"Update\"],\"Ekblrc\":[\"Estás actualizado\"],\"Em6JFd\":[\"Contar Filas\"],\"EnGiqG\":[[\"0\"],\" elementos\"],\"Ew1n5z\":[\"Buscar plugins…\"],\"F18WP3\":[\"Parámetros\"],\"F3uc1x\":[\"El archivo exportado contendrá tus contraseñas de base de datos y SSH en texto plano. Guárdalo de forma segura.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" filas\"],\"other\":[\"#\",\" filas\"]}]],\"F6pfE9\":[\"Activa\"],\"F8tXg7\":[\"Vista Previa de Datos\"],\"F9-6yK\":[\"Formato de copia predeterminado\"],\"F9lxfG\":[\"Eliminar\"],\"F9nsa2\":[\"El archivo de historial estaba corrupto y se ha movido a un respaldo. Las nuevas consultas se registrarán con normalidad. Archivo de respaldo:\"],\"FF_oap\":[\"Predeterminado\"],\"FK8rlP\":[\"No hay conexiones SSH configuradas\"],\"FMRcH8\":[\"Primera fila como encabezado\"],\"FNvDMc\":[\"Esta Semana\"],\"FQe1FI\":[\"Filas Est.\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operacion\"],\"Fa_cky\":[\"Esquema: \",[\"tableName\"]],\"FpEL5o\":[\"Elige un tema independiente para el editor SQL, o mantenlo sincronizado con el tema de la app.\"],\"FsvZQL\":[\"Celda \",[\"n\"],\" editada\"],\"FtwKL9\":[\"Cambiar pestaña\"],\"FznI3z\":[\"¿Eliminar la clave foránea \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Error en la vista previa: \"],\"G8Q5Zq\":[\"El namespace es obligatorio\"],\"GAohqx\":[\"Eliminar columna\"],\"GJR99u\":[\"Error al eliminar la columna: \"],\"GKfzzM\":[\"Elige una conexión...\"],\"GS-Mus\":[\"Exportar\"],\"GUaLUq\":[\"Error al cargar el esquema: \"],\"GXP-Iw\":[\"Agregar Celda SQL\"],\"Gj1mLb\":[\"Celdas reordenadas\"],\"GlbqG2\":[\"Restablecer al valor predeterminado\"],\"Gs5AlY\":[\"Abierta\"],\"GtmO8_\":[\"desde\"],\"GxkJXS\":[\"Subiendo...\"],\"H-o4D2\":[\"Crear nueva columna\"],\"H2B-KW\":[\"Elige el formato predeterminado al copiar filas con Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Rehacer\"],\"H7mlCc\":[\"/ruta/absoluta/db.sqlite\"],\"H86f9p\":[\"Contraer\"],\"H9P8CD\":[\"agregar el primer filtro\"],\"HAQlGl\":[\"Actividad IA\"],\"HKNZrs\":[\"Cond. Indice\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Eliminar \",\"#\",\" filas\"],\"other\":[\"Eliminar \",\"#\",\" filas\"]}]],\"HPuCiP\":[\"Ruta de la Carpeta\"],\"HUs1R3\":[\"No hay pestañas abiertas para esta conexión.\"],\"HV4Isp\":[\"Ingresa la contraseña SSH\"],\"HVC8Hh\":[\"Copiado al portapapeles\"],\"HWEpq8\":[\"Escritura Disco/s\"],\"HY4nP5\":[\"En línea\"],\"HcmoWv\":[\"Error al guardar la vista: \"],\"He8v1Y\":[\"Deseleccionar de Aplicar todos\"],\"HehHP1\":[\"Diseño Predeterminado\"],\"HilYn4\":[\"Este notebook está vacío. Agrega una celda para comenzar.\"],\"HjxVK_\":[\"Prueba rápida de conexión\"],\"HmMnRx\":[\"Modo WKT\"],\"HoKCiI\":[\"La aplicación se reiniciará automáticamente después de la instalación\"],\"HpK_8d\":[\"Recargar\"],\"Hpi4Jm\":[\"Únete ahora\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configurar SSH en Línea\"],\"I5VBsr\":[\"Igual que la app\"],\"I8yrPb\":[\"Reemplazar tabla\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Recordar Después\"],\"I99Miw\":[\"Costo\"],\"IETZIR\":[\"Editar nombre de celda\"],\"IG9wzA\":[\"Error al insertar la fila: \"],\"ILleOG\":[\"El tipo de recurso debe ser \\\"service\\\" o \\\"pod\\\"\"],\"IQ3gAw\":[\"Subir Archivo\"],\"IUwGEM\":[\"Guardar Cambios\"],\"IUwmLq\":[\"Dependencias directas declaradas en package.json y src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Librerías Open Source\"],\"I_43p6\":[\"Seguridad\"],\"Iaizf4\":[\"Apariencia\"],\"Il3FBB\":[\"Panel de filtros estructurados\"],\"IniZRK\":[\"Descarga no disponible - solo vista previa cargada\"],\"Isaozb\":[\"Revisar y ajustar\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Las consultas activas y las conexiones a través de este complemento serán interrumpidas.\"],\"J6v1s_\":[\"Modelo Predeterminado\"],\"JE-DVk\":[\"Intérprete\"],\"JEGlfK\":[\"Inicio\"],\"JKDPqP\":[\"Selecciona primero un contexto\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Usar Túnel SSH\"],\"JRz8tw\":[\"MySQL y MariaDB exponen metricas reales solo en variantes compatibles de EXPLAIN ANALYZE o ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP o SVG · máx. 512 KB\"],\"JY5Oyv\":[\"Base de datos\"],\"JlFRIB\":[\"Zona horaria de sesión enviada a MySQL después de conectar.\"],\"JrOEip\":[\"Vista previa\"],\"JsY1p5\":[\"Denegada\"],\"K3H9p5\":[\"Limpiar\"],\"K5Dgu_\":[\"Bases de Datos\"],\"K8IGKf\":[\"Tipo de Autenticación\"],\"KAYNSW\":[\"Cuántos registros mantener en memoria (1-10000)\"],\"KHTGbr\":[\"EXPLAIN previo\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copiar como `columna`\"],\"KM5Kc8\":[\"Se debe seleccionar al menos una columna\"],\"KSCnVQ\":[\"Tipo\"],\"KUjOb9\":[\"en ejecución\"],\"KXBdwy\":[\"Actualizar Rutinas\"],\"KXNyX7\":[\"Set DEFAULT\"],\"Kd70-v\":[\"Importar desde Portapapeles...\"],\"KhI4oS\":[\"Abrir fila referenciada en \",[\"0\"]],\"KhgrNu\":[\"Integración del Servidor MCP\"],\"KirERL\":[\"Tiempo agotado\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Error al eliminar el índice: \"],\"KzeARD\":[\"Error al eliminar la tabla: \"],\"L-rMC9\":[\"Restablecer predeterminado\"],\"L3HXkQ\":[\"Bug Fixes\"],\"LCZ7Dy\":[\"Copiar Nombre\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"índices\"],\"LMeAoR\":[\"filas\"],\"LPCdc-\":[\"Prompt Nombre de Pestaña de Consulta\"],\"LPFmga\":[\"Seleccionar para Aplicar todos\"],\"LYzbQ2\":[\"Herramienta\"],\"Lbis_V\":[\"Navegador rápido\"],\"Lcpbe2\":[\"No se pudo lanzar el proceso del plugin. Revisa los detalles del error.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN solo es compatible con instrucciones DML (SELECT, INSERT, UPDATE, DELETE). Las instrucciones DDL como CREATE, DROP o ALTER no se pueden analizar.\"],\"LnT0hQ\":[\"Agregar Columna\"],\"LvutiO\":[\"Sugerir con IA\"],\"M-rHQO\":[\"Salir de Pantalla Completa\"],\"M0XJba\":[\"¿Estás seguro de que quieres borrar todo el historial de consultas para esta conexión?\"],\"M1co_O\":[\"Configurado\"],\"M73whl\":[\"Contexto\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Emoji seleccionado\"],\"MWB7fV\":[\"Mostrar Todo\"],\"MXdOwj\":[\"Separar Conexiones\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Selecciona conexión de K8s\"],\"Mc1tjS\":[\"Activa ANALYZE para inspeccionar filas reales, tiempos, bucles y buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" filas más\"],\"Mp0jQ_\":[\"Este driver solo soporta claves primarias en la creación de la tabla\"],\"MqpZwN\":[\"Proceso Tabularis\"],\"MxIx43\":[\"↑↓ para navegar, Enter para abrir\"],\"MygtgQ\":[\"Agregar Celda Markdown\"],\"N40H-G\":[\"Todos\"],\"N5UQxq\":[\"Ollama no detectado en el puerto \",[\"0\"],\". ¿Está en ejecución?\"],\"N6GBcC\":[\"Confirmar eliminación\"],\"N6aqHp\":[\"Consultas ejecutadas\"],\"N9_S15\":[\"Se creará una nueva tabla\"],\"NBdMa1\":[\"Paso Mas Lento\"],\"NC2AI2\":[\"Longitud\"],\"NCzNnx\":[\"Orden ascendente\"],\"NT4Ubs\":[\"Eliminar clave personalizada y volver a la variable de entorno (si existe)\"],\"NUjrCO\":[\"Ningun favorito coincide con la busqueda\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Total árbol: \",[\"0\"]],\"Nc2VQn\":[\"Agregar a existente\"],\"NgFERn\":[\"Agregar a Favoritos\"],\"NktMHG\":[\"Nombre de la base de datos\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Probar\"],\"Nq5QTk\":[\"analizar N-esima\"],\"O2STgu\":[\"Error en la exportación: \"],\"O8SV8O\":[\"Descargando...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Ejecutar Todas las Celdas\"],\"OGWdBg\":[\"Nombre de Vista\"],\"OHqT6w\":[\"Pulsa la combinación de teclas...\"],\"OXJsaG\":[\"Nombre de parámetro no válido\"],\"OfhWJH\":[\"Restablecer\"],\"OlAl5i\":[\"Expandir todo\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Join Discord\"],\"P1YGsb\":[\"Generación SQL\"],\"P2m1xb\":[\"Detener en Error\"],\"P3Qlys\":[\"Sin ID de Conexión\"],\"P6Y3Yf\":[\"Ejecuta este comando en tu terminal y reinicia Claude Code.\"],\"PCdj-c\":[\"Deseleccionar todas\"],\"PMnFt9\":[\"Lectura Disco/s\"],\"PQU2Va\":[\"Aceptar Sugerencia con Intro\"],\"PRnH8G\":[\"de \",[\"0\"]],\"PY8UF3\":[\"Paralelo alternado (celda \",[\"n\"],\")\"],\"PiH3UR\":[\"¡Copiado!\"],\"Pia95d\":[\"El nombre de la columna es requerido\"],\"PrElXQ\":[\"Actualizar\"],\"PrixCC\":[\"Las filas se añadirán a una tabla existente\"],\"Pujgbb\":[\"Configurar destino\"],\"Pw_eQV\":[\"El Plugin no se pudo iniciar\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"No hay consultas guardadas\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Sin procesos hijos\"],\"QCxMC0\":[\"Buscar automáticamente nuevas versiones al iniciar la aplicación\"],\"QEazml\":[\"Eliminar seleccionadas\"],\"QHcLEN\":[\"Conectado\"],\"QLHHFO\":[\"Modo solo lectura\"],\"QOvAW3\":[\"New Features\"],\"QULGRi\":[\"No se encontraron consultas válidas\"],\"QZwllF\":[\"Explorar...\"],\"QbkSr_\":[\"EXPLAIN no disponible para esta consulta.\"],\"QeHFYZ\":[\"EXPLAIN falló: \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"Read more\"],\"Qu4Hog\":[\"Notebook importado exitosamente\"],\"R-A2Vd\":[\"No hay datos para mostrar\"],\"R0Hkb2\":[[\"0\"],\" base(s) de datos seleccionada(s)\"],\"R1nHhB\":[\"Ya existe\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convertir a Consola\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configuración\"],\"RF-HyV\":[\"Elige tu idioma preferido. 'Auto' usará el idioma del sistema.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copiar nombre\"],\"RI-HZc\":[\"Ingresa la Clave de \",[\"0\"]],\"RJrE17\":[\"¿Estás seguro de que deseas eliminar la vista \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"A star helps others discover the project\"],\"Rb3Tdm\":[\"Nombre del notebook\"],\"RcbKJ3\":[\"Al Actualizar\"],\"RkefFq\":[\"Ejecuta un EXPLAIN antes de mostrar el modal para que el usuario vea el plan.\"],\"RnF_hl\":[\"Cargando registro de plugins...\"],\"Rns7_C\":[\"Esta acción no se puede deshacer inmediatamente\"],\"RoKRqW\":[\"Plugins Disponibles\"],\"RphpKk\":[\"Apariencia\"],\"Rt8sHM\":[\"Se detecto trabajo temporal o de ordenacion\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Habilitados\"],\"S1veKH\":[\"Revert Selected\"],\"S5zeZU\":[\"Vista Previa\"],\"S8Yqbl\":[\"Insertar\"],\"SDND4q\":[\"No configurado\"],\"SJRy3D\":[\"(Auto-generado)\"],\"SSwIjo\":[\"Set EMPTY\"],\"SgvA_r\":[\"Press Run (Ctrl/Command+F5) to load table data\"],\"SlfejT\":[\"Error\"],\"SoATkx\":[\"Copiar Celda\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL del Endpoint\"],\"T7w5CQ\":[\"Failed to create new row: \"],\"T9947j\":[\"Valor (ej. 'texto' o 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Cambiar a Diseño Vertical\"],\"TK5oex\":[\"Guardar Prompt\"],\"TKQ7K-\":[\"Instalar\"],\"TKZreP\":[\"Requerido\"],\"TMLAx2\":[\"Requerido\"],\"TO08JI\":[\"claves foráneas\"],\"TQloo1\":[\"Crear Clave Foránea\"],\"TVKqvO\":[\"Editar Fila\"],\"TYSdQ3\":[\"Ejecutar consulta SELECT\"],\"TfDFHS\":[\"Ajusta las líneas largas en el editor en vez de desplazarse horizontalmente.\"],\"Tibfjs\":[\"No hay conexiones guardadas — crea una abajo\"],\"Tj36Dr\":[\"Restablecer Predeterminado\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Bloquear consulta\"],\"TpwXyg\":[\"Si falta el tiempo, es probable que el servidor devolviera un plan solo estimado.\"],\"Tw2M1h\":[\"Instalación fallida\"],\"Ty-rm9\":[\"Conexiones SSH\"],\"Tz0i8g\":[\"Configuración\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Conexiones de Kubernetes\"],\"U4uzyV\":[\"What's New\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Detener la ejecución cuando una celda falla\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" en \",[\"1\"],\" — revisa y decide antes de ejecutar.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"¡Configuración instalada correctamente para \",[\"clientName\"],\"! Reinicia la app para aplicar.\"],\"URmyfc\":[\"Detalles\"],\"UWQBvp\":[\"Generar plantillas SQL\"],\"UawTKZ\":[\"Opcional. Especifica el ejecutable para iniciar este plugin (p.ej. python3 en macOS/Linux, python o ruta completa en Windows). Deja en blanco para usar el valor predeterminado.\"],\"Ub8sf5\":[\"SQLite no soporta la eliminación de FKs mediante ALTER TABLE.\"],\"UbbJ8j\":[\"No se encontraron opciones\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"Estas conexiones rechazarán escrituras desde MCP. Las otras se comportan normalmente.\"],\"UnQNah\":[\"¿Estás seguro de que deseas eliminar la columna \\\"\",[\"0\"],\"\\\" de la tabla \\\"\",[\"tableName\"],\"\\\"?\\n\\nADVERTENCIA: Esto eliminará permanentemente todos los datos de esta columna. Esta acción no se puede deshacer.\"],\"UncTTh\":[\"Suma de RSS del árbol de procesos — puede sobreestimar la memoria compartida\"],\"UpjgFm\":[\"Parámetros cambiados\"],\"UsAnu1\":[\"ANALYZE ejecuta la consulta. Usar con precaucion en instrucciones que modifican datos.\"],\"UxKoFf\":[\"Navegación\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tamaño de Tab\"],\"UzWGWO\":[\"Cambiar a entrada SQL WHERE\"],\"V-chk5\":[\"Frecuencia con la que se verifica si las conexiones activas siguen disponibles. Establece 0 para desactivar.\"],\"V-pw1j\":[\"Nombre de tabla\"],\"V2T0Uw\":[\"Aún no hay notebooks guardados.\"],\"V3aNwx\":[\"Editor de Datos\"],\"VGYp2r\":[\"Aplicar a todo\"],\"VH8S7x\":[\"Columna del portapapeles\"],\"VIAEcS\":[\"Error al cargar las bases de datos. Verifica tus credenciales.\"],\"VKdztF\":[\"Agregar filas\"],\"VLiHXI\":[\"Datos Analyze\"],\"VMbmXc\":[\"¿Estás seguro de que deseas eliminar \\\"\",[\"pluginName\"],\"\\\"? Los archivos del plugin serán eliminados.\"],\"VO3weF\":[\"Ningún archivo cargado\"],\"VOZlKc\":[\"Importar Base de Datos\"],\"VPzsIz\":[\"Generando nombre...\"],\"VUul0v\":[\"Cerrar\"],\"VW0GVQ\":[\"Haz clic en otro emoji abajo para cambiarlo.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Todas las consultas\"],\"Vi2Pqx\":[\"por\"],\"Vl2zn2\":[\"detenido\"],\"Vo4uBA\":[\"Ocurrió un error al instalar el plugin. Consulta los detalles a continuación.\"],\"VqqyOs\":[\"Ejecuta una consulta para ver resultados\"],\"VzhDFh\":[\"Bloquea cualquier sentencia que no sea SELECT vía MCP, salvo las conexiones autorizadas abajo.\"],\"W3uwpT\":[\"Cerrar Todas las Pestañas\"],\"W4MKLh\":[\"ej. Parece arriesgada en prod, confirma…\"],\"WA8RND\":[\"¿Estás seguro de que deseas eliminar la tabla \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Eliminar Tabla\"],\"WLnvCZ\":[\"Ingresa el nombre de usuario\"],\"WM-__8\":[\"Buscar conexiones...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas importadas en \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" filas importadas en \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"¿Estás seguro de que quieres eliminar la consulta \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"exitosas\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"General\"],\"WmPpB1\":[\"Cargando el plan de ejecución…\"],\"Wu7cK0\":[\"No se encontraron bases de datos\"],\"WvoUQF\":[\"Celda \",[\"n\"],\" eliminada\"],\"Ww3pDD\":[\"COMANDO MANUAL\"],\"X-20AU\":[\"Ingresa el prompt de nombre de pestaña...\"],\"X-U6_w\":[\"Familia de Fuente\"],\"X5fs0g\":[\"Crea tu primera conexión para empezar.\"],\"X7Ayjp\":[\"Contraseña guardada en el llavero del sistema\"],\"X9kySA\":[\"Favoritos\"],\"XJOV1Y\":[\"Actividad\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Explicación de Consultas\"],\"XVF2Pf\":[\"Editar Esquemas\"],\"XW6OYF\":[\"Este plugin puede requerir un intérprete (p.ej. Python). Usa Configuración del Plugin para establecer la ruta del intérprete.\"],\"XZB6Xr\":[\"Máximo de Entradas de Registro\"],\"Xcffv2\":[\"Mostrar los botones de Asistente IA y Explicar en el editor\"],\"XeqTSh\":[\"Tipo Join\"],\"XmJfZT\":[\"nombre\"],\"XoQfG1\":[\"Usuario SSH\"],\"XwI0Vw\":[\"Auto (Sistema)\"],\"XyDlLX\":[\"Nombre del Índice\"],\"Y2P2aK\":[\"Selecciona los esquemas a cargar:\"],\"Y8HYw2\":[\"valor\"],\"Y8zX3R\":[\"Insertar en el Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Buscar...\"],\"YWlnMZ\":[\"Puerto de Ollama\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Explora e instala plugins del registro.\"],\"Y_3yKT\":[\"Abrir en Nueva Pestaña\"],\"YiAQ_Q\":[\"Actualizar Tablas\"],\"Ysjr9Y\":[\"Vista Previa SQL\"],\"YswNf7\":[\"Todos los niveles\"],\"YtNwr6\":[\"Número máximo de entradas del historial de consultas almacenadas por conexión.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Cargando...\"],\"Z7ZXbT\":[\"Aprobar\"],\"Z8JpBH\":[\"Exportar como Notebook\"],\"Z8fBIc\":[\"Las filas reales superan la estimacion\"],\"ZC2VJP\":[\"Ejecutar\"],\"ZCIS4k\":[\"sin filtros activos\"],\"ZF1_UT\":[\"Modo SSL\"],\"ZGjBPa\":[\"Limpiar Registros\"],\"ZHQTlM\":[\"Importando desde\"],\"ZIFDoJ\":[\"Selecciona al menos Estructura o Datos\"],\"ZIZA6o\":[\"Editar antes de aprobar\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avisos de análisis\"],\"other\":[\"#\",\" avisos de análisis\"]}]],\"ZVn8p2\":[\"Muestra los números de línea en el margen del editor.\"],\"ZYnwzF\":[\"Desconectado\"],\"Za3_fO\":[\"Error\"],\"Zf7LHg\":[\"No se encontraron contextos (¿está kubectl instalado?)\"],\"Zfotp5\":[\"Las grandes diferencias entre estimacion y realidad suelen indicar estadisticas desactualizadas o predicados dificiles de modelar.\"],\"ZiFjhs\":[\"Select *\"],\"ZpzHz0\":[\"No se pudieron cargar los esquemas\"],\"ZqXGPF\":[\"Error al eliminar la vista: \"],\"ZuL73E\":[\"Crear una nueva vista de base de datos\"],\"_-bi4r\":[\"Tabla Referenciada\"],\"_AEYGI\":[\"Sin historial de ejecución\"],\"_FdpZc\":[\"Error al cargar la definición de la vista: \"],\"_FxSdi\":[\"Consulta las dependencias open source directas usadas por la app, el backend y la toolchain.\"],\"_JyTG8\":[\"Ingresa el prompt de explicación...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"filas\"],\"_TK1zF\":[\"Conexión guardada\"],\"_bJFBE\":[\"Tiempo de Espera de Conexión\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Árbol\"],\"_dqduX\":[\"Página siguiente\"],\"_fwE6J\":[\"Anteriores\"],\"_n04sB\":[\"Terminar\"],\"_otxbQ\":[\"Archivo de clave\"],\"_pezIT\":[\"Error al conectar a \",[\"0\"],\". Verifica tu configuración o asegúrate de que la base de datos esté en ejecución.\"],\"_srfkj\":[\"Clave personalizada eliminada correctamente\"],\"_t6aFo\":[\"MySQL y MariaDB pueden volver a EXPLAIN FORMAT=JSON o al EXPLAIN tabular segun la version del servidor.\"],\"_xTbaM\":[\"columnas\"],\"_yxaaL\":[\"Índice Único\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.\"],\"a9CASo\":[\"SQLite solo soporta renombrar columnas. Otras modificaciones requieren recrear la tabla manualmente.\"],\"aAIQg2\":[\"Apariencia\"],\"aC_vCa\":[\"Generar nombre con IA\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Selecciona un nodo para ver detalles\"],\"aHKcKc\":[\"Página anterior\"],\"aI-5wG\":[\"Verificar CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valor Predeterminado\"],\"aScJP1\":[\"Ejecutar esta consulta\"],\"aVNbN8\":[\"Condiciones de filtro\"],\"aWhdMQ\":[\"Usar Conexión SSH Existente\"],\"aXYd8V\":[\"Tiempo de espera\"],\"aX_S_r\":[\"Página \",[\"0\"],\" de \",[\"totalPages\"]],\"agZcf8\":[\"SQL Generado: \",[\"tableName\"]],\"ajqPzi\":[\"Select [campos]\"],\"alplHn\":[\"Analizando plan de ejecucion con IA...\"],\"anBcU3\":[\"Si te gusta tabularis y quieres ver más funcionalidades, considera apoyar el proyecto contribuyendo código, reportando errores o dando una estrella en GitHub.\"],\"arHmj2\":[\"¿Estás seguro de que quieres eliminar esta consulta del historial?\"],\"arKcqW\":[\"Los servidores mas antiguos pueden volver a planes estimados con menos metricas.\"],\"arcpYe\":[\"Aprobación requerida\"],\"aurEkh\":[\"Cargando procesos…\"],\"avtdsd\":[\"Modo SQL\"],\"az8lvo\":[\"Desactivada\"],\"b1Ah3z\":[\"Enfocado en\"],\"b392Dr\":[\"Expandir Todo\"],\"b5S_PU\":[\"Nombre de la Base de Datos\"],\"bAvovP\":[\"Mover Abajo\"],\"bH3JqY\":[\"No se encontraron tablas\"],\"bP5JOn\":[\"Ajuste de Línea\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Hacer todas las consultas MCP de solo lectura\"],\"bmca5u\":[\"Solo escrituras\"],\"bpCiBU\":[\"Permitir escrituras desde MCP\"],\"bqnhqW\":[\"La estimacion supera las filas reales\"],\"bqpcP7\":[\"Exportar Base de Datos\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Error\"],\"bw22Gk\":[\"Esquema de Columnas\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Puntos Criticos\"],\"cFCKYZ\":[\"Denegar\"],\"cFGrCP\":[\"tabla\"],\"cGeFup\":[\"Tamaño de Fuente\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Enfocar en Tabla\"],\"cM9NHc\":[\"Degradar a\"],\"cO9-2L\":[\"Desactivado\"],\"cSev-j\":[\"Filtros\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importar \",\"#\",\" filas\"],\"other\":[\"Importar \",\"#\",\" filas\"]}]],\"c_xoSn\":[\"Celda \",[\"n\"],\" renombrada\"],\"cd0XEW\":[\"Guardar Consulta\"],\"cnGeoo\":[\"Delete\"],\"cwfPLH\":[\"Grupo Dividido\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" sentencias\"],\"d34vwG\":[\"Cargar Bases de Datos\"],\"d6ynQ7\":[\"Orden descendente\"],\"d8_6_v\":[\"cancelar\"],\"d8wc1_\":[\"Valores de muestra\"],\"dBXoCS\":[\"Se detectó una variable de entorno, pero puedes sobrescribirla estableciendo una clave arriba.\"],\"dD7NPy\":[\"Esquema\"],\"dEgA5A\":[\"Cancelar\"],\"dMtLDE\":[\"hasta\"],\"dPJVhW\":[\"Instalación Fallida\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" sesión\"],\"other\":[\"#\",\" sesiones\"]}]],\"dTUzKm\":[\"Ejecutar seleccionadas (\",[\"0\"],\")\"],\"dU_iQN\":[\"Ninguna sesión coincide con los filtros.\"],\"dUh9QW\":[\"Planificacion\"],\"dVoir2\":[\"Celda Markdown \",[\"n\"],\" añadida\"],\"dZ0d2O\":[\"Selecciona al menos una tabla\"],\"dhi13U\":[\"Elegir imagen…\"],\"dli1JX\":[\"Enviar Cambios\"],\"dmYV6f\":[\"Rutinas\"],\"dohZCo\":[\"Instrucciones para la generación de SQL con IA. Usa \",[\"SCHEMA\"],\" como marcador para la estructura de la base de datos.\"],\"dtxpK2\":[\"Analizar\"],\"dwW9nJ\":[\"Mostrar Números de Línea\"],\"dwWVw_\":[\"Mostrar pantalla de bienvenida\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" pestaña\"],\"other\":[\"#\",\" pestañas\"]}]],\"dxxY9r\":[\"Si existe\"],\"dyN4j9\":[\"Haz clic en 'Ejecutar Vista Previa' para ver resultados\"],\"e07Iz5\":[\"Abrir Administrador de Tareas\"],\"e0NzXu\":[\"Este proyecto es un Work In Progress (WIP). Las funciones principales son estables, pero tenemos grandes planes.\"],\"e1UKxf\":[\"Guardar esta consulta\"],\"e34gdU\":[\"Cuánto espera el subproceso MCP la decisión del usuario antes de fallar.\"],\"e62LQd\":[\"Forzar Cierre\"],\"e6QZsM\":[\"Tema del Editor\"],\"e8CirT\":[\"Ejecutar consulta\"],\"eD2kUP\":[\"Buffers Leidos\"],\"eE0JZ4\":[\"Versión\"],\"eIDch7\":[\"Ingresa el prompt de analisis del plan de ejecucion...\"],\"eIVolo\":[\"Disco L/E\"],\"eJOEBy\":[\"Exportando...\"],\"eKHY3W\":[\"Configuración del Plugin\"],\"eMb6Ub\":[\"Elige un recurso...\"],\"ePK91l\":[\"Editar\"],\"eXweu6\":[\"Expandir Celda\"],\"ecNsTE\":[\"Ninguna consulta coincide con la busqueda\"],\"ecUA8p\":[\"Hoy\"],\"ecpIZP\":[\"Ingresa la frase de paso si la clave está cifrada\"],\"esl-Tv\":[\"Tipo de recurso\"],\"exyUec\":[\"Conexión\"],\"f2AJjl\":[\"Eliminar Fila\"],\"f4pD-j\":[\"La prueba de conexión falló\"],\"f7sXvi\":[\"Ingresa la contraseña\"],\"fAsxc0\":[\"Escaneos Secuenciales\"],\"fIeFs0\":[\"Seleccionar Valor...\"],\"fJm92A\":[\"Selecciona un archivo con un plan EXPLAIN (formato JSON o texto de PostgreSQL) para visualizarlo.\"],\"fOuPPd\":[\"Complemento\"],\"fXVIZq\":[\"Valores\"],\"f_b1TA\":[\"Historial de Ejecución\"],\"fghnqP\":[\"Cambiar a conexión 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Coma (,)\"],\"fp711N\":[\"Bloqueada (solo lectura)\"],\"fpzyLj\":[\"Página \",[\"0\"],\" de \",[\"1\"]],\"fuA6oy\":[\"Tiempo de Espera del Socket\"],\"fvImQM\":[[\"0\"],\" seleccionadas\"],\"fwr_nh\":[\"Instala extensiones, gestiona drivers de plugins y mantén bajo control los ajustes de ejecución.\"],\"g0ZzK4\":[\"JSON válido\"],\"g11hAR\":[\"Nueva Fila\"],\"g8VcMm\":[\"Mi clúster de K8s\"],\"gCFR_O\":[\"Ejecución Paralela (Ejecutar Todo)\"],\"gEjU98\":[\"Abrir conexiones\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Se requiere al menos una columna\"],\"gSuQrG\":[\"Ninguna conexión coincide con \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Reejecutar consulta\"],\"gZWMnn\":[\"Analisis IA\"],\"ghYd73\":[\"Elegir destino...\"],\"giAqEC\":[\"Crear Nueva Tabla\"],\"gnQS8X\":[\"Tamaño máximo de paquete usado por el conector MySQL.\"],\"gqV5VL\":[\"Integrado, no personalizable\"],\"gww_XE\":[\"Columna Referenciada\"],\"gxXPJ9\":[\"Configurar Intérprete\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximizar\"],\"h-XNc9\":[\"Delimitador CSV\"],\"h-kNAk\":[\"ej. datos_ventas\"],\"h3Z_aK\":[\"Escribe Markdown aquí...\"],\"h7MgpO\":[\"Atajos de teclado\"],\"h7peZQ\":[\"Permitir\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" proceso del sistema en ejecución\"],\"other\":[\"#\",\" procesos del sistema en ejecución\"]}]],\"hEZrFh\":[\"Ejecutar Archivo SQL...\"],\"hEipgW\":[\"Buscar Actualizaciones Ahora\"],\"hG89Ed\":[\"Imagen\"],\"hIHcBE\":[\"Exportar como CSV\"],\"hItdtk\":[\"Explorar carpeta\"],\"hXFVjo\":[\"El nombre de la tabla es requerido\"],\"hZ6znB\":[\"Puerto\"],\"h_huI6\":[\"Reejecutar\"],\"hbz1rh\":[\"claves\"],\"hdsaJo\":[\"Importando...\"],\"he3ygx\":[\"Copiar\"],\"hfGimp\":[\"Elige un namespace...\"],\"hjjSEi\":[\"Conexiones de solo lectura\"],\"hjwN_s\":[\"Nombre del recurso\"],\"hlF1mD\":[\"Copiar selección\"],\"hnboBb\":[\"Analisis IA del Plan de Ejecucion\"],\"hq4-D2\":[\"La clave API se almacena de forma segura en el llavero del sistema. Establecer una clave aquí sobrescribe la variable de entorno.\"],\"hqjXdn\":[\"Error al eliminar la conexión SSH\"],\"hqofAK\":[\"Copiar SQL\"],\"hy6L14\":[\"Ver en GitHub\"],\"hyjACX\":[\"Celdas contraídas/expandidas\"],\"hz1b5W\":[\"No se encontraron elementos coincidentes\"],\"i1vAVM\":[\"Crear nueva tabla\"],\"i3S5T3\":[\"Buscar en favoritos...\"],\"i4_LY_\":[\"Escritura\"],\"i5HBWh\":[\"Historial de consultas restablecido\"],\"iAVlge\":[\"Personaliza las instrucciones para la generación de nombres de celda en notebooks con IA. El contenido de la celda (SQL o Markdown) se envía como mensaje del usuario.\"],\"iE1yAB\":[\"Filtrar tablas...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Conectar\"],\"iSryJ2\":[\"Mi Servidor SSH\"],\"iT7UeX\":[\"Agregar Índice\"],\"iUWwuR\":[\"Descargar e Instalar\"],\"ia7i08\":[\"Selecciona primero contexto/namespace/tipo\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Guardado\"],\"igcsfY\":[\"No hay plugins disponibles en el registro.\"],\"ij-Elv\":[\"Vista previa de imagen\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" consultas analizables encontradas\"],\"other\":[\"#\",\" consultas analizables encontradas\"]}]],\"ioL38P\":[\"Monitoriza los procesos de complementos, CPU, RAM y uso de disco en tiempo real\"],\"ixlL_e\":[\"Archivo de Clave SSH (Opcional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Selecciona un modelo\"],\"j3gyYH\":[\"Aplicar todos\"],\"j5CWO4\":[\"Actualizado\"],\"j9HPuI\":[\"Fila #\",[\"0\"]],\"jBtpMP\":[\"Todos los estados\"],\"jEu4bB\":[\"Columnas\"],\"jEyQIs\":[\"No se encontraron rutinas\"],\"jHc1By\":[\"Eliminar Vista\"],\"jI6sj4\":[\"Costo, tiempo y estimaciones de filas suelen no estar disponibles como en PostgreSQL y MySQL.\"],\"jIxQCZ\":[\"No disponible para tu plataforma\"],\"jKIncn\":[\"El nombre de la base de datos es requerido\"],\"jPSk57\":[\"Razón (opcional)\"],\"jUNY_d\":[\"vista\"],\"jVqjDo\":[\"Formato de archivo notebook no válido\"],\"jWSZ-A\":[\"Solo vista previa - datos completos no cargados\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Tiempo de espera del socket en milisegundos.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"El nombre de la conexión es requerido\"],\"jsQZMk\":[\"IA\"],\"juO8wz\":[\"proceso hijo\"],\"jx0t66\":[\"Contraer procesos hijos\"],\"jxShEf\":[\"Crear Vista\"],\"jz5PKx\":[\"Definición de Vista\"],\"k-0mL-\":[\"Agregar Columna\"],\"k-XiMX\":[\"Sin formato\"],\"k2UnVy\":[\"Cond. Hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"segundos\"],\"kBiBq7\":[\"¿Eliminar el índice \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Mostrar/Ocultar Gráfico\"],\"kI1qVD\":[\"Formatear\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" filas · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Detalles del evento\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registro\"],\"kY-q3P\":[[\"label\"],\" es obligatorio\"],\"kexIdC\":[\"Usar Port-Forward de Kubernetes\"],\"kj2-CR\":[\"Detalles del error\"],\"krksx_\":[\"Éxito\"],\"kwY6nh\":[\"Cerrar\"],\"kx0s-n\":[\"Resultados\"],\"kxUEfE\":[\"Error al obtener la definición de la rutina: \"],\"l2Op2p\":[\"Parámetros de Consulta\"],\"l9Ivba\":[\"Procesos de complementos y recursos del sistema\"],\"lBdPxu\":[\"Color de acento\"],\"lCF0wC\":[\"Actualizar\"],\"lEQRwq\":[\"Datos (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nueva tabla creada\"],\"lOekZ3\":[\"Cambiar a Diseño Horizontal\"],\"lUA1C1\":[\"Frase de Paso de Clave SSH (Opcional)\"],\"lVeG20\":[\"Dependencias Rust\"],\"lXAG6D\":[\"Instrucciones para la explicación de consultas con IA. Usa \",[\"LANGUAGE\"],\" como marcador para el idioma de salida.\"],\"lbbYjy\":[\"Edita directamente el archivo de configuración en bruto. Se requiere reinicio para aplicar los cambios.\"],\"lhKW0m\":[\"Celda SQL \",[\"n\"],\" añadida\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Tamaño de Página de Resultados (Límite)\"],\"lkz6PL\":[\"Duración\"],\"lmVGeo\":[\"Agregar Clave Foránea\"],\"lnnx3E\":[\"Conecta Tabularis a Claude Desktop, Cursor y más\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Añadir\"],\"m2Q_r8\":[\"Detectar JSON en columnas de texto\"],\"m2tskz\":[\"Éxito\"],\"mA-qpe\":[\"Ejecución Completada\"],\"mBhhbA\":[\"Registros exportados al portapapeles\"],\"mCNdzH\":[\"Ejecutar Celda\"],\"mO95sp\":[\"Cerrar panel\"],\"mP7dLi\":[\"Ingresa el nombre de la fuente arriba\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloqueado\"],\"other\":[\"#\",\" bloqueados\"]}]],\"mS74ir\":[\"Error al guardar la conexión SSH\"],\"mSqtw8\":[\"Ejecutar Vista Previa\"],\"mURmfQ\":[\"Definición de Vista (SQL)\"],\"mX_isJ\":[\"Vertical\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Estructura (DDL)\"],\"mrk4Cf\":[\"Ordenar por \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Acabamos de abrir una comunidad dedicada a Tabularis: pide ayuda, comparte trucos y da forma al roadmap.\"],\"mtvVdV\":[\"Filas Procesadas\"],\"mx4evv\":[\"Crear Tabla\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Descargar\"],\"n7JDTx\":[\"Instala y activa complementos para verlos aquí\"],\"nDDJir\":[\"Buscar sesión, cliente, conexión…\"],\"nHP-Kr\":[\"No hay sesión activa. Selecciona una conexión.\"],\"nKhCjW\":[\"Seleccionar Tablas\"],\"nNmhuY\":[\"Crear Índice\"],\"nNwvm4\":[\"Error\"],\"nOVim5\":[\"Error al guardar la conexión\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Requiere extensión: \",[\"0\"]],\"ngO6Pv\":[\"Permite que Intro (además de Tab) acepte la sugerencia de autocompletado activa. Cuando está desactivado, Intro siempre inserta una nueva línea.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Crea tu primera conexión\"],\"nohy4m\":[\"Sin actividad MCP registrada.\"],\"nr-axf\":[\"Eliminar Plugin\"],\"nsPFX9\":[\"Abrir en Visual Explain\"],\"nuBbBr\":[\"Gráfico\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Cambiar\"],\"o21Y-P\":[\"entradas\"],\"o3tP_A\":[\"Eliminar Índice\"],\"o45L8r\":[\"Ingresa el nombre de tu conexión\"],\"o53XGh\":[\"Copiar fila(s) seleccionada(s)\"],\"o7J4JM\":[\"Filtro\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Nivel\"],\"oGiIL7\":[\"Proveedor Predeterminado\"],\"oJ4rAm\":[\"Conexión Perdida\"],\"oJlXF2\":[\"Importar Notebook\"],\"oMFv82\":[\"Dividir Vertical\"],\"oOFiQg\":[\"Limita el número de filas obtenidas por consulta para prevenir problemas de rendimiento. Establece en 0 para desactivar (no recomendado).\"],\"oT9ZD3\":[\"Ocultar resumen\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Gráfico cambiado (celda \",[\"n\"],\")\"],\"oWfclW\":[\"Muestra el visor de JSON cuando una celda de texto sin tipar contiene un objeto o array JSON. Añade un pequeño coste de análisis por celda.\"],\"obpbdz\":[\"Archivo de configuración no encontrado (crear manualmente)\"],\"odZgfC\":[\"CLIENTES IA\"],\"ogZhXn\":[\"Elige la dirección de diseño predeterminada para los diagramas ER\"],\"ohUJJM\":[\"Plugins\"],\"ok3hJJ\":[\"Instalados\"],\"olAdaI\":[\"Filas Reales\"],\"olWzar\":[\"Forzar Cierre del Proceso\"],\"ovBPCi\":[\"Predeterminado\"],\"owzTWN\":[\"Modelos de IA actualizados desde los proveedores\"],\"oxYi6j\":[\"Ajusta el tamaño base de fuente usado en la aplicación (10-20px).\"],\"p--hsQ\":[\"Se ha perdido una conexión a la base de datos\"],\"p6NueD\":[\"NUEVA\"],\"pOYHox\":[\"Acciones\"],\"pR9bTR\":[\"Sin datos BLOB\"],\"pRDT0m\":[\"Tabla\"],\"pS8S5q\":[\"ej. usuarios, pedidos, productos\"],\"pSws_M\":[\"Nombre de Tabla\"],\"pVLbKZ\":[\"Vista creada correctamente\"],\"pWT04I\":[\"Verificando...\"],\"pZJ_6D\":[\"El nombre del índice es requerido\"],\"pddYFG\":[\"Ingresa el prompt de nombre de celda...\"],\"pnpyuD\":[\"Habilitar Registros\"],\"pqKMPv\":[\"Error al crear la tabla: \"],\"pqaP1h\":[\"Descartar\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"ej. Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"El resto sigue en solo lectura. Solo las marcadas pueden ejecutar escrituras.\"],\"qIrtcK\":[\"Actualizaciones\"],\"qOqy8G\":[\"Verificando configuración...\"],\"qWaVNs\":[\"Guardar y Reiniciar\"],\"qb3LPX\":[\"Ver Diagrama ER\"],\"qkK0vq\":[\"El nombre de la vista es requerido\"],\"qki9tG\":[\"Error\"],\"qoIir-\":[\"La URL base de tu API compatible con OpenAI. Ejemplos: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Contraer todo\"],\"r6ncaO\":[\"Cerrar pestaña\"],\"rAJlpP\":[\"Puerto del contenedor\"],\"rG3WVm\":[\"Lectura\"],\"rGRCeK\":[\"Borrar Historial de Consultas\"],\"rNIto7\":[\"El nombre del recurso es obligatorio\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exportado exitosamente\"],\"rY4sEV\":[\"Eliminar FK\"],\"rbu0nO\":[\"Gestionar Conexiones SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" conexión/es\"],\"other\":[\"#\",\" conexión/es\"]}]],\"rn2_2V\":[\"Eliminar filtro\"],\"roABNH\":[\"Sin historial de consultas\"],\"rtir7c\":[\"desconocido\"],\"ru0-2W\":[\"No hay conexiones activas\"],\"rvDPWO\":[\"Desviacion de Estimacion\"],\"rwWjWg\":[\"Notas de la Versión\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Probar Conexión\"],\"sBOaim\":[\"El archivo de configuración ha sido guardado. ¿Reiniciar ahora para aplicar los cambios?\"],\"sCyv9B\":[\"Actualizar Modelos\"],\"sSUqe4\":[\"Eliminar\"],\"sUBkgN\":[\"Generando SQL...\"],\"sZZG3d\":[\"¿Estás seguro de que deseas importar \\\"\",[\"0\"],\"\\\"?\\nEsto podría sobrescribir los datos existentes.\"],\"sbK5ck\":[\"Buscar en el historial...\"],\"sq_bS6\":[\"Al Eliminar\"],\"suW7-E\":[\"Tiempo de espera de conexión en milisegundos.\"],\"t-R8-P\":[\"Ejecucion\"],\"t1OfVY\":[[\"totalLibraries\"],\" librerías\"],\"t2TMzs\":[\"Cerrar Pestaña\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Seleccionar una tabla...\"],\"t7KRl1\":[\"Registro de cada llamada MCP y de las consultas pendientes de aprobación. Almacenado localmente.\"],\"t9NJIk\":[\"Se detectaron operaciones con mucho escaneo\"],\"tB7xof\":[\"Operaciones Temp o Sort\"],\"tBBXTO\":[\"Intervalo de Ping\"],\"tFrT3w\":[\"Agrega esto al archivo de configuración del cliente manualmente si la instalación automática falla.\"],\"tJ7UbA\":[\"analizar seleccionada\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Dividir Horizontal\"],\"tQhW-D\":[\"Configuración de Registros\"],\"tXFGEx\":[\"No hay conexiones de Kubernetes guardadas. Haz clic en \\\"Añadir\\\" para crear una.\"],\"tXLz_8\":[\"Eliminar\"],\"tXpRby\":[\"Cuadrícula de datos\"],\"tbysEk\":[\"Acciones\"],\"tdta9X\":[\"Página \",[\"0\"]],\"tfDRzk\":[\"Guardar\"],\"tfEioV\":[\"Ejecutar todas las celdas SQL de arriba a abajo\"],\"tiAIaJ\":[\"Contraseña SSH faltante. Por favor, ingrésala de nuevo.\"],\"tk22BR\":[\"Pega datos estructurados y revisa el esquema antes de importar\"],\"tst44n\":[\"Eventos\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"Archivo SQL ejecutado correctamente\"],\"u6QeR6\":[\"Reiniciar Ahora\"],\"uAQUqI\":[\"Estado\"],\"uBAxNB\":[\"Editor\"],\"uFViPK\":[\"No hay conexiones SSH disponibles\"],\"uHUuhp\":[\"Analizar esta consulta\"],\"uHfFzS\":[\"Tamaño de Fuente del Editor\"],\"uJ_3K5\":[\"¿Eliminar el notebook \\\"\",[\"0\"],\"\\\"? Esta acción no se puede deshacer.\"],\"uKaNJ3\":[\"Abrir en el editor JSON\"],\"uQBwTo\":[\"Esquemas\"],\"ub54ff\":[\"Centro de plugins\"],\"ufFyBs\":[\"Base de datos exportada correctamente\"],\"upNmR2\":[\"Abrir Barra Lateral\"],\"utMia3\":[\"Deseleccionar Todo\"],\"uyNaJg\":[\"1 elemento\"],\"v61dnS\":[\"Ingresa el nombre exacto del modelo para tu proveedor compatible con OpenAI.\"],\"v6oeyr\":[\"Instalado\"],\"v75DGg\":[\"Explorar archivo\"],\"v99dO4\":[\"Clave Primaria\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" consultas encontradas\"],\"other\":[\"#\",\" consultas encontradas\"]}]],\"vCSBPD\":[\"Agregar filtro\"],\"vH7uJj\":[\"Ordenar por…\"],\"vUOA1-\":[\"Buscar modelos...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE incluye filas reales, tiempos, bucles y contadores de buffer cuando estan disponibles.\"],\"vXIe7J\":[\"Idioma\"],\"vYf4Jm\":[\"Ingrese una función SQL completa (ej: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Preferido\"],\"vditm4\":[\"Plan de Query\"],\"vks_ls\":[\"Cerrar Otras Pestañas\"],\"vnAnIp\":[\"Modelo \",[\"0\"],\" no encontrado en \",[\"1\"],\". Puede que no funcione correctamente.\"],\"vqoN5u\":[\"Estructura\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Explorador\"],\"vujQJ5\":[\"Localización\"],\"vvJPVL\":[\"Mostrar resumen\"],\"vwI5S4\":[\"Éxito\"],\"vzH-7Z\":[\"Explicar\"],\"w7QmD_\":[\"Ingresa el prompt del sistema...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Tiempo transcurrido\"],\"wCfv2R\":[\"Agregar Conexión\"],\"wGfc86\":[\"Borrar Todo el Historial\"],\"wGwNv4\":[\"Base de datos activa\"],\"wJJ-Wy\":[\"Instalando...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers Hit\"],\"wQn-RM\":[\"Agregar Columna\"],\"wRXcR2\":[\"Usando el icono predeterminado del driver.\"],\"wTOwz-\":[\"Aplicado\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Importar desde Portapapeles\"],\"w_bY7R\":[\"Registros\"],\"wc_8bA\":[\"Pendiente\"],\"wckWOP\":[\"Gestionar\"],\"wdYcKH\":[\"Pestañas Abiertas\"],\"wja8aL\":[\"Sin nombre\"],\"wkOAzk\":[\"Ningún notebook coincide con tu búsqueda.\"],\"wp49Ao\":[\"Failed to process insertions: \"],\"wqG2hQ\":[\"Omitir (no importar)\"],\"wwrAsK\":[\"Por favor, completa todos los campos requeridos\"],\"wwu18a\":[\"Icono\"],\"x2fr_j\":[\"Grafo\"],\"xANKBj\":[\"Funciones\"],\"xBwjck\":[\"Se requiere reinicio para aplicar los cambios.\"],\"xDAtGP\":[\"Mensaje\"],\"xECY01\":[\"Procedimientos\"],\"xGPNgZ\":[\"Personalización de Prompts\"],\"xNgtS-\":[\"No se encontraron vistas\"],\"xOPa1b\":[\"El puerto debe estar entre 1 y 65535\"],\"xY9s5E\":[\"Tiempo agotado\"],\"xaVUr1\":[\"El veloz zorro marrón salta sobre el perro perezoso\"],\"xbvTzL\":[\"Ruta del Archivo\"],\"xlew5F\":[\"Limpiar\"],\"xmNyKz\":[\"Probando...\"],\"xtuh6D\":[\"Expandir Explorador\"],\"y-Zdqj\":[\"Elige un contexto...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Abrir visor JSON\"],\"yQXjG5\":[\"Deseleccionar Todo\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Ayer\"],\"ygCKqB\":[\"Detener\"],\"ykCc6r\":[\"Base de datos cambiada (celda \",[\"n\"],\")\"],\"ynVMSc\":[\"Seleccionar todas\"],\"ytdz1d\":[\"La IA quiere ejecutar una escritura en la base de datos\"],\"yyhzur\":[\"Crear Tabla\"],\"yz7wBu\":[\"Cerrar\"],\"z0VdfR\":[\"rutina\"],\"z407wX\":[\"Contraseña SSH\"],\"z5kV0h\":[\"Conexiones\"],\"zBTMzx\":[\"Vista Previa\"],\"zCaAKs\":[\"Error de Actualización\"],\"zDAakK\":[\"No se puede mostrar el diagrama sin un ID de conexión.\"],\"zGe21h\":[\"Esta clave se carga desde una variable de entorno\"],\"zGfL5t\":[\"valor\"],\"zL6-4A\":[\"No hay procesos de complementos en ejecución\"],\"zLZhCi\":[\"¡Nueva comunidad Discord!\"],\"zLlCou\":[\"Copiar nombre de columna\"],\"zNEL34\":[\"Join the Community\"],\"zNgTlV\":[\"Cerrar Pestañas a la Derecha\"],\"zQz55p\":[\"Inspeccionar estructura\"],\"zR0FfH\":[\"Exportado a \",[\"target\"]],\"zRZeOc\":[\"Buscar tablas, vistas, rutinas, triggers...\"],\"zUNMsr\":[\"Clave SSH\"],\"zXMRzb\":[\"Puerto SSH\"],\"zZgoXr\":[\"No hay tablas que coincidan\"],\"zaWbms\":[\"Revertir Cambios\"],\"zgClmU\":[\"Instalar Configuración\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Ingresar valor...\"],\"zvzN4C\":[\"Establecer como Activa\"],\"zzDlyQ\":[\"Éxito\"],\"zzMxrp\":[\"Editar config.json\"],\"zz_Wd_\":[\"Modo\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Máx. Entradas de Historial\"],\"-6AWa-\":[\"Importar conexiones\"],\"-6NyRG\":[\"Cliente\"],\"-K0AvT\":[\"Desconectar\"],\"-PLZfh\":[\"Error al actualizar los modelos\"],\"-T5W2e\":[\"Notas del Driver\"],\"-ZgeeE\":[\"Historial de ediciones\"],\"-aYrdc\":[\"La versión \",[\"0\"],\" está disponible\"],\"-fBGXl\":[\"Costo Mas Alto\"],\"-jIQDz\":[\"Contraer Celda\"],\"-u1eRo\":[\"Sin base de datos\"],\"-yoeVU\":[\"Cargando esquema...\"],\"-zy2Nq\":[\"Tipo\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID aprobación\"],\"0E5-gF\":[\"¿Estás seguro de que deseas eliminar esta conexión?\"],\"0HCubq\":[\"Expandir\"],\"0Kmdvy\":[\"Fuente Personalizada\"],\"0Nj13E\":[\"Generar SQL\"],\"0ROgz5\":[\"Ingrese JSON...\"],\"0SY9sU\":[\"No se pudo desconectar de la base de datos\"],\"0b3kL9\":[\"Selecciona una base de datos\"],\"0caMy7\":[\"Historial\"],\"0mx5ow\":[\"Consulta\"],\"0n9BtL\":[\"Vista Previa\"],\"0pHB9N\":[\"Copiar como tabla.columna\"],\"0sQzZK\":[\"Filtrar bases de datos...\"],\"0uPP9X\":[\"Nombre FK (Opcional)\"],\"0wxuek\":[\"Versión Actual\"],\"0x09Aw\":[\"Detener en error alternado\"],\"0yBP6v\":[\"Apoya el Desarrollo\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas\"],\"other\":[\"#\",\" filas\"]}]],\"0yVAoD\":[\"Contar filas\"],\"0zxJ87\":[\"No hay registros disponibles\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Editar Vista\"],\"11fGJ6\":[\"Consultas\"],\"13hIUA\":[\"Clave API de \",[\"0\"]],\"14qNWF\":[\"Seleccionar Conexión SSH\"],\"17qHRP\":[\"Nueva conexión\"],\"1Dn6bg\":[\"Importar desde Portapapeles\"],\"1Dnd0I\":[\"Cargar conteo de filas\"],\"1FjTLW\":[\"p.ej. python3\"],\"1GOvbo\":[\"Ollama conectado (\",[\"0\"],\" modelos encontrados)\"],\"1I6UoR\":[\"Vistas\"],\"1U7hS5\":[\"Long\"],\"1UTmg5\":[\"Paquete Máximo Permitido\"],\"1b7aSU\":[\"Fuente del Editor\"],\"1ekzlY\":[\"Procesos de Complementos\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Selección de Tema\"],\"1xVZkL\":[\"No se encontraron modelos\"],\"26Joci\":[[\"0\"],\" filas obtenidas\"],\"2Bf-Qe\":[\"Nueva consola\"],\"2CrSmP\":[\"Help tabularis grow\"],\"2D9F8_\":[\"Error al duplicar la conexión\"],\"2Eoi_a\":[\"Ver detalles\"],\"2F4pE5\":[\"Build y Test Rust\"],\"2Fsd9r\":[\"Este Mes\"],\"2JzKXI\":[\"Set GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Seleccionar Todo\"],\"2SO5RM\":[\"Kubernetes no está disponible para este controlador.\"],\"2Uh5GA\":[\"ecosistema Cargo\"],\"2YylFp\":[\"Nueva Consulta Visual\"],\"2luuSG\":[\"Reintentar\"],\"2wxgft\":[\"Renombrar\"],\"2yG2GC\":[\"Pausa las escrituras (o todas las consultas) y pide al usuario que apruebe antes de ejecutar.\"],\"30-b5r\":[\"Eliminar\"],\"31kwdN\":[\"Duplicar filtro\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Todas las herramientas\"],\"3Am5DS\":[\"Vista en pestañas\"],\"3FVg9_\":[\"Columna Local\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Ejecutar\"],\"3L0HCz\":[\"Ningún plugin coincide con la búsqueda.\"],\"3Nv3JV\":[\"Ejecutando consulta...\"],\"3TSz9S\":[\"Minimizar\"],\"3UW8fG\":[\"Actualizaciones gestionadas por \",[\"0\"]],\"3YvS-c\":[\"Nueva pestaña\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt Nombre de Celda Notebook\"],\"3qkggm\":[\"Pantalla Completa\"],\"3rBJ1T\":[\"Ver Esquema\"],\"3xZ-xV\":[\"Insertar marca de tiempo actual\"],\"40Gx0U\":[\"Zona Horaria\"],\"41GP4f\":[\"Elige el delimitador predeterminado utilizado al copiar o exportar filas en formato CSV.\"],\"42iaEi\":[\"PostgreSQL sin ANALYZE muestra solo estimaciones del planner.\"],\"44cXI8\":[\"Ordenar por \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gestionar Bases de Datos\"],\"4CK17g\":[\"¿Estás seguro de que deseas modificar la vista \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Selecciona al menos una base de datos\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Exportar como HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" proceso hijo\"],\"other\":[\"#\",\" procesos hijos\"]}]],\"4VyuY3\":[\"¿Estás seguro de que deseas borrar todos los registros?\"],\"4WWqS3\":[\"Expandir/contraer árbol JSON\"],\"4XAQdl\":[\"Crear Índice\"],\"4cEClj\":[\"Sesiones\"],\"4cmfYp\":[\"Duplicar Fila\"],\"4hsr6d\":[\"Crear Vista\"],\"4lIZTB\":[\"Dependencias Dev Frontend\"],\"4oYjvJ\":[\"Buscar en la consulta…\"],\"4tMxW4\":[\"Vista previa del registro relacionado\"],\"4yJcjm\":[\"Selecciona tipo...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Cerrar panel de filtros (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Punto y coma (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" evento\"],\"other\":[\"#\",\" eventos\"]}]],\"5I2fxu\":[\"/ruta/a/id_rsa\"],\"5NZpX8\":[\"Vista de lista\"],\"5To6Z6\":[\"Copiar consulta\"],\"5gqNQl\":[\"Vista de cuadrícula\"],\"5igIzr\":[\"Importación cancelada\"],\"5nTIup\":[\"Editando vista: \",[\"name\"]],\"5qIe8E\":[\"Ejecutar Todo\"],\"66bEht\":[\"Estado del Proyecto\"],\"6PIJVc\":[\"Inicio\"],\"6QvP0l\":[\"Exportar como JSON\"],\"6W41Xq\":[\"Administrador de Tareas\"],\"6WngBH\":[\"Set NULL\"],\"6YtxFj\":[\"Nombre\"],\"6_dCYd\":[\"Resumen\"],\"6dOBsk\":[\"Crear Vista\"],\"6gvoHP\":[\"Copiar mensaje de error\"],\"6oCVzX\":[\"El contexto de Kubernetes es obligatorio\"],\"6wQO0f\":[\"Mostrar Datos\"],\"6z9W13\":[\"Reiniciar\"],\"71agNy\":[\"Generar nombres para celdas sin nombre con IA\"],\"74J3FG\":[\"Versión inicial\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Got it\"],\"77nSMU\":[\"¿Borrar todo el historial de actividad IA? Esta acción es irreversible.\"],\"7ABmyQ\":[\"Reintentar\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" de \",[\"0\"],\" activos\"],\"7E864M\":[\"Tipo de Base de Datos\"],\"7FqaG1\":[\"Personaliza las instrucciones para el analisis IA de los planes EXPLAIN. Usa \",[\"LANGUAGE\"],\" para el idioma de salida.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Tipos mixtos detectados, por defecto TEXT\"],\"7RSQQd\":[\"Guardar contraseñas en el Llavero\"],\"7VpPHA\":[\"Confirmar\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fallidas\"],\"7sMeHQ\":[\"Clave\"],\"7sNhEz\":[\"Usuario\"],\"7tATh2\":[\"Ejecutar Consulta\"],\"7yb4gk\":[\"Error: \"],\"8-4V8D\":[\"Tablas\"],\"82G-l5\":[\"El Model Context Protocol (MCP) permite a los asistentes de IA (como Claude) conectarse a tus herramientas locales. Tabularis expone un servidor MCP que permite a la IA leer el esquema de tu base de datos y ejecutar consultas de forma segura.\"],\"83VjWE\":[\"Nuevo Notebook\"],\"86IgoU\":[\"Ejecutar consulta (en el editor)\"],\"86fCgf\":[\"Personaliza las instrucciones para la generación de nombres de pestañas de resultados de consulta con IA. La consulta SQL se envía como mensaje del usuario.\"],\"87a_t_\":[\"Etiqueta\"],\"87kWsr\":[\"Exportar conexiones\"],\"8CWirf\":[\"Servidor MCP\"],\"8S8aIX\":[\"Verificación de Conexión\"],\"8TMaZI\":[\"Marca de Tiempo\"],\"8Tg_JR\":[\"Personalizado\"],\"8UFKYr\":[\"Seleccionar consulta a ejecutar\"],\"8VKSGV\":[\"Generar SQL\"],\"8Wjy6z\":[\"Cerrar Pestañas a la Izquierda\"],\"8ZsakT\":[\"Contraseña\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Editor SQL\"],\"8bRgTe\":[\"Proveedor de IA no configurado. Ve a Configuracion > IA.\"],\"8c_W0h\":[\"Versiones anteriores\"],\"8guEQP\":[\"Actualizar Vistas\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN es ligero y principalmente estructural.\"],\"8q_sOc\":[\"Quitar\"],\"8t-akp\":[\"primeras \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nombre de Conexión\"],\"91gnWY\":[\"Exportar Registros\"],\"91rtHL\":[\"Crear Nueva Vista\"],\"92hf9a\":[\"Quitar\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vista actualizada correctamente\"],\"9NzDFn\":[\"Mostrar la pantalla de bienvenida al iniciar la aplicación.\"],\"9OoUS3\":[\"Crear Nueva Conexión SSH\"],\"9QGRD5\":[\"Columna destino\"],\"9QTny9\":[\"La consulta falló.\"],\"9S-fyV\":[\"Plan de ejecución previo\"],\"9SJ_Sx\":[\"Recursos del Sistema\"],\"9UQ730\":[\"Clonar\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"No hay datos en el portapapeles\"],\"9hGjL2\":[\"Crear Índice\"],\"9mMU1R\":[\"Tiempo\"],\"9mvFo_\":[\"Hora\"],\"9npOH9\":[\"Abrir archivo\"],\"9uI_rE\":[\"Deshacer\"],\"9xUjzm\":[\"Seleccionar Todo\"],\"9y_02p\":[\"Chat with the community, get help, suggest features\"],\"A1pPcI\":[\"Host SSH\"],\"A1taO8\":[\"Buscar\"],\"A6C0pv\":[\"Costo Total\"],\"A7WG0p\":[\"Plugin desactivado\"],\"A7yRz3\":[\"La definición de la vista es requerida\"],\"A9Uyp6\":[\"Error en la importación: \"],\"ABEd-z\":[\"Usa tu gestor de paquetes para actualizar Tabularis.\"],\"AMdgKV\":[\"Prompt Analisis del Plan de Ejecucion\"],\"ANSTMe\":[\"No se detectaron problemas importantes en el resumen actual del plan.\"],\"ANzIr7\":[\"Historial de Consultas\"],\"AOnaU7\":[\"omitidas\"],\"AVlZoM\":[\"Variable de Entorno\"],\"AXTVsE\":[\"Verificación completa\"],\"AXdRYR\":[\"Registros Actuales\"],\"Aa-YkQ\":[\"Exportar Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filtrar por nivel\"],\"AlPiMN\":[\"Clic para ir a la página\"],\"An-1rA\":[\"Filas devueltas\"],\"AnV8j-\":[\"Modificar Columna\"],\"AvEr_L\":[\"Nueva Consola\"],\"AvYbUL\":[\"Estrella en GitHub\"],\"Aw_eOs\":[\"Requiere Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No se encontraron resultados\"],\"B0mJGb\":[\"Salida Sin Procesar\"],\"B1c58n\":[\"Modificar Columna\"],\"B3toQF\":[\"Objetos\"],\"B5nKny\":[\"/ruta/absoluta/carpeta\"],\"B5xevr\":[\"El nombre de la conexión es obligatorio\"],\"BAVvWJ\":[\"Diagrama ER\"],\"BBtVak\":[\"Contraer Todo\"],\"BEVzjL\":[\"Importación fallida\"],\"BHATjK\":[\"Exportar conexiones\"],\"BJe2lZ\":[\"Mostrar/ocultar barra lateral\"],\"BK3WCj\":[\"Error al cargar el registro\"],\"BKbO3i\":[\"Notebook editado\"],\"BMB51y\":[\"Ejecutar en consola\"],\"BNW_Z4\":[\"ej. usuarios_activos, resumen_pedidos\"],\"BPkXj7\":[\"Crear Clave Foránea\"],\"BUO_JN\":[\"Copiar Consulta\"],\"BYkhHY\":[\"Buscar actualizaciones al inicio\"],\"BeSg6-\":[\"Recopilar registros de la aplicación en memoria para depuración\"],\"BgAyQH\":[\"Quitar ordenamiento\"],\"BinTJI\":[\"ecosistema npm\"],\"BkFson\":[\"Paginación automática\"],\"Bpglf1\":[\"Mover Arriba\"],\"BrGo6h\":[\"Buscar notebooks\"],\"BxiAN_\":[\"Eliminar Consulta\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dependencias Frontend\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Sin filtros —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Descargando...\"],\"CUxwxn\":[\"Mostrar Todas las Tablas\"],\"CWMXbw\":[\"detendrá forzosamente su proceso. Todas las conexiones de base de datos activas que usen este complemento dejarán de funcionar hasta que se reinicie el complemento.\"],\"CZt6BX\":[\"CONFIGURACIÓN MANUAL\"],\"Ca8ixZ\":[\"Eliminar\"],\"CbJBQS\":[\"Error en la actualización: \"],\"Cdz-YU\":[\"Vista apilada\"],\"CpeQf9\":[\"Ciclos\"],\"D2wXBw\":[\"Auto Incremento\"],\"D6Ql0c\":[\"Selecciona el modelo a utilizar para la generación y explicación.\"],\"DB8zMK\":[\"Aplicar\"],\"DDXf5E\":[\"Funciones SQL\"],\"DEwnwi\":[\"Eliminar\"],\"DNTvdl\":[\"Abrir en el Editor\"],\"DPc2P9\":[\"Eliminar Celda\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Altura de Línea\"],\"Dd7YLj\":[\"Maybe later\"],\"Deej3j\":[\"JSON no válido\"],\"DfKhk_\":[\"Actualizar\"],\"DiRiTz\":[\"Abrir página del paquete\"],\"DlRHAD\":[\"Ejecutando EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" error\"],\"other\":[\"#\",\" errores\"]}]],\"Dvdihe\":[\"En \",[\"0\"],\" — revisa y decide antes de ejecutar.\"],\"DzFLzw\":[\"SÍ\"],\"E-JUtQ\":[\"Puerta de aprobación\"],\"E0kcnZ\":[\"General\"],\"E2mje_\":[\"Seleccionar consulta a analizar\"],\"EDieyg\":[\"¿Estás seguro de que deseas eliminar esta conexión SSH?\"],\"EHZxPj\":[\"Expandir\"],\"EL4oDO\":[\"Nueva Versión Disponible\"],\"EPi4gT\":[\"Ordenar por \",[\"field\"]],\"EWPtMO\":[\"Código\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Desconocido\"],\"EhADgB\":[\"Eliminar Columna\"],\"EkH9pt\":[\"Update\"],\"Ekblrc\":[\"Estás actualizado\"],\"Em6JFd\":[\"Contar Filas\"],\"EnGiqG\":[[\"0\"],\" elementos\"],\"Ew1n5z\":[\"Buscar plugins…\"],\"F18WP3\":[\"Parámetros\"],\"F3uc1x\":[\"El archivo exportado contendrá tus contraseñas de base de datos y SSH en texto plano. Guárdalo de forma segura.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" filas\"],\"other\":[\"#\",\" filas\"]}]],\"F6pfE9\":[\"Activa\"],\"F8tXg7\":[\"Vista Previa de Datos\"],\"F9-6yK\":[\"Formato de copia predeterminado\"],\"F9lxfG\":[\"Eliminar\"],\"F9nsa2\":[\"El archivo de historial estaba corrupto y se ha movido a un respaldo. Las nuevas consultas se registrarán con normalidad. Archivo de respaldo:\"],\"FF_oap\":[\"Predeterminado\"],\"FK8rlP\":[\"No hay conexiones SSH configuradas\"],\"FMRcH8\":[\"Primera fila como encabezado\"],\"FNvDMc\":[\"Esta Semana\"],\"FQe1FI\":[\"Filas Est.\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operacion\"],\"Fa_cky\":[\"Esquema: \",[\"tableName\"]],\"FpEL5o\":[\"Elige un tema independiente para el editor SQL, o mantenlo sincronizado con el tema de la app.\"],\"FsvZQL\":[\"Celda \",[\"n\"],\" editada\"],\"FtwKL9\":[\"Cambiar pestaña\"],\"FznI3z\":[\"¿Eliminar la clave foránea \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Error en la vista previa: \"],\"G8Q5Zq\":[\"El namespace es obligatorio\"],\"GAohqx\":[\"Eliminar columna\"],\"GJR99u\":[\"Error al eliminar la columna: \"],\"GKfzzM\":[\"Elige una conexión...\"],\"GS-Mus\":[\"Exportar\"],\"GUaLUq\":[\"Error al cargar el esquema: \"],\"GXP-Iw\":[\"Agregar Celda SQL\"],\"Gj1mLb\":[\"Celdas reordenadas\"],\"GlbqG2\":[\"Restablecer al valor predeterminado\"],\"Gq1YzP\":[\"Eventos\"],\"Gs5AlY\":[\"Abierta\"],\"GtmO8_\":[\"desde\"],\"GxkJXS\":[\"Subiendo...\"],\"H-o4D2\":[\"Crear nueva columna\"],\"H2B-KW\":[\"Elige el formato predeterminado al copiar filas con Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Rehacer\"],\"H7mlCc\":[\"/ruta/absoluta/db.sqlite\"],\"H86f9p\":[\"Contraer\"],\"H9P8CD\":[\"agregar el primer filtro\"],\"HAQlGl\":[\"Actividad IA\"],\"HKNZrs\":[\"Cond. Indice\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Eliminar \",\"#\",\" filas\"],\"other\":[\"Eliminar \",\"#\",\" filas\"]}]],\"HPuCiP\":[\"Ruta de la Carpeta\"],\"HUs1R3\":[\"No hay pestañas abiertas para esta conexión.\"],\"HV4Isp\":[\"Ingresa la contraseña SSH\"],\"HVC8Hh\":[\"Copiado al portapapeles\"],\"HWEpq8\":[\"Escritura Disco/s\"],\"HY4nP5\":[\"En línea\"],\"HcmoWv\":[\"Error al guardar la vista: \"],\"He8v1Y\":[\"Deseleccionar de Aplicar todos\"],\"HehHP1\":[\"Diseño Predeterminado\"],\"HilYn4\":[\"Este notebook está vacío. Agrega una celda para comenzar.\"],\"HjxVK_\":[\"Prueba rápida de conexión\"],\"HmMnRx\":[\"Modo WKT\"],\"HoKCiI\":[\"La aplicación se reiniciará automáticamente después de la instalación\"],\"HpK_8d\":[\"Recargar\"],\"Hpi4Jm\":[\"Únete ahora\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configurar SSH en Línea\"],\"I5VBsr\":[\"Igual que la app\"],\"I8yrPb\":[\"Reemplazar tabla\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Recordar Después\"],\"I99Miw\":[\"Costo\"],\"IETZIR\":[\"Editar nombre de celda\"],\"IG9wzA\":[\"Error al insertar la fila: \"],\"ILleOG\":[\"El tipo de recurso debe ser \\\"service\\\" o \\\"pod\\\"\"],\"IQ3gAw\":[\"Subir Archivo\"],\"IUwGEM\":[\"Guardar Cambios\"],\"IUwmLq\":[\"Dependencias directas declaradas en package.json y src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Librerías Open Source\"],\"I_43p6\":[\"Seguridad\"],\"Iaizf4\":[\"Apariencia\"],\"Il3FBB\":[\"Panel de filtros estructurados\"],\"IniZRK\":[\"Descarga no disponible - solo vista previa cargada\"],\"Isaozb\":[\"Revisar y ajustar\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Las consultas activas y las conexiones a través de este complemento serán interrumpidas.\"],\"J6v1s_\":[\"Modelo Predeterminado\"],\"JE-DVk\":[\"Intérprete\"],\"JEGlfK\":[\"Inicio\"],\"JKDPqP\":[\"Selecciona primero un contexto\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Usar Túnel SSH\"],\"JRz8tw\":[\"MySQL y MariaDB exponen metricas reales solo en variantes compatibles de EXPLAIN ANALYZE o ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP o SVG · máx. 512 KB\"],\"JY5Oyv\":[\"Base de datos\"],\"JlFRIB\":[\"Zona horaria de sesión enviada a MySQL después de conectar.\"],\"JrOEip\":[\"Vista previa\"],\"JsY1p5\":[\"Denegada\"],\"K3H9p5\":[\"Limpiar\"],\"K5Dgu_\":[\"Bases de Datos\"],\"K8IGKf\":[\"Tipo de Autenticación\"],\"KAYNSW\":[\"Cuántos registros mantener en memoria (1-10000)\"],\"KHTGbr\":[\"EXPLAIN previo\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copiar como `columna`\"],\"KM5Kc8\":[\"Se debe seleccionar al menos una columna\"],\"KSCnVQ\":[\"Tipo\"],\"KUjOb9\":[\"en ejecución\"],\"KXBdwy\":[\"Actualizar Rutinas\"],\"KXNyX7\":[\"Set DEFAULT\"],\"Kd70-v\":[\"Importar desde Portapapeles...\"],\"KhI4oS\":[\"Abrir fila referenciada en \",[\"0\"]],\"KhgrNu\":[\"Integración del Servidor MCP\"],\"KirERL\":[\"Tiempo agotado\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Error al eliminar el índice: \"],\"KzeARD\":[\"Error al eliminar la tabla: \"],\"L-rMC9\":[\"Restablecer predeterminado\"],\"L3HXkQ\":[\"Bug Fixes\"],\"LCZ7Dy\":[\"Copiar Nombre\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"índices\"],\"LMeAoR\":[\"filas\"],\"LPCdc-\":[\"Prompt Nombre de Pestaña de Consulta\"],\"LPFmga\":[\"Seleccionar para Aplicar todos\"],\"LYzbQ2\":[\"Herramienta\"],\"Lbis_V\":[\"Navegador rápido\"],\"Lcpbe2\":[\"No se pudo lanzar el proceso del plugin. Revisa los detalles del error.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN solo es compatible con instrucciones DML (SELECT, INSERT, UPDATE, DELETE). Las instrucciones DDL como CREATE, DROP o ALTER no se pueden analizar.\"],\"LnT0hQ\":[\"Agregar Columna\"],\"LvutiO\":[\"Sugerir con IA\"],\"M-rHQO\":[\"Salir de Pantalla Completa\"],\"M0XJba\":[\"¿Estás seguro de que quieres borrar todo el historial de consultas para esta conexión?\"],\"M1co_O\":[\"Configurado\"],\"M73whl\":[\"Contexto\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Emoji seleccionado\"],\"MWB7fV\":[\"Mostrar Todo\"],\"MXdOwj\":[\"Separar Conexiones\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Selecciona conexión de K8s\"],\"Mc1tjS\":[\"Activa ANALYZE para inspeccionar filas reales, tiempos, bucles y buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" filas más\"],\"Mp0jQ_\":[\"Este driver solo soporta claves primarias en la creación de la tabla\"],\"MqpZwN\":[\"Proceso Tabularis\"],\"MxIx43\":[\"↑↓ para navegar, Enter para abrir\"],\"MygtgQ\":[\"Agregar Celda Markdown\"],\"N40H-G\":[\"Todos\"],\"N5UQxq\":[\"Ollama no detectado en el puerto \",[\"0\"],\". ¿Está en ejecución?\"],\"N6GBcC\":[\"Confirmar eliminación\"],\"N6aqHp\":[\"Consultas ejecutadas\"],\"N9_S15\":[\"Se creará una nueva tabla\"],\"NBdMa1\":[\"Paso Mas Lento\"],\"NC2AI2\":[\"Longitud\"],\"NCzNnx\":[\"Orden ascendente\"],\"NT4Ubs\":[\"Eliminar clave personalizada y volver a la variable de entorno (si existe)\"],\"NUjrCO\":[\"Ningun favorito coincide con la busqueda\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Total árbol: \",[\"0\"]],\"Nc2VQn\":[\"Agregar a existente\"],\"NgFERn\":[\"Agregar a Favoritos\"],\"NktMHG\":[\"Nombre de la base de datos\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Probar\"],\"Nq5QTk\":[\"analizar N-esima\"],\"O2STgu\":[\"Error en la exportación: \"],\"O8SV8O\":[\"Descargando...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Ejecutar Todas las Celdas\"],\"OGWdBg\":[\"Nombre de Vista\"],\"OHqT6w\":[\"Pulsa la combinación de teclas...\"],\"OXJsaG\":[\"Nombre de parámetro no válido\"],\"OfhWJH\":[\"Restablecer\"],\"OlAl5i\":[\"Expandir todo\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Join Discord\"],\"P1YGsb\":[\"Generación SQL\"],\"P2m1xb\":[\"Detener en Error\"],\"P3Qlys\":[\"Sin ID de Conexión\"],\"P6Y3Yf\":[\"Ejecuta este comando en tu terminal y reinicia Claude Code.\"],\"PCdj-c\":[\"Deseleccionar todas\"],\"PMnFt9\":[\"Lectura Disco/s\"],\"PQU2Va\":[\"Aceptar Sugerencia con Intro\"],\"PRnH8G\":[\"de \",[\"0\"]],\"PY8UF3\":[\"Paralelo alternado (celda \",[\"n\"],\")\"],\"PiH3UR\":[\"¡Copiado!\"],\"Pia95d\":[\"El nombre de la columna es requerido\"],\"PrElXQ\":[\"Actualizar\"],\"PrixCC\":[\"Las filas se añadirán a una tabla existente\"],\"Pujgbb\":[\"Configurar destino\"],\"Pw_eQV\":[\"El Plugin no se pudo iniciar\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"No hay consultas guardadas\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Sin procesos hijos\"],\"QCxMC0\":[\"Buscar automáticamente nuevas versiones al iniciar la aplicación\"],\"QEazml\":[\"Eliminar seleccionadas\"],\"QHcLEN\":[\"Conectado\"],\"QLHHFO\":[\"Modo solo lectura\"],\"QOvAW3\":[\"New Features\"],\"QULGRi\":[\"No se encontraron consultas válidas\"],\"QZwllF\":[\"Explorar...\"],\"QbkSr_\":[\"EXPLAIN no disponible para esta consulta.\"],\"QeHFYZ\":[\"EXPLAIN falló: \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"Read more\"],\"Qu4Hog\":[\"Notebook importado exitosamente\"],\"R-A2Vd\":[\"No hay datos para mostrar\"],\"R0Hkb2\":[[\"0\"],\" base(s) de datos seleccionada(s)\"],\"R1nHhB\":[\"Ya existe\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convertir a Consola\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configuración\"],\"RF-HyV\":[\"Elige tu idioma preferido. 'Auto' usará el idioma del sistema.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copiar nombre\"],\"RI-HZc\":[\"Ingresa la Clave de \",[\"0\"]],\"RJrE17\":[\"¿Estás seguro de que deseas eliminar la vista \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"A star helps others discover the project\"],\"Rb3Tdm\":[\"Nombre del notebook\"],\"RcbKJ3\":[\"Al Actualizar\"],\"RkefFq\":[\"Ejecuta un EXPLAIN antes de mostrar el modal para que el usuario vea el plan.\"],\"RnF_hl\":[\"Cargando registro de plugins...\"],\"Rns7_C\":[\"Esta acción no se puede deshacer inmediatamente\"],\"RoKRqW\":[\"Plugins Disponibles\"],\"RphpKk\":[\"Apariencia\"],\"Rt8sHM\":[\"Se detecto trabajo temporal o de ordenacion\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Habilitados\"],\"S1veKH\":[\"Revert Selected\"],\"S5zeZU\":[\"Vista Previa\"],\"S8Yqbl\":[\"Insertar\"],\"SDND4q\":[\"No configurado\"],\"SJRy3D\":[\"(Auto-generado)\"],\"SSwIjo\":[\"Set EMPTY\"],\"SgvA_r\":[\"Press Run (Ctrl/Command+F5) to load table data\"],\"SlfejT\":[\"Error\"],\"SoATkx\":[\"Copiar Celda\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL del Endpoint\"],\"T7w5CQ\":[\"Failed to create new row: \"],\"T9947j\":[\"Valor (ej. 'texto' o 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Cambiar a Diseño Vertical\"],\"TK5oex\":[\"Guardar Prompt\"],\"TKQ7K-\":[\"Instalar\"],\"TKZreP\":[\"Requerido\"],\"TMLAx2\":[\"Requerido\"],\"TO08JI\":[\"claves foráneas\"],\"TVKqvO\":[\"Editar Fila\"],\"TYSdQ3\":[\"Ejecutar consulta SELECT\"],\"TfDFHS\":[\"Ajusta las líneas largas en el editor en vez de desplazarse horizontalmente.\"],\"Tibfjs\":[\"No hay conexiones guardadas — crea una abajo\"],\"Tj36Dr\":[\"Restablecer Predeterminado\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Bloquear consulta\"],\"TpwXyg\":[\"Si falta el tiempo, es probable que el servidor devolviera un plan solo estimado.\"],\"Tw2M1h\":[\"Instalación fallida\"],\"Ty-rm9\":[\"Conexiones SSH\"],\"Tz0i8g\":[\"Configuración\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Conexiones de Kubernetes\"],\"U4uzyV\":[\"What's New\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Detener la ejecución cuando una celda falla\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" en \",[\"1\"],\" — revisa y decide antes de ejecutar.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"¡Configuración instalada correctamente para \",[\"clientName\"],\"! Reinicia la app para aplicar.\"],\"URmyfc\":[\"Detalles\"],\"UWQBvp\":[\"Generar plantillas SQL\"],\"UawTKZ\":[\"Opcional. Especifica el ejecutable para iniciar este plugin (p.ej. python3 en macOS/Linux, python o ruta completa en Windows). Deja en blanco para usar el valor predeterminado.\"],\"Ub8sf5\":[\"SQLite no soporta la eliminación de FKs mediante ALTER TABLE.\"],\"UbbJ8j\":[\"No se encontraron opciones\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"Estas conexiones rechazarán escrituras desde MCP. Las otras se comportan normalmente.\"],\"UnQNah\":[\"¿Estás seguro de que deseas eliminar la columna \\\"\",[\"0\"],\"\\\" de la tabla \\\"\",[\"tableName\"],\"\\\"?\\n\\nADVERTENCIA: Esto eliminará permanentemente todos los datos de esta columna. Esta acción no se puede deshacer.\"],\"UncTTh\":[\"Suma de RSS del árbol de procesos — puede sobreestimar la memoria compartida\"],\"UpjgFm\":[\"Parámetros cambiados\"],\"UsAnu1\":[\"ANALYZE ejecuta la consulta. Usar con precaucion en instrucciones que modifican datos.\"],\"UxKoFf\":[\"Navegación\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tamaño de Tab\"],\"UzWGWO\":[\"Cambiar a entrada SQL WHERE\"],\"V-chk5\":[\"Frecuencia con la que se verifica si las conexiones activas siguen disponibles. Establece 0 para desactivar.\"],\"V-pw1j\":[\"Nombre de tabla\"],\"V2T0Uw\":[\"Aún no hay notebooks guardados.\"],\"V3aNwx\":[\"Editor de Datos\"],\"VGYp2r\":[\"Aplicar a todo\"],\"VH8S7x\":[\"Columna del portapapeles\"],\"VIAEcS\":[\"Error al cargar las bases de datos. Verifica tus credenciales.\"],\"VKdztF\":[\"Agregar filas\"],\"VLiHXI\":[\"Datos Analyze\"],\"VMbmXc\":[\"¿Estás seguro de que deseas eliminar \\\"\",[\"pluginName\"],\"\\\"? Los archivos del plugin serán eliminados.\"],\"VO3weF\":[\"Ningún archivo cargado\"],\"VOZlKc\":[\"Importar Base de Datos\"],\"VPzsIz\":[\"Generando nombre...\"],\"VUul0v\":[\"Cerrar\"],\"VW0GVQ\":[\"Haz clic en otro emoji abajo para cambiarlo.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Todas las consultas\"],\"Vi2Pqx\":[\"por\"],\"Vl2zn2\":[\"detenido\"],\"Vo4uBA\":[\"Ocurrió un error al instalar el plugin. Consulta los detalles a continuación.\"],\"VqqyOs\":[\"Ejecuta una consulta para ver resultados\"],\"VzhDFh\":[\"Bloquea cualquier sentencia que no sea SELECT vía MCP, salvo las conexiones autorizadas abajo.\"],\"W3uwpT\":[\"Cerrar Todas las Pestañas\"],\"W4MKLh\":[\"ej. Parece arriesgada en prod, confirma…\"],\"W60eXm\":[\"Tabla\"],\"WA8RND\":[\"¿Estás seguro de que deseas eliminar la tabla \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Eliminar Tabla\"],\"WLnvCZ\":[\"Ingresa el nombre de usuario\"],\"WM-__8\":[\"Buscar conexiones...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas importadas en \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" filas importadas en \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"¿Estás seguro de que quieres eliminar la consulta \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"exitosas\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"General\"],\"WmPpB1\":[\"Cargando el plan de ejecución…\"],\"Wu7cK0\":[\"No se encontraron bases de datos\"],\"WvoUQF\":[\"Celda \",[\"n\"],\" eliminada\"],\"Ww3pDD\":[\"COMANDO MANUAL\"],\"X-20AU\":[\"Ingresa el prompt de nombre de pestaña...\"],\"X-U6_w\":[\"Familia de Fuente\"],\"X5fs0g\":[\"Crea tu primera conexión para empezar.\"],\"X7Ayjp\":[\"Contraseña guardada en el llavero del sistema\"],\"X9kySA\":[\"Favoritos\"],\"XJOV1Y\":[\"Actividad\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Explicación de Consultas\"],\"XVF2Pf\":[\"Editar Esquemas\"],\"XW6OYF\":[\"Este plugin puede requerir un intérprete (p.ej. Python). Usa Configuración del Plugin para establecer la ruta del intérprete.\"],\"XZB6Xr\":[\"Máximo de Entradas de Registro\"],\"Xcffv2\":[\"Mostrar los botones de Asistente IA y Explicar en el editor\"],\"XeqTSh\":[\"Tipo Join\"],\"XmJfZT\":[\"nombre\"],\"XoQfG1\":[\"Usuario SSH\"],\"XwI0Vw\":[\"Auto (Sistema)\"],\"XyDlLX\":[\"Nombre del Índice\"],\"Y2P2aK\":[\"Selecciona los esquemas a cargar:\"],\"Y8HYw2\":[\"valor\"],\"Y8zX3R\":[\"Insertar en el Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Buscar...\"],\"YWlnMZ\":[\"Puerto de Ollama\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Explora e instala plugins del registro.\"],\"Y_3yKT\":[\"Abrir en Nueva Pestaña\"],\"YiAQ_Q\":[\"Actualizar Tablas\"],\"Ysjr9Y\":[\"Vista Previa SQL\"],\"YswNf7\":[\"Todos los niveles\"],\"YtNwr6\":[\"Número máximo de entradas del historial de consultas almacenadas por conexión.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Cargando...\"],\"Z7ZXbT\":[\"Aprobar\"],\"Z8JpBH\":[\"Exportar como Notebook\"],\"Z8fBIc\":[\"Las filas reales superan la estimacion\"],\"ZC2VJP\":[\"Ejecutar\"],\"ZCIS4k\":[\"sin filtros activos\"],\"ZF1_UT\":[\"Modo SSL\"],\"ZGjBPa\":[\"Limpiar Registros\"],\"ZHQTlM\":[\"Importando desde\"],\"ZIFDoJ\":[\"Selecciona al menos Estructura o Datos\"],\"ZIZA6o\":[\"Editar antes de aprobar\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avisos de análisis\"],\"other\":[\"#\",\" avisos de análisis\"]}]],\"ZVn8p2\":[\"Muestra los números de línea en el margen del editor.\"],\"ZYnwzF\":[\"Desconectado\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Crear Clave Foránea\"],\"Zf7LHg\":[\"No se encontraron contextos (¿está kubectl instalado?)\"],\"Zfotp5\":[\"Las grandes diferencias entre estimacion y realidad suelen indicar estadisticas desactualizadas o predicados dificiles de modelar.\"],\"ZiFjhs\":[\"Select *\"],\"ZpzHz0\":[\"No se pudieron cargar los esquemas\"],\"ZqXGPF\":[\"Error al eliminar la vista: \"],\"ZuL73E\":[\"Crear una nueva vista de base de datos\"],\"_-bi4r\":[\"Tabla Referenciada\"],\"_AEYGI\":[\"Sin historial de ejecución\"],\"_FdpZc\":[\"Error al cargar la definición de la vista: \"],\"_FxSdi\":[\"Consulta las dependencias open source directas usadas por la app, el backend y la toolchain.\"],\"_JyTG8\":[\"Ingresa el prompt de explicación...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"filas\"],\"_TK1zF\":[\"Conexión guardada\"],\"_bJFBE\":[\"Tiempo de Espera de Conexión\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Árbol\"],\"_dqduX\":[\"Página siguiente\"],\"_fwE6J\":[\"Anteriores\"],\"_n04sB\":[\"Terminar\"],\"_otxbQ\":[\"Archivo de clave\"],\"_pezIT\":[\"Error al conectar a \",[\"0\"],\". Verifica tu configuración o asegúrate de que la base de datos esté en ejecución.\"],\"_srfkj\":[\"Clave personalizada eliminada correctamente\"],\"_t6aFo\":[\"MySQL y MariaDB pueden volver a EXPLAIN FORMAT=JSON o al EXPLAIN tabular segun la version del servidor.\"],\"_xTbaM\":[\"columnas\"],\"_yxaaL\":[\"Índice Único\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.\"],\"a9CASo\":[\"SQLite solo soporta renombrar columnas. Otras modificaciones requieren recrear la tabla manualmente.\"],\"aAIQg2\":[\"Apariencia\"],\"aAURrV\":[\"Instalado\"],\"aC_vCa\":[\"Generar nombre con IA\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Selecciona un nodo para ver detalles\"],\"aHKcKc\":[\"Página anterior\"],\"aI-5wG\":[\"Verificar CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valor Predeterminado\"],\"aScJP1\":[\"Ejecutar esta consulta\"],\"aVNbN8\":[\"Condiciones de filtro\"],\"aWhdMQ\":[\"Usar Conexión SSH Existente\"],\"aXYd8V\":[\"Tiempo de espera\"],\"aX_S_r\":[\"Página \",[\"0\"],\" de \",[\"totalPages\"]],\"agZcf8\":[\"SQL Generado: \",[\"tableName\"]],\"ajqPzi\":[\"Select [campos]\"],\"alplHn\":[\"Analizando plan de ejecucion con IA...\"],\"anBcU3\":[\"Si te gusta tabularis y quieres ver más funcionalidades, considera apoyar el proyecto contribuyendo código, reportando errores o dando una estrella en GitHub.\"],\"arHmj2\":[\"¿Estás seguro de que quieres eliminar esta consulta del historial?\"],\"arKcqW\":[\"Los servidores mas antiguos pueden volver a planes estimados con menos metricas.\"],\"arcpYe\":[\"Aprobación requerida\"],\"aurEkh\":[\"Cargando procesos…\"],\"avtdsd\":[\"Modo SQL\"],\"az8lvo\":[\"Desactivada\"],\"b1Ah3z\":[\"Enfocado en\"],\"b392Dr\":[\"Expandir Todo\"],\"b5S_PU\":[\"Nombre de la Base de Datos\"],\"bAvovP\":[\"Mover Abajo\"],\"bH3JqY\":[\"No se encontraron tablas\"],\"bP5JOn\":[\"Ajuste de Línea\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Hacer todas las consultas MCP de solo lectura\"],\"bmca5u\":[\"Solo escrituras\"],\"bpCiBU\":[\"Permitir escrituras desde MCP\"],\"bqnhqW\":[\"La estimacion supera las filas reales\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Error\"],\"bw22Gk\":[\"Esquema de Columnas\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Puntos Criticos\"],\"cFCKYZ\":[\"Denegar\"],\"cFGrCP\":[\"tabla\"],\"cGeFup\":[\"Tamaño de Fuente\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Enfocar en Tabla\"],\"cM9NHc\":[\"Degradar a\"],\"cO9-2L\":[\"Desactivado\"],\"cSev-j\":[\"Filtros\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importar \",\"#\",\" filas\"],\"other\":[\"Importar \",\"#\",\" filas\"]}]],\"c_xoSn\":[\"Celda \",[\"n\"],\" renombrada\"],\"cd0XEW\":[\"Guardar Consulta\"],\"cnGeoo\":[\"Delete\"],\"cwfPLH\":[\"Grupo Dividido\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" sentencias\"],\"d34vwG\":[\"Cargar Bases de Datos\"],\"d6ynQ7\":[\"Orden descendente\"],\"d8_6_v\":[\"cancelar\"],\"d8wc1_\":[\"Valores de muestra\"],\"dBXoCS\":[\"Se detectó una variable de entorno, pero puedes sobrescribirla estableciendo una clave arriba.\"],\"dD7NPy\":[\"Esquema\"],\"dEgA5A\":[\"Cancelar\"],\"dMtLDE\":[\"hasta\"],\"dPJVhW\":[\"Instalación Fallida\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" sesión\"],\"other\":[\"#\",\" sesiones\"]}]],\"dTUzKm\":[\"Ejecutar seleccionadas (\",[\"0\"],\")\"],\"dU_iQN\":[\"Ninguna sesión coincide con los filtros.\"],\"dUh9QW\":[\"Planificacion\"],\"dVoir2\":[\"Celda Markdown \",[\"n\"],\" añadida\"],\"dZ0d2O\":[\"Selecciona al menos una tabla\"],\"dhi13U\":[\"Elegir imagen…\"],\"dli1JX\":[\"Enviar Cambios\"],\"dmYV6f\":[\"Rutinas\"],\"dohZCo\":[\"Instrucciones para la generación de SQL con IA. Usa \",[\"SCHEMA\"],\" como marcador para la estructura de la base de datos.\"],\"dtxpK2\":[\"Analizar\"],\"dwW9nJ\":[\"Mostrar Números de Línea\"],\"dwWVw_\":[\"Mostrar pantalla de bienvenida\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" pestaña\"],\"other\":[\"#\",\" pestañas\"]}]],\"dxxY9r\":[\"Si existe\"],\"dyN4j9\":[\"Haz clic en 'Ejecutar Vista Previa' para ver resultados\"],\"e07Iz5\":[\"Abrir Administrador de Tareas\"],\"e0NzXu\":[\"Este proyecto es un Work In Progress (WIP). Las funciones principales son estables, pero tenemos grandes planes.\"],\"e1UKxf\":[\"Guardar esta consulta\"],\"e34gdU\":[\"Cuánto espera el subproceso MCP la decisión del usuario antes de fallar.\"],\"e62LQd\":[\"Forzar Cierre\"],\"e6QZsM\":[\"Tema del Editor\"],\"e8CirT\":[\"Ejecutar consulta\"],\"eD2kUP\":[\"Buffers Leidos\"],\"eE0JZ4\":[\"Versión\"],\"eIDch7\":[\"Ingresa el prompt de analisis del plan de ejecucion...\"],\"eIVolo\":[\"Disco L/E\"],\"eJOEBy\":[\"Exportando...\"],\"eKHY3W\":[\"Configuración del Plugin\"],\"eMb6Ub\":[\"Elige un recurso...\"],\"ePK91l\":[\"Editar\"],\"eXweu6\":[\"Expandir Celda\"],\"ecNsTE\":[\"Ninguna consulta coincide con la busqueda\"],\"ecUA8p\":[\"Hoy\"],\"ecpIZP\":[\"Ingresa la frase de paso si la clave está cifrada\"],\"ejmeDY\":[\"Instalados\"],\"esl-Tv\":[\"Tipo de recurso\"],\"exyUec\":[\"Conexión\"],\"f2AJjl\":[\"Eliminar Fila\"],\"f4pD-j\":[\"La prueba de conexión falló\"],\"f7sXvi\":[\"Ingresa la contraseña\"],\"fAsxc0\":[\"Escaneos Secuenciales\"],\"fIeFs0\":[\"Seleccionar Valor...\"],\"fJm92A\":[\"Selecciona un archivo con un plan EXPLAIN (formato JSON o texto de PostgreSQL) para visualizarlo.\"],\"fOuPPd\":[\"Complemento\"],\"fXVIZq\":[\"Valores\"],\"f_b1TA\":[\"Historial de Ejecución\"],\"fghnqP\":[\"Cambiar a conexión 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Coma (,)\"],\"fp711N\":[\"Bloqueada (solo lectura)\"],\"fpzyLj\":[\"Página \",[\"0\"],\" de \",[\"1\"]],\"fuA6oy\":[\"Tiempo de Espera del Socket\"],\"fvImQM\":[[\"0\"],\" seleccionadas\"],\"fwr_nh\":[\"Instala extensiones, gestiona drivers de plugins y mantén bajo control los ajustes de ejecución.\"],\"g0ZzK4\":[\"JSON válido\"],\"g11hAR\":[\"Nueva Fila\"],\"g8VcMm\":[\"Mi clúster de K8s\"],\"gCFR_O\":[\"Ejecución Paralela (Ejecutar Todo)\"],\"gEjU98\":[\"Abrir conexiones\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Se requiere al menos una columna\"],\"gSuQrG\":[\"Ninguna conexión coincide con \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Reejecutar consulta\"],\"gZWMnn\":[\"Analisis IA\"],\"ghYd73\":[\"Elegir destino...\"],\"giAqEC\":[\"Crear Nueva Tabla\"],\"gnQS8X\":[\"Tamaño máximo de paquete usado por el conector MySQL.\"],\"gqV5VL\":[\"Integrado, no personalizable\"],\"gww_XE\":[\"Columna Referenciada\"],\"gxXPJ9\":[\"Configurar Intérprete\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximizar\"],\"h-XNc9\":[\"Delimitador CSV\"],\"h-kNAk\":[\"ej. datos_ventas\"],\"h3Z_aK\":[\"Escribe Markdown aquí...\"],\"h7MgpO\":[\"Atajos de teclado\"],\"h7peZQ\":[\"Permitir\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" proceso del sistema en ejecución\"],\"other\":[\"#\",\" procesos del sistema en ejecución\"]}]],\"hEZrFh\":[\"Ejecutar Archivo SQL...\"],\"hEipgW\":[\"Buscar Actualizaciones Ahora\"],\"hG89Ed\":[\"Imagen\"],\"hIHcBE\":[\"Exportar como CSV\"],\"hItdtk\":[\"Explorar carpeta\"],\"hXFVjo\":[\"El nombre de la tabla es requerido\"],\"hZ6znB\":[\"Puerto\"],\"h_huI6\":[\"Reejecutar\"],\"hbz1rh\":[\"claves\"],\"hdsaJo\":[\"Importando...\"],\"he3ygx\":[\"Copiar\"],\"hfGimp\":[\"Elige un namespace...\"],\"hjjSEi\":[\"Conexiones de solo lectura\"],\"hjwN_s\":[\"Nombre del recurso\"],\"hlF1mD\":[\"Copiar selección\"],\"hnboBb\":[\"Analisis IA del Plan de Ejecucion\"],\"hnvu2p\":[\"Detalles del Error\"],\"hq4-D2\":[\"La clave API se almacena de forma segura en el llavero del sistema. Establecer una clave aquí sobrescribe la variable de entorno.\"],\"hqjXdn\":[\"Error al eliminar la conexión SSH\"],\"hqofAK\":[\"Copiar SQL\"],\"hy6L14\":[\"Ver en GitHub\"],\"hyjACX\":[\"Celdas contraídas/expandidas\"],\"hz1b5W\":[\"No se encontraron elementos coincidentes\"],\"i1vAVM\":[\"Crear nueva tabla\"],\"i3S5T3\":[\"Buscar en favoritos...\"],\"i4_LY_\":[\"Escritura\"],\"i5HBWh\":[\"Historial de consultas restablecido\"],\"i5zCt4\":[\"Tabla\"],\"iAVlge\":[\"Personaliza las instrucciones para la generación de nombres de celda en notebooks con IA. El contenido de la celda (SQL o Markdown) se envía como mensaje del usuario.\"],\"iE1yAB\":[\"Filtrar tablas...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Conectar\"],\"iSryJ2\":[\"Mi Servidor SSH\"],\"iT7UeX\":[\"Agregar Índice\"],\"iUWwuR\":[\"Descargar e Instalar\"],\"ia7i08\":[\"Selecciona primero contexto/namespace/tipo\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Guardado\"],\"igcsfY\":[\"No hay plugins disponibles en el registro.\"],\"ij-Elv\":[\"Vista previa de imagen\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" consultas analizables encontradas\"],\"other\":[\"#\",\" consultas analizables encontradas\"]}]],\"ioL38P\":[\"Monitoriza los procesos de complementos, CPU, RAM y uso de disco en tiempo real\"],\"ixlL_e\":[\"Archivo de Clave SSH (Opcional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Selecciona un modelo\"],\"j3gyYH\":[\"Aplicar todos\"],\"j5CWO4\":[\"Actualizado\"],\"j9HPuI\":[\"Fila #\",[\"0\"]],\"jBtpMP\":[\"Todos los estados\"],\"jEu4bB\":[\"Columnas\"],\"jEyQIs\":[\"No se encontraron rutinas\"],\"jHc1By\":[\"Eliminar Vista\"],\"jI6sj4\":[\"Costo, tiempo y estimaciones de filas suelen no estar disponibles como en PostgreSQL y MySQL.\"],\"jIxQCZ\":[\"No disponible para tu plataforma\"],\"jKIncn\":[\"El nombre de la base de datos es requerido\"],\"jPSk57\":[\"Razón (opcional)\"],\"jUNY_d\":[\"vista\"],\"jVqjDo\":[\"Formato de archivo notebook no válido\"],\"jWSZ-A\":[\"Solo vista previa - datos completos no cargados\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Tiempo de espera del socket en milisegundos.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"El nombre de la conexión es requerido\"],\"jsQZMk\":[\"IA\"],\"juO8wz\":[\"proceso hijo\"],\"jx0t66\":[\"Contraer procesos hijos\"],\"k-0mL-\":[\"Agregar Columna\"],\"k-XiMX\":[\"Sin formato\"],\"k2UnVy\":[\"Cond. Hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"segundos\"],\"kBiBq7\":[\"¿Eliminar el índice \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Mostrar/Ocultar Gráfico\"],\"kI1qVD\":[\"Formatear\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" filas · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Detalles del evento\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registro\"],\"kY-q3P\":[[\"label\"],\" es obligatorio\"],\"kexIdC\":[\"Usar Port-Forward de Kubernetes\"],\"krksx_\":[\"Éxito\"],\"ktYUe9\":[\"Ejecutar todas\"],\"kwY6nh\":[\"Cerrar\"],\"kx0s-n\":[\"Resultados\"],\"kxUEfE\":[\"Error al obtener la definición de la rutina: \"],\"l2Op2p\":[\"Parámetros de Consulta\"],\"l9Ivba\":[\"Procesos de complementos y recursos del sistema\"],\"lBdPxu\":[\"Color de acento\"],\"lCF0wC\":[\"Actualizar\"],\"lEQRwq\":[\"Datos (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nueva tabla creada\"],\"lOekZ3\":[\"Cambiar a Diseño Horizontal\"],\"lUA1C1\":[\"Frase de Paso de Clave SSH (Opcional)\"],\"lVeG20\":[\"Dependencias Rust\"],\"lXAG6D\":[\"Instrucciones para la explicación de consultas con IA. Usa \",[\"LANGUAGE\"],\" como marcador para el idioma de salida.\"],\"lbbYjy\":[\"Edita directamente el archivo de configuración en bruto. Se requiere reinicio para aplicar los cambios.\"],\"lhKW0m\":[\"Celda SQL \",[\"n\"],\" añadida\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Tamaño de Página de Resultados (Límite)\"],\"lkz6PL\":[\"Duración\"],\"lmVGeo\":[\"Agregar Clave Foránea\"],\"lnnx3E\":[\"Conecta Tabularis a Claude Desktop, Cursor y más\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Añadir\"],\"m2Q_r8\":[\"Detectar JSON en columnas de texto\"],\"m2tskz\":[\"Éxito\"],\"mA-qpe\":[\"Ejecución Completada\"],\"mBhhbA\":[\"Registros exportados al portapapeles\"],\"mCNdzH\":[\"Ejecutar Celda\"],\"mO95sp\":[\"Cerrar panel\"],\"mP7dLi\":[\"Ingresa el nombre de la fuente arriba\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloqueado\"],\"other\":[\"#\",\" bloqueados\"]}]],\"mS74ir\":[\"Error al guardar la conexión SSH\"],\"mSqtw8\":[\"Ejecutar Vista Previa\"],\"mURmfQ\":[\"Definición de Vista (SQL)\"],\"mX_isJ\":[\"Vertical\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Estructura (DDL)\"],\"mrk4Cf\":[\"Ordenar por \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Acabamos de abrir una comunidad dedicada a Tabularis: pide ayuda, comparte trucos y da forma al roadmap.\"],\"mtvVdV\":[\"Filas Procesadas\"],\"mx4evv\":[\"Crear Tabla\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Descargar\"],\"n7JDTx\":[\"Instala y activa complementos para verlos aquí\"],\"nDDJir\":[\"Buscar sesión, cliente, conexión…\"],\"nHP-Kr\":[\"No hay sesión activa. Selecciona una conexión.\"],\"nKhCjW\":[\"Seleccionar Tablas\"],\"nNwvm4\":[\"Error\"],\"nOVim5\":[\"Error al guardar la conexión\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Eventos\"],\"nf14vn\":[\"Requiere extensión: \",[\"0\"]],\"ngO6Pv\":[\"Permite que Intro (además de Tab) acepte la sugerencia de autocompletado activa. Cuando está desactivado, Intro siempre inserta una nueva línea.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Crea tu primera conexión\"],\"nohy4m\":[\"Sin actividad MCP registrada.\"],\"nr-axf\":[\"Eliminar Plugin\"],\"nsPFX9\":[\"Abrir en Visual Explain\"],\"nuBbBr\":[\"Gráfico\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Exportar Base de Datos\"],\"o-XJ9D\":[\"Cambiar\"],\"o21Y-P\":[\"entradas\"],\"o3tP_A\":[\"Eliminar Índice\"],\"o45L8r\":[\"Ingresa el nombre de tu conexión\"],\"o53XGh\":[\"Copiar fila(s) seleccionada(s)\"],\"o7J4JM\":[\"Filtro\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Nivel\"],\"oGiIL7\":[\"Proveedor Predeterminado\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Conexión Perdida\"],\"oJlXF2\":[\"Importar Notebook\"],\"oMFv82\":[\"Dividir Vertical\"],\"oOFiQg\":[\"Limita el número de filas obtenidas por consulta para prevenir problemas de rendimiento. Establece en 0 para desactivar (no recomendado).\"],\"oT9ZD3\":[\"Ocultar resumen\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Gráfico cambiado (celda \",[\"n\"],\")\"],\"oWfclW\":[\"Muestra el visor de JSON cuando una celda de texto sin tipar contiene un objeto o array JSON. Añade un pequeño coste de análisis por celda.\"],\"obpbdz\":[\"Archivo de configuración no encontrado (crear manualmente)\"],\"odZgfC\":[\"CLIENTES IA\"],\"ogZhXn\":[\"Elige la dirección de diseño predeterminada para los diagramas ER\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Filas Reales\"],\"olWzar\":[\"Forzar Cierre del Proceso\"],\"ovBPCi\":[\"Predeterminado\"],\"owzTWN\":[\"Modelos de IA actualizados desde los proveedores\"],\"oxYi6j\":[\"Ajusta el tamaño base de fuente usado en la aplicación (10-20px).\"],\"p--hsQ\":[\"Se ha perdido una conexión a la base de datos\"],\"p6NueD\":[\"NUEVA\"],\"pOYHox\":[\"Acciones\"],\"pR9bTR\":[\"Sin datos BLOB\"],\"pS8S5q\":[\"ej. usuarios, pedidos, productos\"],\"pSws_M\":[\"Nombre de Tabla\"],\"pVLbKZ\":[\"Vista creada correctamente\"],\"pWT04I\":[\"Verificando...\"],\"pZJ_6D\":[\"El nombre del índice es requerido\"],\"pddYFG\":[\"Ingresa el prompt de nombre de celda...\"],\"pnpyuD\":[\"Habilitar Registros\"],\"pqKMPv\":[\"Error al crear la tabla: \"],\"pqaP1h\":[\"Descartar\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"ej. Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"El resto sigue en solo lectura. Solo las marcadas pueden ejecutar escrituras.\"],\"qA5jLs\":[\"Detalles del error\"],\"qIrtcK\":[\"Actualizaciones\"],\"qOqy8G\":[\"Verificando configuración...\"],\"qWaVNs\":[\"Guardar y Reiniciar\"],\"qb3LPX\":[\"Ver Diagrama ER\"],\"qkK0vq\":[\"El nombre de la vista es requerido\"],\"qki9tG\":[\"Error\"],\"qoIir-\":[\"La URL base de tu API compatible con OpenAI. Ejemplos: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Contraer todo\"],\"r6ncaO\":[\"Cerrar pestaña\"],\"rAJlpP\":[\"Puerto del contenedor\"],\"rG3WVm\":[\"Lectura\"],\"rGRCeK\":[\"Borrar Historial de Consultas\"],\"rNIto7\":[\"El nombre del recurso es obligatorio\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exportado exitosamente\"],\"rY4sEV\":[\"Eliminar FK\"],\"rbu0nO\":[\"Gestionar Conexiones SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" conexión/es\"],\"other\":[\"#\",\" conexión/es\"]}]],\"rn2_2V\":[\"Eliminar filtro\"],\"roABNH\":[\"Sin historial de consultas\"],\"rtir7c\":[\"desconocido\"],\"ru0-2W\":[\"No hay conexiones activas\"],\"rvDPWO\":[\"Desviacion de Estimacion\"],\"rwWjWg\":[\"Notas de la Versión\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Probar Conexión\"],\"sBOaim\":[\"El archivo de configuración ha sido guardado. ¿Reiniciar ahora para aplicar los cambios?\"],\"sCyv9B\":[\"Actualizar Modelos\"],\"sSUqe4\":[\"Eliminar\"],\"sUBkgN\":[\"Generando SQL...\"],\"sZZG3d\":[\"¿Estás seguro de que deseas importar \\\"\",[\"0\"],\"\\\"?\\nEsto podría sobrescribir los datos existentes.\"],\"sbK5ck\":[\"Buscar en el historial...\"],\"sq_bS6\":[\"Al Eliminar\"],\"suW7-E\":[\"Tiempo de espera de conexión en milisegundos.\"],\"suqtBX\":[\"Esc para cerrar\"],\"t-R8-P\":[\"Ejecucion\"],\"t1OfVY\":[[\"totalLibraries\"],\" librerías\"],\"t2TMzs\":[\"Cerrar Pestaña\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Seleccionar una tabla...\"],\"t7KRl1\":[\"Registro de cada llamada MCP y de las consultas pendientes de aprobación. Almacenado localmente.\"],\"t9NJIk\":[\"Se detectaron operaciones con mucho escaneo\"],\"tB7xof\":[\"Operaciones Temp o Sort\"],\"tBBXTO\":[\"Intervalo de Ping\"],\"tFrT3w\":[\"Agrega esto al archivo de configuración del cliente manualmente si la instalación automática falla.\"],\"tJ7UbA\":[\"analizar seleccionada\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Dividir Horizontal\"],\"tQhW-D\":[\"Configuración de Registros\"],\"tT-BQX\":[\"Instalados\"],\"tXFGEx\":[\"No hay conexiones de Kubernetes guardadas. Haz clic en \\\"Añadir\\\" para crear una.\"],\"tXLz_8\":[\"Eliminar\"],\"tXpRby\":[\"Cuadrícula de datos\"],\"tbysEk\":[\"Acciones\"],\"tdta9X\":[\"Página \",[\"0\"]],\"tfDRzk\":[\"Guardar\"],\"tfEioV\":[\"Ejecutar todas las celdas SQL de arriba a abajo\"],\"tiAIaJ\":[\"Contraseña SSH faltante. Por favor, ingrésala de nuevo.\"],\"tk22BR\":[\"Pega datos estructurados y revisa el esquema antes de importar\"],\"tst44n\":[\"Eventos\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"Archivo SQL ejecutado correctamente\"],\"u6QeR6\":[\"Reiniciar Ahora\"],\"uAQUqI\":[\"Estado\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc para cerrar\"],\"uFViPK\":[\"No hay conexiones SSH disponibles\"],\"uHUuhp\":[\"Analizar esta consulta\"],\"uHfFzS\":[\"Tamaño de Fuente del Editor\"],\"uJ_3K5\":[\"¿Eliminar el notebook \\\"\",[\"0\"],\"\\\"? Esta acción no se puede deshacer.\"],\"uKaNJ3\":[\"Abrir en el editor JSON\"],\"uQBwTo\":[\"Esquemas\"],\"ub54ff\":[\"Centro de plugins\"],\"ufFyBs\":[\"Base de datos exportada correctamente\"],\"upNmR2\":[\"Abrir Barra Lateral\"],\"upwIY4\":[\"Definición de Vista\"],\"utMia3\":[\"Deseleccionar Todo\"],\"uyNaJg\":[\"1 elemento\"],\"v61dnS\":[\"Ingresa el nombre exacto del modelo para tu proveedor compatible con OpenAI.\"],\"v6oeyr\":[\"Instalado\"],\"v75DGg\":[\"Explorar archivo\"],\"v99dO4\":[\"Clave Primaria\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" consultas encontradas\"],\"other\":[\"#\",\" consultas encontradas\"]}]],\"vCSBPD\":[\"Agregar filtro\"],\"vH7uJj\":[\"Ordenar por…\"],\"vUOA1-\":[\"Buscar modelos...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE incluye filas reales, tiempos, bucles y contadores de buffer cuando estan disponibles.\"],\"vXIe7J\":[\"Idioma\"],\"vYf4Jm\":[\"Ingrese una función SQL completa (ej: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Preferido\"],\"vditm4\":[\"Plan de Query\"],\"vks_ls\":[\"Cerrar Otras Pestañas\"],\"vnAnIp\":[\"Modelo \",[\"0\"],\" no encontrado en \",[\"1\"],\". Puede que no funcione correctamente.\"],\"vqoN5u\":[\"Estructura\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Explorador\"],\"vujQJ5\":[\"Localización\"],\"vvJPVL\":[\"Mostrar resumen\"],\"vwI5S4\":[\"Éxito\"],\"vzH-7Z\":[\"Explicar\"],\"w7QmD_\":[\"Ingresa el prompt del sistema...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Tiempo transcurrido\"],\"wCfv2R\":[\"Agregar Conexión\"],\"wGfc86\":[\"Borrar Todo el Historial\"],\"wGwNv4\":[\"Base de datos activa\"],\"wJJ-Wy\":[\"Instalando...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers Hit\"],\"wQn-RM\":[\"Agregar Columna\"],\"wRXcR2\":[\"Usando el icono predeterminado del driver.\"],\"wTOwz-\":[\"Aplicado\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Importar desde Portapapeles\"],\"w_bY7R\":[\"Registros\"],\"wc_8bA\":[\"Pendiente\"],\"wckWOP\":[\"Gestionar\"],\"wdYcKH\":[\"Pestañas Abiertas\"],\"wja8aL\":[\"Sin nombre\"],\"wkOAzk\":[\"Ningún notebook coincide con tu búsqueda.\"],\"wp49Ao\":[\"Failed to process insertions: \"],\"wqG2hQ\":[\"Omitir (no importar)\"],\"wwrAsK\":[\"Por favor, completa todos los campos requeridos\"],\"wwu18a\":[\"Icono\"],\"x2fr_j\":[\"Grafo\"],\"xANKBj\":[\"Funciones\"],\"xBwjck\":[\"Se requiere reinicio para aplicar los cambios.\"],\"xDAtGP\":[\"Mensaje\"],\"xECY01\":[\"Procedimientos\"],\"xGPNgZ\":[\"Personalización de Prompts\"],\"xNgtS-\":[\"No se encontraron vistas\"],\"xOPa1b\":[\"El puerto debe estar entre 1 y 65535\"],\"xY9s5E\":[\"Tiempo agotado\"],\"xaVUr1\":[\"El veloz zorro marrón salta sobre el perro perezoso\"],\"xbvTzL\":[\"Ruta del Archivo\"],\"xlew5F\":[\"Limpiar\"],\"xmNyKz\":[\"Probando...\"],\"xtuh6D\":[\"Expandir Explorador\"],\"y-Zdqj\":[\"Elige un contexto...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Abrir visor JSON\"],\"yQXjG5\":[\"Deseleccionar Todo\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Ayer\"],\"ygCKqB\":[\"Detener\"],\"ykCc6r\":[\"Base de datos cambiada (celda \",[\"n\"],\")\"],\"ynVMSc\":[\"Seleccionar todas\"],\"ytdz1d\":[\"La IA quiere ejecutar una escritura en la base de datos\"],\"yyhzur\":[\"Crear Tabla\"],\"yz7wBu\":[\"Cerrar\"],\"z0VdfR\":[\"rutina\"],\"z407wX\":[\"Contraseña SSH\"],\"z4oF5T\":[\"Exportar Base de Datos\"],\"z5kV0h\":[\"Conexiones\"],\"zBTMzx\":[\"Vista Previa\"],\"zCaAKs\":[\"Error de Actualización\"],\"zDAakK\":[\"No se puede mostrar el diagrama sin un ID de conexión.\"],\"zGe21h\":[\"Esta clave se carga desde una variable de entorno\"],\"zGfL5t\":[\"valor\"],\"zL6-4A\":[\"No hay procesos de complementos en ejecución\"],\"zLZhCi\":[\"¡Nueva comunidad Discord!\"],\"zLlCou\":[\"Copiar nombre de columna\"],\"zNEL34\":[\"Join the Community\"],\"zNgTlV\":[\"Cerrar Pestañas a la Derecha\"],\"zQz55p\":[\"Inspeccionar estructura\"],\"zR0FfH\":[\"Exportado a \",[\"target\"]],\"zRZeOc\":[\"Buscar tablas, vistas, rutinas, triggers...\"],\"zUNMsr\":[\"Clave SSH\"],\"zXMRzb\":[\"Puerto SSH\"],\"zZgoXr\":[\"No hay tablas que coincidan\"],\"zaWbms\":[\"Revertir Cambios\"],\"zgClmU\":[\"Instalar Configuración\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Ingresar valor...\"],\"zvzN4C\":[\"Establecer como Activa\"],\"zzDlyQ\":[\"Éxito\"],\"zzMxrp\":[\"Editar config.json\"],\"zz_Wd_\":[\"Modo\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/fr/messages.po b/src/locales/fr/messages.po index 2a0fcf5a..16c45477 100644 --- a/src/locales/fr/messages.po +++ b/src/locales/fr/messages.po @@ -1207,12 +1207,22 @@ msgid "Create a new database view" msgstr "Créer une nouvelle vue de base de données" #: src/components/modals/CreateForeignKeyModal.tsx -msgctxt "createFk" +msgctxt "createFk.create" +msgid "Create Foreign Key" +msgstr "Créer la clé étrangère" + +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk.title" msgid "Create Foreign Key" msgstr "Créer une clé étrangère" #: src/components/modals/CreateIndexModal.tsx -msgctxt "createIndex" +msgctxt "createIndex.create" +msgid "Create Index" +msgstr "Créer l’index" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex.title" msgid "Create Index" msgstr "Créer un index" @@ -1258,7 +1268,12 @@ msgid "Create Trigger" msgstr "" #: src/components/modals/ViewEditorModal.tsx -msgctxt "views" +msgctxt "views.create" +msgid "Create View" +msgstr "Créer la vue" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views.createView" msgid "Create View" msgstr "Créer une vue" @@ -1639,8 +1654,12 @@ msgstr "Supprimer la vue" #: src/components/layout/ExplorerSidebar.tsx #: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgctxt "dump.dumpDatabase" +msgid "Dump Database" +msgstr "Exporter la base de données" + #: src/components/modals/DumpDatabaseModal.tsx -msgctxt "dump" +msgctxt "dump.title" msgid "Dump Database" msgstr "Exporter la base de données" @@ -1904,17 +1923,25 @@ msgid "Error" msgstr "Erreur" #: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings.plugins.installError.details" +msgid "Error Details" +msgstr "Détails de l’erreur" + #: src/components/modals/PluginStartErrorModal.tsx -msgctxt "settings" +msgctxt "settings.plugins.startError.details" msgid "Error Details" msgstr "Détails de l’erreur" #: src/components/modals/QuickNavigatorModal.tsx -#: src/components/modals/TabSwitcherModal.tsx -msgctxt "editor" +msgctxt "editor.quickNavigator.escHint" msgid "Esc to close" msgstr "Échap pour fermer" +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor.tabSwitcher.escHint" +msgid "Esc to close" +msgstr "Esc pour fermer" + #: src/components/modals/visual-explain/ExplainNodeDetails.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx @@ -1941,7 +1968,12 @@ msgid "Events" msgstr "Événements" #: src/components/settings/ai-activity/AiActivitySessionsTab.tsx -msgctxt "aiActivity" +msgctxt "aiActivity.events" +msgid "Events" +msgstr "Événements" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity.sort.eventCount" msgid "Events" msgstr "Événements" @@ -2074,7 +2106,12 @@ msgid "Export as Notebook" msgstr "Exporter en Notebook" #: src/pages/Connections.tsx -msgctxt "connections" +msgctxt "connections.export" +msgid "Export Connections" +msgstr "Exporter les connexions" + +#: src/pages/Connections.tsx +msgctxt "connections.exportTitle" msgid "Export Connections" msgstr "Exporter les connexions" @@ -2639,7 +2676,17 @@ msgid "Installed" msgstr "Installé" #: src/components/settings/PluginsTab.tsx -msgctxt "settings" +msgctxt "settings.plugins.filterInstalled" +msgid "Installed" +msgstr "Installés" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installed" +msgid "Installed" +msgstr "Installé" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installedMetric" msgid "Installed" msgstr "Installés" @@ -4005,9 +4052,13 @@ msgstr "Les lignes seront ajoutées à une table existante" msgid "Run" msgstr "Exécuter" -#: src/components/modals/QuerySelectionModal.tsx #: src/components/notebook/NotebookToolbar.tsx -msgctxt "editor" +msgctxt "editor.notebook.runAll" +msgid "Run All" +msgstr "Tout exécuter" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor.querySelection.runAll" msgid "Run All" msgstr "Tout exécuter" @@ -4736,13 +4787,17 @@ msgid "table" msgstr "table" #: src/components/modals/visual-explain/ExplainNodeDetails.tsx -#: src/components/modals/visual-explain/ExplainSummaryBar.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx -msgctxt "editor" +msgctxt "editor.visualExplain.relation" msgid "Table" msgstr "Table" +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgctxt "editor.visualExplain.tableView" +msgid "Table" +msgstr "Tableau" + #: src/components/modals/ClipboardImport/TableNameInput.tsx #: src/components/modals/ClipboardImportModal.tsx msgid "Table name" @@ -5188,10 +5243,15 @@ msgid "View created successfully" msgstr "Vue créée avec succès" #: src/components/layout/ExplorerSidebar.tsx -msgctxt "sidebar" +msgctxt "sidebar.viewDefinition" msgid "View Definition" msgstr "Définition de la vue" +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar.viewTriggerDefinition" +msgid "View Definition" +msgstr "" + #: src/components/modals/ViewEditorModal.tsx msgid "View Definition (SQL)" msgstr "Définition de la vue (SQL)" diff --git a/src/locales/fr/messages.ts b/src/locales/fr/messages.ts index c714f3a4..dfe29c21 100644 --- a/src/locales/fr/messages.ts +++ b/src/locales/fr/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Nombre max d’entrées d’historique\"],\"-6AWa-\":[\"Importer les connexions\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Déconnecter\"],\"-PLZfh\":[\"Échec de l’actualisation des modèles\"],\"-T5W2e\":[\"Notes du pilote\"],\"-ZgeeE\":[\"Historique des modifications\"],\"-aYrdc\":[\"La version \",[\"0\"],\" est disponible\"],\"-fBGXl\":[\"Coût le plus élevé\"],\"-jIQDz\":[\"Réduire la cellule\"],\"-u1eRo\":[\"Aucune base de données\"],\"-yoeVU\":[\"Chargement du schéma...\"],\"-zy2Nq\":[\"Type\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID validation\"],\"0E5-gF\":[\"Voulez-vous vraiment supprimer cette connexion ?\"],\"0HCubq\":[\"Agrandir\"],\"0Kmdvy\":[\"Police personnalisée\"],\"0Nj13E\":[\"Générer du SQL\"],\"0ROgz5\":[\"Saisir du JSON...\"],\"0SY9sU\":[\"Échec de la déconnexion de la base de données\"],\"0b3kL9\":[\"Sélectionner une base de données\"],\"0caMy7\":[\"Historique\"],\"0mx5ow\":[\"Requête\"],\"0n9BtL\":[\"Aperçu\"],\"0pHB9N\":[\"Copier comme table.column\"],\"0sQzZK\":[\"Filtrer les bases de données...\"],\"0uPP9X\":[\"Nom de la clé étrangère (optionnel)\"],\"0wxuek\":[\"Version actuelle\"],\"0x09Aw\":[\"Arrêt en cas d'erreur basculé\"],\"0yBP6v\":[\"Soutenir le développement\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes\"],\"other\":[\"#\",\" lignes\"]}]],\"0yVAoD\":[\"Compter les lignes\"],\"0zxJ87\":[\"Aucun log disponible\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Modifier la vue\"],\"11fGJ6\":[\"Requêtes\"],\"13hIUA\":[\"Clé API \",[\"0\"]],\"14qNWF\":[\"Sélectionner une connexion SSH\"],\"17qHRP\":[\"Nouvelle connexion\"],\"1Dn6bg\":[\"Importer depuis le Presse-papiers\"],\"1Dnd0I\":[\"Charger le nombre de lignes\"],\"1FjTLW\":[\"ex. python3\"],\"1GOvbo\":[\"Ollama connecté (\",[\"0\"],\" modèles trouvés)\"],\"1I6UoR\":[\"Vues\"],\"1U7hS5\":[\"Longueur\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Police de l’éditeur\"],\"1ekzlY\":[\"Processus des plugins\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Choix du thème\"],\"1xVZkL\":[\"Aucun modèle trouvé\"],\"26Joci\":[[\"0\"],\" lignes récupérées\"],\"2Bf-Qe\":[\"Nouvelle console\"],\"2CrSmP\":[\"Aidez tabularis à grandir\"],\"2D9F8_\":[\"Échec de duplication de la connexion\"],\"2Eoi_a\":[\"Voir les détails\"],\"2F4pE5\":[\"Build et tests Rust\"],\"2Fsd9r\":[\"Ce mois-ci\"],\"2JzKXI\":[\"Définir GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Tout sélectionner\"],\"2SO5RM\":[\"Kubernetes n'est pas disponible pour ce pilote.\"],\"2Uh5GA\":[\"écosystème Cargo\"],\"2YylFp\":[\"Nouvelle requête visuelle\"],\"2luuSG\":[\"Réessayer\"],\"2wxgft\":[\"Renommer\"],\"2yG2GC\":[\"Mettre en pause les écritures (ou toutes les requêtes) et demander la validation utilisateur avant exécution.\"],\"30-b5r\":[\"Supprimer\"],\"31kwdN\":[\"Dupliquer le filtre\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Tous les outils\"],\"3Am5DS\":[\"Vue onglets\"],\"3BhBCj\":[\"Événements\"],\"3FVg9_\":[\"Colonne locale\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Exécuter\"],\"3L0HCz\":[\"Aucun plugin ne correspond à la recherche.\"],\"3Nv3JV\":[\"Exécution de la requête...\"],\"3TSz9S\":[\"Réduire\"],\"3UW8fG\":[\"Mises à jour gérées par \",[\"0\"]],\"3YvS-c\":[\"Nouvel onglet\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt de nom de cellule de notebook\"],\"3qkggm\":[\"Plein écran\"],\"3rBJ1T\":[\"Afficher le schéma\"],\"3xZ-xV\":[\"Insérer l'horodatage actuel\"],\"40Gx0U\":[\"Fuseau horaire\"],\"41GP4f\":[\"Choisissez le caractère séparateur par défaut utilisé lors de la copie ou de l’export des lignes en CSV.\"],\"42iaEi\":[\"PostgreSQL sans ANALYZE n’affiche que les estimations du planificateur.\"],\"44cXI8\":[\"Trier par \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gérer les bases de données\"],\"4CK17g\":[\"Voulez-vous vraiment modifier la vue \\\"\",[\"name\"],\"\\\" ?\"],\"4DDaw-\":[\"Sélectionnez au moins une base de données\"],\"4D_Nvt\":[\"Échec de création du groupe\"],\"4RiR6c\":[\"Exporter en HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processus enfant\"],\"other\":[\"#\",\" processus enfants\"]}]],\"4VyuY3\":[\"Voulez-vous vraiment effacer tous les logs ?\"],\"4WWqS3\":[\"Afficher/masquer l'arbre JSON\"],\"4cEClj\":[\"Sessions\"],\"4cmfYp\":[\"Dupliquer la ligne\"],\"4lIZTB\":[\"Dépendances de développement frontend\"],\"4oYjvJ\":[\"Rechercher…\"],\"4tMxW4\":[\"Aperçu de l'enregistrement lié\"],\"4yJcjm\":[\"Sélectionner le type...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Fermer le panneau de filtres (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Point-virgule (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" événement\"],\"other\":[\"#\",\" événements\"]}]],\"5I2fxu\":[\"/chemin/vers/id_rsa\"],\"5NZpX8\":[\"Vue liste\"],\"5To6Z6\":[\"Copier la requête\"],\"5gqNQl\":[\"Vue grille\"],\"5igIzr\":[\"Import annulé\"],\"5nTIup\":[\"Modification de la vue : \",[\"name\"]],\"66bEht\":[\"État du projet\"],\"6PIJVc\":[\"Démarrage\"],\"6QvP0l\":[\"Exporter en JSON\"],\"6W41Xq\":[\"Gestionnaire des tâches\"],\"6WngBH\":[\"Définir NULL\"],\"6YtxFj\":[\"Nom\"],\"6_dCYd\":[\"Vue d’ensemble\"],\"6gvoHP\":[\"Copier le message d’erreur\"],\"6oCVzX\":[\"Le contexte Kubernetes est requis\"],\"6wQO0f\":[\"Afficher les données\"],\"6z9W13\":[\"Redémarrer\"],\"71agNy\":[\"Générer des noms IA pour les cellules sans nom\"],\"74J3FG\":[\"Version initiale\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Compris\"],\"77nSMU\":[\"Supprimer tout l'historique d'activité IA ? Action irréversible.\"],\"79UVYW\":[\"Échap pour fermer\"],\"7ABmyQ\":[\"Réessayer\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" sur \",[\"0\"],\" actifs\"],\"7E864M\":[\"Type de base de données\"],\"7FqaG1\":[\"Personnalisez les instructions pour l’analyse IA des plans EXPLAIN. Utilisez \",[\"LANGUAGE\"],\" pour la langue de sortie.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Types mixtes détectés, défaut TEXT\"],\"7RSQQd\":[\"Enregistrer les mots de passe dans le trousseau\"],\"7VpPHA\":[\"Confirmer\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"échouées\"],\"7sMeHQ\":[\"Clé\"],\"7sNhEz\":[\"Nom d’utilisateur\"],\"7tATh2\":[\"Exécuter la requête\"],\"7yb4gk\":[\"Échec : \"],\"8-4V8D\":[\"Tables\"],\"82G-l5\":[\"Le Model Context Protocol (MCP) permet aux assistants IA (comme Claude) de se connecter à vos outils locaux. Tabularis expose un serveur MCP permettant à l’IA de lire le schéma de votre base de données et d’exécuter des requêtes en toute sécurité.\"],\"83VjWE\":[\"Nouveau notebook\"],\"86IgoU\":[\"Exécuter la requête (dans l’éditeur)\"],\"86fCgf\":[\"Personnalisez les instructions pour la génération IA du nom des onglets de résultats. La requête SQL est envoyée comme message utilisateur.\"],\"87a_t_\":[\"Étiquette\"],\"8CWirf\":[\"Serveur MCP\"],\"8S8aIX\":[\"Vérification de l’état des connexions\"],\"8TMaZI\":[\"Horodatage\"],\"8Tg_JR\":[\"Personnalisé\"],\"8UFKYr\":[\"Sélectionner la requête à exécuter\"],\"8VKSGV\":[\"Générer le SQL\"],\"8Wjy6z\":[\"Fermer les onglets à gauche\"],\"8ZsakT\":[\"Mot de passe\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Éditeur SQL\"],\"8bRgTe\":[\"Fournisseur IA non configuré. Veuillez aller dans Paramètres > IA.\"],\"8c_W0h\":[\"Anciennes versions\"],\"8guEQP\":[\"Actualiser les vues\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN est léger et principalement structurel.\"],\"8q_sOc\":[\"Supprimer\"],\"8t-akp\":[\"premières \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nom de la connexion\"],\"91gnWY\":[\"Exporter les logs\"],\"91rtHL\":[\"Créer une nouvelle vue\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Nouveau groupe\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vue mise à jour avec succès\"],\"9NzDFn\":[\"Afficher l’écran d’accueil au démarrage de l’application.\"],\"9OoUS3\":[\"Créer une nouvelle connexion SSH\"],\"9QGRD5\":[\"Colonne cible\"],\"9QTny9\":[\"Échec de la requête.\"],\"9S-fyV\":[\"Plan d'exécution préalable\"],\"9SJ_Sx\":[\"Ressources système\"],\"9UQ730\":[\"Cloner\"],\"9X6cky\":[\"NON\"],\"9XUV5V\":[\"Aucune donnée dans le presse-papiers\"],\"9mMU1R\":[\"Temps\"],\"9mvFo_\":[\"Heure\"],\"9npOH9\":[\"Ouvrir un fichier\"],\"9uI_rE\":[\"Annuler\"],\"9xUjzm\":[\"Tout sélectionner\"],\"9y_02p\":[\"Discutez avec la communauté, obtenez de l’aide, proposez des fonctionnalités\"],\"A1pPcI\":[\"Hôte SSH\"],\"A1taO8\":[\"Rechercher\"],\"A6C0pv\":[\"Coût total\"],\"A7WG0p\":[\"Plugin désactivé\"],\"A7yRz3\":[\"La définition de la vue est requise\"],\"A9Uyp6\":[\"Échec de l’import : \"],\"ABEd-z\":[\"Utilisez votre gestionnaire de paquets pour mettre à jour Tabularis.\"],\"AMdgKV\":[\"Prompt d’analyse de plan EXPLAIN\"],\"ANSTMe\":[\"Aucun problème majeur détecté dans le résumé actuel du plan.\"],\"ANzIr7\":[\"Historique des requêtes\"],\"AOnaU7\":[\"ignorées\"],\"AVlZoM\":[\"Environnement\"],\"AXTVsE\":[\"Vérification complète\"],\"AXdRYR\":[\"Logs actuels\"],\"Aa-YkQ\":[\"Exporter le notebook\"],\"Ai2U7L\":[\"Hôte\"],\"AidayG\":[\"Filtrer par niveau\"],\"AlPiMN\":[\"Cliquer pour aller à la page\"],\"An-1rA\":[\"Lignes retournées\"],\"AnV8j-\":[\"Modifier la colonne\"],\"AvEr_L\":[\"Nouvelle console\"],\"AvYbUL\":[\"Mettre une étoile sur GitHub\"],\"Aw_eOs\":[\"Nécessite Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Aucun résultat trouvé\"],\"B0mJGb\":[\"Sortie brute\"],\"B1c58n\":[\"Modifier la colonne\"],\"B3toQF\":[\"Objets\"],\"B5nKny\":[\"/chemin/absolu/vers/dossier\"],\"B5xevr\":[\"Le nom de la connexion est requis\"],\"BAVvWJ\":[\"Diagramme ER\"],\"BBtVak\":[\"Tout réduire\"],\"BEVzjL\":[\"Échec de l’import\"],\"BFxXo5\":[\"Tout exécuter\"],\"BJe2lZ\":[\"Afficher/masquer la barre latérale\"],\"BK3WCj\":[\"Échec de chargement du registre\"],\"BKbO3i\":[\"Notebook modifié\"],\"BMB51y\":[\"Exécuter dans la console\"],\"BNW_Z4\":[\"ex. active_users, order_summary\"],\"BUO_JN\":[\"Copier la requête\"],\"BYkhHY\":[\"Vérifier les mises à jour au démarrage\"],\"BbHofF\":[\"Exporter les connexions\"],\"BeSg6-\":[\"Collecter les logs de l’application en mémoire pour le débogage\"],\"BgAyQH\":[\"Effacer le tri\"],\"BinTJI\":[\"écosystème npm\"],\"BkFson\":[\"Pagination automatique\"],\"Bpglf1\":[\"Monter\"],\"BrGo6h\":[\"Rechercher des notebooks\"],\"BxiAN_\":[\"Supprimer la requête\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dépendances frontend\"],\"CE-M2e\":[\"Infos\"],\"CHIyL8\":[\"Aucun filtre —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Téléchargement...\"],\"CUxwxn\":[\"Afficher toutes les tables\"],\"CWMXbw\":[\"arrêtera brutalement son processus. Toute connexion à la base de données utilisant ce plugin cessera de fonctionner tant que le plugin ne sera pas redémarré.\"],\"CZt6BX\":[\"CONFIGURATION MANUELLE\"],\"Ca8ixZ\":[\"Supprimer\"],\"CbJBQS\":[\"Échec de la mise à jour : \"],\"Cdz-YU\":[\"Vue empilée\"],\"CpeQf9\":[\"Boucles\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Sélectionnez le modèle à utiliser pour la génération et l’explication.\"],\"DB8zMK\":[\"Appliquer\"],\"DDXf5E\":[\"Fonctions SQL\"],\"DEwnwi\":[\"Supprimer\"],\"DNTvdl\":[\"Ouvrir dans l’éditeur\"],\"DPc2P9\":[\"Supprimer la cellule\"],\"DUY8Ba\":[\"Changements incompatibles\"],\"DVnBSM\":[\"Hauteur de ligne\"],\"Dd7YLj\":[\"Peut-être plus tard\"],\"Deej3j\":[\"JSON invalide\"],\"DfKhk_\":[\"Mettre à jour\"],\"DiRiTz\":[\"Ouvrir la page du package\"],\"DlRHAD\":[\"Exécution d’EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" erreur\"],\"other\":[\"#\",\" erreurs\"]}]],\"Dvdihe\":[\"Sur \",[\"0\"],\" — examinez avant exécution.\"],\"DzFLzw\":[\"OUI\"],\"E-JUtQ\":[\"Validation manuelle\"],\"E0kcnZ\":[\"Général\"],\"E2mje_\":[\"Sélectionner la requête à expliquer\"],\"EDieyg\":[\"Voulez-vous vraiment supprimer cette connexion SSH ?\"],\"EHZxPj\":[\"Développer\"],\"EL4oDO\":[\"Nouvelle version disponible\"],\"EPi4gT\":[\"Trier par \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Non groupé\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Inconnu\"],\"EhADgB\":[\"Supprimer la colonne\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Vous êtes à jour\"],\"Em6JFd\":[\"Compter les lignes\"],\"EnGiqG\":[[\"0\"],\" éléments\"],\"Ew1n5z\":[\"Rechercher des plugins…\"],\"F18WP3\":[\"Paramètres\"],\"F3uc1x\":[\"Le fichier exporté contiendra vos mots de passe de base de données et SSH en clair. Conservez-le en lieu sûr.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" lignes\"],\"other\":[\"#\",\" lignes\"]}]],\"F6pfE9\":[\"Active\"],\"F8tXg7\":[\"Aperçu des données\"],\"F9-6yK\":[\"Format de copie par défaut\"],\"F9lxfG\":[\"Supprimer\"],\"F9nsa2\":[\"Le fichier d’historique était corrompu et a été mis de côté. Les nouvelles requêtes seront enregistrées normalement. Fichier de sauvegarde :\"],\"FF_oap\":[\"Valeur par défaut\"],\"FK8rlP\":[\"Aucune connexion SSH configurée pour le moment\"],\"FMRcH8\":[\"Première ligne comme en-tête\"],\"FNvDMc\":[\"Cette semaine\"],\"FQe1FI\":[\"Lignes estimées\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Avertissement\"],\"FZg3wM\":[\"Opération\"],\"Fa_cky\":[\"Schéma : \",[\"tableName\"]],\"FpEL5o\":[\"Choisissez un thème indépendant pour l’éditeur SQL ou gardez-le synchronisé avec le thème de l’application.\"],\"FsvZQL\":[\"Cellule \",[\"n\"],\" modifiée\"],\"FtwKL9\":[\"Changer d’onglet\"],\"FznI3z\":[\"Supprimer la clé étrangère \\\"\",[\"name\"],\"\\\" ?\"],\"G6W8j1\":[\"Échec de l’aperçu : \"],\"G8Q5Zq\":[\"Le namespace est requis\"],\"GAohqx\":[\"Supprimer la colonne\"],\"GJR99u\":[\"Échec de suppression de la colonne : \"],\"GKfzzM\":[\"Choisir une connexion...\"],\"GS-Mus\":[\"Exporter\"],\"GUaLUq\":[\"Échec du chargement du schéma : \"],\"GXP-Iw\":[\"Ajouter une cellule SQL\"],\"Gj1mLb\":[\"Cellules réordonnées\"],\"GlbqG2\":[\"Réinitialiser au défaut du pilote\"],\"Gs5AlY\":[\"Ouvrir\"],\"GtmO8_\":[\"de\"],\"GxkJXS\":[\"Téléversement...\"],\"H-o4D2\":[\"Créer une nouvelle colonne\"],\"H2B-KW\":[\"Choisissez le format par défaut lors de la copie des lignes avec Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Rétablir\"],\"H7mlCc\":[\"/chemin/absolu/vers/db.sqlite\"],\"H86f9p\":[\"Réduire\"],\"H9P8CD\":[\"ajouter le premier filtre\"],\"HAQlGl\":[\"Activité IA\"],\"HKNZrs\":[\"Condition d’index\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Supprimer \",\"#\",\" lignes\"],\"other\":[\"Supprimer \",\"#\",\" lignes\"]}]],\"HPuCiP\":[\"Chemin du dossier\"],\"HUs1R3\":[\"Aucun onglet ouvert pour cette connexion.\"],\"HV4Isp\":[\"Saisir le mot de passe SSH\"],\"HVC8Hh\":[\"Copié dans le presse-papier\"],\"HWEpq8\":[\"Écriture disque/s\"],\"HY4nP5\":[\"En ligne\"],\"HcmoWv\":[\"Échec de l’enregistrement de la vue : \"],\"He8v1Y\":[\"Désélectionner de Tout appliquer\"],\"HehHP1\":[\"Disposition par défaut\"],\"HilYn4\":[\"Ce notebook est vide. Ajoutez une cellule pour commencer.\"],\"HjxVK_\":[\"Test rapide de connexion\"],\"HmMnRx\":[\"Mode WKT\"],\"HoKCiI\":[\"L’application redémarrera automatiquement après l’installation\"],\"HpK_8d\":[\"Recharger\"],\"Hpi4Jm\":[\"Rejoindre maintenant\"],\"HuA3RU\":[\"Tabulation\"],\"I128p7\":[\"Barre verticale (|)\"],\"I3AgqA\":[\"Configurer SSH en ligne\"],\"I5VBsr\":[\"Identique à l’application\"],\"I8yrPb\":[\"Remplacer la table\"],\"I92BdB\":[\"Retirer du groupe\"],\"I92fr4\":[\"Me le rappeler plus tard\"],\"I99Miw\":[\"Coût\"],\"IETZIR\":[\"Modifier le nom de la cellule\"],\"IG9wzA\":[\"Échec de l’insertion de la ligne : \"],\"ILleOG\":[\"Le type de ressource doit être \\\"service\\\" ou \\\"pod\\\"\"],\"IQ3gAw\":[\"Téléverser un fichier\"],\"IUwGEM\":[\"Enregistrer les modifications\"],\"IUwmLq\":[\"Dépendances directes déclarées dans package.json et src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Bibliothèques open source\"],\"I_43p6\":[\"Sécurité\"],\"Iaizf4\":[\"Apparence\"],\"Il3FBB\":[\"Afficher/masquer le panneau de filtres structurés\"],\"IniZRK\":[\"Téléchargement indisponible - seul l’aperçu est chargé\"],\"Isaozb\":[\"Vérifier et ajuster\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Les requêtes et connexions actives via ce plugin seront interrompues.\"],\"J6v1s_\":[\"Modèle par défaut\"],\"JE-DVk\":[\"Interpréteur\"],\"JEGlfK\":[\"Début\"],\"JKDPqP\":[\"Sélectionnez d'abord un contexte\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Utiliser un tunnel SSH\"],\"JRz8tw\":[\"MySQL et MariaDB n’exposent des métriques réelles que sur les variantes prises en charge d’EXPLAIN ANALYZE ou ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP ou SVG · max. 512 Ko\"],\"JY5Oyv\":[\"Base de données\"],\"JlFRIB\":[\"Fuseau horaire de session envoyé à MySQL après connexion.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Refusée\"],\"K3H9p5\":[\"Non défini\"],\"K5Dgu_\":[\"Bases de données\"],\"K8IGKf\":[\"Type d’authentification\"],\"KAYNSW\":[\"Combien de logs conserver en mémoire (1-10000)\"],\"KHTGbr\":[\"EXPLAIN préalable\"],\"KHvda8\":[\"Non nul\"],\"KJKNaZ\":[\"Copier comme `column`\"],\"KM5Kc8\":[\"Au moins une colonne doit être sélectionnée\"],\"KSCnVQ\":[\"Type\"],\"KUjOb9\":[\"en cours\"],\"KXBdwy\":[\"Actualiser les routines\"],\"KXNyX7\":[\"Définir DEFAULT\"],\"Kd70-v\":[\"Importer depuis le Presse-papiers...\"],\"KhI4oS\":[\"Ouvrir la ligne référencée dans \",[\"0\"]],\"KhgrNu\":[\"Intégration du serveur MCP\"],\"KirERL\":[\"Délai dépassé\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Échec de suppression de l’index : \"],\"KzeARD\":[\"Échec de suppression de la table : \"],\"L-rMC9\":[\"Réinitialiser par défaut\"],\"L3HXkQ\":[\"Corrections de bugs\"],\"LCZ7Dy\":[\"Copier le nom\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"index\"],\"LMeAoR\":[\"lignes\"],\"LPCdc-\":[\"Prompt de nom d’onglet de requête\"],\"LPFmga\":[\"Sélectionner pour Tout appliquer\"],\"LYzbQ2\":[\"Outil\"],\"Lbis_V\":[\"Navigateur rapide\"],\"Lcpbe2\":[\"Le processus du plugin n’a pas pu être lancé. Vérifiez les détails de l’erreur ci-dessous.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN est uniquement pris en charge pour les instructions DML (SELECT, INSERT, UPDATE, DELETE). Les instructions DDL comme CREATE, DROP ou ALTER ne peuvent pas être expliquées.\"],\"LnT0hQ\":[\"Ajouter une colonne\"],\"LvutiO\":[\"Suggérer avec IA\"],\"M-rHQO\":[\"Quitter le plein écran\"],\"M0XJba\":[\"Voulez-vous vraiment effacer tout l’historique des requêtes pour cette connexion ?\"],\"M1co_O\":[\"Configuré\"],\"M73whl\":[\"Contexte\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Tout afficher\"],\"MXdOwj\":[\"Séparer les connexions\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Sélectionner une connexion K8s\"],\"Mc1tjS\":[\"Activez ANALYZE pour inspecter les lignes réelles, le temps, les boucles et les buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" lignes supplémentaires\"],\"Mp0jQ_\":[\"Ce pilote ne prend en charge les clés primaires qu’à la création de la table\"],\"MqpZwN\":[\"Processus Tabularis\"],\"MxIx43\":[\"↑↓ pour naviguer, Entrée pour ouvrir\"],\"MygtgQ\":[\"Ajouter une cellule Markdown\"],\"N40H-G\":[\"Tous\"],\"N5UQxq\":[\"Ollama non détecté sur le port \",[\"0\"],\". Est-il en cours d’exécution ?\"],\"N6GBcC\":[\"Confirmer la suppression\"],\"N6aqHp\":[\"Requêtes exécutées\"],\"N9_S15\":[\"Une nouvelle table sera créée\"],\"NBdMa1\":[\"Étape la plus lente\"],\"NC2AI2\":[\"Longueur\"],\"NCzNnx\":[\"Tri croissant\"],\"NT4Ubs\":[\"Supprimer la clé personnalisée et revenir à la variable d’environnement (si présente)\"],\"NUjrCO\":[\"Aucun favori ne correspond à votre recherche\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Total de l’arborescence : \",[\"0\"]],\"Nc2VQn\":[\"Ajouter à existante\"],\"NgFERn\":[\"Ajouter aux favoris\"],\"NktMHG\":[\"Nom de la base de données\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Tester\"],\"Nq5QTk\":[\"expliquer la n-ième\"],\"O2STgu\":[\"Échec de l’export : \"],\"O8SV8O\":[\"Téléchargement...\"],\"O9_WW6\":[\"connexion\"],\"OGEsKj\":[\"Exécuter toutes les cellules\"],\"OGWdBg\":[\"Nom de la vue\"],\"OHqT6w\":[\"Appuyez sur une combinaison de touches...\"],\"OXJsaG\":[\"Nom de paramètre invalide\"],\"OfhWJH\":[\"Réinitialiser\"],\"OlAl5i\":[\"Tout développer\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Rejoindre Discord\"],\"P1YGsb\":[\"Génération SQL\"],\"P2m1xb\":[\"Arrêter en cas d’erreur\"],\"P3Qlys\":[\"Aucun ID de connexion\"],\"P6Y3Yf\":[\"Exécutez cette commande dans votre terminal, puis redémarrez Claude Code.\"],\"PCdj-c\":[\"Tout désélectionner\"],\"PMnFt9\":[\"Lecture disque/s\"],\"PQU2Va\":[\"Accepter la suggestion avec Entrée\"],\"PRnH8G\":[\"sur \",[\"0\"]],\"PY8UF3\":[\"Parallèle basculé (cellule \",[\"n\"],\")\"],\"PiH3UR\":[\"Copié !\"],\"Pia95d\":[\"Le nom de la colonne est requis\"],\"PrElXQ\":[\"Mettre à jour\"],\"PrixCC\":[\"Les lignes seront ajoutées à une table existante\"],\"Pujgbb\":[\"Configurer la destination\"],\"Pw_eQV\":[\"Échec de démarrage du plugin\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Aucune requête enregistrée\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Aucun processus enfant\"],\"QCxMC0\":[\"Vérifier automatiquement les nouvelles versions au lancement de l’application\"],\"QEazml\":[\"Supprimer la sélection\"],\"QHcLEN\":[\"Connecté\"],\"QLHHFO\":[\"Mode lecture seule\"],\"QOvAW3\":[\"Nouvelles fonctionnalités\"],\"QULGRi\":[\"Aucune requête valide trouvée\"],\"QZwllF\":[\"Parcourir...\"],\"QbkSr_\":[\"EXPLAIN indisponible.\"],\"QeHFYZ\":[\"EXPLAIN a échoué : \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"En savoir plus\"],\"Qu4Hog\":[\"Notebook importé avec succès\"],\"R-A2Vd\":[\"Aucune donnée à afficher\"],\"R0Hkb2\":[[\"0\"],\" base(s) de données sélectionnée(s)\"],\"R1nHhB\":[\"Existe déjà\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convertir en console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configuration\"],\"RF-HyV\":[\"Choisissez votre langue préférée. \\\"Auto\\\" utilisera la langue de votre système.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copier le nom\"],\"RI-HZc\":[\"Saisir la clé \",[\"0\"]],\"RJrE17\":[\"Voulez-vous vraiment supprimer la vue \\\"\",[\"0\"],\"\\\" ?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Une étoile aide d’autres personnes à découvrir le projet\"],\"Rb3Tdm\":[\"Nom du notebook\"],\"RcbKJ3\":[\"À la mise à jour\"],\"RkefFq\":[\"Exécute EXPLAIN avant d'afficher le modal pour montrer le plan.\"],\"RnF_hl\":[\"Chargement du registre des plugins...\"],\"Rns7_C\":[\"Cette action ne peut pas être annulée immédiatement\"],\"RoKRqW\":[\"Plugins disponibles\"],\"RphpKk\":[\"Apparence\"],\"Rt8sHM\":[\"Travail de tri ou temporaire détecté\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Activés\"],\"S1veKH\":[\"Annuler la sélection\"],\"S5zeZU\":[\"Afficher/masquer l’aperçu\"],\"S8Yqbl\":[\"Insérer\"],\"SDND4q\":[\"Non configuré\"],\"SJRy3D\":[\"(Généré automatiquement)\"],\"SSwIjo\":[\"Définir EMPTY\"],\"SgvA_r\":[\"Appuyez sur Exécuter (Ctrl/Commande+F5) pour charger les données de la table\"],\"SlfejT\":[\"Erreur\"],\"SoATkx\":[\"Copier la cellule\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL du point de terminaison\"],\"T7w5CQ\":[\"Échec de création de la nouvelle ligne : \"],\"T9947j\":[\"Valeur (ex. 'texte' ou 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Passer en disposition verticale\"],\"TK5oex\":[\"Enregistrer le prompt\"],\"TKQ7K-\":[\"Installer\"],\"TKZreP\":[\"Exiger\"],\"TMLAx2\":[\"Requis\"],\"TO08JI\":[\"clés étrangères\"],\"TQloo1\":[\"Créer une clé étrangère\"],\"TVKqvO\":[\"Modifier la ligne\"],\"TYSdQ3\":[\"Exécuter une requête SELECT\"],\"TfDFHS\":[\"Retourne les longues lignes dans l’éditeur au lieu d’un défilement horizontal.\"],\"Tibfjs\":[\"Aucune connexion enregistrée — créez-en une ci-dessous\"],\"Tj36Dr\":[\"Réinitialiser par défaut\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Verrouiller\"],\"TpwXyg\":[\"Si le temps manque, le serveur a probablement renvoyé un plan uniquement estimé.\"],\"Tw2M1h\":[\"Échec de l’installation\"],\"Ty-rm9\":[\"Connexions SSH\"],\"Tz0i8g\":[\"Paramètres\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Connexions Kubernetes\"],\"U4uzyV\":[\"Nouveautés\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Arrêter l’exécution lorsqu’une cellule échoue\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" sur \",[\"1\"],\" — examinez avant exécution.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configuration installée avec succès pour \",[\"clientName\"],\" ! Redémarrez l’application pour l’appliquer.\"],\"URmyfc\":[\"Détails\"],\"UWQBvp\":[\"Générer des modèles SQL\"],\"UawTKZ\":[\"Optionnel. Spécifiez l’exécutable utilisé pour lancer ce plugin (ex. python3 sous macOS/Linux, python ou un chemin complet sous Windows). Laissez vide pour utiliser la valeur par défaut.\"],\"Ub8sf5\":[\"SQLite ne prend pas en charge la suppression des clés étrangères via ALTER TABLE.\"],\"UbbJ8j\":[\"Aucune option trouvée\"],\"Ubs68g\":[\"Général\"],\"UftN8J\":[\"Ces connexions refuseront les écritures via MCP. Les autres restent normales.\"],\"UnQNah\":[\"Voulez-vous vraiment supprimer la colonne \\\"\",[\"0\"],\"\\\" de la table \\\"\",[\"tableName\"],\"\\\" ?\\n\\nATTENTION : toutes les données de cette colonne seront définitivement supprimées. Cette action est irréversible.\"],\"UncTTh\":[\"Somme du RSS sur l’arborescence des processus — peut surestimer la mémoire partagée\"],\"UpjgFm\":[\"Paramètres modifiés\"],\"UsAnu1\":[\"ANALYZE exécute la requête. Utilisez-le avec prudence pour les instructions modifiant les données.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Taille de tabulation\"],\"UzWGWO\":[\"Basculer vers le champ SQL WHERE\"],\"V-chk5\":[\"À quelle fréquence vérifier si les connexions actives sont toujours vivantes. Définissez 0 pour désactiver.\"],\"V-pw1j\":[\"Nom de la table\"],\"V2T0Uw\":[\"Aucun notebook enregistré pour le moment.\"],\"V3aNwx\":[\"Éditeur de données\"],\"VGYp2r\":[\"Appliquer à tout\"],\"VH8S7x\":[\"Colonne du presse-papiers\"],\"VIAEcS\":[\"Échec du chargement des bases de données. Vérifiez vos identifiants.\"],\"VKdztF\":[\"Ajouter des lignes\"],\"VLiHXI\":[\"Analyser les données\"],\"VMbmXc\":[\"Voulez-vous vraiment supprimer \\\"\",[\"pluginName\"],\"\\\" ? Cela supprimera les fichiers du plugin.\"],\"VO3weF\":[\"Aucun fichier chargé\"],\"VOZlKc\":[\"Importer une base de données\"],\"VPzsIz\":[\"Génération du nom...\"],\"VUul0v\":[\"Tuer\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Toutes les requêtes\"],\"Vi2Pqx\":[\"par\"],\"Vl2zn2\":[\"arrêté\"],\"Vo4uBA\":[\"Une erreur s’est produite lors de l’installation du plugin. Voir les détails ci-dessous.\"],\"VqqyOs\":[\"Exécutez une requête pour voir les résultats\"],\"VzhDFh\":[\"Bloquer tout statement non-SELECT via MCP, sauf pour les connexions autorisées ci-dessous.\"],\"W3uwpT\":[\"Fermer tous les onglets\"],\"W4MKLh\":[\"ex. Risqué en prod, confirmez…\"],\"WA8RND\":[\"Voulez-vous vraiment supprimer la table \\\"\",[\"0\"],\"\\\" ?\"],\"WG8Qgt\":[\"Supprimer la table\"],\"WLnvCZ\":[\"Saisir le nom d'utilisateur\"],\"WM-__8\":[\"Rechercher des connexions...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes importées dans \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" lignes importées dans \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Voulez-vous vraiment supprimer la requête \\\"\",[\"0\"],\"\\\" ?\"],\"WarTN_\":[\"réussies\"],\"WcF1uL\":[\"Nom du groupe\"],\"Weq9zb\":[\"Général\"],\"WmPpB1\":[\"Chargement du plan d'exécution…\"],\"Wu7cK0\":[\"Aucune base de données trouvée\"],\"WvoUQF\":[\"Cellule \",[\"n\"],\" supprimée\"],\"Ww3pDD\":[\"COMMANDE MANUELLE\"],\"X-20AU\":[\"Saisir le prompt de nom d’onglet de requête...\"],\"X-U6_w\":[\"Famille de police\"],\"X5fs0g\":[\"Créez votre première connexion pour commencer.\"],\"X7Ayjp\":[\"Mot de passe enregistré dans le trousseau système\"],\"X9kySA\":[\"Favoris\"],\"XJOV1Y\":[\"Activité\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Explication de requête\"],\"XVF2Pf\":[\"Modifier les schémas\"],\"XW6OYF\":[\"Ce plugin peut nécessiter un interpréteur (ex. Python). Utilisez les paramètres du plugin pour configurer le chemin de l’interpréteur.\"],\"XZB6Xr\":[\"Nombre max d’entrées de log\"],\"Xcffv2\":[\"Afficher les boutons AI Assist et Explain dans l’éditeur\"],\"XeqTSh\":[\"Type de jointure\"],\"XmJfZT\":[\"nom\"],\"XoQfG1\":[\"Utilisateur SSH\"],\"XwI0Vw\":[\"Auto (Système)\"],\"XyDlLX\":[\"Nom de l’index\"],\"Y2P2aK\":[\"Sélectionnez les schémas à charger :\"],\"Y8HYw2\":[\"valeur\"],\"Y8zX3R\":[\"Insérer dans l’éditeur\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Rechercher...\"],\"YWlnMZ\":[\"Port Ollama\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Parcourez et installez des plugins depuis le registre.\"],\"Y_3yKT\":[\"Ouvrir dans un nouvel onglet\"],\"YiAQ_Q\":[\"Actualiser les tables\"],\"Ysjr9Y\":[\"Aperçu SQL\"],\"YswNf7\":[\"Tous les niveaux\"],\"YtNwr6\":[\"Nombre maximal d’entrées d’historique de requêtes stockées par connexion.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Chargement...\"],\"Z7ZXbT\":[\"Approuver\"],\"Z8JpBH\":[\"Exporter en Notebook\"],\"Z8fBIc\":[\"Les lignes réelles dépassent l’estimation\"],\"ZC2VJP\":[\"Exécuter\"],\"ZCIS4k\":[\"aucun filtre actif\"],\"ZF1_UT\":[\"Mode SSL\"],\"ZGjBPa\":[\"Effacer les logs\"],\"ZHQTlM\":[\"Import depuis\"],\"ZIFDoJ\":[\"Veuillez sélectionner au moins Structure ou Données\"],\"ZIZA6o\":[\"Modifier avant d'approuver\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avertissements d'analyse\"],\"other\":[\"#\",\" avertissements d'analyse\"]}]],\"ZVn8p2\":[\"Affiche les numéros de ligne dans la marge de l’éditeur.\"],\"ZYnwzF\":[\"Déconnecté\"],\"Za3_fO\":[\"Erreur\"],\"Zf7LHg\":[\"Aucun contexte trouvé (kubectl est-il installé ?)\"],\"Zfotp5\":[\"De grands écarts d’estimation indiquent généralement des statistiques obsolètes ou des prédicats mal modélisés par le planificateur.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Échec du chargement des schémas\"],\"ZqXGPF\":[\"Échec de suppression de la vue : \"],\"ZuL73E\":[\"Créer une nouvelle vue de base de données\"],\"_-bi4r\":[\"Table référencée\"],\"_AEYGI\":[\"Aucun historique d’exécution pour le moment\"],\"_FdpZc\":[\"Échec du chargement de la définition de la vue : \"],\"_FxSdi\":[\"Parcourez les dépendances open source directes utilisées par l’application, le backend et l’outillage.\"],\"_JyTG8\":[\"Saisir le prompt d’explication...\"],\"_Ltc_k\":[\"Suppléments\"],\"_Q2Wix\":[\"lignes\"],\"_TK1zF\":[\"Connexion enregistrée\"],\"_bJFBE\":[\"Délai d’expiration de connexion\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Arborescence\"],\"_dqduX\":[\"Page suivante\"],\"_fwE6J\":[\"Plus ancien\"],\"_n04sB\":[\"Tuer\"],\"_otxbQ\":[\"Fichier de clé\"],\"_pezIT\":[\"Échec de connexion à \",[\"0\"],\". Vérifiez vos paramètres ou assurez-vous que la base de données est en cours d’exécution.\"],\"_srfkj\":[\"Clé personnalisée supprimée avec succès\"],\"_t6aFo\":[\"MySQL et MariaDB peuvent revenir à EXPLAIN FORMAT=JSON ou à EXPLAIN tabulaire selon la version du serveur.\"],\"_xTbaM\":[\"colonnes\"],\"_yxaaL\":[\"Index unique\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis est un projet libre et open source. Si vous le trouvez utile, pensez à soutenir le projet et à rejoindre la communauté.\"],\"a9CASo\":[\"SQLite ne prend en charge que le renommage des colonnes. Les autres modifications nécessitent de recréer la table manuellement.\"],\"aAIQg2\":[\"Apparence\"],\"aC_vCa\":[\"Générer un nom avec l’IA\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Sélectionnez un nœud pour voir les détails\"],\"aHKcKc\":[\"Page précédente\"],\"aI-5wG\":[\"Vérifier CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valeur par défaut\"],\"aScJP1\":[\"Exécuter cette requête\"],\"aVNbN8\":[\"Conditions de filtre\"],\"aWhdMQ\":[\"Utiliser une connexion SSH existante\"],\"aXYd8V\":[\"Délai\"],\"aX_S_r\":[\"Page \",[\"0\"],\" sur \",[\"totalPages\"]],\"agZcf8\":[\"SQL généré : \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [champs]\"],\"alplHn\":[\"Analyse du plan de requête avec l’IA...\"],\"anBcU3\":[\"Si vous aimez tabularis et souhaitez voir davantage de fonctionnalités, pensez à soutenir le projet en contribuant au code, en signalant des bugs ou en mettant une étoile au dépôt.\"],\"arHmj2\":[\"Voulez-vous vraiment supprimer cette requête de l’historique ?\"],\"arKcqW\":[\"Les anciens serveurs peuvent revenir à des plans estimés avec moins de métriques.\"],\"arcpYe\":[\"Validation requise\"],\"aurEkh\":[\"Chargement des processus…\"],\"avtdsd\":[\"Mode SQL\"],\"az8lvo\":[\"Désactivée\"],\"b1Ah3z\":[\"Focalisé sur\"],\"b392Dr\":[\"Tout développer\"],\"b5S_PU\":[\"Nom de la base de données\"],\"bAvovP\":[\"Descendre\"],\"bH3JqY\":[\"Aucune table trouvée\"],\"bP5JOn\":[\"Retour à la ligne automatique\"],\"bcOdok\":[\"Supprimer le groupe\"],\"bcqeas\":[\"Mettre toutes les requêtes MCP en lecture seule\"],\"bmca5u\":[\"Écritures seulement\"],\"bpCiBU\":[\"Autoriser les écritures via MCP\"],\"bqnhqW\":[\"L’estimation dépasse les lignes réelles\"],\"bqpcP7\":[\"Exporter la base de données\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Erreur\"],\"bw22Gk\":[\"Schéma des colonnes\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Principaux problèmes\"],\"cFCKYZ\":[\"Refuser\"],\"cFGrCP\":[\"table\"],\"cGeFup\":[\"Taille de police\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focaliser sur la table\"],\"cM9NHc\":[\"Rétrograder vers\"],\"cO9-2L\":[\"Désactiver\"],\"cSev-j\":[\"Filtres\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importer \",\"#\",\" lignes\"],\"other\":[\"Importer \",\"#\",\" lignes\"]}]],\"c_xoSn\":[\"Cellule \",[\"n\"],\" renommée\"],\"cd0XEW\":[\"Enregistrer la requête\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Diviser le groupe\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" instructions\"],\"d34vwG\":[\"Charger les bases de données\"],\"d6ynQ7\":[\"Tri décroissant\"],\"d8_6_v\":[\"annuler\"],\"d8wc1_\":[\"Exemples de valeurs\"],\"dBXoCS\":[\"Une variable d’environnement est présente, mais vous pouvez la remplacer en définissant une clé ci-dessus.\"],\"dD7NPy\":[\"Plan\"],\"dEgA5A\":[\"Annuler\"],\"dMtLDE\":[\"à\"],\"dPJVhW\":[\"Échec de l’installation\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" session\"],\"other\":[\"#\",\" sessions\"]}]],\"dTUzKm\":[\"Exécuter la sélection (\",[\"0\"],\")\"],\"dU_iQN\":[\"Aucune session ne correspond aux filtres.\"],\"dUh9QW\":[\"Planification\"],\"dVoir2\":[\"Cellule Markdown \",[\"n\"],\" ajoutée\"],\"dZ0d2O\":[\"Veuillez sélectionner au moins une table\"],\"dhi13U\":[\"Choisir une image…\"],\"dli1JX\":[\"Soumettre les modifications\"],\"dmYV6f\":[\"Routines\"],\"dohZCo\":[\"Instructions pour la génération SQL par IA. Utilisez \",[\"SCHEMA\"],\" comme espace réservé pour la structure de la base de données.\"],\"dtxpK2\":[\"Analyser\"],\"dwW9nJ\":[\"Afficher les numéros de ligne\"],\"dwWVw_\":[\"Afficher l’écran d’accueil\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" onglet\"],\"other\":[\"#\",\" onglets\"]}]],\"dxxY9r\":[\"Si existe\"],\"dyN4j9\":[\"Cliquez sur \\\"Exécuter l’aperçu\\\" pour voir les résultats\"],\"e07Iz5\":[\"Ouvrir le gestionnaire des tâches\"],\"e0NzXu\":[\"Ce projet est un Work In Progress (WIP). Les fonctionnalités principales sont stables, mais nous avons de grands projets.\"],\"e1UKxf\":[\"Enregistrer cette requête\"],\"e34gdU\":[\"Temps d'attente avant échec.\"],\"e62LQd\":[\"Forcer l’arrêt\"],\"e6QZsM\":[\"Thème de l’éditeur\"],\"e8CirT\":[\"Exécuter la requête\"],\"eD2kUP\":[\"Buffers lus\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Saisir le prompt d’analyse de plan EXPLAIN...\"],\"eIVolo\":[\"Lecture/écriture disque\"],\"eJOEBy\":[\"Exportation...\"],\"eKHY3W\":[\"Paramètres du plugin\"],\"eMb6Ub\":[\"Choisir une ressource...\"],\"ePK91l\":[\"Modifier\"],\"eXweu6\":[\"Développer la cellule\"],\"ecNsTE\":[\"Aucune requête ne correspond à votre recherche\"],\"ecUA8p\":[\"Aujourd’hui\"],\"ecpIZP\":[\"Saisissez la phrase secrète si la clé est chiffrée\"],\"esl-Tv\":[\"Type de ressource\"],\"exyUec\":[\"Connexion\"],\"f2AJjl\":[\"Supprimer la ligne\"],\"f4pD-j\":[\"Échec du test de connexion\"],\"f7sXvi\":[\"Saisir le mot de passe\"],\"fAsxc0\":[\"Scans séquentiels\"],\"fIeFs0\":[\"Sélectionner une valeur...\"],\"fJm92A\":[\"Sélectionnez un fichier contenant un plan EXPLAIN (format JSON ou texte PostgreSQL) pour le visualiser.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Valeurs\"],\"f_b1TA\":[\"Historique d’exécution\"],\"fghnqP\":[\"Passer à la connexion 1-9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Virgule (,)\"],\"fp711N\":[\"Bloquée (lecture seule)\"],\"fpzyLj\":[\"Page \",[\"0\"],\" sur \",[\"1\"]],\"fuA6oy\":[\"Délai d’expiration du socket\"],\"fvImQM\":[[\"0\"],\" sélectionnées\"],\"fwr_nh\":[\"Installez des extensions, gérez les pilotes de plugins et gardez les paramètres d'exécution sous contrôle.\"],\"g0ZzK4\":[\"JSON valide\"],\"g11hAR\":[\"Nouvelle ligne\"],\"g8VcMm\":[\"Mon cluster K8s\"],\"gCFR_O\":[\"Exécution parallèle (Tout exécuter)\"],\"gEjU98\":[\"Ouvrir les connexions\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Au moins une colonne est requise\"],\"gSuQrG\":[\"Aucune connexion ne correspond à \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Relancer la requête\"],\"gZWMnn\":[\"Analyse IA\"],\"ghYd73\":[\"Choisir la cible...\"],\"giAqEC\":[\"Créer une nouvelle table\"],\"gnQS8X\":[\"Taille maximale de paquet utilisée par le connecteur MySQL.\"],\"gqV5VL\":[\"Intégré, non personnalisable\"],\"gww_XE\":[\"Colonne référencée\"],\"gxXPJ9\":[\"Configurer l’interpréteur\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Agrandir\"],\"h-XNc9\":[\"Délimiteur CSV\"],\"h-kNAk\":[\"ex. donnees_ventes\"],\"h3Z_aK\":[\"Écrivez du Markdown ici...\"],\"h7MgpO\":[\"Raccourcis clavier\"],\"h7peZQ\":[\"Autoriser\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processus système en cours\"],\"other\":[\"#\",\" processus système en cours\"]}]],\"hEZrFh\":[\"Exécuter un fichier SQL...\"],\"hEipgW\":[\"Vérifier les mises à jour maintenant\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Exporter en CSV\"],\"hItdtk\":[\"Parcourir le dossier\"],\"hXFVjo\":[\"Le nom de la table est requis\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Relancer\"],\"hbz1rh\":[\"clés\"],\"hdsaJo\":[\"Importation...\"],\"he3ygx\":[\"Copier\"],\"hfGimp\":[\"Choisir un namespace...\"],\"hjjSEi\":[\"Connexions en lecture seule\"],\"hjwN_s\":[\"Nom de la ressource\"],\"hlF1mD\":[\"Copier la sélection\"],\"hnboBb\":[\"Analyse IA du plan de requête\"],\"hq4-D2\":[\"La clé API est stockée en toute sécurité dans le trousseau système. Définir une clé ici remplace la variable d’environnement.\"],\"hqjXdn\":[\"Échec de suppression de la connexion SSH\"],\"hqofAK\":[\"Copier le SQL\"],\"hy6L14\":[\"Voir sur GitHub\"],\"hyjACX\":[\"Cellules réduites/développées\"],\"hz1b5W\":[\"Aucun élément correspondant trouvé\"],\"i1vAVM\":[\"Créer nouvelle table\"],\"i3S5T3\":[\"Rechercher dans les favoris...\"],\"i4_LY_\":[\"Écriture\"],\"i5HBWh\":[\"Historique des requêtes réinitialisé\"],\"iAVlge\":[\"Personnalisez les instructions pour la génération IA des noms de cellules de notebook. Le contenu de la cellule (SQL ou Markdown) est envoyé comme message utilisateur.\"],\"iE1yAB\":[\"Filtrer les tables...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connecter\"],\"iSryJ2\":[\"Mon serveur SSH\"],\"iT7UeX\":[\"Ajouter un index\"],\"iUWwuR\":[\"Télécharger et installer\"],\"ia7i08\":[\"Sélectionnez d'abord contexte/namespace/type\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Enregistré\"],\"igcsfY\":[\"Aucun plugin disponible dans le registre.\"],\"ij-Elv\":[\"Aperçu de l’image\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" requêtes explicables trouvées\"],\"other\":[\"#\",\" requêtes explicables trouvées\"]}]],\"ioL38P\":[\"Surveillez en temps réel les processus plugins, le CPU, la RAM et l’utilisation disque\"],\"ixlL_e\":[\"Fichier de clé SSH (optionnel)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Sélectionner un modèle\"],\"j3gyYH\":[\"Tout appliquer\"],\"j5CWO4\":[\"À jour\"],\"j9HPuI\":[\"Ligne n°\",[\"0\"]],\"jBtpMP\":[\"Tous les statuts\"],\"jEu4bB\":[\"Colonnes\"],\"jEyQIs\":[\"Aucune routine trouvée\"],\"jHc1By\":[\"Supprimer la vue\"],\"jI6sj4\":[\"Le coût, le temps et les estimations de lignes sont souvent indisponibles comparés à PostgreSQL et MySQL.\"],\"jIxQCZ\":[\"Indisponible sur votre plateforme\"],\"jKIncn\":[\"Le nom de la base de données est requis\"],\"jPSk57\":[\"Motif (facultatif)\"],\"jUNY_d\":[\"vue\"],\"jVqjDo\":[\"Format de fichier notebook invalide\"],\"jWSZ-A\":[\"Aperçu uniquement - données complètes non chargées\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Délai d’expiration du socket en millisecondes.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Le nom de la connexion est requis\"],\"jsQZMk\":[\"IA\"],\"juO8wz\":[\"processus enfant\"],\"jx0t66\":[\"Réduire les processus enfants\"],\"jxShEf\":[\"Créer une vue\"],\"jz5PKx\":[\"Définition de la vue\"],\"k-0mL-\":[\"Ajouter une colonne\"],\"k-XiMX\":[\"Brut\"],\"k2UnVy\":[\"Condition hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"secondes\"],\"kBiBq7\":[\"Supprimer l’index \\\"\",[\"name\"],\"\\\" ?\"],\"kEYasw\":[\"Afficher/masquer le graphique\"],\"kI1qVD\":[\"Formater\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes · \",[\"1\"],\" ms\"],\"other\":[\"#\",\" lignes · \",[\"2\"],\" ms\"]}]],\"kJDmsI\":[\"Détails de l'événement\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registre\"],\"kY-q3P\":[[\"label\"],\" est requis\"],\"kexIdC\":[\"Utiliser le Port-Forward Kubernetes\"],\"kj2-CR\":[\"Détails de l’erreur\"],\"krksx_\":[\"Succès\"],\"kwY6nh\":[\"Fermer\"],\"kx0s-n\":[\"Résultats\"],\"kxUEfE\":[\"Échec de récupération de la définition de la routine : \"],\"l2Op2p\":[\"Paramètres de requête\"],\"l9Ivba\":[\"Processus plugins et ressources système\"],\"lBdPxu\":[\"Couleur d'accent\"],\"lCF0wC\":[\"Actualiser\"],\"lEQRwq\":[\"Données (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nouvelle table créée\"],\"lOekZ3\":[\"Passer en disposition horizontale\"],\"lUA1C1\":[\"Phrase secrète de clé SSH (optionnel)\"],\"lVeG20\":[\"Dépendances Rust\"],\"lXAG6D\":[\"Instructions pour l’explication de requêtes par IA. Utilisez \",[\"LANGUAGE\"],\" comme espace réservé pour la langue de sortie.\"],\"lbbYjy\":[\"Modifiez directement le fichier de configuration brut. Un redémarrage est nécessaire pour appliquer les changements.\"],\"lhKW0m\":[\"Cellule SQL \",[\"n\"],\" ajoutée\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Taille de page des résultats (limite)\"],\"lkz6PL\":[\"Durée\"],\"lmVGeo\":[\"Ajouter une clé étrangère\"],\"lnnx3E\":[\"Connectez Tabularis à Claude Desktop, Cursor et plus encore\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Ajouter\"],\"m2Q_r8\":[\"Détecter le JSON dans les colonnes texte\"],\"m2tskz\":[\"Succès\"],\"mA-qpe\":[\"Exécution complète\"],\"mBhhbA\":[\"Logs exportés dans le presse-papiers\"],\"mCNdzH\":[\"Exécuter la cellule\"],\"mO95sp\":[\"Fermer le panneau\"],\"mP7dLi\":[\"Saisissez le nom de la police ci-dessus\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloqué\"],\"other\":[\"#\",\" bloqués\"]}]],\"mS74ir\":[\"Échec de l’enregistrement de la connexion SSH\"],\"mSqtw8\":[\"Exécuter l’aperçu\"],\"mURmfQ\":[\"Définition de la vue (SQL)\"],\"mX_isJ\":[\"Verticale\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Structure (DDL)\"],\"mrk4Cf\":[\"Trier par \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Nous venons d’ouvrir une communauté dédiée à Tabularis : entraide, astuces et influence sur la roadmap.\"],\"mtvVdV\":[\"Lignes traitées\"],\"mx4evv\":[\"Créer la table\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Télécharger\"],\"n7JDTx\":[\"Installez et activez des plugins pour les voir ici\"],\"nDDJir\":[\"Rechercher session, client, connexion…\"],\"nHP-Kr\":[\"Aucune session active. Veuillez sélectionner une connexion.\"],\"nKhCjW\":[\"Sélectionner les tables\"],\"nNmhuY\":[\"Créer un index\"],\"nNwvm4\":[\"Erreur\"],\"nOVim5\":[\"Échec de l’enregistrement de la connexion\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Extension requise : \",[\"0\"]],\"ngO6Pv\":[\"Autorise la touche Entrée (en plus de Tab) à accepter la suggestion d’autocomplétion active. Lorsqu’elle est désactivée, Entrée insère toujours un saut de ligne.\"],\"nhmF3p\":[\"connexions\"],\"noM5A_\":[\"Créez votre première connexion\"],\"nohy4m\":[\"Aucune activité MCP.\"],\"nr-axf\":[\"Supprimer le plugin\"],\"nsPFX9\":[\"Ouvrir dans Visual Explain\"],\"nuBbBr\":[\"Graphique\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Modifier\"],\"o21Y-P\":[\"entrées\"],\"o3tP_A\":[\"Supprimer l’index\"],\"o45L8r\":[\"Indiquez le nom de votre connexion\"],\"o53XGh\":[\"Copier la/les ligne(s) sélectionnée(s)\"],\"o7J4JM\":[\"Filtre\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Niveau\"],\"oGiIL7\":[\"Fournisseur par défaut\"],\"oJ4rAm\":[\"Connexion perdue\"],\"oJlXF2\":[\"Importer le notebook\"],\"oMFv82\":[\"Diviser verticalement\"],\"oOFiQg\":[\"Limite le nombre de lignes récupérées par requête afin d’éviter les problèmes de performance. Définissez 0 pour désactiver la limite (non recommandé).\"],\"oT9ZD3\":[\"Masquer la vue d’ensemble\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Graphique modifié (cellule \",[\"n\"],\")\"],\"oWfclW\":[\"Affiche le visualiseur JSON lorsqu'une cellule texte non typée contient un objet ou un tableau JSON. Ajoute un petit coût d'analyse par cellule.\"],\"obpbdz\":[\"Fichier de configuration introuvable (à créer manuellement)\"],\"odZgfC\":[\"CLIENTS IA\"],\"ogZhXn\":[\"Choisissez la direction de disposition par défaut pour les diagrammes ER\"],\"ohUJJM\":[\"Plugins\"],\"ok3hJJ\":[\"Installés\"],\"olAdaI\":[\"Lignes réelles\"],\"olWzar\":[\"Forcer l’arrêt du processus du plugin\"],\"ovBPCi\":[\"Défaut\"],\"owzTWN\":[\"Modèles IA actualisés depuis les fournisseurs\"],\"oxYi6j\":[\"Ajustez la taille de police de base utilisée dans toute l’application (10-20 px).\"],\"p--hsQ\":[\"Une connexion à la base de données a été perdue\"],\"p6NueD\":[\"NOUVELLE\"],\"pOYHox\":[\"Actions\"],\"pR9bTR\":[\"Aucune donnée BLOB\"],\"pRDT0m\":[\"Table\"],\"pS8S5q\":[\"ex. users, orders, products\"],\"pSws_M\":[\"Nom de la table\"],\"pVLbKZ\":[\"Vue créée avec succès\"],\"pWT04I\":[\"Vérification...\"],\"pZJ_6D\":[\"Le nom de l’index est requis\"],\"pddYFG\":[\"Saisir le prompt de nom de cellule de notebook...\"],\"pnpyuD\":[\"Activer les logs\"],\"pqKMPv\":[\"Échec de la création de la table : \"],\"pqaP1h\":[\"Fermer\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"ex. Comic Sans MS\"],\"pzu7v4\":[\"Horizontale\"],\"q-ch8m\":[\"Les autres restent en lecture seule. Seules celles cochées peuvent écrire.\"],\"qIrtcK\":[\"Mises à jour\"],\"qOqy8G\":[\"Vérification de la configuration...\"],\"qWaVNs\":[\"Enregistrer et redémarrer\"],\"qb3LPX\":[\"Afficher le diagramme ER\"],\"qkK0vq\":[\"Le nom de la vue est requis\"],\"qki9tG\":[\"Erreur\"],\"qoIir-\":[\"L’URL de base de votre API compatible OpenAI. Exemples : https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Tout réduire\"],\"r6ncaO\":[\"Fermer l’onglet\"],\"rAJlpP\":[\"Port du conteneur\"],\"rG3WVm\":[\"Lecture\"],\"rGRCeK\":[\"Effacer l’historique des requêtes\"],\"rNIto7\":[\"Le nom de la ressource est requis\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exporté avec succès\"],\"rY4sEV\":[\"Supprimer la clé étrangère\"],\"rbu0nO\":[\"Gérer les connexions SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connexion(s)\"],\"other\":[\"#\",\" connexion(s)\"]}]],\"rn2_2V\":[\"Supprimer le filtre\"],\"roABNH\":[\"Aucun historique de requêtes\"],\"rtir7c\":[\"inconnu\"],\"ru0-2W\":[\"Aucune connexion active\"],\"rvDPWO\":[\"Écart d’estimation\"],\"rwWjWg\":[\"Notes de version\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Tester la connexion\"],\"sBOaim\":[\"Le fichier de configuration a été enregistré. Redémarrer maintenant pour appliquer les changements ?\"],\"sCyv9B\":[\"Actualiser les modèles\"],\"sSUqe4\":[\"Supprimer\"],\"sUBkgN\":[\"Génération du SQL...\"],\"sZZG3d\":[\"Voulez-vous vraiment importer \\\"\",[\"0\"],\"\\\" ?\\nCela peut écraser des données existantes.\"],\"sbK5ck\":[\"Rechercher dans l’historique...\"],\"sq_bS6\":[\"À la suppression\"],\"suW7-E\":[\"Délai d’expiration de connexion en millisecondes.\"],\"t-R8-P\":[\"Exécution\"],\"t1OfVY\":[[\"totalLibraries\"],\" bibliothèques\"],\"t2TMzs\":[\"Fermer l’onglet\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Sélectionner une table...\"],\"t7KRl1\":[\"Journal de chaque appel MCP et des requêtes en attente de validation. Stockage local.\"],\"t9NJIk\":[\"Opérations gourmandes en scans détectées\"],\"tB7xof\":[\"Opérations temporaires ou de tri\"],\"tBBXTO\":[\"Intervalle de ping\"],\"tFrT3w\":[\"Ajoutez ceci manuellement au fichier de configuration de votre client si l’installation automatique échoue.\"],\"tJ7UbA\":[\"expliquer la sélection\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Diviser horizontalement\"],\"tQhW-D\":[\"Paramètres des logs\"],\"tXFGEx\":[\"Aucune connexion Kubernetes enregistrée. Cliquez sur « Ajouter » pour en créer une.\"],\"tXLz_8\":[\"Supprimer\"],\"tXpRby\":[\"Grille de données\"],\"tbysEk\":[\"Actions\"],\"tdta9X\":[\"Page \",[\"0\"]],\"tfDRzk\":[\"Enregistrer\"],\"tfEioV\":[\"Exécuter toutes les cellules SQL de haut en bas\"],\"tiAIaJ\":[\"Mot de passe SSH manquant. Veuillez le ressaisir.\"],\"tk22BR\":[\"Collez des données structurées et vérifiez le schéma avant l'import\"],\"tst44n\":[\"Événements\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"Fichier SQL exécuté avec succès\"],\"u6QeR6\":[\"Redémarrer maintenant\"],\"uAQUqI\":[\"Statut\"],\"uBAxNB\":[\"Éditeur\"],\"uFViPK\":[\"Aucune connexion SSH disponible\"],\"uHUuhp\":[\"Expliquer cette requête\"],\"uHfFzS\":[\"Taille de police de l’éditeur\"],\"uJ_3K5\":[\"Supprimer le notebook « \",[\"0\"],\" » ? Cette action est irréversible.\"],\"uKaNJ3\":[\"Ouvrir dans l’éditeur JSON\"],\"uQBwTo\":[\"Schémas\"],\"ub54ff\":[\"Centre de plugins\"],\"ufFyBs\":[\"Base de données exportée avec succès\"],\"upNmR2\":[\"Ouvrir l’éditeur latéral\"],\"utMia3\":[\"Tout désélectionner\"],\"uyNaJg\":[\"1 élément\"],\"v61dnS\":[\"Saisissez le nom exact du modèle pour votre fournisseur compatible OpenAI.\"],\"v6oeyr\":[\"Installé\"],\"v75DGg\":[\"Parcourir le fichier\"],\"v99dO4\":[\"Clé primaire\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" requêtes trouvées\"],\"other\":[\"#\",\" requêtes trouvées\"]}]],\"vCSBPD\":[\"Ajouter un filtre\"],\"vH7uJj\":[\"Trier par…\"],\"vUOA1-\":[\"Rechercher des modèles...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE inclut les lignes réelles, le temps, les boucles et les compteurs de buffer lorsqu’ils sont disponibles.\"],\"vXIe7J\":[\"Langue\"],\"vYf4Jm\":[\"Saisissez une fonction SQL complète (ex. ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Préférer\"],\"vditm4\":[\"Expliquer le plan\"],\"vks_ls\":[\"Fermer les autres onglets\"],\"vnAnIp\":[\"Le modèle \",[\"0\"],\" est introuvable dans \",[\"1\"],\". Il pourrait ne pas fonctionner correctement.\"],\"vqoN5u\":[\"Structure\"],\"vrAvbP\":[\"Voulez-vous vraiment supprimer le groupe \\\"\",[\"0\"],\"\\\" ? Les connexions de ce groupe seront déplacées vers Non groupées.\"],\"vtJ2yO\":[\"Explorateur\"],\"vujQJ5\":[\"Localisation\"],\"vvJPVL\":[\"Afficher la vue d’ensemble\"],\"vwI5S4\":[\"Succès\"],\"vzH-7Z\":[\"Expliquer\"],\"w7QmD_\":[\"Saisir le prompt système...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Temps écoulé\"],\"wCfv2R\":[\"Ajouter une connexion\"],\"wGfc86\":[\"Effacer tout l’historique\"],\"wGwNv4\":[\"Base de données active\"],\"wJJ-Wy\":[\"Installation...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers touchés\"],\"wQn-RM\":[\"Ajouter une colonne\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Appliqué\"],\"wTmVhm\":[\"Supprimer\"],\"wZeIWq\":[\"Importer depuis le Presse-papiers\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"En attente\"],\"wckWOP\":[\"Gérer\"],\"wdYcKH\":[\"Onglets ouverts\"],\"wja8aL\":[\"Sans titre\"],\"wkOAzk\":[\"Aucun notebook ne correspond à votre recherche.\"],\"wp49Ao\":[\"Échec du traitement des insertions : \"],\"wqG2hQ\":[\"Ignorer (ne pas importer)\"],\"wwrAsK\":[\"Veuillez remplir tous les champs requis\"],\"wwu18a\":[\"Icône\"],\"x2fr_j\":[\"Graphe\"],\"xANKBj\":[\"Fonctions\"],\"xBwjck\":[\"Un redémarrage est nécessaire pour appliquer les changements.\"],\"xDAtGP\":[\"Message\"],\"xECY01\":[\"Procédures\"],\"xGPNgZ\":[\"Personnalisation des prompts\"],\"xNgtS-\":[\"Aucune vue trouvée\"],\"xOPa1b\":[\"Le port doit être compris entre 1 et 65535\"],\"xY9s5E\":[\"Délai dépassé\"],\"xaVUr1\":[\"Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwis\"],\"xbvTzL\":[\"Chemin du fichier\"],\"xlew5F\":[\"Effacer\"],\"xmNyKz\":[\"Test en cours...\"],\"xtuh6D\":[\"Développer l’explorateur\"],\"y-Zdqj\":[\"Choisir un contexte...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Ouvrir le visualiseur JSON\"],\"yQXjG5\":[\"Tout désélectionner\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Hier\"],\"ygCKqB\":[\"Arrêter\"],\"ykCc6r\":[\"Base de données modifiée (cellule \",[\"n\"],\")\"],\"ynVMSc\":[\"Tout sélectionner\"],\"ytdz1d\":[\"L'IA veut exécuter une écriture\"],\"yyhzur\":[\"Créer une table\"],\"yz7wBu\":[\"Fermer\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"Mot de passe SSH\"],\"z5kV0h\":[\"Connexions\"],\"zBTMzx\":[\"Aperçu\"],\"zCaAKs\":[\"Erreur de mise à jour\"],\"zDAakK\":[\"Impossible d’afficher le diagramme sans ID de connexion.\"],\"zGe21h\":[\"Cette clé est chargée depuis une variable d’environnement\"],\"zGfL5t\":[\"valeur\"],\"zL6-4A\":[\"Aucun processus de plugin n’est en cours\"],\"zLZhCi\":[\"Nouvelle communauté Discord !\"],\"zLlCou\":[\"Copier le nom de colonne\"],\"zNEL34\":[\"Rejoindre la communauté\"],\"zNgTlV\":[\"Fermer les onglets à droite\"],\"zQz55p\":[\"Inspecter la structure\"],\"zR0FfH\":[\"Exporté vers \",[\"target\"]],\"zRZeOc\":[\"Rechercher tables, vues, routines, triggers...\"],\"zUNMsr\":[\"Clé SSH\"],\"zXMRzb\":[\"Port SSH\"],\"zZgoXr\":[\"Aucune table correspondante\"],\"zaWbms\":[\"Annuler les modifications\"],\"zgClmU\":[\"Installer la configuration\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Saisir une valeur...\"],\"zvzN4C\":[\"Définir comme actif\"],\"zzDlyQ\":[\"Succès\"],\"zzMxrp\":[\"Modifier config.json\"],\"zz_Wd_\":[\"Mode\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Nombre max d’entrées d’historique\"],\"-6AWa-\":[\"Importer les connexions\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Déconnecter\"],\"-PLZfh\":[\"Échec de l’actualisation des modèles\"],\"-T5W2e\":[\"Notes du pilote\"],\"-ZgeeE\":[\"Historique des modifications\"],\"-aYrdc\":[\"La version \",[\"0\"],\" est disponible\"],\"-fBGXl\":[\"Coût le plus élevé\"],\"-jIQDz\":[\"Réduire la cellule\"],\"-u1eRo\":[\"Aucune base de données\"],\"-yoeVU\":[\"Chargement du schéma...\"],\"-zy2Nq\":[\"Type\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID validation\"],\"0E5-gF\":[\"Voulez-vous vraiment supprimer cette connexion ?\"],\"0HCubq\":[\"Agrandir\"],\"0Kmdvy\":[\"Police personnalisée\"],\"0Nj13E\":[\"Générer du SQL\"],\"0ROgz5\":[\"Saisir du JSON...\"],\"0SY9sU\":[\"Échec de la déconnexion de la base de données\"],\"0b3kL9\":[\"Sélectionner une base de données\"],\"0caMy7\":[\"Historique\"],\"0mx5ow\":[\"Requête\"],\"0n9BtL\":[\"Aperçu\"],\"0pHB9N\":[\"Copier comme table.column\"],\"0sQzZK\":[\"Filtrer les bases de données...\"],\"0uPP9X\":[\"Nom de la clé étrangère (optionnel)\"],\"0wxuek\":[\"Version actuelle\"],\"0x09Aw\":[\"Arrêt en cas d'erreur basculé\"],\"0yBP6v\":[\"Soutenir le développement\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes\"],\"other\":[\"#\",\" lignes\"]}]],\"0yVAoD\":[\"Compter les lignes\"],\"0zxJ87\":[\"Aucun log disponible\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Modifier la vue\"],\"11fGJ6\":[\"Requêtes\"],\"13hIUA\":[\"Clé API \",[\"0\"]],\"14qNWF\":[\"Sélectionner une connexion SSH\"],\"17qHRP\":[\"Nouvelle connexion\"],\"1Dn6bg\":[\"Importer depuis le Presse-papiers\"],\"1Dnd0I\":[\"Charger le nombre de lignes\"],\"1FjTLW\":[\"ex. python3\"],\"1GOvbo\":[\"Ollama connecté (\",[\"0\"],\" modèles trouvés)\"],\"1I6UoR\":[\"Vues\"],\"1U7hS5\":[\"Longueur\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Police de l’éditeur\"],\"1ekzlY\":[\"Processus des plugins\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Choix du thème\"],\"1xVZkL\":[\"Aucun modèle trouvé\"],\"26Joci\":[[\"0\"],\" lignes récupérées\"],\"2Bf-Qe\":[\"Nouvelle console\"],\"2CrSmP\":[\"Aidez tabularis à grandir\"],\"2D9F8_\":[\"Échec de duplication de la connexion\"],\"2Eoi_a\":[\"Voir les détails\"],\"2F4pE5\":[\"Build et tests Rust\"],\"2Fsd9r\":[\"Ce mois-ci\"],\"2JzKXI\":[\"Définir GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Tout sélectionner\"],\"2SO5RM\":[\"Kubernetes n'est pas disponible pour ce pilote.\"],\"2Uh5GA\":[\"écosystème Cargo\"],\"2YylFp\":[\"Nouvelle requête visuelle\"],\"2luuSG\":[\"Réessayer\"],\"2wxgft\":[\"Renommer\"],\"2yG2GC\":[\"Mettre en pause les écritures (ou toutes les requêtes) et demander la validation utilisateur avant exécution.\"],\"30-b5r\":[\"Supprimer\"],\"31kwdN\":[\"Dupliquer le filtre\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Tous les outils\"],\"3Am5DS\":[\"Vue onglets\"],\"3FVg9_\":[\"Colonne locale\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Exécuter\"],\"3L0HCz\":[\"Aucun plugin ne correspond à la recherche.\"],\"3Nv3JV\":[\"Exécution de la requête...\"],\"3TSz9S\":[\"Réduire\"],\"3UW8fG\":[\"Mises à jour gérées par \",[\"0\"]],\"3YvS-c\":[\"Nouvel onglet\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt de nom de cellule de notebook\"],\"3qkggm\":[\"Plein écran\"],\"3rBJ1T\":[\"Afficher le schéma\"],\"3xZ-xV\":[\"Insérer l'horodatage actuel\"],\"40Gx0U\":[\"Fuseau horaire\"],\"41GP4f\":[\"Choisissez le caractère séparateur par défaut utilisé lors de la copie ou de l’export des lignes en CSV.\"],\"42iaEi\":[\"PostgreSQL sans ANALYZE n’affiche que les estimations du planificateur.\"],\"44cXI8\":[\"Trier par \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gérer les bases de données\"],\"4CK17g\":[\"Voulez-vous vraiment modifier la vue \\\"\",[\"name\"],\"\\\" ?\"],\"4DDaw-\":[\"Sélectionnez au moins une base de données\"],\"4D_Nvt\":[\"Échec de création du groupe\"],\"4RiR6c\":[\"Exporter en HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processus enfant\"],\"other\":[\"#\",\" processus enfants\"]}]],\"4VyuY3\":[\"Voulez-vous vraiment effacer tous les logs ?\"],\"4WWqS3\":[\"Afficher/masquer l'arbre JSON\"],\"4XAQdl\":[\"Créer l’index\"],\"4cEClj\":[\"Sessions\"],\"4cmfYp\":[\"Dupliquer la ligne\"],\"4hsr6d\":[\"Créer une vue\"],\"4lIZTB\":[\"Dépendances de développement frontend\"],\"4oYjvJ\":[\"Rechercher…\"],\"4tMxW4\":[\"Aperçu de l'enregistrement lié\"],\"4yJcjm\":[\"Sélectionner le type...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Fermer le panneau de filtres (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Point-virgule (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" événement\"],\"other\":[\"#\",\" événements\"]}]],\"5I2fxu\":[\"/chemin/vers/id_rsa\"],\"5NZpX8\":[\"Vue liste\"],\"5To6Z6\":[\"Copier la requête\"],\"5gqNQl\":[\"Vue grille\"],\"5igIzr\":[\"Import annulé\"],\"5nTIup\":[\"Modification de la vue : \",[\"name\"]],\"5qIe8E\":[\"Tout exécuter\"],\"66bEht\":[\"État du projet\"],\"6PIJVc\":[\"Démarrage\"],\"6QvP0l\":[\"Exporter en JSON\"],\"6W41Xq\":[\"Gestionnaire des tâches\"],\"6WngBH\":[\"Définir NULL\"],\"6YtxFj\":[\"Nom\"],\"6_dCYd\":[\"Vue d’ensemble\"],\"6dOBsk\":[\"Créer la vue\"],\"6gvoHP\":[\"Copier le message d’erreur\"],\"6oCVzX\":[\"Le contexte Kubernetes est requis\"],\"6wQO0f\":[\"Afficher les données\"],\"6z9W13\":[\"Redémarrer\"],\"71agNy\":[\"Générer des noms IA pour les cellules sans nom\"],\"74J3FG\":[\"Version initiale\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Compris\"],\"77nSMU\":[\"Supprimer tout l'historique d'activité IA ? Action irréversible.\"],\"7ABmyQ\":[\"Réessayer\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" sur \",[\"0\"],\" actifs\"],\"7E864M\":[\"Type de base de données\"],\"7FqaG1\":[\"Personnalisez les instructions pour l’analyse IA des plans EXPLAIN. Utilisez \",[\"LANGUAGE\"],\" pour la langue de sortie.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Types mixtes détectés, défaut TEXT\"],\"7RSQQd\":[\"Enregistrer les mots de passe dans le trousseau\"],\"7VpPHA\":[\"Confirmer\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"échouées\"],\"7sMeHQ\":[\"Clé\"],\"7sNhEz\":[\"Nom d’utilisateur\"],\"7tATh2\":[\"Exécuter la requête\"],\"7yb4gk\":[\"Échec : \"],\"8-4V8D\":[\"Tables\"],\"82G-l5\":[\"Le Model Context Protocol (MCP) permet aux assistants IA (comme Claude) de se connecter à vos outils locaux. Tabularis expose un serveur MCP permettant à l’IA de lire le schéma de votre base de données et d’exécuter des requêtes en toute sécurité.\"],\"83VjWE\":[\"Nouveau notebook\"],\"86IgoU\":[\"Exécuter la requête (dans l’éditeur)\"],\"86fCgf\":[\"Personnalisez les instructions pour la génération IA du nom des onglets de résultats. La requête SQL est envoyée comme message utilisateur.\"],\"87a_t_\":[\"Étiquette\"],\"87kWsr\":[\"Exporter les connexions\"],\"8CWirf\":[\"Serveur MCP\"],\"8S8aIX\":[\"Vérification de l’état des connexions\"],\"8TMaZI\":[\"Horodatage\"],\"8Tg_JR\":[\"Personnalisé\"],\"8UFKYr\":[\"Sélectionner la requête à exécuter\"],\"8VKSGV\":[\"Générer le SQL\"],\"8Wjy6z\":[\"Fermer les onglets à gauche\"],\"8ZsakT\":[\"Mot de passe\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Éditeur SQL\"],\"8bRgTe\":[\"Fournisseur IA non configuré. Veuillez aller dans Paramètres > IA.\"],\"8c_W0h\":[\"Anciennes versions\"],\"8guEQP\":[\"Actualiser les vues\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN est léger et principalement structurel.\"],\"8q_sOc\":[\"Supprimer\"],\"8t-akp\":[\"premières \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nom de la connexion\"],\"91gnWY\":[\"Exporter les logs\"],\"91rtHL\":[\"Créer une nouvelle vue\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Nouveau groupe\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vue mise à jour avec succès\"],\"9NzDFn\":[\"Afficher l’écran d’accueil au démarrage de l’application.\"],\"9OoUS3\":[\"Créer une nouvelle connexion SSH\"],\"9QGRD5\":[\"Colonne cible\"],\"9QTny9\":[\"Échec de la requête.\"],\"9S-fyV\":[\"Plan d'exécution préalable\"],\"9SJ_Sx\":[\"Ressources système\"],\"9UQ730\":[\"Cloner\"],\"9X6cky\":[\"NON\"],\"9XUV5V\":[\"Aucune donnée dans le presse-papiers\"],\"9hGjL2\":[\"Créer un index\"],\"9mMU1R\":[\"Temps\"],\"9mvFo_\":[\"Heure\"],\"9npOH9\":[\"Ouvrir un fichier\"],\"9uI_rE\":[\"Annuler\"],\"9xUjzm\":[\"Tout sélectionner\"],\"9y_02p\":[\"Discutez avec la communauté, obtenez de l’aide, proposez des fonctionnalités\"],\"A1pPcI\":[\"Hôte SSH\"],\"A1taO8\":[\"Rechercher\"],\"A6C0pv\":[\"Coût total\"],\"A7WG0p\":[\"Plugin désactivé\"],\"A7yRz3\":[\"La définition de la vue est requise\"],\"A9Uyp6\":[\"Échec de l’import : \"],\"ABEd-z\":[\"Utilisez votre gestionnaire de paquets pour mettre à jour Tabularis.\"],\"AMdgKV\":[\"Prompt d’analyse de plan EXPLAIN\"],\"ANSTMe\":[\"Aucun problème majeur détecté dans le résumé actuel du plan.\"],\"ANzIr7\":[\"Historique des requêtes\"],\"AOnaU7\":[\"ignorées\"],\"AVlZoM\":[\"Environnement\"],\"AXTVsE\":[\"Vérification complète\"],\"AXdRYR\":[\"Logs actuels\"],\"Aa-YkQ\":[\"Exporter le notebook\"],\"Ai2U7L\":[\"Hôte\"],\"AidayG\":[\"Filtrer par niveau\"],\"AlPiMN\":[\"Cliquer pour aller à la page\"],\"An-1rA\":[\"Lignes retournées\"],\"AnV8j-\":[\"Modifier la colonne\"],\"AvEr_L\":[\"Nouvelle console\"],\"AvYbUL\":[\"Mettre une étoile sur GitHub\"],\"Aw_eOs\":[\"Nécessite Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Aucun résultat trouvé\"],\"B0mJGb\":[\"Sortie brute\"],\"B1c58n\":[\"Modifier la colonne\"],\"B3toQF\":[\"Objets\"],\"B5nKny\":[\"/chemin/absolu/vers/dossier\"],\"B5xevr\":[\"Le nom de la connexion est requis\"],\"BAVvWJ\":[\"Diagramme ER\"],\"BBtVak\":[\"Tout réduire\"],\"BEVzjL\":[\"Échec de l’import\"],\"BHATjK\":[\"Exporter les connexions\"],\"BJe2lZ\":[\"Afficher/masquer la barre latérale\"],\"BK3WCj\":[\"Échec de chargement du registre\"],\"BKbO3i\":[\"Notebook modifié\"],\"BMB51y\":[\"Exécuter dans la console\"],\"BNW_Z4\":[\"ex. active_users, order_summary\"],\"BPkXj7\":[\"Créer une clé étrangère\"],\"BUO_JN\":[\"Copier la requête\"],\"BYkhHY\":[\"Vérifier les mises à jour au démarrage\"],\"BeSg6-\":[\"Collecter les logs de l’application en mémoire pour le débogage\"],\"BgAyQH\":[\"Effacer le tri\"],\"BinTJI\":[\"écosystème npm\"],\"BkFson\":[\"Pagination automatique\"],\"Bpglf1\":[\"Monter\"],\"BrGo6h\":[\"Rechercher des notebooks\"],\"BxiAN_\":[\"Supprimer la requête\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dépendances frontend\"],\"CE-M2e\":[\"Infos\"],\"CHIyL8\":[\"Aucun filtre —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Téléchargement...\"],\"CUxwxn\":[\"Afficher toutes les tables\"],\"CWMXbw\":[\"arrêtera brutalement son processus. Toute connexion à la base de données utilisant ce plugin cessera de fonctionner tant que le plugin ne sera pas redémarré.\"],\"CZt6BX\":[\"CONFIGURATION MANUELLE\"],\"Ca8ixZ\":[\"Supprimer\"],\"CbJBQS\":[\"Échec de la mise à jour : \"],\"Cdz-YU\":[\"Vue empilée\"],\"CpeQf9\":[\"Boucles\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Sélectionnez le modèle à utiliser pour la génération et l’explication.\"],\"DB8zMK\":[\"Appliquer\"],\"DDXf5E\":[\"Fonctions SQL\"],\"DEwnwi\":[\"Supprimer\"],\"DNTvdl\":[\"Ouvrir dans l’éditeur\"],\"DPc2P9\":[\"Supprimer la cellule\"],\"DUY8Ba\":[\"Changements incompatibles\"],\"DVnBSM\":[\"Hauteur de ligne\"],\"Dd7YLj\":[\"Peut-être plus tard\"],\"Deej3j\":[\"JSON invalide\"],\"DfKhk_\":[\"Mettre à jour\"],\"DiRiTz\":[\"Ouvrir la page du package\"],\"DlRHAD\":[\"Exécution d’EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" erreur\"],\"other\":[\"#\",\" erreurs\"]}]],\"Dvdihe\":[\"Sur \",[\"0\"],\" — examinez avant exécution.\"],\"DzFLzw\":[\"OUI\"],\"E-JUtQ\":[\"Validation manuelle\"],\"E0kcnZ\":[\"Général\"],\"E2mje_\":[\"Sélectionner la requête à expliquer\"],\"EDieyg\":[\"Voulez-vous vraiment supprimer cette connexion SSH ?\"],\"EHZxPj\":[\"Développer\"],\"EL4oDO\":[\"Nouvelle version disponible\"],\"EPi4gT\":[\"Trier par \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Non groupé\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Inconnu\"],\"EhADgB\":[\"Supprimer la colonne\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Vous êtes à jour\"],\"Em6JFd\":[\"Compter les lignes\"],\"EnGiqG\":[[\"0\"],\" éléments\"],\"Ew1n5z\":[\"Rechercher des plugins…\"],\"F18WP3\":[\"Paramètres\"],\"F3uc1x\":[\"Le fichier exporté contiendra vos mots de passe de base de données et SSH en clair. Conservez-le en lieu sûr.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" lignes\"],\"other\":[\"#\",\" lignes\"]}]],\"F6pfE9\":[\"Active\"],\"F8tXg7\":[\"Aperçu des données\"],\"F9-6yK\":[\"Format de copie par défaut\"],\"F9lxfG\":[\"Supprimer\"],\"F9nsa2\":[\"Le fichier d’historique était corrompu et a été mis de côté. Les nouvelles requêtes seront enregistrées normalement. Fichier de sauvegarde :\"],\"FF_oap\":[\"Valeur par défaut\"],\"FK8rlP\":[\"Aucune connexion SSH configurée pour le moment\"],\"FMRcH8\":[\"Première ligne comme en-tête\"],\"FNvDMc\":[\"Cette semaine\"],\"FQe1FI\":[\"Lignes estimées\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Avertissement\"],\"FZg3wM\":[\"Opération\"],\"Fa_cky\":[\"Schéma : \",[\"tableName\"]],\"FpEL5o\":[\"Choisissez un thème indépendant pour l’éditeur SQL ou gardez-le synchronisé avec le thème de l’application.\"],\"FsvZQL\":[\"Cellule \",[\"n\"],\" modifiée\"],\"FtwKL9\":[\"Changer d’onglet\"],\"FznI3z\":[\"Supprimer la clé étrangère \\\"\",[\"name\"],\"\\\" ?\"],\"G6W8j1\":[\"Échec de l’aperçu : \"],\"G8Q5Zq\":[\"Le namespace est requis\"],\"GAohqx\":[\"Supprimer la colonne\"],\"GJR99u\":[\"Échec de suppression de la colonne : \"],\"GKfzzM\":[\"Choisir une connexion...\"],\"GS-Mus\":[\"Exporter\"],\"GUaLUq\":[\"Échec du chargement du schéma : \"],\"GXP-Iw\":[\"Ajouter une cellule SQL\"],\"Gj1mLb\":[\"Cellules réordonnées\"],\"GlbqG2\":[\"Réinitialiser au défaut du pilote\"],\"Gq1YzP\":[\"Événements\"],\"Gs5AlY\":[\"Ouvrir\"],\"GtmO8_\":[\"de\"],\"GxkJXS\":[\"Téléversement...\"],\"H-o4D2\":[\"Créer une nouvelle colonne\"],\"H2B-KW\":[\"Choisissez le format par défaut lors de la copie des lignes avec Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Rétablir\"],\"H7mlCc\":[\"/chemin/absolu/vers/db.sqlite\"],\"H86f9p\":[\"Réduire\"],\"H9P8CD\":[\"ajouter le premier filtre\"],\"HAQlGl\":[\"Activité IA\"],\"HKNZrs\":[\"Condition d’index\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Supprimer \",\"#\",\" lignes\"],\"other\":[\"Supprimer \",\"#\",\" lignes\"]}]],\"HPuCiP\":[\"Chemin du dossier\"],\"HUs1R3\":[\"Aucun onglet ouvert pour cette connexion.\"],\"HV4Isp\":[\"Saisir le mot de passe SSH\"],\"HVC8Hh\":[\"Copié dans le presse-papier\"],\"HWEpq8\":[\"Écriture disque/s\"],\"HY4nP5\":[\"En ligne\"],\"HcmoWv\":[\"Échec de l’enregistrement de la vue : \"],\"He8v1Y\":[\"Désélectionner de Tout appliquer\"],\"HehHP1\":[\"Disposition par défaut\"],\"HilYn4\":[\"Ce notebook est vide. Ajoutez une cellule pour commencer.\"],\"HjxVK_\":[\"Test rapide de connexion\"],\"HmMnRx\":[\"Mode WKT\"],\"HoKCiI\":[\"L’application redémarrera automatiquement après l’installation\"],\"HpK_8d\":[\"Recharger\"],\"Hpi4Jm\":[\"Rejoindre maintenant\"],\"HuA3RU\":[\"Tabulation\"],\"I128p7\":[\"Barre verticale (|)\"],\"I3AgqA\":[\"Configurer SSH en ligne\"],\"I5VBsr\":[\"Identique à l’application\"],\"I8yrPb\":[\"Remplacer la table\"],\"I92BdB\":[\"Retirer du groupe\"],\"I92fr4\":[\"Me le rappeler plus tard\"],\"I99Miw\":[\"Coût\"],\"IETZIR\":[\"Modifier le nom de la cellule\"],\"IG9wzA\":[\"Échec de l’insertion de la ligne : \"],\"ILleOG\":[\"Le type de ressource doit être \\\"service\\\" ou \\\"pod\\\"\"],\"IQ3gAw\":[\"Téléverser un fichier\"],\"IUwGEM\":[\"Enregistrer les modifications\"],\"IUwmLq\":[\"Dépendances directes déclarées dans package.json et src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Bibliothèques open source\"],\"I_43p6\":[\"Sécurité\"],\"Iaizf4\":[\"Apparence\"],\"Il3FBB\":[\"Afficher/masquer le panneau de filtres structurés\"],\"IniZRK\":[\"Téléchargement indisponible - seul l’aperçu est chargé\"],\"Isaozb\":[\"Vérifier et ajuster\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Les requêtes et connexions actives via ce plugin seront interrompues.\"],\"J6v1s_\":[\"Modèle par défaut\"],\"JE-DVk\":[\"Interpréteur\"],\"JEGlfK\":[\"Début\"],\"JKDPqP\":[\"Sélectionnez d'abord un contexte\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Utiliser un tunnel SSH\"],\"JRz8tw\":[\"MySQL et MariaDB n’exposent des métriques réelles que sur les variantes prises en charge d’EXPLAIN ANALYZE ou ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP ou SVG · max. 512 Ko\"],\"JY5Oyv\":[\"Base de données\"],\"JlFRIB\":[\"Fuseau horaire de session envoyé à MySQL après connexion.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Refusée\"],\"K3H9p5\":[\"Non défini\"],\"K5Dgu_\":[\"Bases de données\"],\"K8IGKf\":[\"Type d’authentification\"],\"KAYNSW\":[\"Combien de logs conserver en mémoire (1-10000)\"],\"KHTGbr\":[\"EXPLAIN préalable\"],\"KHvda8\":[\"Non nul\"],\"KJKNaZ\":[\"Copier comme `column`\"],\"KM5Kc8\":[\"Au moins une colonne doit être sélectionnée\"],\"KSCnVQ\":[\"Type\"],\"KUjOb9\":[\"en cours\"],\"KXBdwy\":[\"Actualiser les routines\"],\"KXNyX7\":[\"Définir DEFAULT\"],\"Kd70-v\":[\"Importer depuis le Presse-papiers...\"],\"KhI4oS\":[\"Ouvrir la ligne référencée dans \",[\"0\"]],\"KhgrNu\":[\"Intégration du serveur MCP\"],\"KirERL\":[\"Délai dépassé\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Échec de suppression de l’index : \"],\"KzeARD\":[\"Échec de suppression de la table : \"],\"L-rMC9\":[\"Réinitialiser par défaut\"],\"L3HXkQ\":[\"Corrections de bugs\"],\"LCZ7Dy\":[\"Copier le nom\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"index\"],\"LMeAoR\":[\"lignes\"],\"LPCdc-\":[\"Prompt de nom d’onglet de requête\"],\"LPFmga\":[\"Sélectionner pour Tout appliquer\"],\"LYzbQ2\":[\"Outil\"],\"Lbis_V\":[\"Navigateur rapide\"],\"Lcpbe2\":[\"Le processus du plugin n’a pas pu être lancé. Vérifiez les détails de l’erreur ci-dessous.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN est uniquement pris en charge pour les instructions DML (SELECT, INSERT, UPDATE, DELETE). Les instructions DDL comme CREATE, DROP ou ALTER ne peuvent pas être expliquées.\"],\"LnT0hQ\":[\"Ajouter une colonne\"],\"LvutiO\":[\"Suggérer avec IA\"],\"M-rHQO\":[\"Quitter le plein écran\"],\"M0XJba\":[\"Voulez-vous vraiment effacer tout l’historique des requêtes pour cette connexion ?\"],\"M1co_O\":[\"Configuré\"],\"M73whl\":[\"Contexte\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Tout afficher\"],\"MXdOwj\":[\"Séparer les connexions\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Sélectionner une connexion K8s\"],\"Mc1tjS\":[\"Activez ANALYZE pour inspecter les lignes réelles, le temps, les boucles et les buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" lignes supplémentaires\"],\"Mp0jQ_\":[\"Ce pilote ne prend en charge les clés primaires qu’à la création de la table\"],\"MqpZwN\":[\"Processus Tabularis\"],\"MxIx43\":[\"↑↓ pour naviguer, Entrée pour ouvrir\"],\"MygtgQ\":[\"Ajouter une cellule Markdown\"],\"N40H-G\":[\"Tous\"],\"N5UQxq\":[\"Ollama non détecté sur le port \",[\"0\"],\". Est-il en cours d’exécution ?\"],\"N6GBcC\":[\"Confirmer la suppression\"],\"N6aqHp\":[\"Requêtes exécutées\"],\"N9_S15\":[\"Une nouvelle table sera créée\"],\"NBdMa1\":[\"Étape la plus lente\"],\"NC2AI2\":[\"Longueur\"],\"NCzNnx\":[\"Tri croissant\"],\"NT4Ubs\":[\"Supprimer la clé personnalisée et revenir à la variable d’environnement (si présente)\"],\"NUjrCO\":[\"Aucun favori ne correspond à votre recherche\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Total de l’arborescence : \",[\"0\"]],\"Nc2VQn\":[\"Ajouter à existante\"],\"NgFERn\":[\"Ajouter aux favoris\"],\"NktMHG\":[\"Nom de la base de données\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Tester\"],\"Nq5QTk\":[\"expliquer la n-ième\"],\"O2STgu\":[\"Échec de l’export : \"],\"O8SV8O\":[\"Téléchargement...\"],\"O9_WW6\":[\"connexion\"],\"OGEsKj\":[\"Exécuter toutes les cellules\"],\"OGWdBg\":[\"Nom de la vue\"],\"OHqT6w\":[\"Appuyez sur une combinaison de touches...\"],\"OXJsaG\":[\"Nom de paramètre invalide\"],\"OfhWJH\":[\"Réinitialiser\"],\"OlAl5i\":[\"Tout développer\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Rejoindre Discord\"],\"P1YGsb\":[\"Génération SQL\"],\"P2m1xb\":[\"Arrêter en cas d’erreur\"],\"P3Qlys\":[\"Aucun ID de connexion\"],\"P6Y3Yf\":[\"Exécutez cette commande dans votre terminal, puis redémarrez Claude Code.\"],\"PCdj-c\":[\"Tout désélectionner\"],\"PMnFt9\":[\"Lecture disque/s\"],\"PQU2Va\":[\"Accepter la suggestion avec Entrée\"],\"PRnH8G\":[\"sur \",[\"0\"]],\"PY8UF3\":[\"Parallèle basculé (cellule \",[\"n\"],\")\"],\"PiH3UR\":[\"Copié !\"],\"Pia95d\":[\"Le nom de la colonne est requis\"],\"PrElXQ\":[\"Mettre à jour\"],\"PrixCC\":[\"Les lignes seront ajoutées à une table existante\"],\"Pujgbb\":[\"Configurer la destination\"],\"Pw_eQV\":[\"Échec de démarrage du plugin\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Aucune requête enregistrée\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Aucun processus enfant\"],\"QCxMC0\":[\"Vérifier automatiquement les nouvelles versions au lancement de l’application\"],\"QEazml\":[\"Supprimer la sélection\"],\"QHcLEN\":[\"Connecté\"],\"QLHHFO\":[\"Mode lecture seule\"],\"QOvAW3\":[\"Nouvelles fonctionnalités\"],\"QULGRi\":[\"Aucune requête valide trouvée\"],\"QZwllF\":[\"Parcourir...\"],\"QbkSr_\":[\"EXPLAIN indisponible.\"],\"QeHFYZ\":[\"EXPLAIN a échoué : \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"En savoir plus\"],\"Qu4Hog\":[\"Notebook importé avec succès\"],\"R-A2Vd\":[\"Aucune donnée à afficher\"],\"R0Hkb2\":[[\"0\"],\" base(s) de données sélectionnée(s)\"],\"R1nHhB\":[\"Existe déjà\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convertir en console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configuration\"],\"RF-HyV\":[\"Choisissez votre langue préférée. \\\"Auto\\\" utilisera la langue de votre système.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copier le nom\"],\"RI-HZc\":[\"Saisir la clé \",[\"0\"]],\"RJrE17\":[\"Voulez-vous vraiment supprimer la vue \\\"\",[\"0\"],\"\\\" ?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Une étoile aide d’autres personnes à découvrir le projet\"],\"Rb3Tdm\":[\"Nom du notebook\"],\"RcbKJ3\":[\"À la mise à jour\"],\"RkefFq\":[\"Exécute EXPLAIN avant d'afficher le modal pour montrer le plan.\"],\"RnF_hl\":[\"Chargement du registre des plugins...\"],\"Rns7_C\":[\"Cette action ne peut pas être annulée immédiatement\"],\"RoKRqW\":[\"Plugins disponibles\"],\"RphpKk\":[\"Apparence\"],\"Rt8sHM\":[\"Travail de tri ou temporaire détecté\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Activés\"],\"S1veKH\":[\"Annuler la sélection\"],\"S5zeZU\":[\"Afficher/masquer l’aperçu\"],\"S8Yqbl\":[\"Insérer\"],\"SDND4q\":[\"Non configuré\"],\"SJRy3D\":[\"(Généré automatiquement)\"],\"SSwIjo\":[\"Définir EMPTY\"],\"SgvA_r\":[\"Appuyez sur Exécuter (Ctrl/Commande+F5) pour charger les données de la table\"],\"SlfejT\":[\"Erreur\"],\"SoATkx\":[\"Copier la cellule\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL du point de terminaison\"],\"T7w5CQ\":[\"Échec de création de la nouvelle ligne : \"],\"T9947j\":[\"Valeur (ex. 'texte' ou 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Passer en disposition verticale\"],\"TK5oex\":[\"Enregistrer le prompt\"],\"TKQ7K-\":[\"Installer\"],\"TKZreP\":[\"Exiger\"],\"TMLAx2\":[\"Requis\"],\"TO08JI\":[\"clés étrangères\"],\"TVKqvO\":[\"Modifier la ligne\"],\"TYSdQ3\":[\"Exécuter une requête SELECT\"],\"TfDFHS\":[\"Retourne les longues lignes dans l’éditeur au lieu d’un défilement horizontal.\"],\"Tibfjs\":[\"Aucune connexion enregistrée — créez-en une ci-dessous\"],\"Tj36Dr\":[\"Réinitialiser par défaut\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Verrouiller\"],\"TpwXyg\":[\"Si le temps manque, le serveur a probablement renvoyé un plan uniquement estimé.\"],\"Tw2M1h\":[\"Échec de l’installation\"],\"Ty-rm9\":[\"Connexions SSH\"],\"Tz0i8g\":[\"Paramètres\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Connexions Kubernetes\"],\"U4uzyV\":[\"Nouveautés\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Arrêter l’exécution lorsqu’une cellule échoue\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" sur \",[\"1\"],\" — examinez avant exécution.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configuration installée avec succès pour \",[\"clientName\"],\" ! Redémarrez l’application pour l’appliquer.\"],\"URmyfc\":[\"Détails\"],\"UWQBvp\":[\"Générer des modèles SQL\"],\"UawTKZ\":[\"Optionnel. Spécifiez l’exécutable utilisé pour lancer ce plugin (ex. python3 sous macOS/Linux, python ou un chemin complet sous Windows). Laissez vide pour utiliser la valeur par défaut.\"],\"Ub8sf5\":[\"SQLite ne prend pas en charge la suppression des clés étrangères via ALTER TABLE.\"],\"UbbJ8j\":[\"Aucune option trouvée\"],\"Ubs68g\":[\"Général\"],\"UftN8J\":[\"Ces connexions refuseront les écritures via MCP. Les autres restent normales.\"],\"UnQNah\":[\"Voulez-vous vraiment supprimer la colonne \\\"\",[\"0\"],\"\\\" de la table \\\"\",[\"tableName\"],\"\\\" ?\\n\\nATTENTION : toutes les données de cette colonne seront définitivement supprimées. Cette action est irréversible.\"],\"UncTTh\":[\"Somme du RSS sur l’arborescence des processus — peut surestimer la mémoire partagée\"],\"UpjgFm\":[\"Paramètres modifiés\"],\"UsAnu1\":[\"ANALYZE exécute la requête. Utilisez-le avec prudence pour les instructions modifiant les données.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Taille de tabulation\"],\"UzWGWO\":[\"Basculer vers le champ SQL WHERE\"],\"V-chk5\":[\"À quelle fréquence vérifier si les connexions actives sont toujours vivantes. Définissez 0 pour désactiver.\"],\"V-pw1j\":[\"Nom de la table\"],\"V2T0Uw\":[\"Aucun notebook enregistré pour le moment.\"],\"V3aNwx\":[\"Éditeur de données\"],\"VGYp2r\":[\"Appliquer à tout\"],\"VH8S7x\":[\"Colonne du presse-papiers\"],\"VIAEcS\":[\"Échec du chargement des bases de données. Vérifiez vos identifiants.\"],\"VKdztF\":[\"Ajouter des lignes\"],\"VLiHXI\":[\"Analyser les données\"],\"VMbmXc\":[\"Voulez-vous vraiment supprimer \\\"\",[\"pluginName\"],\"\\\" ? Cela supprimera les fichiers du plugin.\"],\"VO3weF\":[\"Aucun fichier chargé\"],\"VOZlKc\":[\"Importer une base de données\"],\"VPzsIz\":[\"Génération du nom...\"],\"VUul0v\":[\"Tuer\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Toutes les requêtes\"],\"Vi2Pqx\":[\"par\"],\"Vl2zn2\":[\"arrêté\"],\"Vo4uBA\":[\"Une erreur s’est produite lors de l’installation du plugin. Voir les détails ci-dessous.\"],\"VqqyOs\":[\"Exécutez une requête pour voir les résultats\"],\"VzhDFh\":[\"Bloquer tout statement non-SELECT via MCP, sauf pour les connexions autorisées ci-dessous.\"],\"W3uwpT\":[\"Fermer tous les onglets\"],\"W4MKLh\":[\"ex. Risqué en prod, confirmez…\"],\"W60eXm\":[\"Table\"],\"WA8RND\":[\"Voulez-vous vraiment supprimer la table \\\"\",[\"0\"],\"\\\" ?\"],\"WG8Qgt\":[\"Supprimer la table\"],\"WLnvCZ\":[\"Saisir le nom d'utilisateur\"],\"WM-__8\":[\"Rechercher des connexions...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes importées dans \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" lignes importées dans \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Voulez-vous vraiment supprimer la requête \\\"\",[\"0\"],\"\\\" ?\"],\"WarTN_\":[\"réussies\"],\"WcF1uL\":[\"Nom du groupe\"],\"Weq9zb\":[\"Général\"],\"WmPpB1\":[\"Chargement du plan d'exécution…\"],\"Wu7cK0\":[\"Aucune base de données trouvée\"],\"WvoUQF\":[\"Cellule \",[\"n\"],\" supprimée\"],\"Ww3pDD\":[\"COMMANDE MANUELLE\"],\"X-20AU\":[\"Saisir le prompt de nom d’onglet de requête...\"],\"X-U6_w\":[\"Famille de police\"],\"X5fs0g\":[\"Créez votre première connexion pour commencer.\"],\"X7Ayjp\":[\"Mot de passe enregistré dans le trousseau système\"],\"X9kySA\":[\"Favoris\"],\"XJOV1Y\":[\"Activité\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Explication de requête\"],\"XVF2Pf\":[\"Modifier les schémas\"],\"XW6OYF\":[\"Ce plugin peut nécessiter un interpréteur (ex. Python). Utilisez les paramètres du plugin pour configurer le chemin de l’interpréteur.\"],\"XZB6Xr\":[\"Nombre max d’entrées de log\"],\"Xcffv2\":[\"Afficher les boutons AI Assist et Explain dans l’éditeur\"],\"XeqTSh\":[\"Type de jointure\"],\"XmJfZT\":[\"nom\"],\"XoQfG1\":[\"Utilisateur SSH\"],\"XwI0Vw\":[\"Auto (Système)\"],\"XyDlLX\":[\"Nom de l’index\"],\"Y2P2aK\":[\"Sélectionnez les schémas à charger :\"],\"Y8HYw2\":[\"valeur\"],\"Y8zX3R\":[\"Insérer dans l’éditeur\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Rechercher...\"],\"YWlnMZ\":[\"Port Ollama\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Parcourez et installez des plugins depuis le registre.\"],\"Y_3yKT\":[\"Ouvrir dans un nouvel onglet\"],\"YiAQ_Q\":[\"Actualiser les tables\"],\"Ysjr9Y\":[\"Aperçu SQL\"],\"YswNf7\":[\"Tous les niveaux\"],\"YtNwr6\":[\"Nombre maximal d’entrées d’historique de requêtes stockées par connexion.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Chargement...\"],\"Z7ZXbT\":[\"Approuver\"],\"Z8JpBH\":[\"Exporter en Notebook\"],\"Z8fBIc\":[\"Les lignes réelles dépassent l’estimation\"],\"ZC2VJP\":[\"Exécuter\"],\"ZCIS4k\":[\"aucun filtre actif\"],\"ZF1_UT\":[\"Mode SSL\"],\"ZGjBPa\":[\"Effacer les logs\"],\"ZHQTlM\":[\"Import depuis\"],\"ZIFDoJ\":[\"Veuillez sélectionner au moins Structure ou Données\"],\"ZIZA6o\":[\"Modifier avant d'approuver\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avertissements d'analyse\"],\"other\":[\"#\",\" avertissements d'analyse\"]}]],\"ZVn8p2\":[\"Affiche les numéros de ligne dans la marge de l’éditeur.\"],\"ZYnwzF\":[\"Déconnecté\"],\"Za3_fO\":[\"Erreur\"],\"ZcOxO1\":[\"Créer la clé étrangère\"],\"Zf7LHg\":[\"Aucun contexte trouvé (kubectl est-il installé ?)\"],\"Zfotp5\":[\"De grands écarts d’estimation indiquent généralement des statistiques obsolètes ou des prédicats mal modélisés par le planificateur.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Échec du chargement des schémas\"],\"ZqXGPF\":[\"Échec de suppression de la vue : \"],\"ZuL73E\":[\"Créer une nouvelle vue de base de données\"],\"_-bi4r\":[\"Table référencée\"],\"_AEYGI\":[\"Aucun historique d’exécution pour le moment\"],\"_FdpZc\":[\"Échec du chargement de la définition de la vue : \"],\"_FxSdi\":[\"Parcourez les dépendances open source directes utilisées par l’application, le backend et l’outillage.\"],\"_JyTG8\":[\"Saisir le prompt d’explication...\"],\"_Ltc_k\":[\"Suppléments\"],\"_Q2Wix\":[\"lignes\"],\"_TK1zF\":[\"Connexion enregistrée\"],\"_bJFBE\":[\"Délai d’expiration de connexion\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Arborescence\"],\"_dqduX\":[\"Page suivante\"],\"_fwE6J\":[\"Plus ancien\"],\"_n04sB\":[\"Tuer\"],\"_otxbQ\":[\"Fichier de clé\"],\"_pezIT\":[\"Échec de connexion à \",[\"0\"],\". Vérifiez vos paramètres ou assurez-vous que la base de données est en cours d’exécution.\"],\"_srfkj\":[\"Clé personnalisée supprimée avec succès\"],\"_t6aFo\":[\"MySQL et MariaDB peuvent revenir à EXPLAIN FORMAT=JSON ou à EXPLAIN tabulaire selon la version du serveur.\"],\"_xTbaM\":[\"colonnes\"],\"_yxaaL\":[\"Index unique\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis est un projet libre et open source. Si vous le trouvez utile, pensez à soutenir le projet et à rejoindre la communauté.\"],\"a9CASo\":[\"SQLite ne prend en charge que le renommage des colonnes. Les autres modifications nécessitent de recréer la table manuellement.\"],\"aAIQg2\":[\"Apparence\"],\"aAURrV\":[\"Installé\"],\"aC_vCa\":[\"Générer un nom avec l’IA\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Sélectionnez un nœud pour voir les détails\"],\"aHKcKc\":[\"Page précédente\"],\"aI-5wG\":[\"Vérifier CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valeur par défaut\"],\"aScJP1\":[\"Exécuter cette requête\"],\"aVNbN8\":[\"Conditions de filtre\"],\"aWhdMQ\":[\"Utiliser une connexion SSH existante\"],\"aXYd8V\":[\"Délai\"],\"aX_S_r\":[\"Page \",[\"0\"],\" sur \",[\"totalPages\"]],\"agZcf8\":[\"SQL généré : \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [champs]\"],\"alplHn\":[\"Analyse du plan de requête avec l’IA...\"],\"anBcU3\":[\"Si vous aimez tabularis et souhaitez voir davantage de fonctionnalités, pensez à soutenir le projet en contribuant au code, en signalant des bugs ou en mettant une étoile au dépôt.\"],\"arHmj2\":[\"Voulez-vous vraiment supprimer cette requête de l’historique ?\"],\"arKcqW\":[\"Les anciens serveurs peuvent revenir à des plans estimés avec moins de métriques.\"],\"arcpYe\":[\"Validation requise\"],\"aurEkh\":[\"Chargement des processus…\"],\"avtdsd\":[\"Mode SQL\"],\"az8lvo\":[\"Désactivée\"],\"b1Ah3z\":[\"Focalisé sur\"],\"b392Dr\":[\"Tout développer\"],\"b5S_PU\":[\"Nom de la base de données\"],\"bAvovP\":[\"Descendre\"],\"bH3JqY\":[\"Aucune table trouvée\"],\"bP5JOn\":[\"Retour à la ligne automatique\"],\"bcOdok\":[\"Supprimer le groupe\"],\"bcqeas\":[\"Mettre toutes les requêtes MCP en lecture seule\"],\"bmca5u\":[\"Écritures seulement\"],\"bpCiBU\":[\"Autoriser les écritures via MCP\"],\"bqnhqW\":[\"L’estimation dépasse les lignes réelles\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Erreur\"],\"bw22Gk\":[\"Schéma des colonnes\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Principaux problèmes\"],\"cFCKYZ\":[\"Refuser\"],\"cFGrCP\":[\"table\"],\"cGeFup\":[\"Taille de police\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focaliser sur la table\"],\"cM9NHc\":[\"Rétrograder vers\"],\"cO9-2L\":[\"Désactiver\"],\"cSev-j\":[\"Filtres\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importer \",\"#\",\" lignes\"],\"other\":[\"Importer \",\"#\",\" lignes\"]}]],\"c_xoSn\":[\"Cellule \",[\"n\"],\" renommée\"],\"cd0XEW\":[\"Enregistrer la requête\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Diviser le groupe\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" instructions\"],\"d34vwG\":[\"Charger les bases de données\"],\"d6ynQ7\":[\"Tri décroissant\"],\"d8_6_v\":[\"annuler\"],\"d8wc1_\":[\"Exemples de valeurs\"],\"dBXoCS\":[\"Une variable d’environnement est présente, mais vous pouvez la remplacer en définissant une clé ci-dessus.\"],\"dD7NPy\":[\"Plan\"],\"dEgA5A\":[\"Annuler\"],\"dMtLDE\":[\"à\"],\"dPJVhW\":[\"Échec de l’installation\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" session\"],\"other\":[\"#\",\" sessions\"]}]],\"dTUzKm\":[\"Exécuter la sélection (\",[\"0\"],\")\"],\"dU_iQN\":[\"Aucune session ne correspond aux filtres.\"],\"dUh9QW\":[\"Planification\"],\"dVoir2\":[\"Cellule Markdown \",[\"n\"],\" ajoutée\"],\"dZ0d2O\":[\"Veuillez sélectionner au moins une table\"],\"dhi13U\":[\"Choisir une image…\"],\"dli1JX\":[\"Soumettre les modifications\"],\"dmYV6f\":[\"Routines\"],\"dohZCo\":[\"Instructions pour la génération SQL par IA. Utilisez \",[\"SCHEMA\"],\" comme espace réservé pour la structure de la base de données.\"],\"dtxpK2\":[\"Analyser\"],\"dwW9nJ\":[\"Afficher les numéros de ligne\"],\"dwWVw_\":[\"Afficher l’écran d’accueil\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" onglet\"],\"other\":[\"#\",\" onglets\"]}]],\"dxxY9r\":[\"Si existe\"],\"dyN4j9\":[\"Cliquez sur \\\"Exécuter l’aperçu\\\" pour voir les résultats\"],\"e07Iz5\":[\"Ouvrir le gestionnaire des tâches\"],\"e0NzXu\":[\"Ce projet est un Work In Progress (WIP). Les fonctionnalités principales sont stables, mais nous avons de grands projets.\"],\"e1UKxf\":[\"Enregistrer cette requête\"],\"e34gdU\":[\"Temps d'attente avant échec.\"],\"e62LQd\":[\"Forcer l’arrêt\"],\"e6QZsM\":[\"Thème de l’éditeur\"],\"e8CirT\":[\"Exécuter la requête\"],\"eD2kUP\":[\"Buffers lus\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Saisir le prompt d’analyse de plan EXPLAIN...\"],\"eIVolo\":[\"Lecture/écriture disque\"],\"eJOEBy\":[\"Exportation...\"],\"eKHY3W\":[\"Paramètres du plugin\"],\"eMb6Ub\":[\"Choisir une ressource...\"],\"ePK91l\":[\"Modifier\"],\"eXweu6\":[\"Développer la cellule\"],\"ecNsTE\":[\"Aucune requête ne correspond à votre recherche\"],\"ecUA8p\":[\"Aujourd’hui\"],\"ecpIZP\":[\"Saisissez la phrase secrète si la clé est chiffrée\"],\"ejmeDY\":[\"Installés\"],\"esl-Tv\":[\"Type de ressource\"],\"exyUec\":[\"Connexion\"],\"f2AJjl\":[\"Supprimer la ligne\"],\"f4pD-j\":[\"Échec du test de connexion\"],\"f7sXvi\":[\"Saisir le mot de passe\"],\"fAsxc0\":[\"Scans séquentiels\"],\"fIeFs0\":[\"Sélectionner une valeur...\"],\"fJm92A\":[\"Sélectionnez un fichier contenant un plan EXPLAIN (format JSON ou texte PostgreSQL) pour le visualiser.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Valeurs\"],\"f_b1TA\":[\"Historique d’exécution\"],\"fghnqP\":[\"Passer à la connexion 1-9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Virgule (,)\"],\"fp711N\":[\"Bloquée (lecture seule)\"],\"fpzyLj\":[\"Page \",[\"0\"],\" sur \",[\"1\"]],\"fuA6oy\":[\"Délai d’expiration du socket\"],\"fvImQM\":[[\"0\"],\" sélectionnées\"],\"fwr_nh\":[\"Installez des extensions, gérez les pilotes de plugins et gardez les paramètres d'exécution sous contrôle.\"],\"g0ZzK4\":[\"JSON valide\"],\"g11hAR\":[\"Nouvelle ligne\"],\"g8VcMm\":[\"Mon cluster K8s\"],\"gCFR_O\":[\"Exécution parallèle (Tout exécuter)\"],\"gEjU98\":[\"Ouvrir les connexions\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Au moins une colonne est requise\"],\"gSuQrG\":[\"Aucune connexion ne correspond à \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Relancer la requête\"],\"gZWMnn\":[\"Analyse IA\"],\"ghYd73\":[\"Choisir la cible...\"],\"giAqEC\":[\"Créer une nouvelle table\"],\"gnQS8X\":[\"Taille maximale de paquet utilisée par le connecteur MySQL.\"],\"gqV5VL\":[\"Intégré, non personnalisable\"],\"gww_XE\":[\"Colonne référencée\"],\"gxXPJ9\":[\"Configurer l’interpréteur\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Agrandir\"],\"h-XNc9\":[\"Délimiteur CSV\"],\"h-kNAk\":[\"ex. donnees_ventes\"],\"h3Z_aK\":[\"Écrivez du Markdown ici...\"],\"h7MgpO\":[\"Raccourcis clavier\"],\"h7peZQ\":[\"Autoriser\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processus système en cours\"],\"other\":[\"#\",\" processus système en cours\"]}]],\"hEZrFh\":[\"Exécuter un fichier SQL...\"],\"hEipgW\":[\"Vérifier les mises à jour maintenant\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Exporter en CSV\"],\"hItdtk\":[\"Parcourir le dossier\"],\"hXFVjo\":[\"Le nom de la table est requis\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Relancer\"],\"hbz1rh\":[\"clés\"],\"hdsaJo\":[\"Importation...\"],\"he3ygx\":[\"Copier\"],\"hfGimp\":[\"Choisir un namespace...\"],\"hjjSEi\":[\"Connexions en lecture seule\"],\"hjwN_s\":[\"Nom de la ressource\"],\"hlF1mD\":[\"Copier la sélection\"],\"hnboBb\":[\"Analyse IA du plan de requête\"],\"hnvu2p\":[\"Détails de l’erreur\"],\"hq4-D2\":[\"La clé API est stockée en toute sécurité dans le trousseau système. Définir une clé ici remplace la variable d’environnement.\"],\"hqjXdn\":[\"Échec de suppression de la connexion SSH\"],\"hqofAK\":[\"Copier le SQL\"],\"hy6L14\":[\"Voir sur GitHub\"],\"hyjACX\":[\"Cellules réduites/développées\"],\"hz1b5W\":[\"Aucun élément correspondant trouvé\"],\"i1vAVM\":[\"Créer nouvelle table\"],\"i3S5T3\":[\"Rechercher dans les favoris...\"],\"i4_LY_\":[\"Écriture\"],\"i5HBWh\":[\"Historique des requêtes réinitialisé\"],\"i5zCt4\":[\"Tableau\"],\"iAVlge\":[\"Personnalisez les instructions pour la génération IA des noms de cellules de notebook. Le contenu de la cellule (SQL ou Markdown) est envoyé comme message utilisateur.\"],\"iE1yAB\":[\"Filtrer les tables...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connecter\"],\"iSryJ2\":[\"Mon serveur SSH\"],\"iT7UeX\":[\"Ajouter un index\"],\"iUWwuR\":[\"Télécharger et installer\"],\"ia7i08\":[\"Sélectionnez d'abord contexte/namespace/type\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Enregistré\"],\"igcsfY\":[\"Aucun plugin disponible dans le registre.\"],\"ij-Elv\":[\"Aperçu de l’image\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" requêtes explicables trouvées\"],\"other\":[\"#\",\" requêtes explicables trouvées\"]}]],\"ioL38P\":[\"Surveillez en temps réel les processus plugins, le CPU, la RAM et l’utilisation disque\"],\"ixlL_e\":[\"Fichier de clé SSH (optionnel)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Sélectionner un modèle\"],\"j3gyYH\":[\"Tout appliquer\"],\"j5CWO4\":[\"À jour\"],\"j9HPuI\":[\"Ligne n°\",[\"0\"]],\"jBtpMP\":[\"Tous les statuts\"],\"jEu4bB\":[\"Colonnes\"],\"jEyQIs\":[\"Aucune routine trouvée\"],\"jHc1By\":[\"Supprimer la vue\"],\"jI6sj4\":[\"Le coût, le temps et les estimations de lignes sont souvent indisponibles comparés à PostgreSQL et MySQL.\"],\"jIxQCZ\":[\"Indisponible sur votre plateforme\"],\"jKIncn\":[\"Le nom de la base de données est requis\"],\"jPSk57\":[\"Motif (facultatif)\"],\"jUNY_d\":[\"vue\"],\"jVqjDo\":[\"Format de fichier notebook invalide\"],\"jWSZ-A\":[\"Aperçu uniquement - données complètes non chargées\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Délai d’expiration du socket en millisecondes.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Le nom de la connexion est requis\"],\"jsQZMk\":[\"IA\"],\"juO8wz\":[\"processus enfant\"],\"jx0t66\":[\"Réduire les processus enfants\"],\"k-0mL-\":[\"Ajouter une colonne\"],\"k-XiMX\":[\"Brut\"],\"k2UnVy\":[\"Condition hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"secondes\"],\"kBiBq7\":[\"Supprimer l’index \\\"\",[\"name\"],\"\\\" ?\"],\"kEYasw\":[\"Afficher/masquer le graphique\"],\"kI1qVD\":[\"Formater\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes · \",[\"1\"],\" ms\"],\"other\":[\"#\",\" lignes · \",[\"2\"],\" ms\"]}]],\"kJDmsI\":[\"Détails de l'événement\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registre\"],\"kY-q3P\":[[\"label\"],\" est requis\"],\"kexIdC\":[\"Utiliser le Port-Forward Kubernetes\"],\"krksx_\":[\"Succès\"],\"ktYUe9\":[\"Tout exécuter\"],\"kwY6nh\":[\"Fermer\"],\"kx0s-n\":[\"Résultats\"],\"kxUEfE\":[\"Échec de récupération de la définition de la routine : \"],\"l2Op2p\":[\"Paramètres de requête\"],\"l9Ivba\":[\"Processus plugins et ressources système\"],\"lBdPxu\":[\"Couleur d'accent\"],\"lCF0wC\":[\"Actualiser\"],\"lEQRwq\":[\"Données (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nouvelle table créée\"],\"lOekZ3\":[\"Passer en disposition horizontale\"],\"lUA1C1\":[\"Phrase secrète de clé SSH (optionnel)\"],\"lVeG20\":[\"Dépendances Rust\"],\"lXAG6D\":[\"Instructions pour l’explication de requêtes par IA. Utilisez \",[\"LANGUAGE\"],\" comme espace réservé pour la langue de sortie.\"],\"lbbYjy\":[\"Modifiez directement le fichier de configuration brut. Un redémarrage est nécessaire pour appliquer les changements.\"],\"lhKW0m\":[\"Cellule SQL \",[\"n\"],\" ajoutée\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Taille de page des résultats (limite)\"],\"lkz6PL\":[\"Durée\"],\"lmVGeo\":[\"Ajouter une clé étrangère\"],\"lnnx3E\":[\"Connectez Tabularis à Claude Desktop, Cursor et plus encore\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Ajouter\"],\"m2Q_r8\":[\"Détecter le JSON dans les colonnes texte\"],\"m2tskz\":[\"Succès\"],\"mA-qpe\":[\"Exécution complète\"],\"mBhhbA\":[\"Logs exportés dans le presse-papiers\"],\"mCNdzH\":[\"Exécuter la cellule\"],\"mO95sp\":[\"Fermer le panneau\"],\"mP7dLi\":[\"Saisissez le nom de la police ci-dessus\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloqué\"],\"other\":[\"#\",\" bloqués\"]}]],\"mS74ir\":[\"Échec de l’enregistrement de la connexion SSH\"],\"mSqtw8\":[\"Exécuter l’aperçu\"],\"mURmfQ\":[\"Définition de la vue (SQL)\"],\"mX_isJ\":[\"Verticale\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Structure (DDL)\"],\"mrk4Cf\":[\"Trier par \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Nous venons d’ouvrir une communauté dédiée à Tabularis : entraide, astuces et influence sur la roadmap.\"],\"mtvVdV\":[\"Lignes traitées\"],\"mx4evv\":[\"Créer la table\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Télécharger\"],\"n7JDTx\":[\"Installez et activez des plugins pour les voir ici\"],\"nDDJir\":[\"Rechercher session, client, connexion…\"],\"nHP-Kr\":[\"Aucune session active. Veuillez sélectionner une connexion.\"],\"nKhCjW\":[\"Sélectionner les tables\"],\"nNwvm4\":[\"Erreur\"],\"nOVim5\":[\"Échec de l’enregistrement de la connexion\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Événements\"],\"nf14vn\":[\"Extension requise : \",[\"0\"]],\"ngO6Pv\":[\"Autorise la touche Entrée (en plus de Tab) à accepter la suggestion d’autocomplétion active. Lorsqu’elle est désactivée, Entrée insère toujours un saut de ligne.\"],\"nhmF3p\":[\"connexions\"],\"noM5A_\":[\"Créez votre première connexion\"],\"nohy4m\":[\"Aucune activité MCP.\"],\"nr-axf\":[\"Supprimer le plugin\"],\"nsPFX9\":[\"Ouvrir dans Visual Explain\"],\"nuBbBr\":[\"Graphique\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Exporter la base de données\"],\"o-XJ9D\":[\"Modifier\"],\"o21Y-P\":[\"entrées\"],\"o3tP_A\":[\"Supprimer l’index\"],\"o45L8r\":[\"Indiquez le nom de votre connexion\"],\"o53XGh\":[\"Copier la/les ligne(s) sélectionnée(s)\"],\"o7J4JM\":[\"Filtre\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Niveau\"],\"oGiIL7\":[\"Fournisseur par défaut\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connexion perdue\"],\"oJlXF2\":[\"Importer le notebook\"],\"oMFv82\":[\"Diviser verticalement\"],\"oOFiQg\":[\"Limite le nombre de lignes récupérées par requête afin d’éviter les problèmes de performance. Définissez 0 pour désactiver la limite (non recommandé).\"],\"oT9ZD3\":[\"Masquer la vue d’ensemble\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Graphique modifié (cellule \",[\"n\"],\")\"],\"oWfclW\":[\"Affiche le visualiseur JSON lorsqu'une cellule texte non typée contient un objet ou un tableau JSON. Ajoute un petit coût d'analyse par cellule.\"],\"obpbdz\":[\"Fichier de configuration introuvable (à créer manuellement)\"],\"odZgfC\":[\"CLIENTS IA\"],\"ogZhXn\":[\"Choisissez la direction de disposition par défaut pour les diagrammes ER\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Lignes réelles\"],\"olWzar\":[\"Forcer l’arrêt du processus du plugin\"],\"ovBPCi\":[\"Défaut\"],\"owzTWN\":[\"Modèles IA actualisés depuis les fournisseurs\"],\"oxYi6j\":[\"Ajustez la taille de police de base utilisée dans toute l’application (10-20 px).\"],\"p--hsQ\":[\"Une connexion à la base de données a été perdue\"],\"p6NueD\":[\"NOUVELLE\"],\"pOYHox\":[\"Actions\"],\"pR9bTR\":[\"Aucune donnée BLOB\"],\"pS8S5q\":[\"ex. users, orders, products\"],\"pSws_M\":[\"Nom de la table\"],\"pVLbKZ\":[\"Vue créée avec succès\"],\"pWT04I\":[\"Vérification...\"],\"pZJ_6D\":[\"Le nom de l’index est requis\"],\"pddYFG\":[\"Saisir le prompt de nom de cellule de notebook...\"],\"pnpyuD\":[\"Activer les logs\"],\"pqKMPv\":[\"Échec de la création de la table : \"],\"pqaP1h\":[\"Fermer\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"ex. Comic Sans MS\"],\"pzu7v4\":[\"Horizontale\"],\"q-ch8m\":[\"Les autres restent en lecture seule. Seules celles cochées peuvent écrire.\"],\"qA5jLs\":[\"Détails de l’erreur\"],\"qIrtcK\":[\"Mises à jour\"],\"qOqy8G\":[\"Vérification de la configuration...\"],\"qWaVNs\":[\"Enregistrer et redémarrer\"],\"qb3LPX\":[\"Afficher le diagramme ER\"],\"qkK0vq\":[\"Le nom de la vue est requis\"],\"qki9tG\":[\"Erreur\"],\"qoIir-\":[\"L’URL de base de votre API compatible OpenAI. Exemples : https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Tout réduire\"],\"r6ncaO\":[\"Fermer l’onglet\"],\"rAJlpP\":[\"Port du conteneur\"],\"rG3WVm\":[\"Lecture\"],\"rGRCeK\":[\"Effacer l’historique des requêtes\"],\"rNIto7\":[\"Le nom de la ressource est requis\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exporté avec succès\"],\"rY4sEV\":[\"Supprimer la clé étrangère\"],\"rbu0nO\":[\"Gérer les connexions SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connexion(s)\"],\"other\":[\"#\",\" connexion(s)\"]}]],\"rn2_2V\":[\"Supprimer le filtre\"],\"roABNH\":[\"Aucun historique de requêtes\"],\"rtir7c\":[\"inconnu\"],\"ru0-2W\":[\"Aucune connexion active\"],\"rvDPWO\":[\"Écart d’estimation\"],\"rwWjWg\":[\"Notes de version\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Tester la connexion\"],\"sBOaim\":[\"Le fichier de configuration a été enregistré. Redémarrer maintenant pour appliquer les changements ?\"],\"sCyv9B\":[\"Actualiser les modèles\"],\"sSUqe4\":[\"Supprimer\"],\"sUBkgN\":[\"Génération du SQL...\"],\"sZZG3d\":[\"Voulez-vous vraiment importer \\\"\",[\"0\"],\"\\\" ?\\nCela peut écraser des données existantes.\"],\"sbK5ck\":[\"Rechercher dans l’historique...\"],\"sq_bS6\":[\"À la suppression\"],\"suW7-E\":[\"Délai d’expiration de connexion en millisecondes.\"],\"suqtBX\":[\"Échap pour fermer\"],\"t-R8-P\":[\"Exécution\"],\"t1OfVY\":[[\"totalLibraries\"],\" bibliothèques\"],\"t2TMzs\":[\"Fermer l’onglet\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Sélectionner une table...\"],\"t7KRl1\":[\"Journal de chaque appel MCP et des requêtes en attente de validation. Stockage local.\"],\"t9NJIk\":[\"Opérations gourmandes en scans détectées\"],\"tB7xof\":[\"Opérations temporaires ou de tri\"],\"tBBXTO\":[\"Intervalle de ping\"],\"tFrT3w\":[\"Ajoutez ceci manuellement au fichier de configuration de votre client si l’installation automatique échoue.\"],\"tJ7UbA\":[\"expliquer la sélection\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Diviser horizontalement\"],\"tQhW-D\":[\"Paramètres des logs\"],\"tT-BQX\":[\"Installés\"],\"tXFGEx\":[\"Aucune connexion Kubernetes enregistrée. Cliquez sur « Ajouter » pour en créer une.\"],\"tXLz_8\":[\"Supprimer\"],\"tXpRby\":[\"Grille de données\"],\"tbysEk\":[\"Actions\"],\"tdta9X\":[\"Page \",[\"0\"]],\"tfDRzk\":[\"Enregistrer\"],\"tfEioV\":[\"Exécuter toutes les cellules SQL de haut en bas\"],\"tiAIaJ\":[\"Mot de passe SSH manquant. Veuillez le ressaisir.\"],\"tk22BR\":[\"Collez des données structurées et vérifiez le schéma avant l'import\"],\"tst44n\":[\"Événements\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"Fichier SQL exécuté avec succès\"],\"u6QeR6\":[\"Redémarrer maintenant\"],\"uAQUqI\":[\"Statut\"],\"uBAxNB\":[\"Éditeur\"],\"uBI8D9\":[\"Esc pour fermer\"],\"uFViPK\":[\"Aucune connexion SSH disponible\"],\"uHUuhp\":[\"Expliquer cette requête\"],\"uHfFzS\":[\"Taille de police de l’éditeur\"],\"uJ_3K5\":[\"Supprimer le notebook « \",[\"0\"],\" » ? Cette action est irréversible.\"],\"uKaNJ3\":[\"Ouvrir dans l’éditeur JSON\"],\"uQBwTo\":[\"Schémas\"],\"ub54ff\":[\"Centre de plugins\"],\"ufFyBs\":[\"Base de données exportée avec succès\"],\"upNmR2\":[\"Ouvrir l’éditeur latéral\"],\"upwIY4\":[\"Définition de la vue\"],\"utMia3\":[\"Tout désélectionner\"],\"uyNaJg\":[\"1 élément\"],\"v61dnS\":[\"Saisissez le nom exact du modèle pour votre fournisseur compatible OpenAI.\"],\"v6oeyr\":[\"Installé\"],\"v75DGg\":[\"Parcourir le fichier\"],\"v99dO4\":[\"Clé primaire\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" requêtes trouvées\"],\"other\":[\"#\",\" requêtes trouvées\"]}]],\"vCSBPD\":[\"Ajouter un filtre\"],\"vH7uJj\":[\"Trier par…\"],\"vUOA1-\":[\"Rechercher des modèles...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE inclut les lignes réelles, le temps, les boucles et les compteurs de buffer lorsqu’ils sont disponibles.\"],\"vXIe7J\":[\"Langue\"],\"vYf4Jm\":[\"Saisissez une fonction SQL complète (ex. ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Préférer\"],\"vditm4\":[\"Expliquer le plan\"],\"vks_ls\":[\"Fermer les autres onglets\"],\"vnAnIp\":[\"Le modèle \",[\"0\"],\" est introuvable dans \",[\"1\"],\". Il pourrait ne pas fonctionner correctement.\"],\"vqoN5u\":[\"Structure\"],\"vrAvbP\":[\"Voulez-vous vraiment supprimer le groupe \\\"\",[\"0\"],\"\\\" ? Les connexions de ce groupe seront déplacées vers Non groupées.\"],\"vtJ2yO\":[\"Explorateur\"],\"vujQJ5\":[\"Localisation\"],\"vvJPVL\":[\"Afficher la vue d’ensemble\"],\"vwI5S4\":[\"Succès\"],\"vzH-7Z\":[\"Expliquer\"],\"w7QmD_\":[\"Saisir le prompt système...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Temps écoulé\"],\"wCfv2R\":[\"Ajouter une connexion\"],\"wGfc86\":[\"Effacer tout l’historique\"],\"wGwNv4\":[\"Base de données active\"],\"wJJ-Wy\":[\"Installation...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers touchés\"],\"wQn-RM\":[\"Ajouter une colonne\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Appliqué\"],\"wTmVhm\":[\"Supprimer\"],\"wZeIWq\":[\"Importer depuis le Presse-papiers\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"En attente\"],\"wckWOP\":[\"Gérer\"],\"wdYcKH\":[\"Onglets ouverts\"],\"wja8aL\":[\"Sans titre\"],\"wkOAzk\":[\"Aucun notebook ne correspond à votre recherche.\"],\"wp49Ao\":[\"Échec du traitement des insertions : \"],\"wqG2hQ\":[\"Ignorer (ne pas importer)\"],\"wwrAsK\":[\"Veuillez remplir tous les champs requis\"],\"wwu18a\":[\"Icône\"],\"x2fr_j\":[\"Graphe\"],\"xANKBj\":[\"Fonctions\"],\"xBwjck\":[\"Un redémarrage est nécessaire pour appliquer les changements.\"],\"xDAtGP\":[\"Message\"],\"xECY01\":[\"Procédures\"],\"xGPNgZ\":[\"Personnalisation des prompts\"],\"xNgtS-\":[\"Aucune vue trouvée\"],\"xOPa1b\":[\"Le port doit être compris entre 1 et 65535\"],\"xY9s5E\":[\"Délai dépassé\"],\"xaVUr1\":[\"Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwis\"],\"xbvTzL\":[\"Chemin du fichier\"],\"xlew5F\":[\"Effacer\"],\"xmNyKz\":[\"Test en cours...\"],\"xtuh6D\":[\"Développer l’explorateur\"],\"y-Zdqj\":[\"Choisir un contexte...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Ouvrir le visualiseur JSON\"],\"yQXjG5\":[\"Tout désélectionner\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Hier\"],\"ygCKqB\":[\"Arrêter\"],\"ykCc6r\":[\"Base de données modifiée (cellule \",[\"n\"],\")\"],\"ynVMSc\":[\"Tout sélectionner\"],\"ytdz1d\":[\"L'IA veut exécuter une écriture\"],\"yyhzur\":[\"Créer une table\"],\"yz7wBu\":[\"Fermer\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"Mot de passe SSH\"],\"z4oF5T\":[\"Exporter la base de données\"],\"z5kV0h\":[\"Connexions\"],\"zBTMzx\":[\"Aperçu\"],\"zCaAKs\":[\"Erreur de mise à jour\"],\"zDAakK\":[\"Impossible d’afficher le diagramme sans ID de connexion.\"],\"zGe21h\":[\"Cette clé est chargée depuis une variable d’environnement\"],\"zGfL5t\":[\"valeur\"],\"zL6-4A\":[\"Aucun processus de plugin n’est en cours\"],\"zLZhCi\":[\"Nouvelle communauté Discord !\"],\"zLlCou\":[\"Copier le nom de colonne\"],\"zNEL34\":[\"Rejoindre la communauté\"],\"zNgTlV\":[\"Fermer les onglets à droite\"],\"zQz55p\":[\"Inspecter la structure\"],\"zR0FfH\":[\"Exporté vers \",[\"target\"]],\"zRZeOc\":[\"Rechercher tables, vues, routines, triggers...\"],\"zUNMsr\":[\"Clé SSH\"],\"zXMRzb\":[\"Port SSH\"],\"zZgoXr\":[\"Aucune table correspondante\"],\"zaWbms\":[\"Annuler les modifications\"],\"zgClmU\":[\"Installer la configuration\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Saisir une valeur...\"],\"zvzN4C\":[\"Définir comme actif\"],\"zzDlyQ\":[\"Succès\"],\"zzMxrp\":[\"Modifier config.json\"],\"zz_Wd_\":[\"Mode\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/it/messages.po b/src/locales/it/messages.po index e96e52f3..0254142e 100644 --- a/src/locales/it/messages.po +++ b/src/locales/it/messages.po @@ -1207,12 +1207,22 @@ msgid "Create a new database view" msgstr "Crea una nuova vista database" #: src/components/modals/CreateForeignKeyModal.tsx -msgctxt "createFk" +msgctxt "createFk.create" msgid "Create Foreign Key" msgstr "Crea Chiave Esterna" +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk.title" +msgid "Create Foreign Key" +msgstr "Crea Chiave Esterna" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex.create" +msgid "Create Index" +msgstr "Crea Indice" + #: src/components/modals/CreateIndexModal.tsx -msgctxt "createIndex" +msgctxt "createIndex.title" msgid "Create Index" msgstr "Crea Indice" @@ -1258,7 +1268,12 @@ msgid "Create Trigger" msgstr "" #: src/components/modals/ViewEditorModal.tsx -msgctxt "views" +msgctxt "views.create" +msgid "Create View" +msgstr "Crea Vista" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views.createView" msgid "Create View" msgstr "Crea Vista" @@ -1639,8 +1654,12 @@ msgstr "Elimina Vista" #: src/components/layout/ExplorerSidebar.tsx #: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgctxt "dump.dumpDatabase" +msgid "Dump Database" +msgstr "Esporta Database" + #: src/components/modals/DumpDatabaseModal.tsx -msgctxt "dump" +msgctxt "dump.title" msgid "Dump Database" msgstr "Esporta Database" @@ -1904,14 +1923,22 @@ msgid "Error" msgstr "Error" #: src/components/modals/PluginInstallErrorModal.tsx -#: src/components/modals/PluginStartErrorModal.tsx -msgctxt "settings" +msgctxt "settings.plugins.installError.details" msgid "Error Details" msgstr "Dettagli errore" +#: src/components/modals/PluginStartErrorModal.tsx +msgctxt "settings.plugins.startError.details" +msgid "Error Details" +msgstr "Dettagli Errore" + #: src/components/modals/QuickNavigatorModal.tsx +msgctxt "editor.quickNavigator.escHint" +msgid "Esc to close" +msgstr "Esc per chiudere" + #: src/components/modals/TabSwitcherModal.tsx -msgctxt "editor" +msgctxt "editor.tabSwitcher.escHint" msgid "Esc to close" msgstr "Esc per chiudere" @@ -1941,7 +1968,12 @@ msgid "Events" msgstr "Eventi" #: src/components/settings/ai-activity/AiActivitySessionsTab.tsx -msgctxt "aiActivity" +msgctxt "aiActivity.events" +msgid "Events" +msgstr "Eventi" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity.sort.eventCount" msgid "Events" msgstr "Eventi" @@ -2074,7 +2106,12 @@ msgid "Export as Notebook" msgstr "Esporta come Notebook" #: src/pages/Connections.tsx -msgctxt "connections" +msgctxt "connections.export" +msgid "Export Connections" +msgstr "Esporta connessioni" + +#: src/pages/Connections.tsx +msgctxt "connections.exportTitle" msgid "Export Connections" msgstr "Esporta connessioni" @@ -2639,7 +2676,17 @@ msgid "Installed" msgstr "Installato" #: src/components/settings/PluginsTab.tsx -msgctxt "settings" +msgctxt "settings.plugins.filterInstalled" +msgid "Installed" +msgstr "Installati" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installed" +msgid "Installed" +msgstr "Installato" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installedMetric" msgid "Installed" msgstr "Installati" @@ -4005,12 +4052,16 @@ msgstr "Le righe verranno aggiunte a una tabella esistente" msgid "Run" msgstr "Esegui" -#: src/components/modals/QuerySelectionModal.tsx #: src/components/notebook/NotebookToolbar.tsx -msgctxt "editor" +msgctxt "editor.notebook.runAll" msgid "Run All" msgstr "Esegui Tutto" +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor.querySelection.runAll" +msgid "Run All" +msgstr "Esegui tutte" + #: src/i18n/registries/shortcutLabels.ts msgid "Run All Cells" msgstr "Esegui Tutte le Celle" @@ -4736,10 +4787,14 @@ msgid "table" msgstr "tabella" #: src/components/modals/visual-explain/ExplainNodeDetails.tsx -#: src/components/modals/visual-explain/ExplainSummaryBar.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx -msgctxt "editor" +msgctxt "editor.visualExplain.relation" +msgid "Table" +msgstr "Tabella" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgctxt "editor.visualExplain.tableView" msgid "Table" msgstr "Tabella" @@ -5188,10 +5243,15 @@ msgid "View created successfully" msgstr "Vista creata con successo" #: src/components/layout/ExplorerSidebar.tsx -msgctxt "sidebar" +msgctxt "sidebar.viewDefinition" msgid "View Definition" msgstr "Definizione Vista" +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar.viewTriggerDefinition" +msgid "View Definition" +msgstr "" + #: src/components/modals/ViewEditorModal.tsx msgid "View Definition (SQL)" msgstr "Definizione Vista (SQL)" diff --git a/src/locales/it/messages.ts b/src/locales/it/messages.ts index 598c0c67..3f0bb994 100644 --- a/src/locales/it/messages.ts +++ b/src/locales/it/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Max Voci Cronologia\"],\"-6AWa-\":[\"Importa connessioni\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Disconnetti\"],\"-PLZfh\":[\"Impossibile aggiornare i modelli\"],\"-T5W2e\":[\"Note Driver\"],\"-ZgeeE\":[\"Cronologia modifiche\"],\"-aYrdc\":[\"La versione \",[\"0\"],\" è disponibile\"],\"-fBGXl\":[\"Costo Più Alto\"],\"-jIQDz\":[\"Comprimi Cella\"],\"-u1eRo\":[\"Nessun database\"],\"-yoeVU\":[\"Caricamento schema...\"],\"-zy2Nq\":[\"Tipo\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID approvazione\"],\"0E5-gF\":[\"Sei sicuro di voler eliminare questa connessione?\"],\"0HCubq\":[\"Espandi\"],\"0Kmdvy\":[\"Font Personalizzato\"],\"0Nj13E\":[\"Genera SQL\"],\"0ROgz5\":[\"Inserisci JSON...\"],\"0SY9sU\":[\"Impossibile disconnettersi dal database\"],\"0b3kL9\":[\"Seleziona un database\"],\"0caMy7\":[\"Cronologia\"],\"0mx5ow\":[\"Query\"],\"0n9BtL\":[\"Anteprima\"],\"0pHB9N\":[\"Copia come tabella.colonna\"],\"0sQzZK\":[\"Filtra database...\"],\"0uPP9X\":[\"Nome FK (Opzionale)\"],\"0wxuek\":[\"Versione Corrente\"],\"0x09Aw\":[\"Stop on error commutato\"],\"0yBP6v\":[\"Supporta lo Sviluppo\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe\"],\"other\":[\"#\",\" righe\"]}]],\"0yVAoD\":[\"Conta righe\"],\"0zxJ87\":[\"Nessun log disponibile\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Modifica Vista\"],\"11fGJ6\":[\"Query\"],\"13hIUA\":[\"Chiave API \",[\"0\"]],\"14qNWF\":[\"Seleziona Connessione SSH\"],\"17qHRP\":[\"Nuova connessione\"],\"1Dn6bg\":[\"Importa dagli Appunti\"],\"1Dnd0I\":[\"Carica conteggio righe\"],\"1FjTLW\":[\"es. python3\"],\"1GOvbo\":[\"Ollama connesso (\",[\"0\"],\" modelli trovati)\"],\"1I6UoR\":[\"Viste\"],\"1U7hS5\":[\"Lung\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Font dell'Editor\"],\"1ekzlY\":[\"Processi Plugin\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Selezione Tema\"],\"1xVZkL\":[\"Nessun modello trovato\"],\"26Joci\":[[\"0\"],\" righe recuperate\"],\"2Bf-Qe\":[\"Nuova console\"],\"2CrSmP\":[\"Aiuta tabularis a crescere\"],\"2D9F8_\":[\"Impossibile duplicare la connessione\"],\"2Eoi_a\":[\"Mostra dettagli\"],\"2F4pE5\":[\"Build e Test Rust\"],\"2Fsd9r\":[\"Questo Mese\"],\"2JzKXI\":[\"Imposta GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Seleziona Tutto\"],\"2SO5RM\":[\"Kubernetes non è disponibile per questo driver.\"],\"2Uh5GA\":[\"ecosistema Cargo\"],\"2YylFp\":[\"Nuova Query Visuale\"],\"2luuSG\":[\"Riprova\"],\"2wxgft\":[\"Rinomina\"],\"2yG2GC\":[\"Sospendi le scritture (o ogni query) chiedendo conferma all'utente in Tabularis prima dell'esecuzione.\"],\"30-b5r\":[\"Elimina\"],\"31kwdN\":[\"Duplica filtro\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Tutti gli strumenti\"],\"3Am5DS\":[\"Vista a tab\"],\"3BhBCj\":[\"Eventi\"],\"3FVg9_\":[\"Colonna Locale\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Esegui\"],\"3L0HCz\":[\"Nessun plugin corrisponde alla ricerca.\"],\"3Nv3JV\":[\"Esecuzione query...\"],\"3TSz9S\":[\"Riduci\"],\"3UW8fG\":[\"Aggiornamenti gestiti da \",[\"0\"]],\"3YvS-c\":[\"Nuovo tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt Nome Cella Notebook\"],\"3qkggm\":[\"Schermo Intero\"],\"3rBJ1T\":[\"Vedi schema\"],\"3xZ-xV\":[\"Insert Current Timestamp\"],\"40Gx0U\":[\"Fuso Orario\"],\"41GP4f\":[\"Scegli il delimitatore predefinito utilizzato per la copia o l'esportazione delle righe in formato CSV.\"],\"42iaEi\":[\"PostgreSQL senza ANALYZE mostra solo le stime del planner.\"],\"44cXI8\":[\"Ordina per \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gestisci Database\"],\"4CK17g\":[\"Sei sicuro di voler modificare la vista \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Seleziona almeno un database\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Esporta come HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processo figlio\"],\"other\":[\"#\",\" processi figli\"]}]],\"4VyuY3\":[\"Sei sicuro di voler cancellare tutti i log?\"],\"4WWqS3\":[\"Espandi/comprimi albero JSON\"],\"4cEClj\":[\"Sessioni\"],\"4cmfYp\":[\"Duplicate Row\"],\"4lIZTB\":[\"Dipendenze Dev Frontend\"],\"4oYjvJ\":[\"Cerca nella query…\"],\"4tMxW4\":[\"Anteprima record correlato\"],\"4yJcjm\":[\"Seleziona tipo...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Chiudi pannello filtri (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Punto e virgola (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" evento\"],\"other\":[\"#\",\" eventi\"]}]],\"5I2fxu\":[\"/percorso/id_rsa\"],\"5NZpX8\":[\"Vista lista\"],\"5To6Z6\":[\"Copia query\"],\"5gqNQl\":[\"Vista griglia\"],\"5igIzr\":[\"Importazione annullata\"],\"5nTIup\":[\"Modifica vista: \",[\"name\"]],\"66bEht\":[\"Stato del Progetto\"],\"6PIJVc\":[\"Avvio\"],\"6QvP0l\":[\"Esporta come JSON\"],\"6W41Xq\":[\"Gestione Attività\"],\"6WngBH\":[\"Imposta NULL\"],\"6YtxFj\":[\"Nome\"],\"6_dCYd\":[\"Panoramica\"],\"6gvoHP\":[\"Copia messaggio d’errore\"],\"6oCVzX\":[\"Il contesto Kubernetes è obbligatorio\"],\"6wQO0f\":[\"Mostra Dati\"],\"6z9W13\":[\"Riavvia\"],\"71agNy\":[\"Genera nomi per le celle senza nome con AI\"],\"74J3FG\":[\"Versione iniziale\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Ho capito\"],\"77nSMU\":[\"Vuoi eliminare l'intera storia delle attività AI? L'operazione è irreversibile.\"],\"79UVYW\":[\"Esc per chiudere\"],\"7ABmyQ\":[\"Riprova\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" di \",[\"0\"],\" attivi\"],\"7E864M\":[\"Tipo Database\"],\"7FqaG1\":[\"Personalizza le istruzioni per l'analisi AI dei piani EXPLAIN. Usa \",[\"LANGUAGE\"],\" per la lingua di output.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Tipi misti rilevati, default TEXT\"],\"7RSQQd\":[\"Salva password nel Portachiavi\"],\"7VpPHA\":[\"Conferma\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fallite\"],\"7sMeHQ\":[\"Chiave\"],\"7sNhEz\":[\"Nome utente\"],\"7tATh2\":[\"Esegui Query\"],\"7yb4gk\":[\"Fallito: \"],\"8-4V8D\":[\"Tabelle\"],\"82G-l5\":[\"Il Model Context Protocol (MCP) permette agli assistenti AI (come Claude) di connettersi ai tuoi strumenti locali. Tabularis espone un server MCP che permette all'AI di leggere lo schema del database ed eseguire query in sicurezza.\"],\"83VjWE\":[\"Nuovo Notebook\"],\"86IgoU\":[\"Esegui query (nell'editor)\"],\"86fCgf\":[\"Personalizza le istruzioni per la generazione AI del nome delle tab risultato query. La query SQL viene inviata come messaggio utente.\"],\"87a_t_\":[\"Etichetta\"],\"8CWirf\":[\"Server MCP\"],\"8S8aIX\":[\"Controllo Connessione\"],\"8TMaZI\":[\"Timestamp\"],\"8Tg_JR\":[\"Personalizzato\"],\"8UFKYr\":[\"Seleziona la query da eseguire\"],\"8VKSGV\":[\"Genera SQL\"],\"8Wjy6z\":[\"Chiudi schede a sinistra\"],\"8ZsakT\":[\"Password\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Editor SQL\"],\"8bRgTe\":[\"Provider AI non configurato. Vai su Impostazioni > AI.\"],\"8c_W0h\":[\"Versioni precedenti\"],\"8guEQP\":[\"Aggiorna Viste\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN è leggero e soprattutto strutturale.\"],\"8q_sOc\":[\"Rimuovi\"],\"8t-akp\":[\"prime \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nome Connessione\"],\"91gnWY\":[\"Esporta Log\"],\"91rtHL\":[\"Crea Nuova Vista\"],\"92hf9a\":[\"Rimuovi\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vista aggiornata con successo\"],\"9NzDFn\":[\"Mostra la schermata di benvenuto all'avvio dell'applicazione.\"],\"9OoUS3\":[\"Crea Nuova Connessione SSH\"],\"9QGRD5\":[\"Colonna destinazione\"],\"9QTny9\":[\"Esecuzione query fallita.\"],\"9S-fyV\":[\"Piano di esecuzione preliminare\"],\"9SJ_Sx\":[\"Risorse di Sistema\"],\"9UQ730\":[\"Clona\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"Nessun dato negli appunti\"],\"9mMU1R\":[\"Tempo\"],\"9mvFo_\":[\"Ora\"],\"9npOH9\":[\"Apri file\"],\"9uI_rE\":[\"Annulla\"],\"9xUjzm\":[\"Seleziona Tutti\"],\"9y_02p\":[\"Chatta con la community, ricevi aiuto, suggerisci funzionalità\"],\"A1pPcI\":[\"Host SSH\"],\"A1taO8\":[\"Cerca\"],\"A6C0pv\":[\"Costo Totale\"],\"A7WG0p\":[\"Plugin disabilitato\"],\"A7yRz3\":[\"La definizione della vista è richiesta\"],\"A9Uyp6\":[\"Importazione fallita: \"],\"ABEd-z\":[\"Usa il tuo package manager per aggiornare Tabularis.\"],\"AMdgKV\":[\"Prompt Analisi Piano di Esecuzione\"],\"ANSTMe\":[\"Nessun problema rilevante nel riepilogo del piano corrente.\"],\"ANzIr7\":[\"Cronologia Query\"],\"AOnaU7\":[\"saltate\"],\"AVlZoM\":[\"Variabile Ambiente\"],\"AXTVsE\":[\"Verifica completa\"],\"AXdRYR\":[\"Log attuali\"],\"Aa-YkQ\":[\"Esporta Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filtra per livello\"],\"AlPiMN\":[\"Clicca per saltare alla pagina\"],\"An-1rA\":[\"Righe restituite\"],\"AnV8j-\":[\"Modifica Colonna\"],\"AvEr_L\":[\"Nuova Console\"],\"AvYbUL\":[\"Star su GitHub\"],\"Aw_eOs\":[\"Richiede Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Nessun risultato trovato\"],\"B0mJGb\":[\"Output Grezzo\"],\"B1c58n\":[\"Modifica colonna\"],\"B3toQF\":[\"Oggetti\"],\"B5nKny\":[\"/percorso/assoluto/cartella\"],\"B5xevr\":[\"Il nome della connessione è obbligatorio\"],\"BAVvWJ\":[\"Diagramma ER\"],\"BBtVak\":[\"Comprimi Tutto\"],\"BEVzjL\":[\"Importazione fallita\"],\"BFxXo5\":[\"Esegui Tutto\"],\"BJe2lZ\":[\"Mostra/nascondi sidebar\"],\"BK3WCj\":[\"Impossibile caricare il registro\"],\"BKbO3i\":[\"Notebook modificato\"],\"BMB51y\":[\"Esegui nella console\"],\"BNW_Z4\":[\"es. utenti_attivi, riepilogo_ordini\"],\"BUO_JN\":[\"Copia Query\"],\"BYkhHY\":[\"Controlla aggiornamenti all'avvio\"],\"BbHofF\":[\"Esporta connessioni\"],\"BeSg6-\":[\"Raccogli i log dell'applicazione in memoria per il debug\"],\"BgAyQH\":[\"Rimuovi ordinamento\"],\"BinTJI\":[\"ecosistema npm\"],\"BkFson\":[\"Impaginazione automatica\"],\"Bpglf1\":[\"Sposta Su\"],\"BrGo6h\":[\"Cerca notebook\"],\"BxiAN_\":[\"Elimina Query\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dipendenze Frontend\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Nessun filtro —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Download in corso...\"],\"CUxwxn\":[\"Mostra Tutte le Tabelle\"],\"CWMXbw\":[\"fermerà forzatamente il suo processo. Tutte le connessioni database attive che usano questo plugin smetteranno di funzionare finché il plugin non verrà riavviato.\"],\"CZt6BX\":[\"CONFIGURAZIONE MANUALE\"],\"Ca8ixZ\":[\"Elimina\"],\"CbJBQS\":[\"Aggiornamento fallito: \"],\"Cdz-YU\":[\"Vista impilata\"],\"CpeQf9\":[\"Cicli\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Seleziona il modello da utilizzare per la generazione e la spiegazione.\"],\"DB8zMK\":[\"Applica\"],\"DDXf5E\":[\"Funzioni SQL\"],\"DEwnwi\":[\"Elimina\"],\"DNTvdl\":[\"Apri nell'editor\"],\"DPc2P9\":[\"Elimina Cella\"],\"DUY8Ba\":[\"Modifiche Incompatibili\"],\"DVnBSM\":[\"Altezza Riga\"],\"Dd7YLj\":[\"Forse più tardi\"],\"Deej3j\":[\"JSON non valido\"],\"DfKhk_\":[\"Aggiorna\"],\"DiRiTz\":[\"Apri pagina del pacchetto\"],\"DlRHAD\":[\"Esecuzione EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" errore\"],\"other\":[\"#\",\" errori\"]}]],\"Dvdihe\":[\"Su \",[\"0\"],\" — controlla e decidi prima dell'esecuzione.\"],\"DzFLzw\":[\"SÌ\"],\"E-JUtQ\":[\"Approvazione manuale\"],\"E0kcnZ\":[\"Generale\"],\"E2mje_\":[\"Seleziona la query da analizzare\"],\"EDieyg\":[\"Sei sicuro di voler eliminare questa connessione SSH?\"],\"EHZxPj\":[\"Espandi\"],\"EL4oDO\":[\"Nuova Versione Disponibile\"],\"EPi4gT\":[\"Ordina per \",[\"field\"]],\"EWPtMO\":[\"Codice\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Sconosciuto\"],\"EhADgB\":[\"Elimina colonna\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Sei aggiornato\"],\"Em6JFd\":[\"Conta righe\"],\"EnGiqG\":[[\"0\"],\" elementi\"],\"Ew1n5z\":[\"Cerca plugin…\"],\"F18WP3\":[\"Parametri\"],\"F3uc1x\":[\"Il file esportato conterrà le password del database e SSH in chiaro. Conservalo in modo sicuro.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" righe\"],\"other\":[\"#\",\" righe\"]}]],\"F6pfE9\":[\"Attiva\"],\"F8tXg7\":[\"Anteprima Dati\"],\"F9-6yK\":[\"Formato di copia predefinito\"],\"F9lxfG\":[\"Rimuovi\"],\"F9nsa2\":[\"Il file di cronologia era corrotto ed è stato spostato in backup. Le nuove query verranno registrate normalmente. File di backup:\"],\"FF_oap\":[\"Default\"],\"FK8rlP\":[\"Nessuna connessione SSH configurata\"],\"FMRcH8\":[\"Prima riga come intestazione\"],\"FNvDMc\":[\"Questa Settimana\"],\"FQe1FI\":[\"Righe Stimate\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operazione\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Scegli un tema indipendente per l'editor SQL, oppure mantienilo sincronizzato con il tema dell'app.\"],\"FsvZQL\":[\"Modificata cella \",[\"n\"]],\"FtwKL9\":[\"Cambia tab\"],\"FznI3z\":[\"Eliminare la chiave esterna \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Anteprima fallita: \"],\"G8Q5Zq\":[\"Il namespace è obbligatorio\"],\"GAohqx\":[\"Elimina colonna\"],\"GJR99u\":[\"Eliminazione colonna fallita: \"],\"GKfzzM\":[\"Scegli una connessione...\"],\"GS-Mus\":[\"Esporta\"],\"GUaLUq\":[\"Caricamento schema fallito: \"],\"GXP-Iw\":[\"Aggiungi Cella SQL\"],\"Gj1mLb\":[\"Celle riordinate\"],\"GlbqG2\":[\"Ripristina predefinito\"],\"Gs5AlY\":[\"Aperta\"],\"GtmO8_\":[\"da\"],\"GxkJXS\":[\"Caricamento in corso...\"],\"H-o4D2\":[\"Crea nuova colonna\"],\"H2B-KW\":[\"Scegli il formato predefinito per la copia delle righe con Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Ripeti\"],\"H7mlCc\":[\"/percorso/assoluto/db.sqlite\"],\"H86f9p\":[\"Riduci\"],\"H9P8CD\":[\"aggiungi il primo filtro\"],\"HAQlGl\":[\"Attività AI\"],\"HKNZrs\":[\"Cond. Indice\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Elimina \",\"#\",\" righe\"],\"other\":[\"Elimina \",\"#\",\" righe\"]}]],\"HPuCiP\":[\"Percorso Cartella\"],\"HUs1R3\":[\"Nessuna scheda aperta per questa connessione.\"],\"HV4Isp\":[\"Inserisci password SSH\"],\"HVC8Hh\":[\"Copiato negli appunti\"],\"HWEpq8\":[\"Scrittura Disco/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Salvataggio vista fallito: \"],\"He8v1Y\":[\"Deseleziona da Applica tutti\"],\"HehHP1\":[\"Layout Predefinito\"],\"HilYn4\":[\"Questo notebook è vuoto. Aggiungi una cella per iniziare.\"],\"HjxVK_\":[\"Test connessione rapido\"],\"HmMnRx\":[\"Modalità WKT\"],\"HoKCiI\":[\"L'app si riavvierà automaticamente dopo l'installazione\"],\"HpK_8d\":[\"Ricarica\"],\"Hpi4Jm\":[\"Entra subito\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configura SSH Inline\"],\"I5VBsr\":[\"Come l'app\"],\"I8yrPb\":[\"Sostituisci tabella\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Ricordamelo Dopo\"],\"I99Miw\":[\"Costo\"],\"IETZIR\":[\"Modifica nome cella\"],\"IG9wzA\":[\"Inserimento riga fallito: \"],\"ILleOG\":[\"Il tipo di risorsa deve essere \\\"service\\\" o \\\"pod\\\"\"],\"IQ3gAw\":[\"Carica File\"],\"IUwGEM\":[\"Salva Modifiche\"],\"IUwmLq\":[\"Dipendenze dirette dichiarate in package.json e src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Librerie Open Source\"],\"I_43p6\":[\"Sicurezza\"],\"Iaizf4\":[\"Aspetto\"],\"Il3FBB\":[\"Pannello filtri strutturati\"],\"IniZRK\":[\"Download non disponibile - caricata solo anteprima\"],\"Isaozb\":[\"Rivedi e modifica\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Le query attive e le connessioni attraverso questo plugin verranno interrotte.\"],\"J6v1s_\":[\"Modello Predefinito\"],\"JE-DVk\":[\"Interprete\"],\"JEGlfK\":[\"Inizio\"],\"JKDPqP\":[\"Seleziona prima un contesto\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Usa Tunnel SSH\"],\"JRz8tw\":[\"MySQL e MariaDB espongono metriche reali solo con le varianti supportate di EXPLAIN ANALYZE o ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP o SVG · max 512 KB\"],\"JY5Oyv\":[\"Database\"],\"JlFRIB\":[\"Fuso orario della sessione inviato a MySQL dopo la connessione.\"],\"JrOEip\":[\"Anteprima\"],\"JsY1p5\":[\"Negata\"],\"K3H9p5\":[\"Rimuovi\"],\"K5Dgu_\":[\"Database\"],\"K8IGKf\":[\"Tipo di Autenticazione\"],\"KAYNSW\":[\"Quanti log mantenere in memoria (1-10000)\"],\"KHTGbr\":[\"EXPLAIN preliminare\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copia come `colonna`\"],\"KM5Kc8\":[\"Almeno una colonna deve essere selezionata\"],\"KSCnVQ\":[\"Tipo\"],\"KUjOb9\":[\"in esecuzione\"],\"KXBdwy\":[\"Aggiorna Routine\"],\"KXNyX7\":[\"Imposta DEFAULT\"],\"Kd70-v\":[\"Importa dagli Appunti...\"],\"KhI4oS\":[\"Apri la riga referenziata in \",[\"0\"]],\"KhgrNu\":[\"Integrazione Server MCP\"],\"KirERL\":[\"Timeout\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Eliminazione indice fallita: \"],\"KzeARD\":[\"Eliminazione tabella fallita: \"],\"L-rMC9\":[\"Ripristina predefinito\"],\"L3HXkQ\":[\"Correzioni Bug\"],\"LCZ7Dy\":[\"Copia nome\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"indici\"],\"LMeAoR\":[\"righe\"],\"LPCdc-\":[\"Prompt Nome Tab Query\"],\"LPFmga\":[\"Seleziona per Applica tutti\"],\"LYzbQ2\":[\"Strumento\"],\"Lbis_V\":[\"Navigatore rapido\"],\"Lcpbe2\":[\"Impossibile avviare il processo del plugin. Controlla i dettagli dell'errore.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN è supportato solo per istruzioni DML (SELECT, INSERT, UPDATE, DELETE). Le istruzioni DDL come CREATE, DROP o ALTER non possono essere analizzate.\"],\"LnT0hQ\":[\"Aggiungi colonna\"],\"LvutiO\":[\"Suggerisci con AI\"],\"M-rHQO\":[\"Esci da Schermo Intero\"],\"M0XJba\":[\"Sei sicuro di voler cancellare tutta la cronologia delle query per questa connessione?\"],\"M1co_O\":[\"Configurato\"],\"M73whl\":[\"Contesto\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Emoji selezionato\"],\"MWB7fV\":[\"Mostra Tutto\"],\"MXdOwj\":[\"Separa Connessioni\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Seleziona connessione K8s\"],\"Mc1tjS\":[\"Abilita ANALYZE per ispezionare righe reali, tempi, cicli e buffer.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" righe in più\"],\"Mp0jQ_\":[\"Questo driver supporta le chiavi primarie solo in fase di creazione della tabella\"],\"MqpZwN\":[\"Processo Tabularis\"],\"MxIx43\":[\"↑↓ per navigare, Invio per aprire\"],\"MygtgQ\":[\"Aggiungi Cella Markdown\"],\"N40H-G\":[\"Tutti\"],\"N5UQxq\":[\"Ollama non rilevato sulla porta \",[\"0\"],\". È in esecuzione?\"],\"N6GBcC\":[\"Conferma eliminazione\"],\"N6aqHp\":[\"Query eseguite\"],\"N9_S15\":[\"Verrà creata una nuova tabella\"],\"NBdMa1\":[\"Step Più Lento\"],\"NC2AI2\":[\"Lunghezza\"],\"NCzNnx\":[\"Ordine crescente\"],\"NT4Ubs\":[\"Elimina chiave personalizzata e ripristina variabile d'ambiente (se presente)\"],\"NUjrCO\":[\"Nessun preferito corrisponde alla ricerca\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Totale albero: \",[\"0\"]],\"Nc2VQn\":[\"Aggiungi a esistente\"],\"NgFERn\":[\"Aggiungi ai Preferiti\"],\"NktMHG\":[\"Nome database\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Test\"],\"Nq5QTk\":[\"analizza N-esima\"],\"O2STgu\":[\"Esportazione fallita: \"],\"O8SV8O\":[\"Download in corso...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Esegui Tutte le Celle\"],\"OGWdBg\":[\"Nome Vista\"],\"OHqT6w\":[\"Premi la combinazione di tasti...\"],\"OXJsaG\":[\"Nome parametro non valido\"],\"OfhWJH\":[\"Ripristina\"],\"OlAl5i\":[\"Espandi tutto\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Unisciti su Discord\"],\"P1YGsb\":[\"Generazione SQL\"],\"P2m1xb\":[\"Ferma su Errore\"],\"P3Qlys\":[\"Nessun ID Connessione\"],\"P6Y3Yf\":[\"Esegui questo comando nel terminale, poi riavvia Claude Code.\"],\"PCdj-c\":[\"Deseleziona tutte\"],\"PMnFt9\":[\"Lettura Disco/s\"],\"PQU2Va\":[\"Accetta Suggerimento con Invio\"],\"PRnH8G\":[\"su \",[\"0\"]],\"PY8UF3\":[\"Parallelo commutato (cella \",[\"n\"],\")\"],\"PiH3UR\":[\"Copiato!\"],\"Pia95d\":[\"Il nome della colonna è richiesto\"],\"PrElXQ\":[\"Aggiorna\"],\"PrixCC\":[\"Le righe verranno aggiunte a una tabella esistente\"],\"Pujgbb\":[\"Configura destinazione\"],\"Pw_eQV\":[\"Plugin non avviato\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Nessuna query salvata\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Nessun processo figlio\"],\"QCxMC0\":[\"Controlla automaticamente nuove versioni all'avvio dell'app\"],\"QEazml\":[\"Elimina selezionate\"],\"QHcLEN\":[\"Connesso\"],\"QLHHFO\":[\"Modalità sola lettura\"],\"QOvAW3\":[\"Nuove Funzionalità\"],\"QULGRi\":[\"Nessuna query valida trovata\"],\"QZwllF\":[\"Sfoglia...\"],\"QbkSr_\":[\"EXPLAIN non disponibile per questa query.\"],\"QeHFYZ\":[\"EXPLAIN fallito: \",[\"0\"]],\"Qll2Tb\":[\"Decresc.\"],\"Qoq-GP\":[\"Leggi di più\"],\"Qu4Hog\":[\"Notebook importato con successo\"],\"R-A2Vd\":[\"Nessun dato da visualizzare\"],\"R0Hkb2\":[[\"0\"],\" database selezionato/i\"],\"R1nHhB\":[\"Esiste già\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Converti in Console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configurazione\"],\"RF-HyV\":[\"Scegli la tua lingua preferita. 'Auto' userà la lingua di sistema.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copia nome\"],\"RI-HZc\":[\"Inserisci Chiave \",[\"0\"]],\"RJrE17\":[\"Sei sicuro di voler eliminare la vista \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Una stella aiuta gli altri a scoprire il progetto\"],\"Rb3Tdm\":[\"Nome del notebook\"],\"RcbKJ3\":[\"All'Update\"],\"RkefFq\":[\"Esegui un EXPLAIN della query prima di mostrare il modal di approvazione, così l'utente vede il piano di esecuzione.\"],\"RnF_hl\":[\"Caricamento registro plugin...\"],\"Rns7_C\":[\"Questa azione non può essere annullata immediatamente\"],\"RoKRqW\":[\"Plugin Disponibili\"],\"RphpKk\":[\"Aspetto\"],\"Rt8sHM\":[\"Rilevato lavoro di sort o temporaneo\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Abilitati\"],\"S1veKH\":[\"Ripristina selezionato\"],\"S5zeZU\":[\"Anteprima\"],\"S8Yqbl\":[\"Inserisci\"],\"SDND4q\":[\"Non configurato\"],\"SJRy3D\":[\"(Auto-generato)\"],\"SSwIjo\":[\"Imposta VUOTO\"],\"SgvA_r\":[\"Premi Esegui (Ctrl/Command+F5) per caricare i dati della tabella\"],\"SlfejT\":[\"Errore\"],\"SoATkx\":[\"Copia cella\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL Endpoint\"],\"T7w5CQ\":[\"Impossibile creare nuova riga: \"],\"T9947j\":[\"Valore (es. 'testo' o 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Passa a Layout Verticale\"],\"TK5oex\":[\"Salva Prompt\"],\"TKQ7K-\":[\"Installa\"],\"TKZreP\":[\"Richiesto\"],\"TMLAx2\":[\"Richiesto\"],\"TO08JI\":[\"chiavi esterne\"],\"TQloo1\":[\"Crea Chiave Esterna\"],\"TVKqvO\":[\"Modifica Riga\"],\"TYSdQ3\":[\"Esegui query SELECT\"],\"TfDFHS\":[\"Manda a capo le righe lunghe nell'editor invece di scorrere orizzontalmente.\"],\"Tibfjs\":[\"Nessuna connessione salvata — creane una qui sotto\"],\"Tj36Dr\":[\"Ripristina Predefinito\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Blocca query\"],\"TpwXyg\":[\"Se il tempo manca, il server ha probabilmente restituito un piano solo stimato.\"],\"Tw2M1h\":[\"Installazione fallita\"],\"Ty-rm9\":[\"Connessioni SSH\"],\"Tz0i8g\":[\"Impostazioni\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Connessioni Kubernetes\"],\"U4uzyV\":[\"Novità\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Ferma l'esecuzione quando una cella fallisce\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" su \",[\"1\"],\" — controlla e decidi prima dell'esecuzione.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configurazione installata per \",[\"clientName\"],\"! Riavvia l'app per applicare.\"],\"URmyfc\":[\"Dettagli\"],\"UWQBvp\":[\"Genera modelli SQL\"],\"UawTKZ\":[\"Opzionale. Specifica l'eseguibile usato per avviare questo plugin (es. python3 su macOS/Linux, python o percorso completo su Windows). Lascia vuoto per usare il valore predefinito.\"],\"Ub8sf5\":[\"SQLite non supporta l'eliminazione di FK tramite ALTER TABLE.\"],\"UbbJ8j\":[\"Nessuna opzione trovata\"],\"Ubs68g\":[\"Generali\"],\"UftN8J\":[\"Queste connessioni rifiuteranno le scritture da MCP. Le altre si comportano normalmente.\"],\"UnQNah\":[\"Sei sicuro di voler eliminare la colonna \\\"\",[\"0\"],\"\\\" dalla tabella \\\"\",[\"tableName\"],\"\\\"?\\n\\nATTENZIONE: Questo eliminerà permanentemente tutti i dati in questa colonna. L'azione non può essere annullata.\"],\"UncTTh\":[\"Somma RSS dell'albero dei processi — può sovrastimare la memoria condivisa\"],\"UpjgFm\":[\"Parametri modificati\"],\"UsAnu1\":[\"ANALYZE esegue la query. Usare con cautela su istruzioni che modificano dati.\"],\"UxKoFf\":[\"Navigazione\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Dimensione Tab\"],\"UzWGWO\":[\"Passa all'input SQL WHERE\"],\"V-chk5\":[\"Frequenza con cui verificare se le connessioni attive sono ancora raggiungibili. Imposta 0 per disabilitare.\"],\"V-pw1j\":[\"Nome tabella\"],\"V2T0Uw\":[\"Nessun notebook salvato.\"],\"V3aNwx\":[\"Editor Dati\"],\"VGYp2r\":[\"Applica a tutto\"],\"VH8S7x\":[\"Colonna appunti\"],\"VIAEcS\":[\"Impossibile caricare i database. Verifica le credenziali.\"],\"VKdztF\":[\"Aggiungi righe\"],\"VLiHXI\":[\"Dati Analyze\"],\"VMbmXc\":[\"Sei sicuro di voler rimuovere \\\"\",[\"pluginName\"],\"\\\"? I file del plugin verranno eliminati.\"],\"VO3weF\":[\"Nessun file caricato\"],\"VOZlKc\":[\"Importazione Database\"],\"VPzsIz\":[\"Generazione nome...\"],\"VUul0v\":[\"La terminazione di\"],\"VW0GVQ\":[\"Clicca un altro emoji qui sotto per cambiarlo.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Tutte le query\"],\"Vi2Pqx\":[\"di\"],\"Vl2zn2\":[\"arrestato\"],\"Vo4uBA\":[\"Si è verificato un errore durante l'installazione del plugin. Vedi i dettagli qui sotto.\"],\"VqqyOs\":[\"Esegui una query per vedere i risultati\"],\"VzhDFh\":[\"Blocca qualsiasi statement non-SELECT proveniente da MCP, salvo le connessioni esplicitamente abilitate.\"],\"W3uwpT\":[\"Chiudi tutte le schede\"],\"W4MKLh\":[\"es. Sembra rischiosa in produzione, conferma…\"],\"WA8RND\":[\"Sei sicuro di voler eliminare la tabella \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Elimina tabella\"],\"WLnvCZ\":[\"Inserisci nome utente\"],\"WM-__8\":[\"Cerca connessioni...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe importate in \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" righe importate in \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Sei sicuro di voler eliminare la query \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"riuscite\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"Generali\"],\"WmPpB1\":[\"Caricamento del piano di esecuzione…\"],\"Wu7cK0\":[\"Nessun database trovato\"],\"WvoUQF\":[\"Eliminata cella \",[\"n\"]],\"Ww3pDD\":[\"COMANDO MANUALE\"],\"X-20AU\":[\"Inserisci prompt nome tab query...\"],\"X-U6_w\":[\"Famiglia Font\"],\"X5fs0g\":[\"Crea la tua prima connessione per iniziare.\"],\"X7Ayjp\":[\"Password salvata nel portachiavi di sistema\"],\"X9kySA\":[\"Preferiti\"],\"XJOV1Y\":[\"Attività\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Spiegazione Query\"],\"XVF2Pf\":[\"Modifica Schemi\"],\"XW6OYF\":[\"Questo plugin potrebbe richiedere un interprete (es. Python). Usa le Impostazioni Plugin per configurare il percorso dell'interprete.\"],\"XZB6Xr\":[\"Numero massimo di log\"],\"Xcffv2\":[\"Mostra i pulsanti AI Assist ed Explain nell'editor\"],\"XeqTSh\":[\"Tipo Join\"],\"XmJfZT\":[\"nome\"],\"XoQfG1\":[\"Utente SSH\"],\"XwI0Vw\":[\"Auto (Sistema)\"],\"XyDlLX\":[\"Nome Indice\"],\"Y2P2aK\":[\"Seleziona gli schemi da caricare:\"],\"Y8HYw2\":[\"valore\"],\"Y8zX3R\":[\"Inserisci nell'Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Cerca...\"],\"YWlnMZ\":[\"Porta Ollama\"],\"YYdC3A\":[\"Versione \",[\"0\"]],\"YYn8b5\":[\"Sfoglia e installa plugin dal registro.\"],\"Y_3yKT\":[\"Apri in Nuova Scheda\"],\"YiAQ_Q\":[\"Aggiorna Tabelle\"],\"Ysjr9Y\":[\"Anteprima SQL\"],\"YswNf7\":[\"Tutti i livelli\"],\"YtNwr6\":[\"Numero massimo di voci nella cronologia delle query salvate per connessione.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Caricamento...\"],\"Z7ZXbT\":[\"Approva\"],\"Z8JpBH\":[\"Esporta come Notebook\"],\"Z8fBIc\":[\"Le righe reali superano la stima\"],\"ZC2VJP\":[\"Esegui\"],\"ZCIS4k\":[\"nessun filtro attivo\"],\"ZF1_UT\":[\"Modalità SSL\"],\"ZGjBPa\":[\"Pulisci Log\"],\"ZHQTlM\":[\"Importazione da\"],\"ZIFDoJ\":[\"Seleziona almeno Struttura o Dati\"],\"ZIZA6o\":[\"Modifica prima di approvare\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avvisi di parsing\"],\"other\":[\"#\",\" avvisi di parsing\"]}]],\"ZVn8p2\":[\"Visualizza i numeri di riga nel margine dell'editor.\"],\"ZYnwzF\":[\"Disconnesso\"],\"Za3_fO\":[\"Error\"],\"Zf7LHg\":[\"Nessun contesto trovato (kubectl è installato?)\"],\"Zfotp5\":[\"Scostamenti elevati tra stima e reale indicano spesso statistiche non aggiornate o predicati difficili da modellare.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Caricamento degli schemi fallito\"],\"ZqXGPF\":[\"Eliminazione vista fallita: \"],\"ZuL73E\":[\"Crea una nuova vista database\"],\"_-bi4r\":[\"Tabella Riferita\"],\"_AEYGI\":[\"Nessuna cronologia di esecuzione\"],\"_FdpZc\":[\"Impossibile caricare la definizione della vista: \"],\"_FxSdi\":[\"Consulta le dipendenze open source dirette usate dall'app, dal backend e dalla toolchain.\"],\"_JyTG8\":[\"Inserisci prompt di spiegazione...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"righe\"],\"_TK1zF\":[\"Connessione salvata\"],\"_bJFBE\":[\"Timeout Connessione\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Albero\"],\"_dqduX\":[\"Pagina successiva\"],\"_fwE6J\":[\"Precedenti\"],\"_n04sB\":[\"Termina\"],\"_otxbQ\":[\"File chiave\"],\"_pezIT\":[\"Impossibile connettersi a \",[\"0\"],\". Verifica le impostazioni o assicurati che il database sia in esecuzione.\"],\"_srfkj\":[\"Chiave personalizzata eliminata con successo\"],\"_t6aFo\":[\"MySQL e MariaDB possono ripiegare su EXPLAIN FORMAT=JSON o sull'EXPLAIN tabellare in base alla versione del server.\"],\"_xTbaM\":[\"colonne\"],\"_yxaaL\":[\"Indice Unico\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis è un progetto gratuito e open-source. Se lo trovi utile, considera di supportare il progetto e unirti alla community.\"],\"a9CASo\":[\"SQLite supporta solo la rinomina delle colonne. Altre modifiche richiedono la ricreazione manuale della tabella.\"],\"aAIQg2\":[\"Aspetto\"],\"aC_vCa\":[\"Genera nome con AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Seleziona un nodo per i dettagli\"],\"aHKcKc\":[\"Pagina precedente\"],\"aI-5wG\":[\"Verifica CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valore Predefinito\"],\"aScJP1\":[\"Esegui questa query\"],\"aVNbN8\":[\"Condizioni filtro\"],\"aWhdMQ\":[\"Usa Connessione SSH Esistente\"],\"aXYd8V\":[\"Timeout\"],\"aX_S_r\":[\"Pagina \",[\"0\"],\" di \",[\"totalPages\"]],\"agZcf8\":[\"SQL Generato: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [campi]\"],\"alplHn\":[\"Analisi del piano di esecuzione con AI...\"],\"anBcU3\":[\"Se ti piace tabularis e vuoi vedere nuove funzionalità, considera di supportare il progetto contribuendo al codice, segnalando bug o mettendo una stella su GitHub.\"],\"arHmj2\":[\"Sei sicuro di voler eliminare questa query dalla cronologia?\"],\"arKcqW\":[\"I server meno recenti possono ripiegare su piani stimati con meno metriche.\"],\"arcpYe\":[\"Approvazione richiesta\"],\"aurEkh\":[\"Caricamento processi…\"],\"avtdsd\":[\"Modalità SQL\"],\"az8lvo\":[\"Disattiva\"],\"b1Ah3z\":[\"Focus su\"],\"b392Dr\":[\"Espandi Tutto\"],\"b5S_PU\":[\"Nome Database\"],\"bAvovP\":[\"Sposta Giù\"],\"bH3JqY\":[\"Nessuna tabella trovata\"],\"bP5JOn\":[\"A Capo Automatico\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Rendi tutte le query MCP di sola lettura\"],\"bmca5u\":[\"Solo scritture\"],\"bpCiBU\":[\"Consenti scritture da MCP\"],\"bqnhqW\":[\"La stima supera le righe reali\"],\"bqpcP7\":[\"Esporta Database\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Errore\"],\"bw22Gk\":[\"Schema Colonne\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Punti Critici\"],\"cFCKYZ\":[\"Nega\"],\"cFGrCP\":[\"tabella\"],\"cGeFup\":[\"Dimensione Font\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focus su Tabella\"],\"cM9NHc\":[\"Effettua downgrade a\"],\"cO9-2L\":[\"Disabilitato\"],\"cSev-j\":[\"Filtri\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importa \",\"#\",\" righe\"],\"other\":[\"Importa \",\"#\",\" righe\"]}]],\"c_xoSn\":[\"Rinominata cella \",[\"n\"]],\"cd0XEW\":[\"Salva Query\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Gruppo Diviso\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" istruzioni\"],\"d34vwG\":[\"Carica Database\"],\"d6ynQ7\":[\"Ordine decrescente\"],\"d8_6_v\":[\"annulla\"],\"d8wc1_\":[\"Valori campione\"],\"dBXoCS\":[\"È presente una variabile d'ambiente, ma puoi sovrascriverla impostando una chiave qui sopra.\"],\"dD7NPy\":[\"Sommario\"],\"dEgA5A\":[\"Annulla\"],\"dMtLDE\":[\"a\"],\"dPJVhW\":[\"Installazione Fallita\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" sessione\"],\"other\":[\"#\",\" sessioni\"]}]],\"dTUzKm\":[\"Esegui selezionate (\",[\"0\"],\")\"],\"dU_iQN\":[\"Nessuna sessione corrisponde ai filtri.\"],\"dUh9QW\":[\"Pianificazione\"],\"dVoir2\":[\"Aggiunta cella Markdown \",[\"n\"]],\"dZ0d2O\":[\"Seleziona almeno una tabella\"],\"dhi13U\":[\"Scegli immagine…\"],\"dli1JX\":[\"Invia Modifiche\"],\"dmYV6f\":[\"Routine\"],\"dohZCo\":[\"Istruzioni per la generazione SQL tramite AI. Usa \",[\"SCHEMA\"],\" come segnaposto per la struttura del database.\"],\"dtxpK2\":[\"Analizza\"],\"dwW9nJ\":[\"Mostra Numeri di Riga\"],\"dwWVw_\":[\"Mostra schermata di benvenuto\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"Se esiste\"],\"dyN4j9\":[\"Clicca 'Esegui Anteprima' per vedere i risultati\"],\"e07Iz5\":[\"Apri Gestione Attività\"],\"e0NzXu\":[\"Questo progetto è un Work In Progress (WIP). Le funzioni principali sono stabili, ma abbiamo grandi piani.\"],\"e1UKxf\":[\"Salva questa query\"],\"e34gdU\":[\"Quanti secondi il processo MCP attende la decisione dell'utente prima di abortire.\"],\"e62LQd\":[\"Termina Forzatamente\"],\"e6QZsM\":[\"Tema dell'Editor\"],\"e8CirT\":[\"Esegui query\"],\"eD2kUP\":[\"Buffer Letti\"],\"eE0JZ4\":[\"Versione\"],\"eIDch7\":[\"Inserisci prompt analisi piano di esecuzione...\"],\"eIVolo\":[\"Disco L/S\"],\"eJOEBy\":[\"Esportazione in corso...\"],\"eKHY3W\":[\"Impostazioni Plugin\"],\"eMb6Ub\":[\"Scegli una risorsa...\"],\"ePK91l\":[\"Modifica\"],\"eXweu6\":[\"Espandi Cella\"],\"ecNsTE\":[\"Nessuna query corrisponde alla ricerca\"],\"ecUA8p\":[\"Oggi\"],\"ecpIZP\":[\"Inserisci passphrase se la chiave è cifrata\"],\"esl-Tv\":[\"Tipo di risorsa\"],\"exyUec\":[\"Connessione\"],\"f2AJjl\":[\"Elimina riga\"],\"f4pD-j\":[\"Test connessione fallito\"],\"f7sXvi\":[\"Inserisci password\"],\"fAsxc0\":[\"Scansioni Sequenziali\"],\"fIeFs0\":[\"Seleziona valore...\"],\"fJm92A\":[\"Seleziona un file contenente un piano EXPLAIN (formato JSON o testo PostgreSQL) per visualizzarlo.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Valori\"],\"f_b1TA\":[\"Cronologia Esecuzioni\"],\"fghnqP\":[\"Passa alla connessione 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Virgola (,)\"],\"fp711N\":[\"Bloccata (sola lettura)\"],\"fpzyLj\":[\"Pagina \",[\"0\"],\" di \",[\"1\"]],\"fuA6oy\":[\"Timeout Socket\"],\"fvImQM\":[[\"0\"],\" selezionate\"],\"fwr_nh\":[\"Installa estensioni, gestisci i driver dei plugin e tieni sotto controllo le impostazioni di runtime.\"],\"g0ZzK4\":[\"JSON valido\"],\"g11hAR\":[\"Nuova riga\"],\"g8VcMm\":[\"Il mio cluster K8s\"],\"gCFR_O\":[\"Esecuzione Parallela (Esegui Tutto)\"],\"gEjU98\":[\"Apri connessioni\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"È richiesta almeno una colonna\"],\"gSuQrG\":[\"Nessuna connessione corrisponde a \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Riesegui query\"],\"gZWMnn\":[\"Analisi AI\"],\"ghYd73\":[\"Scegli destinazione...\"],\"giAqEC\":[\"Crea Nuova Tabella\"],\"gnQS8X\":[\"Dimensione massima del pacchetto usata dal connettore MySQL.\"],\"gqV5VL\":[\"Integrata, non personalizzabile\"],\"gww_XE\":[\"Colonna Riferita\"],\"gxXPJ9\":[\"Configura Interprete\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Massimizza\"],\"h-XNc9\":[\"Delimitatore CSV\"],\"h-kNAk\":[\"es. dati_vendite\"],\"h3Z_aK\":[\"Scrivi Markdown qui...\"],\"h7MgpO\":[\"Scorciatoie da tastiera\"],\"h7peZQ\":[\"Permetti\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processo di sistema in esecuzione\"],\"other\":[\"#\",\" processi di sistema in esecuzione\"]}]],\"hEZrFh\":[\"Esegui File SQL...\"],\"hEipgW\":[\"Controlla Aggiornamenti Ora\"],\"hG89Ed\":[\"Immagine\"],\"hIHcBE\":[\"Esporta come CSV\"],\"hItdtk\":[\"Sfoglia cartella\"],\"hXFVjo\":[\"Il nome della tabella è richiesto\"],\"hZ6znB\":[\"Porta\"],\"h_huI6\":[\"Riesegui\"],\"hbz1rh\":[\"chiavi\"],\"hdsaJo\":[\"Importazione...\"],\"he3ygx\":[\"Copia\"],\"hfGimp\":[\"Scegli un namespace...\"],\"hjjSEi\":[\"Connessioni di sola lettura\"],\"hjwN_s\":[\"Nome risorsa\"],\"hlF1mD\":[\"Copia selezione\"],\"hnboBb\":[\"Analisi AI del Piano di Esecuzione\"],\"hq4-D2\":[\"La chiave API è salvata in modo sicuro nel portachiavi. Impostare una chiave qui sovrascrive la variabile d'ambiente.\"],\"hqjXdn\":[\"Eliminazione connessione SSH fallita\"],\"hqofAK\":[\"Copia SQL\"],\"hy6L14\":[\"Visualizza su GitHub\"],\"hyjACX\":[\"Celle compresse/espanse\"],\"hz1b5W\":[\"Nessun elemento corrispondente trovato\"],\"i1vAVM\":[\"Crea nuova tabella\"],\"i3S5T3\":[\"Cerca nei preferiti...\"],\"i4_LY_\":[\"Scrittura\"],\"i5HBWh\":[\"Cronologia query azzerata\"],\"iAVlge\":[\"Personalizza le istruzioni per la generazione AI del nome cella nei notebook. Il contenuto della cella (SQL o Markdown) viene inviato come messaggio utente.\"],\"iE1yAB\":[\"Filtra tabelle...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connetti\"],\"iSryJ2\":[\"Il Mio Server SSH\"],\"iT7UeX\":[\"Aggiungi Indice\"],\"iUWwuR\":[\"Scarica e Installa\"],\"ia7i08\":[\"Seleziona prima contesto/namespace/tipo\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Salvato\"],\"igcsfY\":[\"Nessun plugin disponibile nel registro.\"],\"ij-Elv\":[\"Anteprima immagine\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query analizzabili trovate\"],\"other\":[\"#\",\" query analizzabili trovate\"]}]],\"ioL38P\":[\"Monitora i processi dei plugin, CPU, RAM e utilizzo disco in tempo reale\"],\"ixlL_e\":[\"File Chiave SSH (Opzionale)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Seleziona un modello\"],\"j3gyYH\":[\"Applica tutti\"],\"j5CWO4\":[\"Aggiornato\"],\"j9HPuI\":[\"Riga #\",[\"0\"]],\"jBtpMP\":[\"Tutti gli stati\"],\"jEu4bB\":[\"Colonne\"],\"jEyQIs\":[\"Nessuna routine trovata\"],\"jHc1By\":[\"Elimina Vista\"],\"jI6sj4\":[\"Costo, tempi e stime di righe spesso non sono disponibili come in PostgreSQL e MySQL.\"],\"jIxQCZ\":[\"Non disponibile per la tua piattaforma\"],\"jKIncn\":[\"Il nome del database è richiesto\"],\"jPSk57\":[\"Motivo (opzionale)\"],\"jUNY_d\":[\"vista\"],\"jVqjDo\":[\"Formato file notebook non valido\"],\"jWSZ-A\":[\"Solo anteprima - dati completi non caricati\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Timeout del socket in millisecondi.\"],\"jpeU_Z\":[\"Notebook\"],\"jpgB4Y\":[\"Il nome della connessione è richiesto\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"processo figlio\"],\"jx0t66\":[\"Comprimi processi figli\"],\"jxShEf\":[\"Crea Vista\"],\"jz5PKx\":[\"Definizione Vista\"],\"k-0mL-\":[\"Aggiungi Colonna\"],\"k-XiMX\":[\"Grezzo\"],\"k2UnVy\":[\"Cond. Hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"secondi\"],\"kBiBq7\":[\"Eliminare l'indice \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Mostra/Nascondi Grafico\"],\"kI1qVD\":[\"Formatta\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" righe · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Dettagli evento\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registro\"],\"kY-q3P\":[[\"label\"],\" è obbligatorio\"],\"kexIdC\":[\"Usa Port-Forward Kubernetes\"],\"kj2-CR\":[\"Dettagli errore\"],\"krksx_\":[\"Successo\"],\"kwY6nh\":[\"Chiudi\"],\"kx0s-n\":[\"Risultati\"],\"kxUEfE\":[\"Impossibile recuperare la definizione della routine: \"],\"l2Op2p\":[\"Parametri Query\"],\"l9Ivba\":[\"Processi dei plugin e risorse di sistema\"],\"lBdPxu\":[\"Colore di accento\"],\"lCF0wC\":[\"Aggiorna\"],\"lEQRwq\":[\"Dati (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nuova tabella creata\"],\"lOekZ3\":[\"Passa a Layout Orizzontale\"],\"lUA1C1\":[\"Passphrase Chiave SSH (Opzionale)\"],\"lVeG20\":[\"Dipendenze Rust\"],\"lXAG6D\":[\"Istruzioni per la spiegazione delle query tramite AI. Usa \",[\"LANGUAGE\"],\" come segnaposto per la lingua di output.\"],\"lbbYjy\":[\"Modifica direttamente il file di configurazione grezzo. È necessario un riavvio per applicare le modifiche.\"],\"lhKW0m\":[\"Aggiunta cella SQL \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Dimensione Pagina Risultati (Limite)\"],\"lkz6PL\":[\"Durata\"],\"lmVGeo\":[\"Aggiungi Chiave Esterna\"],\"lnnx3E\":[\"Connetti Tabularis a Claude Desktop, Cursor e altri\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Aggiungi\"],\"m2Q_r8\":[\"Rileva JSON nelle colonne di testo\"],\"m2tskz\":[\"Successo\"],\"mA-qpe\":[\"Esecuzione Completata\"],\"mBhhbA\":[\"Log esportati negli appunti\"],\"mCNdzH\":[\"Esegui Cella\"],\"mO95sp\":[\"Chiudi pannello\"],\"mP7dLi\":[\"Inserisci il nome del font sopra\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloccato\"],\"other\":[\"#\",\" bloccati\"]}]],\"mS74ir\":[\"Salvataggio connessione SSH fallito\"],\"mSqtw8\":[\"Esegui Anteprima\"],\"mURmfQ\":[\"Definizione Vista (SQL)\"],\"mX_isJ\":[\"Verticale\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Struttura (DDL)\"],\"mrk4Cf\":[\"Ordina per \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Abbiamo una community Discord dedicata a Tabularis: ricevi aiuto, scambia consigli e influenza la roadmap.\"],\"mtvVdV\":[\"Righe processate\"],\"mx4evv\":[\"Crea Tabella\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Scarica\"],\"n7JDTx\":[\"Installa e abilita i plugin per vederli qui\"],\"nDDJir\":[\"Cerca sessione, client, connessione…\"],\"nHP-Kr\":[\"Nessuna sessione attiva. Seleziona una connessione.\"],\"nKhCjW\":[\"Seleziona Tabelle\"],\"nNmhuY\":[\"Crea Indice\"],\"nNwvm4\":[\"Errore\"],\"nOVim5\":[\"Salvataggio connessione fallito\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Richiede estensione: \",[\"0\"]],\"ngO6Pv\":[\"Permetti al tasto Invio (oltre a Tab) di accettare il suggerimento di autocompletamento attivo. Quando disattivato, Invio inserisce sempre una nuova riga.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Crea la tua prima connessione\"],\"nohy4m\":[\"Nessuna attività MCP registrata.\"],\"nr-axf\":[\"Rimuovi Plugin\"],\"nsPFX9\":[\"Apri in Visual Explain\"],\"nuBbBr\":[\"Grafico\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Cambia\"],\"o21Y-P\":[\"voci\"],\"o3tP_A\":[\"Elimina indice\"],\"o45L8r\":[\"Inserisci il nome della connessione\"],\"o53XGh\":[\"Copia riga/righe selezionate\"],\"o7J4JM\":[\"Filtro\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Livello\"],\"oGiIL7\":[\"Provider Predefinito\"],\"oJ4rAm\":[\"Connessione Persa\"],\"oJlXF2\":[\"Importa Notebook\"],\"oMFv82\":[\"Dividi Verticale\"],\"oOFiQg\":[\"Limita il numero di righe caricate per query per prevenire problemi di performance. Imposta a 0 per disabilitare (non consigliato).\"],\"oT9ZD3\":[\"Nascondi panoramica\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Grafico cambiato (cella \",[\"n\"],\")\"],\"oWfclW\":[\"Mostra il visualizzatore JSON quando una cella di testo non tipizzata contiene un oggetto o un array JSON. Aggiunge un piccolo costo di analisi per cella.\"],\"obpbdz\":[\"File config non trovato (crealo manualmente)\"],\"odZgfC\":[\"CLIENT AI\"],\"ogZhXn\":[\"Scegli la direzione di default per i diagrammi ER\"],\"ohUJJM\":[\"Plugin\"],\"ok3hJJ\":[\"Installati\"],\"olAdaI\":[\"Righe Reali\"],\"olWzar\":[\"Termina Forzatamente il Processo\"],\"ovBPCi\":[\"Predefinito\"],\"owzTWN\":[\"Modelli AI aggiornati dai provider\"],\"oxYi6j\":[\"Regola la dimensione base del font usata nell'applicazione (10-20px).\"],\"p--hsQ\":[\"Una connessione al database è stata persa\"],\"p6NueD\":[\"NUOVA\"],\"pOYHox\":[\"Azioni\"],\"pR9bTR\":[\"Nessun dato BLOB\"],\"pRDT0m\":[\"Tabella\"],\"pS8S5q\":[\"es. utenti, ordini, prodotti\"],\"pSws_M\":[\"Nome Tabella\"],\"pVLbKZ\":[\"Vista creata con successo\"],\"pWT04I\":[\"Controllo...\"],\"pZJ_6D\":[\"Il nome dell'indice è richiesto\"],\"pddYFG\":[\"Inserisci prompt nome cella...\"],\"pnpyuD\":[\"Abilita Logging\"],\"pqKMPv\":[\"Creazione tabella fallita: \"],\"pqaP1h\":[\"Chiudi\"],\"pqarBu\":[\"Cresc.\"],\"ptuq35\":[\"es. Comic Sans MS\"],\"pzu7v4\":[\"Orizzontale\"],\"q-ch8m\":[\"Tutte le altre connessioni restano in sola lettura. Solo quelle selezionate possono eseguire scritture.\"],\"qIrtcK\":[\"Aggiornamenti\"],\"qOqy8G\":[\"Verifica configurazione...\"],\"qWaVNs\":[\"Salva e Riavvia\"],\"qb3LPX\":[\"Visualizza Diagramma ER\"],\"qkK0vq\":[\"Il nome della vista è richiesto\"],\"qki9tG\":[\"Errore\"],\"qoIir-\":[\"L'URL base della tua API compatibile OpenAI. Esempi: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Comprimi tutto\"],\"r6ncaO\":[\"Chiudi tab\"],\"rAJlpP\":[\"Porta container\"],\"rG3WVm\":[\"Lettura\"],\"rGRCeK\":[\"Cancella Cronologia Query\"],\"rNIto7\":[\"Il nome della risorsa è obbligatorio\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook esportato con successo\"],\"rY4sEV\":[\"Elimina FK\"],\"rbu0nO\":[\"Gestisci Connessioni SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connessione/i\"],\"other\":[\"#\",\" connessione/i\"]}]],\"rn2_2V\":[\"Rimuovi filtro\"],\"roABNH\":[\"Nessuna cronologia query\"],\"rtir7c\":[\"sconosciuto\"],\"ru0-2W\":[\"Nessuna connessione attiva\"],\"rvDPWO\":[\"Scostamento Stima\"],\"rwWjWg\":[\"Note di Rilascio\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Testa Connessione\"],\"sBOaim\":[\"Il file di configurazione è stato salvato. Riavviare ora per applicare le modifiche?\"],\"sCyv9B\":[\"Aggiorna Modelli\"],\"sSUqe4\":[\"Elimina\"],\"sUBkgN\":[\"Generazione SQL in corso...\"],\"sZZG3d\":[\"Sei sicuro di voler importare \\\"\",[\"0\"],\"\\\"?\\nQuesto potrebbe sovrascrivere i dati esistenti.\"],\"sbK5ck\":[\"Cerca nella cronologia...\"],\"sq_bS6\":[\"Al Delete\"],\"suW7-E\":[\"Timeout di connessione in millisecondi.\"],\"t-R8-P\":[\"Esecuzione\"],\"t1OfVY\":[[\"totalLibraries\"],\" librerie\"],\"t2TMzs\":[\"Chiudi scheda\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Seleziona una tabella...\"],\"t7KRl1\":[\"Log di ogni chiamata MCP e delle query in attesa di approvazione. Tutto è salvato localmente.\"],\"t9NJIk\":[\"Rilevate operazioni con scansione pesante\"],\"tB7xof\":[\"Operazioni Temp o Sort\"],\"tBBXTO\":[\"Intervallo di Ping\"],\"tFrT3w\":[\"Aggiungi questo al file di configurazione del client manualmente se l'installazione automatica fallisce.\"],\"tJ7UbA\":[\"analizza selezionata\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Dividi Orizzontale\"],\"tQhW-D\":[\"Impostazioni Log\"],\"tXFGEx\":[\"Nessuna connessione Kubernetes salvata. Clicca \\\"Aggiungi\\\" per crearne una.\"],\"tXLz_8\":[\"Elimina\"],\"tXpRby\":[\"Griglia dati\"],\"tbysEk\":[\"Azioni\"],\"tdta9X\":[\"Pagina \",[\"0\"]],\"tfDRzk\":[\"Salva\"],\"tfEioV\":[\"Esegui tutte le celle SQL dall'alto in basso\"],\"tiAIaJ\":[\"Password SSH mancante. Per favore reinseriscila.\"],\"tk22BR\":[\"Incolla dati strutturati e rivedi lo schema prima dell'importazione\"],\"tst44n\":[\"Eventi\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"File SQL eseguito con successo\"],\"u6QeR6\":[\"Riavvia Ora\"],\"uAQUqI\":[\"Stato\"],\"uBAxNB\":[\"Editor\"],\"uFViPK\":[\"Nessuna connessione SSH disponibile\"],\"uHUuhp\":[\"Analizza questa query\"],\"uHfFzS\":[\"Dimensione Font dell'Editor\"],\"uJ_3K5\":[\"Eliminare il notebook \\\"\",[\"0\"],\"\\\"? L'operazione non è reversibile.\"],\"uKaNJ3\":[\"Apri nell'editor JSON\"],\"uQBwTo\":[\"Schemi\"],\"ub54ff\":[\"Centro Plugin\"],\"ufFyBs\":[\"Database esportato con successo\"],\"upNmR2\":[\"Apri Barra Laterale\"],\"utMia3\":[\"Deseleziona Tutto\"],\"uyNaJg\":[\"1 elemento\"],\"v61dnS\":[\"Inserisci il nome esatto del modello per il tuo provider compatibile OpenAI.\"],\"v6oeyr\":[\"Installato\"],\"v75DGg\":[\"Sfoglia file\"],\"v99dO4\":[\"Chiave Primaria\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query trovate\"],\"other\":[\"#\",\" query trovate\"]}]],\"vCSBPD\":[\"Aggiungi filtro\"],\"vH7uJj\":[\"Ordina per…\"],\"vUOA1-\":[\"Cerca modelli...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE include righe reali, tempi, cicli e contatori buffer quando disponibili.\"],\"vXIe7J\":[\"Lingua\"],\"vYf4Jm\":[\"Inserisci una funzione SQL completa (es: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Preferito\"],\"vditm4\":[\"Piano Query\"],\"vks_ls\":[\"Chiudi altre schede\"],\"vnAnIp\":[\"Modello \",[\"0\"],\" non trovato in \",[\"1\"],\". Potrebbe non funzionare correttamente.\"],\"vqoN5u\":[\"Struttura\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Esplora\"],\"vujQJ5\":[\"Localizzazione\"],\"vvJPVL\":[\"Mostra panoramica\"],\"vwI5S4\":[\"Successo\"],\"vzH-7Z\":[\"Spiega\"],\"w7QmD_\":[\"Inserisci prompt di sistema...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Tempo trascorso\"],\"wCfv2R\":[\"Aggiungi Connessione\"],\"wGfc86\":[\"Cancella Tutta la Cronologia\"],\"wGwNv4\":[\"Database attivo\"],\"wJJ-Wy\":[\"Installazione in corso...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffer Hit\"],\"wQn-RM\":[\"Aggiungi Colonna\"],\"wRXcR2\":[\"In uso l'icona predefinita del driver.\"],\"wTOwz-\":[\"Applicato\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Importa dagli Appunti\"],\"w_bY7R\":[\"Log\"],\"wc_8bA\":[\"In attesa\"],\"wckWOP\":[\"Gestisci\"],\"wdYcKH\":[\"Tab Aperte\"],\"wja8aL\":[\"Senza nome\"],\"wkOAzk\":[\"Nessun notebook corrisponde alla ricerca.\"],\"wp49Ao\":[\"Impossibile processare gli inserimenti: \"],\"wqG2hQ\":[\"Salta (non importare)\"],\"wwrAsK\":[\"Per favore compila tutti i campi obbligatori\"],\"wwu18a\":[\"Icona\"],\"x2fr_j\":[\"Grafo\"],\"xANKBj\":[\"Funzioni\"],\"xBwjck\":[\"È necessario un riavvio per applicare le modifiche.\"],\"xDAtGP\":[\"Messaggio\"],\"xECY01\":[\"Procedure\"],\"xGPNgZ\":[\"Personalizzazione Prompt\"],\"xNgtS-\":[\"Nessuna vista trovata\"],\"xOPa1b\":[\"La porta deve essere compresa tra 1 e 65535\"],\"xY9s5E\":[\"Timeout\"],\"xaVUr1\":[\"La volpe marrone salta sopra il cane pigro\"],\"xbvTzL\":[\"Percorso File\"],\"xlew5F\":[\"Svuota\"],\"xmNyKz\":[\"Test in corso...\"],\"xtuh6D\":[\"Espandi Explorer\"],\"y-Zdqj\":[\"Scegli un contesto...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Apri visualizzatore JSON\"],\"yQXjG5\":[\"Deseleziona Tutti\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Ieri\"],\"ygCKqB\":[\"Stop\"],\"ykCc6r\":[\"Database cambiato (cella \",[\"n\"],\")\"],\"ynVMSc\":[\"Seleziona tutte\"],\"ytdz1d\":[\"L'AI vuole eseguire una scrittura sul database\"],\"yyhzur\":[\"Crea tabella\"],\"yz7wBu\":[\"Chiudi\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"Password SSH\"],\"z5kV0h\":[\"Connessioni\"],\"zBTMzx\":[\"Anteprima\"],\"zCaAKs\":[\"Errore Aggiornamento\"],\"zDAakK\":[\"Impossibile visualizzare il diagramma senza un ID connessione.\"],\"zGe21h\":[\"Questa chiave è caricata da una variabile d'ambiente\"],\"zGfL5t\":[\"valore\"],\"zL6-4A\":[\"Nessun processo plugin in esecuzione\"],\"zLZhCi\":[\"Nuova community Discord!\"],\"zLlCou\":[\"Copia nome colonna\"],\"zNEL34\":[\"Unisciti alla Community\"],\"zNgTlV\":[\"Chiudi schede a destra\"],\"zQz55p\":[\"Ispeziona struttura\"],\"zR0FfH\":[\"Esportato in \",[\"target\"]],\"zRZeOc\":[\"Cerca tabelle, viste, routine, trigger...\"],\"zUNMsr\":[\"Chiave SSH\"],\"zXMRzb\":[\"Porta SSH\"],\"zZgoXr\":[\"Nessuna tabella trovata\"],\"zaWbms\":[\"Annulla Modifiche\"],\"zgClmU\":[\"Installa Config\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Inserisci valore...\"],\"zvzN4C\":[\"Imposta come attiva\"],\"zzDlyQ\":[\"Successo\"],\"zzMxrp\":[\"Modifica config.json\"],\"zz_Wd_\":[\"Modalità\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Max Voci Cronologia\"],\"-6AWa-\":[\"Importa connessioni\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Disconnetti\"],\"-PLZfh\":[\"Impossibile aggiornare i modelli\"],\"-T5W2e\":[\"Note Driver\"],\"-ZgeeE\":[\"Cronologia modifiche\"],\"-aYrdc\":[\"La versione \",[\"0\"],\" è disponibile\"],\"-fBGXl\":[\"Costo Più Alto\"],\"-jIQDz\":[\"Comprimi Cella\"],\"-u1eRo\":[\"Nessun database\"],\"-yoeVU\":[\"Caricamento schema...\"],\"-zy2Nq\":[\"Tipo\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID approvazione\"],\"0E5-gF\":[\"Sei sicuro di voler eliminare questa connessione?\"],\"0HCubq\":[\"Espandi\"],\"0Kmdvy\":[\"Font Personalizzato\"],\"0Nj13E\":[\"Genera SQL\"],\"0ROgz5\":[\"Inserisci JSON...\"],\"0SY9sU\":[\"Impossibile disconnettersi dal database\"],\"0b3kL9\":[\"Seleziona un database\"],\"0caMy7\":[\"Cronologia\"],\"0mx5ow\":[\"Query\"],\"0n9BtL\":[\"Anteprima\"],\"0pHB9N\":[\"Copia come tabella.colonna\"],\"0sQzZK\":[\"Filtra database...\"],\"0uPP9X\":[\"Nome FK (Opzionale)\"],\"0wxuek\":[\"Versione Corrente\"],\"0x09Aw\":[\"Stop on error commutato\"],\"0yBP6v\":[\"Supporta lo Sviluppo\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe\"],\"other\":[\"#\",\" righe\"]}]],\"0yVAoD\":[\"Conta righe\"],\"0zxJ87\":[\"Nessun log disponibile\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Modifica Vista\"],\"11fGJ6\":[\"Query\"],\"13hIUA\":[\"Chiave API \",[\"0\"]],\"14qNWF\":[\"Seleziona Connessione SSH\"],\"17qHRP\":[\"Nuova connessione\"],\"1Dn6bg\":[\"Importa dagli Appunti\"],\"1Dnd0I\":[\"Carica conteggio righe\"],\"1FjTLW\":[\"es. python3\"],\"1GOvbo\":[\"Ollama connesso (\",[\"0\"],\" modelli trovati)\"],\"1I6UoR\":[\"Viste\"],\"1U7hS5\":[\"Lung\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Font dell'Editor\"],\"1ekzlY\":[\"Processi Plugin\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Selezione Tema\"],\"1xVZkL\":[\"Nessun modello trovato\"],\"26Joci\":[[\"0\"],\" righe recuperate\"],\"2Bf-Qe\":[\"Nuova console\"],\"2CrSmP\":[\"Aiuta tabularis a crescere\"],\"2D9F8_\":[\"Impossibile duplicare la connessione\"],\"2Eoi_a\":[\"Mostra dettagli\"],\"2F4pE5\":[\"Build e Test Rust\"],\"2Fsd9r\":[\"Questo Mese\"],\"2JzKXI\":[\"Imposta GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Seleziona Tutto\"],\"2SO5RM\":[\"Kubernetes non è disponibile per questo driver.\"],\"2Uh5GA\":[\"ecosistema Cargo\"],\"2YylFp\":[\"Nuova Query Visuale\"],\"2luuSG\":[\"Riprova\"],\"2wxgft\":[\"Rinomina\"],\"2yG2GC\":[\"Sospendi le scritture (o ogni query) chiedendo conferma all'utente in Tabularis prima dell'esecuzione.\"],\"30-b5r\":[\"Elimina\"],\"31kwdN\":[\"Duplica filtro\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Tutti gli strumenti\"],\"3Am5DS\":[\"Vista a tab\"],\"3FVg9_\":[\"Colonna Locale\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Esegui\"],\"3L0HCz\":[\"Nessun plugin corrisponde alla ricerca.\"],\"3Nv3JV\":[\"Esecuzione query...\"],\"3TSz9S\":[\"Riduci\"],\"3UW8fG\":[\"Aggiornamenti gestiti da \",[\"0\"]],\"3YvS-c\":[\"Nuovo tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt Nome Cella Notebook\"],\"3qkggm\":[\"Schermo Intero\"],\"3rBJ1T\":[\"Vedi schema\"],\"3xZ-xV\":[\"Insert Current Timestamp\"],\"40Gx0U\":[\"Fuso Orario\"],\"41GP4f\":[\"Scegli il delimitatore predefinito utilizzato per la copia o l'esportazione delle righe in formato CSV.\"],\"42iaEi\":[\"PostgreSQL senza ANALYZE mostra solo le stime del planner.\"],\"44cXI8\":[\"Ordina per \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gestisci Database\"],\"4CK17g\":[\"Sei sicuro di voler modificare la vista \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Seleziona almeno un database\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Esporta come HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processo figlio\"],\"other\":[\"#\",\" processi figli\"]}]],\"4VyuY3\":[\"Sei sicuro di voler cancellare tutti i log?\"],\"4WWqS3\":[\"Espandi/comprimi albero JSON\"],\"4XAQdl\":[\"Crea Indice\"],\"4cEClj\":[\"Sessioni\"],\"4cmfYp\":[\"Duplicate Row\"],\"4hsr6d\":[\"Crea Vista\"],\"4lIZTB\":[\"Dipendenze Dev Frontend\"],\"4oYjvJ\":[\"Cerca nella query…\"],\"4tMxW4\":[\"Anteprima record correlato\"],\"4yJcjm\":[\"Seleziona tipo...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Chiudi pannello filtri (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Punto e virgola (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" evento\"],\"other\":[\"#\",\" eventi\"]}]],\"5I2fxu\":[\"/percorso/id_rsa\"],\"5NZpX8\":[\"Vista lista\"],\"5To6Z6\":[\"Copia query\"],\"5gqNQl\":[\"Vista griglia\"],\"5igIzr\":[\"Importazione annullata\"],\"5nTIup\":[\"Modifica vista: \",[\"name\"]],\"5qIe8E\":[\"Esegui Tutto\"],\"66bEht\":[\"Stato del Progetto\"],\"6PIJVc\":[\"Avvio\"],\"6QvP0l\":[\"Esporta come JSON\"],\"6W41Xq\":[\"Gestione Attività\"],\"6WngBH\":[\"Imposta NULL\"],\"6YtxFj\":[\"Nome\"],\"6_dCYd\":[\"Panoramica\"],\"6dOBsk\":[\"Crea Vista\"],\"6gvoHP\":[\"Copia messaggio d’errore\"],\"6oCVzX\":[\"Il contesto Kubernetes è obbligatorio\"],\"6wQO0f\":[\"Mostra Dati\"],\"6z9W13\":[\"Riavvia\"],\"71agNy\":[\"Genera nomi per le celle senza nome con AI\"],\"74J3FG\":[\"Versione iniziale\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Ho capito\"],\"77nSMU\":[\"Vuoi eliminare l'intera storia delle attività AI? L'operazione è irreversibile.\"],\"7ABmyQ\":[\"Riprova\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" di \",[\"0\"],\" attivi\"],\"7E864M\":[\"Tipo Database\"],\"7FqaG1\":[\"Personalizza le istruzioni per l'analisi AI dei piani EXPLAIN. Usa \",[\"LANGUAGE\"],\" per la lingua di output.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Tipi misti rilevati, default TEXT\"],\"7RSQQd\":[\"Salva password nel Portachiavi\"],\"7VpPHA\":[\"Conferma\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fallite\"],\"7sMeHQ\":[\"Chiave\"],\"7sNhEz\":[\"Nome utente\"],\"7tATh2\":[\"Esegui Query\"],\"7yb4gk\":[\"Fallito: \"],\"8-4V8D\":[\"Tabelle\"],\"82G-l5\":[\"Il Model Context Protocol (MCP) permette agli assistenti AI (come Claude) di connettersi ai tuoi strumenti locali. Tabularis espone un server MCP che permette all'AI di leggere lo schema del database ed eseguire query in sicurezza.\"],\"83VjWE\":[\"Nuovo Notebook\"],\"86IgoU\":[\"Esegui query (nell'editor)\"],\"86fCgf\":[\"Personalizza le istruzioni per la generazione AI del nome delle tab risultato query. La query SQL viene inviata come messaggio utente.\"],\"87a_t_\":[\"Etichetta\"],\"87kWsr\":[\"Esporta connessioni\"],\"8CWirf\":[\"Server MCP\"],\"8S8aIX\":[\"Controllo Connessione\"],\"8TMaZI\":[\"Timestamp\"],\"8Tg_JR\":[\"Personalizzato\"],\"8UFKYr\":[\"Seleziona la query da eseguire\"],\"8VKSGV\":[\"Genera SQL\"],\"8Wjy6z\":[\"Chiudi schede a sinistra\"],\"8ZsakT\":[\"Password\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Editor SQL\"],\"8bRgTe\":[\"Provider AI non configurato. Vai su Impostazioni > AI.\"],\"8c_W0h\":[\"Versioni precedenti\"],\"8guEQP\":[\"Aggiorna Viste\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN è leggero e soprattutto strutturale.\"],\"8q_sOc\":[\"Rimuovi\"],\"8t-akp\":[\"prime \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nome Connessione\"],\"91gnWY\":[\"Esporta Log\"],\"91rtHL\":[\"Crea Nuova Vista\"],\"92hf9a\":[\"Rimuovi\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vista aggiornata con successo\"],\"9NzDFn\":[\"Mostra la schermata di benvenuto all'avvio dell'applicazione.\"],\"9OoUS3\":[\"Crea Nuova Connessione SSH\"],\"9QGRD5\":[\"Colonna destinazione\"],\"9QTny9\":[\"Esecuzione query fallita.\"],\"9S-fyV\":[\"Piano di esecuzione preliminare\"],\"9SJ_Sx\":[\"Risorse di Sistema\"],\"9UQ730\":[\"Clona\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"Nessun dato negli appunti\"],\"9hGjL2\":[\"Crea Indice\"],\"9mMU1R\":[\"Tempo\"],\"9mvFo_\":[\"Ora\"],\"9npOH9\":[\"Apri file\"],\"9uI_rE\":[\"Annulla\"],\"9xUjzm\":[\"Seleziona Tutti\"],\"9y_02p\":[\"Chatta con la community, ricevi aiuto, suggerisci funzionalità\"],\"A1pPcI\":[\"Host SSH\"],\"A1taO8\":[\"Cerca\"],\"A6C0pv\":[\"Costo Totale\"],\"A7WG0p\":[\"Plugin disabilitato\"],\"A7yRz3\":[\"La definizione della vista è richiesta\"],\"A9Uyp6\":[\"Importazione fallita: \"],\"ABEd-z\":[\"Usa il tuo package manager per aggiornare Tabularis.\"],\"AMdgKV\":[\"Prompt Analisi Piano di Esecuzione\"],\"ANSTMe\":[\"Nessun problema rilevante nel riepilogo del piano corrente.\"],\"ANzIr7\":[\"Cronologia Query\"],\"AOnaU7\":[\"saltate\"],\"AVlZoM\":[\"Variabile Ambiente\"],\"AXTVsE\":[\"Verifica completa\"],\"AXdRYR\":[\"Log attuali\"],\"Aa-YkQ\":[\"Esporta Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filtra per livello\"],\"AlPiMN\":[\"Clicca per saltare alla pagina\"],\"An-1rA\":[\"Righe restituite\"],\"AnV8j-\":[\"Modifica Colonna\"],\"AvEr_L\":[\"Nuova Console\"],\"AvYbUL\":[\"Star su GitHub\"],\"Aw_eOs\":[\"Richiede Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Nessun risultato trovato\"],\"B0mJGb\":[\"Output Grezzo\"],\"B1c58n\":[\"Modifica colonna\"],\"B3toQF\":[\"Oggetti\"],\"B5nKny\":[\"/percorso/assoluto/cartella\"],\"B5xevr\":[\"Il nome della connessione è obbligatorio\"],\"BAVvWJ\":[\"Diagramma ER\"],\"BBtVak\":[\"Comprimi Tutto\"],\"BEVzjL\":[\"Importazione fallita\"],\"BHATjK\":[\"Esporta connessioni\"],\"BJe2lZ\":[\"Mostra/nascondi sidebar\"],\"BK3WCj\":[\"Impossibile caricare il registro\"],\"BKbO3i\":[\"Notebook modificato\"],\"BMB51y\":[\"Esegui nella console\"],\"BNW_Z4\":[\"es. utenti_attivi, riepilogo_ordini\"],\"BPkXj7\":[\"Crea Chiave Esterna\"],\"BUO_JN\":[\"Copia Query\"],\"BYkhHY\":[\"Controlla aggiornamenti all'avvio\"],\"BeSg6-\":[\"Raccogli i log dell'applicazione in memoria per il debug\"],\"BgAyQH\":[\"Rimuovi ordinamento\"],\"BinTJI\":[\"ecosistema npm\"],\"BkFson\":[\"Impaginazione automatica\"],\"Bpglf1\":[\"Sposta Su\"],\"BrGo6h\":[\"Cerca notebook\"],\"BxiAN_\":[\"Elimina Query\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dipendenze Frontend\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Nessun filtro —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Download in corso...\"],\"CUxwxn\":[\"Mostra Tutte le Tabelle\"],\"CWMXbw\":[\"fermerà forzatamente il suo processo. Tutte le connessioni database attive che usano questo plugin smetteranno di funzionare finché il plugin non verrà riavviato.\"],\"CZt6BX\":[\"CONFIGURAZIONE MANUALE\"],\"Ca8ixZ\":[\"Elimina\"],\"CbJBQS\":[\"Aggiornamento fallito: \"],\"Cdz-YU\":[\"Vista impilata\"],\"CpeQf9\":[\"Cicli\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Seleziona il modello da utilizzare per la generazione e la spiegazione.\"],\"DB8zMK\":[\"Applica\"],\"DDXf5E\":[\"Funzioni SQL\"],\"DEwnwi\":[\"Elimina\"],\"DNTvdl\":[\"Apri nell'editor\"],\"DPc2P9\":[\"Elimina Cella\"],\"DUY8Ba\":[\"Modifiche Incompatibili\"],\"DVnBSM\":[\"Altezza Riga\"],\"Dd7YLj\":[\"Forse più tardi\"],\"Deej3j\":[\"JSON non valido\"],\"DfKhk_\":[\"Aggiorna\"],\"DiRiTz\":[\"Apri pagina del pacchetto\"],\"DlRHAD\":[\"Esecuzione EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" errore\"],\"other\":[\"#\",\" errori\"]}]],\"Dvdihe\":[\"Su \",[\"0\"],\" — controlla e decidi prima dell'esecuzione.\"],\"DzFLzw\":[\"SÌ\"],\"E-JUtQ\":[\"Approvazione manuale\"],\"E0kcnZ\":[\"Generale\"],\"E2mje_\":[\"Seleziona la query da analizzare\"],\"EDieyg\":[\"Sei sicuro di voler eliminare questa connessione SSH?\"],\"EHZxPj\":[\"Espandi\"],\"EL4oDO\":[\"Nuova Versione Disponibile\"],\"EPi4gT\":[\"Ordina per \",[\"field\"]],\"EWPtMO\":[\"Codice\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Sconosciuto\"],\"EhADgB\":[\"Elimina colonna\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Sei aggiornato\"],\"Em6JFd\":[\"Conta righe\"],\"EnGiqG\":[[\"0\"],\" elementi\"],\"Ew1n5z\":[\"Cerca plugin…\"],\"F18WP3\":[\"Parametri\"],\"F3uc1x\":[\"Il file esportato conterrà le password del database e SSH in chiaro. Conservalo in modo sicuro.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" righe\"],\"other\":[\"#\",\" righe\"]}]],\"F6pfE9\":[\"Attiva\"],\"F8tXg7\":[\"Anteprima Dati\"],\"F9-6yK\":[\"Formato di copia predefinito\"],\"F9lxfG\":[\"Rimuovi\"],\"F9nsa2\":[\"Il file di cronologia era corrotto ed è stato spostato in backup. Le nuove query verranno registrate normalmente. File di backup:\"],\"FF_oap\":[\"Default\"],\"FK8rlP\":[\"Nessuna connessione SSH configurata\"],\"FMRcH8\":[\"Prima riga come intestazione\"],\"FNvDMc\":[\"Questa Settimana\"],\"FQe1FI\":[\"Righe Stimate\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operazione\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Scegli un tema indipendente per l'editor SQL, oppure mantienilo sincronizzato con il tema dell'app.\"],\"FsvZQL\":[\"Modificata cella \",[\"n\"]],\"FtwKL9\":[\"Cambia tab\"],\"FznI3z\":[\"Eliminare la chiave esterna \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Anteprima fallita: \"],\"G8Q5Zq\":[\"Il namespace è obbligatorio\"],\"GAohqx\":[\"Elimina colonna\"],\"GJR99u\":[\"Eliminazione colonna fallita: \"],\"GKfzzM\":[\"Scegli una connessione...\"],\"GS-Mus\":[\"Esporta\"],\"GUaLUq\":[\"Caricamento schema fallito: \"],\"GXP-Iw\":[\"Aggiungi Cella SQL\"],\"Gj1mLb\":[\"Celle riordinate\"],\"GlbqG2\":[\"Ripristina predefinito\"],\"Gq1YzP\":[\"Eventi\"],\"Gs5AlY\":[\"Aperta\"],\"GtmO8_\":[\"da\"],\"GxkJXS\":[\"Caricamento in corso...\"],\"H-o4D2\":[\"Crea nuova colonna\"],\"H2B-KW\":[\"Scegli il formato predefinito per la copia delle righe con Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Ripeti\"],\"H7mlCc\":[\"/percorso/assoluto/db.sqlite\"],\"H86f9p\":[\"Riduci\"],\"H9P8CD\":[\"aggiungi il primo filtro\"],\"HAQlGl\":[\"Attività AI\"],\"HKNZrs\":[\"Cond. Indice\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Elimina \",\"#\",\" righe\"],\"other\":[\"Elimina \",\"#\",\" righe\"]}]],\"HPuCiP\":[\"Percorso Cartella\"],\"HUs1R3\":[\"Nessuna scheda aperta per questa connessione.\"],\"HV4Isp\":[\"Inserisci password SSH\"],\"HVC8Hh\":[\"Copiato negli appunti\"],\"HWEpq8\":[\"Scrittura Disco/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Salvataggio vista fallito: \"],\"He8v1Y\":[\"Deseleziona da Applica tutti\"],\"HehHP1\":[\"Layout Predefinito\"],\"HilYn4\":[\"Questo notebook è vuoto. Aggiungi una cella per iniziare.\"],\"HjxVK_\":[\"Test connessione rapido\"],\"HmMnRx\":[\"Modalità WKT\"],\"HoKCiI\":[\"L'app si riavvierà automaticamente dopo l'installazione\"],\"HpK_8d\":[\"Ricarica\"],\"Hpi4Jm\":[\"Entra subito\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configura SSH Inline\"],\"I5VBsr\":[\"Come l'app\"],\"I8yrPb\":[\"Sostituisci tabella\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Ricordamelo Dopo\"],\"I99Miw\":[\"Costo\"],\"IETZIR\":[\"Modifica nome cella\"],\"IG9wzA\":[\"Inserimento riga fallito: \"],\"ILleOG\":[\"Il tipo di risorsa deve essere \\\"service\\\" o \\\"pod\\\"\"],\"IQ3gAw\":[\"Carica File\"],\"IUwGEM\":[\"Salva Modifiche\"],\"IUwmLq\":[\"Dipendenze dirette dichiarate in package.json e src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Librerie Open Source\"],\"I_43p6\":[\"Sicurezza\"],\"Iaizf4\":[\"Aspetto\"],\"Il3FBB\":[\"Pannello filtri strutturati\"],\"IniZRK\":[\"Download non disponibile - caricata solo anteprima\"],\"Isaozb\":[\"Rivedi e modifica\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Le query attive e le connessioni attraverso questo plugin verranno interrotte.\"],\"J6v1s_\":[\"Modello Predefinito\"],\"JE-DVk\":[\"Interprete\"],\"JEGlfK\":[\"Inizio\"],\"JKDPqP\":[\"Seleziona prima un contesto\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Usa Tunnel SSH\"],\"JRz8tw\":[\"MySQL e MariaDB espongono metriche reali solo con le varianti supportate di EXPLAIN ANALYZE o ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP o SVG · max 512 KB\"],\"JY5Oyv\":[\"Database\"],\"JlFRIB\":[\"Fuso orario della sessione inviato a MySQL dopo la connessione.\"],\"JrOEip\":[\"Anteprima\"],\"JsY1p5\":[\"Negata\"],\"K3H9p5\":[\"Rimuovi\"],\"K5Dgu_\":[\"Database\"],\"K8IGKf\":[\"Tipo di Autenticazione\"],\"KAYNSW\":[\"Quanti log mantenere in memoria (1-10000)\"],\"KHTGbr\":[\"EXPLAIN preliminare\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copia come `colonna`\"],\"KM5Kc8\":[\"Almeno una colonna deve essere selezionata\"],\"KSCnVQ\":[\"Tipo\"],\"KUjOb9\":[\"in esecuzione\"],\"KXBdwy\":[\"Aggiorna Routine\"],\"KXNyX7\":[\"Imposta DEFAULT\"],\"Kd70-v\":[\"Importa dagli Appunti...\"],\"KhI4oS\":[\"Apri la riga referenziata in \",[\"0\"]],\"KhgrNu\":[\"Integrazione Server MCP\"],\"KirERL\":[\"Timeout\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Eliminazione indice fallita: \"],\"KzeARD\":[\"Eliminazione tabella fallita: \"],\"L-rMC9\":[\"Ripristina predefinito\"],\"L3HXkQ\":[\"Correzioni Bug\"],\"LCZ7Dy\":[\"Copia nome\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"indici\"],\"LMeAoR\":[\"righe\"],\"LPCdc-\":[\"Prompt Nome Tab Query\"],\"LPFmga\":[\"Seleziona per Applica tutti\"],\"LYzbQ2\":[\"Strumento\"],\"Lbis_V\":[\"Navigatore rapido\"],\"Lcpbe2\":[\"Impossibile avviare il processo del plugin. Controlla i dettagli dell'errore.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN è supportato solo per istruzioni DML (SELECT, INSERT, UPDATE, DELETE). Le istruzioni DDL come CREATE, DROP o ALTER non possono essere analizzate.\"],\"LnT0hQ\":[\"Aggiungi colonna\"],\"LvutiO\":[\"Suggerisci con AI\"],\"M-rHQO\":[\"Esci da Schermo Intero\"],\"M0XJba\":[\"Sei sicuro di voler cancellare tutta la cronologia delle query per questa connessione?\"],\"M1co_O\":[\"Configurato\"],\"M73whl\":[\"Contesto\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Emoji selezionato\"],\"MWB7fV\":[\"Mostra Tutto\"],\"MXdOwj\":[\"Separa Connessioni\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Seleziona connessione K8s\"],\"Mc1tjS\":[\"Abilita ANALYZE per ispezionare righe reali, tempi, cicli e buffer.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" righe in più\"],\"Mp0jQ_\":[\"Questo driver supporta le chiavi primarie solo in fase di creazione della tabella\"],\"MqpZwN\":[\"Processo Tabularis\"],\"MxIx43\":[\"↑↓ per navigare, Invio per aprire\"],\"MygtgQ\":[\"Aggiungi Cella Markdown\"],\"N40H-G\":[\"Tutti\"],\"N5UQxq\":[\"Ollama non rilevato sulla porta \",[\"0\"],\". È in esecuzione?\"],\"N6GBcC\":[\"Conferma eliminazione\"],\"N6aqHp\":[\"Query eseguite\"],\"N9_S15\":[\"Verrà creata una nuova tabella\"],\"NBdMa1\":[\"Step Più Lento\"],\"NC2AI2\":[\"Lunghezza\"],\"NCzNnx\":[\"Ordine crescente\"],\"NT4Ubs\":[\"Elimina chiave personalizzata e ripristina variabile d'ambiente (se presente)\"],\"NUjrCO\":[\"Nessun preferito corrisponde alla ricerca\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Totale albero: \",[\"0\"]],\"Nc2VQn\":[\"Aggiungi a esistente\"],\"NgFERn\":[\"Aggiungi ai Preferiti\"],\"NktMHG\":[\"Nome database\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Test\"],\"Nq5QTk\":[\"analizza N-esima\"],\"O2STgu\":[\"Esportazione fallita: \"],\"O8SV8O\":[\"Download in corso...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Esegui Tutte le Celle\"],\"OGWdBg\":[\"Nome Vista\"],\"OHqT6w\":[\"Premi la combinazione di tasti...\"],\"OXJsaG\":[\"Nome parametro non valido\"],\"OfhWJH\":[\"Ripristina\"],\"OlAl5i\":[\"Espandi tutto\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Unisciti su Discord\"],\"P1YGsb\":[\"Generazione SQL\"],\"P2m1xb\":[\"Ferma su Errore\"],\"P3Qlys\":[\"Nessun ID Connessione\"],\"P6Y3Yf\":[\"Esegui questo comando nel terminale, poi riavvia Claude Code.\"],\"PCdj-c\":[\"Deseleziona tutte\"],\"PMnFt9\":[\"Lettura Disco/s\"],\"PQU2Va\":[\"Accetta Suggerimento con Invio\"],\"PRnH8G\":[\"su \",[\"0\"]],\"PY8UF3\":[\"Parallelo commutato (cella \",[\"n\"],\")\"],\"PiH3UR\":[\"Copiato!\"],\"Pia95d\":[\"Il nome della colonna è richiesto\"],\"PrElXQ\":[\"Aggiorna\"],\"PrixCC\":[\"Le righe verranno aggiunte a una tabella esistente\"],\"Pujgbb\":[\"Configura destinazione\"],\"Pw_eQV\":[\"Plugin non avviato\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Nessuna query salvata\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Nessun processo figlio\"],\"QCxMC0\":[\"Controlla automaticamente nuove versioni all'avvio dell'app\"],\"QEazml\":[\"Elimina selezionate\"],\"QHcLEN\":[\"Connesso\"],\"QLHHFO\":[\"Modalità sola lettura\"],\"QOvAW3\":[\"Nuove Funzionalità\"],\"QULGRi\":[\"Nessuna query valida trovata\"],\"QZwllF\":[\"Sfoglia...\"],\"QbkSr_\":[\"EXPLAIN non disponibile per questa query.\"],\"QeHFYZ\":[\"EXPLAIN fallito: \",[\"0\"]],\"Qll2Tb\":[\"Decresc.\"],\"Qoq-GP\":[\"Leggi di più\"],\"Qu4Hog\":[\"Notebook importato con successo\"],\"R-A2Vd\":[\"Nessun dato da visualizzare\"],\"R0Hkb2\":[[\"0\"],\" database selezionato/i\"],\"R1nHhB\":[\"Esiste già\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Converti in Console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configurazione\"],\"RF-HyV\":[\"Scegli la tua lingua preferita. 'Auto' userà la lingua di sistema.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copia nome\"],\"RI-HZc\":[\"Inserisci Chiave \",[\"0\"]],\"RJrE17\":[\"Sei sicuro di voler eliminare la vista \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Una stella aiuta gli altri a scoprire il progetto\"],\"Rb3Tdm\":[\"Nome del notebook\"],\"RcbKJ3\":[\"All'Update\"],\"RkefFq\":[\"Esegui un EXPLAIN della query prima di mostrare il modal di approvazione, così l'utente vede il piano di esecuzione.\"],\"RnF_hl\":[\"Caricamento registro plugin...\"],\"Rns7_C\":[\"Questa azione non può essere annullata immediatamente\"],\"RoKRqW\":[\"Plugin Disponibili\"],\"RphpKk\":[\"Aspetto\"],\"Rt8sHM\":[\"Rilevato lavoro di sort o temporaneo\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Abilitati\"],\"S1veKH\":[\"Ripristina selezionato\"],\"S5zeZU\":[\"Anteprima\"],\"S8Yqbl\":[\"Inserisci\"],\"SDND4q\":[\"Non configurato\"],\"SJRy3D\":[\"(Auto-generato)\"],\"SSwIjo\":[\"Imposta VUOTO\"],\"SgvA_r\":[\"Premi Esegui (Ctrl/Command+F5) per caricare i dati della tabella\"],\"SlfejT\":[\"Errore\"],\"SoATkx\":[\"Copia cella\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL Endpoint\"],\"T7w5CQ\":[\"Impossibile creare nuova riga: \"],\"T9947j\":[\"Valore (es. 'testo' o 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Passa a Layout Verticale\"],\"TK5oex\":[\"Salva Prompt\"],\"TKQ7K-\":[\"Installa\"],\"TKZreP\":[\"Richiesto\"],\"TMLAx2\":[\"Richiesto\"],\"TO08JI\":[\"chiavi esterne\"],\"TVKqvO\":[\"Modifica Riga\"],\"TYSdQ3\":[\"Esegui query SELECT\"],\"TfDFHS\":[\"Manda a capo le righe lunghe nell'editor invece di scorrere orizzontalmente.\"],\"Tibfjs\":[\"Nessuna connessione salvata — creane una qui sotto\"],\"Tj36Dr\":[\"Ripristina Predefinito\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Blocca query\"],\"TpwXyg\":[\"Se il tempo manca, il server ha probabilmente restituito un piano solo stimato.\"],\"Tw2M1h\":[\"Installazione fallita\"],\"Ty-rm9\":[\"Connessioni SSH\"],\"Tz0i8g\":[\"Impostazioni\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Connessioni Kubernetes\"],\"U4uzyV\":[\"Novità\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Ferma l'esecuzione quando una cella fallisce\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" su \",[\"1\"],\" — controlla e decidi prima dell'esecuzione.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configurazione installata per \",[\"clientName\"],\"! Riavvia l'app per applicare.\"],\"URmyfc\":[\"Dettagli\"],\"UWQBvp\":[\"Genera modelli SQL\"],\"UawTKZ\":[\"Opzionale. Specifica l'eseguibile usato per avviare questo plugin (es. python3 su macOS/Linux, python o percorso completo su Windows). Lascia vuoto per usare il valore predefinito.\"],\"Ub8sf5\":[\"SQLite non supporta l'eliminazione di FK tramite ALTER TABLE.\"],\"UbbJ8j\":[\"Nessuna opzione trovata\"],\"Ubs68g\":[\"Generali\"],\"UftN8J\":[\"Queste connessioni rifiuteranno le scritture da MCP. Le altre si comportano normalmente.\"],\"UnQNah\":[\"Sei sicuro di voler eliminare la colonna \\\"\",[\"0\"],\"\\\" dalla tabella \\\"\",[\"tableName\"],\"\\\"?\\n\\nATTENZIONE: Questo eliminerà permanentemente tutti i dati in questa colonna. L'azione non può essere annullata.\"],\"UncTTh\":[\"Somma RSS dell'albero dei processi — può sovrastimare la memoria condivisa\"],\"UpjgFm\":[\"Parametri modificati\"],\"UsAnu1\":[\"ANALYZE esegue la query. Usare con cautela su istruzioni che modificano dati.\"],\"UxKoFf\":[\"Navigazione\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Dimensione Tab\"],\"UzWGWO\":[\"Passa all'input SQL WHERE\"],\"V-chk5\":[\"Frequenza con cui verificare se le connessioni attive sono ancora raggiungibili. Imposta 0 per disabilitare.\"],\"V-pw1j\":[\"Nome tabella\"],\"V2T0Uw\":[\"Nessun notebook salvato.\"],\"V3aNwx\":[\"Editor Dati\"],\"VGYp2r\":[\"Applica a tutto\"],\"VH8S7x\":[\"Colonna appunti\"],\"VIAEcS\":[\"Impossibile caricare i database. Verifica le credenziali.\"],\"VKdztF\":[\"Aggiungi righe\"],\"VLiHXI\":[\"Dati Analyze\"],\"VMbmXc\":[\"Sei sicuro di voler rimuovere \\\"\",[\"pluginName\"],\"\\\"? I file del plugin verranno eliminati.\"],\"VO3weF\":[\"Nessun file caricato\"],\"VOZlKc\":[\"Importazione Database\"],\"VPzsIz\":[\"Generazione nome...\"],\"VUul0v\":[\"La terminazione di\"],\"VW0GVQ\":[\"Clicca un altro emoji qui sotto per cambiarlo.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Tutte le query\"],\"Vi2Pqx\":[\"di\"],\"Vl2zn2\":[\"arrestato\"],\"Vo4uBA\":[\"Si è verificato un errore durante l'installazione del plugin. Vedi i dettagli qui sotto.\"],\"VqqyOs\":[\"Esegui una query per vedere i risultati\"],\"VzhDFh\":[\"Blocca qualsiasi statement non-SELECT proveniente da MCP, salvo le connessioni esplicitamente abilitate.\"],\"W3uwpT\":[\"Chiudi tutte le schede\"],\"W4MKLh\":[\"es. Sembra rischiosa in produzione, conferma…\"],\"W60eXm\":[\"Tabella\"],\"WA8RND\":[\"Sei sicuro di voler eliminare la tabella \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Elimina tabella\"],\"WLnvCZ\":[\"Inserisci nome utente\"],\"WM-__8\":[\"Cerca connessioni...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe importate in \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" righe importate in \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Sei sicuro di voler eliminare la query \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"riuscite\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"Generali\"],\"WmPpB1\":[\"Caricamento del piano di esecuzione…\"],\"Wu7cK0\":[\"Nessun database trovato\"],\"WvoUQF\":[\"Eliminata cella \",[\"n\"]],\"Ww3pDD\":[\"COMANDO MANUALE\"],\"X-20AU\":[\"Inserisci prompt nome tab query...\"],\"X-U6_w\":[\"Famiglia Font\"],\"X5fs0g\":[\"Crea la tua prima connessione per iniziare.\"],\"X7Ayjp\":[\"Password salvata nel portachiavi di sistema\"],\"X9kySA\":[\"Preferiti\"],\"XJOV1Y\":[\"Attività\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Spiegazione Query\"],\"XVF2Pf\":[\"Modifica Schemi\"],\"XW6OYF\":[\"Questo plugin potrebbe richiedere un interprete (es. Python). Usa le Impostazioni Plugin per configurare il percorso dell'interprete.\"],\"XZB6Xr\":[\"Numero massimo di log\"],\"Xcffv2\":[\"Mostra i pulsanti AI Assist ed Explain nell'editor\"],\"XeqTSh\":[\"Tipo Join\"],\"XmJfZT\":[\"nome\"],\"XoQfG1\":[\"Utente SSH\"],\"XwI0Vw\":[\"Auto (Sistema)\"],\"XyDlLX\":[\"Nome Indice\"],\"Y2P2aK\":[\"Seleziona gli schemi da caricare:\"],\"Y8HYw2\":[\"valore\"],\"Y8zX3R\":[\"Inserisci nell'Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Cerca...\"],\"YWlnMZ\":[\"Porta Ollama\"],\"YYdC3A\":[\"Versione \",[\"0\"]],\"YYn8b5\":[\"Sfoglia e installa plugin dal registro.\"],\"Y_3yKT\":[\"Apri in Nuova Scheda\"],\"YiAQ_Q\":[\"Aggiorna Tabelle\"],\"Ysjr9Y\":[\"Anteprima SQL\"],\"YswNf7\":[\"Tutti i livelli\"],\"YtNwr6\":[\"Numero massimo di voci nella cronologia delle query salvate per connessione.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Caricamento...\"],\"Z7ZXbT\":[\"Approva\"],\"Z8JpBH\":[\"Esporta come Notebook\"],\"Z8fBIc\":[\"Le righe reali superano la stima\"],\"ZC2VJP\":[\"Esegui\"],\"ZCIS4k\":[\"nessun filtro attivo\"],\"ZF1_UT\":[\"Modalità SSL\"],\"ZGjBPa\":[\"Pulisci Log\"],\"ZHQTlM\":[\"Importazione da\"],\"ZIFDoJ\":[\"Seleziona almeno Struttura o Dati\"],\"ZIZA6o\":[\"Modifica prima di approvare\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avvisi di parsing\"],\"other\":[\"#\",\" avvisi di parsing\"]}]],\"ZVn8p2\":[\"Visualizza i numeri di riga nel margine dell'editor.\"],\"ZYnwzF\":[\"Disconnesso\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Crea Chiave Esterna\"],\"Zf7LHg\":[\"Nessun contesto trovato (kubectl è installato?)\"],\"Zfotp5\":[\"Scostamenti elevati tra stima e reale indicano spesso statistiche non aggiornate o predicati difficili da modellare.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Caricamento degli schemi fallito\"],\"ZqXGPF\":[\"Eliminazione vista fallita: \"],\"ZuL73E\":[\"Crea una nuova vista database\"],\"_-bi4r\":[\"Tabella Riferita\"],\"_AEYGI\":[\"Nessuna cronologia di esecuzione\"],\"_FdpZc\":[\"Impossibile caricare la definizione della vista: \"],\"_FxSdi\":[\"Consulta le dipendenze open source dirette usate dall'app, dal backend e dalla toolchain.\"],\"_JyTG8\":[\"Inserisci prompt di spiegazione...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"righe\"],\"_TK1zF\":[\"Connessione salvata\"],\"_bJFBE\":[\"Timeout Connessione\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Albero\"],\"_dqduX\":[\"Pagina successiva\"],\"_fwE6J\":[\"Precedenti\"],\"_n04sB\":[\"Termina\"],\"_otxbQ\":[\"File chiave\"],\"_pezIT\":[\"Impossibile connettersi a \",[\"0\"],\". Verifica le impostazioni o assicurati che il database sia in esecuzione.\"],\"_srfkj\":[\"Chiave personalizzata eliminata con successo\"],\"_t6aFo\":[\"MySQL e MariaDB possono ripiegare su EXPLAIN FORMAT=JSON o sull'EXPLAIN tabellare in base alla versione del server.\"],\"_xTbaM\":[\"colonne\"],\"_yxaaL\":[\"Indice Unico\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis è un progetto gratuito e open-source. Se lo trovi utile, considera di supportare il progetto e unirti alla community.\"],\"a9CASo\":[\"SQLite supporta solo la rinomina delle colonne. Altre modifiche richiedono la ricreazione manuale della tabella.\"],\"aAIQg2\":[\"Aspetto\"],\"aAURrV\":[\"Installato\"],\"aC_vCa\":[\"Genera nome con AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Seleziona un nodo per i dettagli\"],\"aHKcKc\":[\"Pagina precedente\"],\"aI-5wG\":[\"Verifica CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valore Predefinito\"],\"aScJP1\":[\"Esegui questa query\"],\"aVNbN8\":[\"Condizioni filtro\"],\"aWhdMQ\":[\"Usa Connessione SSH Esistente\"],\"aXYd8V\":[\"Timeout\"],\"aX_S_r\":[\"Pagina \",[\"0\"],\" di \",[\"totalPages\"]],\"agZcf8\":[\"SQL Generato: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [campi]\"],\"alplHn\":[\"Analisi del piano di esecuzione con AI...\"],\"anBcU3\":[\"Se ti piace tabularis e vuoi vedere nuove funzionalità, considera di supportare il progetto contribuendo al codice, segnalando bug o mettendo una stella su GitHub.\"],\"arHmj2\":[\"Sei sicuro di voler eliminare questa query dalla cronologia?\"],\"arKcqW\":[\"I server meno recenti possono ripiegare su piani stimati con meno metriche.\"],\"arcpYe\":[\"Approvazione richiesta\"],\"aurEkh\":[\"Caricamento processi…\"],\"avtdsd\":[\"Modalità SQL\"],\"az8lvo\":[\"Disattiva\"],\"b1Ah3z\":[\"Focus su\"],\"b392Dr\":[\"Espandi Tutto\"],\"b5S_PU\":[\"Nome Database\"],\"bAvovP\":[\"Sposta Giù\"],\"bH3JqY\":[\"Nessuna tabella trovata\"],\"bP5JOn\":[\"A Capo Automatico\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Rendi tutte le query MCP di sola lettura\"],\"bmca5u\":[\"Solo scritture\"],\"bpCiBU\":[\"Consenti scritture da MCP\"],\"bqnhqW\":[\"La stima supera le righe reali\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Errore\"],\"bw22Gk\":[\"Schema Colonne\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Punti Critici\"],\"cFCKYZ\":[\"Nega\"],\"cFGrCP\":[\"tabella\"],\"cGeFup\":[\"Dimensione Font\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focus su Tabella\"],\"cM9NHc\":[\"Effettua downgrade a\"],\"cO9-2L\":[\"Disabilitato\"],\"cSev-j\":[\"Filtri\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importa \",\"#\",\" righe\"],\"other\":[\"Importa \",\"#\",\" righe\"]}]],\"c_xoSn\":[\"Rinominata cella \",[\"n\"]],\"cd0XEW\":[\"Salva Query\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Gruppo Diviso\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" istruzioni\"],\"d34vwG\":[\"Carica Database\"],\"d6ynQ7\":[\"Ordine decrescente\"],\"d8_6_v\":[\"annulla\"],\"d8wc1_\":[\"Valori campione\"],\"dBXoCS\":[\"È presente una variabile d'ambiente, ma puoi sovrascriverla impostando una chiave qui sopra.\"],\"dD7NPy\":[\"Sommario\"],\"dEgA5A\":[\"Annulla\"],\"dMtLDE\":[\"a\"],\"dPJVhW\":[\"Installazione Fallita\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" sessione\"],\"other\":[\"#\",\" sessioni\"]}]],\"dTUzKm\":[\"Esegui selezionate (\",[\"0\"],\")\"],\"dU_iQN\":[\"Nessuna sessione corrisponde ai filtri.\"],\"dUh9QW\":[\"Pianificazione\"],\"dVoir2\":[\"Aggiunta cella Markdown \",[\"n\"]],\"dZ0d2O\":[\"Seleziona almeno una tabella\"],\"dhi13U\":[\"Scegli immagine…\"],\"dli1JX\":[\"Invia Modifiche\"],\"dmYV6f\":[\"Routine\"],\"dohZCo\":[\"Istruzioni per la generazione SQL tramite AI. Usa \",[\"SCHEMA\"],\" come segnaposto per la struttura del database.\"],\"dtxpK2\":[\"Analizza\"],\"dwW9nJ\":[\"Mostra Numeri di Riga\"],\"dwWVw_\":[\"Mostra schermata di benvenuto\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"Se esiste\"],\"dyN4j9\":[\"Clicca 'Esegui Anteprima' per vedere i risultati\"],\"e07Iz5\":[\"Apri Gestione Attività\"],\"e0NzXu\":[\"Questo progetto è un Work In Progress (WIP). Le funzioni principali sono stabili, ma abbiamo grandi piani.\"],\"e1UKxf\":[\"Salva questa query\"],\"e34gdU\":[\"Quanti secondi il processo MCP attende la decisione dell'utente prima di abortire.\"],\"e62LQd\":[\"Termina Forzatamente\"],\"e6QZsM\":[\"Tema dell'Editor\"],\"e8CirT\":[\"Esegui query\"],\"eD2kUP\":[\"Buffer Letti\"],\"eE0JZ4\":[\"Versione\"],\"eIDch7\":[\"Inserisci prompt analisi piano di esecuzione...\"],\"eIVolo\":[\"Disco L/S\"],\"eJOEBy\":[\"Esportazione in corso...\"],\"eKHY3W\":[\"Impostazioni Plugin\"],\"eMb6Ub\":[\"Scegli una risorsa...\"],\"ePK91l\":[\"Modifica\"],\"eXweu6\":[\"Espandi Cella\"],\"ecNsTE\":[\"Nessuna query corrisponde alla ricerca\"],\"ecUA8p\":[\"Oggi\"],\"ecpIZP\":[\"Inserisci passphrase se la chiave è cifrata\"],\"ejmeDY\":[\"Installati\"],\"esl-Tv\":[\"Tipo di risorsa\"],\"exyUec\":[\"Connessione\"],\"f2AJjl\":[\"Elimina riga\"],\"f4pD-j\":[\"Test connessione fallito\"],\"f7sXvi\":[\"Inserisci password\"],\"fAsxc0\":[\"Scansioni Sequenziali\"],\"fIeFs0\":[\"Seleziona valore...\"],\"fJm92A\":[\"Seleziona un file contenente un piano EXPLAIN (formato JSON o testo PostgreSQL) per visualizzarlo.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Valori\"],\"f_b1TA\":[\"Cronologia Esecuzioni\"],\"fghnqP\":[\"Passa alla connessione 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Virgola (,)\"],\"fp711N\":[\"Bloccata (sola lettura)\"],\"fpzyLj\":[\"Pagina \",[\"0\"],\" di \",[\"1\"]],\"fuA6oy\":[\"Timeout Socket\"],\"fvImQM\":[[\"0\"],\" selezionate\"],\"fwr_nh\":[\"Installa estensioni, gestisci i driver dei plugin e tieni sotto controllo le impostazioni di runtime.\"],\"g0ZzK4\":[\"JSON valido\"],\"g11hAR\":[\"Nuova riga\"],\"g8VcMm\":[\"Il mio cluster K8s\"],\"gCFR_O\":[\"Esecuzione Parallela (Esegui Tutto)\"],\"gEjU98\":[\"Apri connessioni\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"È richiesta almeno una colonna\"],\"gSuQrG\":[\"Nessuna connessione corrisponde a \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Riesegui query\"],\"gZWMnn\":[\"Analisi AI\"],\"ghYd73\":[\"Scegli destinazione...\"],\"giAqEC\":[\"Crea Nuova Tabella\"],\"gnQS8X\":[\"Dimensione massima del pacchetto usata dal connettore MySQL.\"],\"gqV5VL\":[\"Integrata, non personalizzabile\"],\"gww_XE\":[\"Colonna Riferita\"],\"gxXPJ9\":[\"Configura Interprete\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Massimizza\"],\"h-XNc9\":[\"Delimitatore CSV\"],\"h-kNAk\":[\"es. dati_vendite\"],\"h3Z_aK\":[\"Scrivi Markdown qui...\"],\"h7MgpO\":[\"Scorciatoie da tastiera\"],\"h7peZQ\":[\"Permetti\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processo di sistema in esecuzione\"],\"other\":[\"#\",\" processi di sistema in esecuzione\"]}]],\"hEZrFh\":[\"Esegui File SQL...\"],\"hEipgW\":[\"Controlla Aggiornamenti Ora\"],\"hG89Ed\":[\"Immagine\"],\"hIHcBE\":[\"Esporta come CSV\"],\"hItdtk\":[\"Sfoglia cartella\"],\"hXFVjo\":[\"Il nome della tabella è richiesto\"],\"hZ6znB\":[\"Porta\"],\"h_huI6\":[\"Riesegui\"],\"hbz1rh\":[\"chiavi\"],\"hdsaJo\":[\"Importazione...\"],\"he3ygx\":[\"Copia\"],\"hfGimp\":[\"Scegli un namespace...\"],\"hjjSEi\":[\"Connessioni di sola lettura\"],\"hjwN_s\":[\"Nome risorsa\"],\"hlF1mD\":[\"Copia selezione\"],\"hnboBb\":[\"Analisi AI del Piano di Esecuzione\"],\"hnvu2p\":[\"Dettagli Errore\"],\"hq4-D2\":[\"La chiave API è salvata in modo sicuro nel portachiavi. Impostare una chiave qui sovrascrive la variabile d'ambiente.\"],\"hqjXdn\":[\"Eliminazione connessione SSH fallita\"],\"hqofAK\":[\"Copia SQL\"],\"hy6L14\":[\"Visualizza su GitHub\"],\"hyjACX\":[\"Celle compresse/espanse\"],\"hz1b5W\":[\"Nessun elemento corrispondente trovato\"],\"i1vAVM\":[\"Crea nuova tabella\"],\"i3S5T3\":[\"Cerca nei preferiti...\"],\"i4_LY_\":[\"Scrittura\"],\"i5HBWh\":[\"Cronologia query azzerata\"],\"i5zCt4\":[\"Tabella\"],\"iAVlge\":[\"Personalizza le istruzioni per la generazione AI del nome cella nei notebook. Il contenuto della cella (SQL o Markdown) viene inviato come messaggio utente.\"],\"iE1yAB\":[\"Filtra tabelle...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connetti\"],\"iSryJ2\":[\"Il Mio Server SSH\"],\"iT7UeX\":[\"Aggiungi Indice\"],\"iUWwuR\":[\"Scarica e Installa\"],\"ia7i08\":[\"Seleziona prima contesto/namespace/tipo\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Salvato\"],\"igcsfY\":[\"Nessun plugin disponibile nel registro.\"],\"ij-Elv\":[\"Anteprima immagine\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query analizzabili trovate\"],\"other\":[\"#\",\" query analizzabili trovate\"]}]],\"ioL38P\":[\"Monitora i processi dei plugin, CPU, RAM e utilizzo disco in tempo reale\"],\"ixlL_e\":[\"File Chiave SSH (Opzionale)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Seleziona un modello\"],\"j3gyYH\":[\"Applica tutti\"],\"j5CWO4\":[\"Aggiornato\"],\"j9HPuI\":[\"Riga #\",[\"0\"]],\"jBtpMP\":[\"Tutti gli stati\"],\"jEu4bB\":[\"Colonne\"],\"jEyQIs\":[\"Nessuna routine trovata\"],\"jHc1By\":[\"Elimina Vista\"],\"jI6sj4\":[\"Costo, tempi e stime di righe spesso non sono disponibili come in PostgreSQL e MySQL.\"],\"jIxQCZ\":[\"Non disponibile per la tua piattaforma\"],\"jKIncn\":[\"Il nome del database è richiesto\"],\"jPSk57\":[\"Motivo (opzionale)\"],\"jUNY_d\":[\"vista\"],\"jVqjDo\":[\"Formato file notebook non valido\"],\"jWSZ-A\":[\"Solo anteprima - dati completi non caricati\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Timeout del socket in millisecondi.\"],\"jpeU_Z\":[\"Notebook\"],\"jpgB4Y\":[\"Il nome della connessione è richiesto\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"processo figlio\"],\"jx0t66\":[\"Comprimi processi figli\"],\"k-0mL-\":[\"Aggiungi Colonna\"],\"k-XiMX\":[\"Grezzo\"],\"k2UnVy\":[\"Cond. Hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"secondi\"],\"kBiBq7\":[\"Eliminare l'indice \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Mostra/Nascondi Grafico\"],\"kI1qVD\":[\"Formatta\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" righe · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Dettagli evento\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registro\"],\"kY-q3P\":[[\"label\"],\" è obbligatorio\"],\"kexIdC\":[\"Usa Port-Forward Kubernetes\"],\"krksx_\":[\"Successo\"],\"ktYUe9\":[\"Esegui tutte\"],\"kwY6nh\":[\"Chiudi\"],\"kx0s-n\":[\"Risultati\"],\"kxUEfE\":[\"Impossibile recuperare la definizione della routine: \"],\"l2Op2p\":[\"Parametri Query\"],\"l9Ivba\":[\"Processi dei plugin e risorse di sistema\"],\"lBdPxu\":[\"Colore di accento\"],\"lCF0wC\":[\"Aggiorna\"],\"lEQRwq\":[\"Dati (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nuova tabella creata\"],\"lOekZ3\":[\"Passa a Layout Orizzontale\"],\"lUA1C1\":[\"Passphrase Chiave SSH (Opzionale)\"],\"lVeG20\":[\"Dipendenze Rust\"],\"lXAG6D\":[\"Istruzioni per la spiegazione delle query tramite AI. Usa \",[\"LANGUAGE\"],\" come segnaposto per la lingua di output.\"],\"lbbYjy\":[\"Modifica direttamente il file di configurazione grezzo. È necessario un riavvio per applicare le modifiche.\"],\"lhKW0m\":[\"Aggiunta cella SQL \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Dimensione Pagina Risultati (Limite)\"],\"lkz6PL\":[\"Durata\"],\"lmVGeo\":[\"Aggiungi Chiave Esterna\"],\"lnnx3E\":[\"Connetti Tabularis a Claude Desktop, Cursor e altri\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Aggiungi\"],\"m2Q_r8\":[\"Rileva JSON nelle colonne di testo\"],\"m2tskz\":[\"Successo\"],\"mA-qpe\":[\"Esecuzione Completata\"],\"mBhhbA\":[\"Log esportati negli appunti\"],\"mCNdzH\":[\"Esegui Cella\"],\"mO95sp\":[\"Chiudi pannello\"],\"mP7dLi\":[\"Inserisci il nome del font sopra\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloccato\"],\"other\":[\"#\",\" bloccati\"]}]],\"mS74ir\":[\"Salvataggio connessione SSH fallito\"],\"mSqtw8\":[\"Esegui Anteprima\"],\"mURmfQ\":[\"Definizione Vista (SQL)\"],\"mX_isJ\":[\"Verticale\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Struttura (DDL)\"],\"mrk4Cf\":[\"Ordina per \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Abbiamo una community Discord dedicata a Tabularis: ricevi aiuto, scambia consigli e influenza la roadmap.\"],\"mtvVdV\":[\"Righe processate\"],\"mx4evv\":[\"Crea Tabella\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Scarica\"],\"n7JDTx\":[\"Installa e abilita i plugin per vederli qui\"],\"nDDJir\":[\"Cerca sessione, client, connessione…\"],\"nHP-Kr\":[\"Nessuna sessione attiva. Seleziona una connessione.\"],\"nKhCjW\":[\"Seleziona Tabelle\"],\"nNwvm4\":[\"Errore\"],\"nOVim5\":[\"Salvataggio connessione fallito\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Eventi\"],\"nf14vn\":[\"Richiede estensione: \",[\"0\"]],\"ngO6Pv\":[\"Permetti al tasto Invio (oltre a Tab) di accettare il suggerimento di autocompletamento attivo. Quando disattivato, Invio inserisce sempre una nuova riga.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Crea la tua prima connessione\"],\"nohy4m\":[\"Nessuna attività MCP registrata.\"],\"nr-axf\":[\"Rimuovi Plugin\"],\"nsPFX9\":[\"Apri in Visual Explain\"],\"nuBbBr\":[\"Grafico\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Esporta Database\"],\"o-XJ9D\":[\"Cambia\"],\"o21Y-P\":[\"voci\"],\"o3tP_A\":[\"Elimina indice\"],\"o45L8r\":[\"Inserisci il nome della connessione\"],\"o53XGh\":[\"Copia riga/righe selezionate\"],\"o7J4JM\":[\"Filtro\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Livello\"],\"oGiIL7\":[\"Provider Predefinito\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connessione Persa\"],\"oJlXF2\":[\"Importa Notebook\"],\"oMFv82\":[\"Dividi Verticale\"],\"oOFiQg\":[\"Limita il numero di righe caricate per query per prevenire problemi di performance. Imposta a 0 per disabilitare (non consigliato).\"],\"oT9ZD3\":[\"Nascondi panoramica\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Grafico cambiato (cella \",[\"n\"],\")\"],\"oWfclW\":[\"Mostra il visualizzatore JSON quando una cella di testo non tipizzata contiene un oggetto o un array JSON. Aggiunge un piccolo costo di analisi per cella.\"],\"obpbdz\":[\"File config non trovato (crealo manualmente)\"],\"odZgfC\":[\"CLIENT AI\"],\"ogZhXn\":[\"Scegli la direzione di default per i diagrammi ER\"],\"ohUJJM\":[\"Plugin\"],\"olAdaI\":[\"Righe Reali\"],\"olWzar\":[\"Termina Forzatamente il Processo\"],\"ovBPCi\":[\"Predefinito\"],\"owzTWN\":[\"Modelli AI aggiornati dai provider\"],\"oxYi6j\":[\"Regola la dimensione base del font usata nell'applicazione (10-20px).\"],\"p--hsQ\":[\"Una connessione al database è stata persa\"],\"p6NueD\":[\"NUOVA\"],\"pOYHox\":[\"Azioni\"],\"pR9bTR\":[\"Nessun dato BLOB\"],\"pS8S5q\":[\"es. utenti, ordini, prodotti\"],\"pSws_M\":[\"Nome Tabella\"],\"pVLbKZ\":[\"Vista creata con successo\"],\"pWT04I\":[\"Controllo...\"],\"pZJ_6D\":[\"Il nome dell'indice è richiesto\"],\"pddYFG\":[\"Inserisci prompt nome cella...\"],\"pnpyuD\":[\"Abilita Logging\"],\"pqKMPv\":[\"Creazione tabella fallita: \"],\"pqaP1h\":[\"Chiudi\"],\"pqarBu\":[\"Cresc.\"],\"ptuq35\":[\"es. Comic Sans MS\"],\"pzu7v4\":[\"Orizzontale\"],\"q-ch8m\":[\"Tutte le altre connessioni restano in sola lettura. Solo quelle selezionate possono eseguire scritture.\"],\"qA5jLs\":[\"Dettagli errore\"],\"qIrtcK\":[\"Aggiornamenti\"],\"qOqy8G\":[\"Verifica configurazione...\"],\"qWaVNs\":[\"Salva e Riavvia\"],\"qb3LPX\":[\"Visualizza Diagramma ER\"],\"qkK0vq\":[\"Il nome della vista è richiesto\"],\"qki9tG\":[\"Errore\"],\"qoIir-\":[\"L'URL base della tua API compatibile OpenAI. Esempi: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Comprimi tutto\"],\"r6ncaO\":[\"Chiudi tab\"],\"rAJlpP\":[\"Porta container\"],\"rG3WVm\":[\"Lettura\"],\"rGRCeK\":[\"Cancella Cronologia Query\"],\"rNIto7\":[\"Il nome della risorsa è obbligatorio\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook esportato con successo\"],\"rY4sEV\":[\"Elimina FK\"],\"rbu0nO\":[\"Gestisci Connessioni SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connessione/i\"],\"other\":[\"#\",\" connessione/i\"]}]],\"rn2_2V\":[\"Rimuovi filtro\"],\"roABNH\":[\"Nessuna cronologia query\"],\"rtir7c\":[\"sconosciuto\"],\"ru0-2W\":[\"Nessuna connessione attiva\"],\"rvDPWO\":[\"Scostamento Stima\"],\"rwWjWg\":[\"Note di Rilascio\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Testa Connessione\"],\"sBOaim\":[\"Il file di configurazione è stato salvato. Riavviare ora per applicare le modifiche?\"],\"sCyv9B\":[\"Aggiorna Modelli\"],\"sSUqe4\":[\"Elimina\"],\"sUBkgN\":[\"Generazione SQL in corso...\"],\"sZZG3d\":[\"Sei sicuro di voler importare \\\"\",[\"0\"],\"\\\"?\\nQuesto potrebbe sovrascrivere i dati esistenti.\"],\"sbK5ck\":[\"Cerca nella cronologia...\"],\"sq_bS6\":[\"Al Delete\"],\"suW7-E\":[\"Timeout di connessione in millisecondi.\"],\"suqtBX\":[\"Esc per chiudere\"],\"t-R8-P\":[\"Esecuzione\"],\"t1OfVY\":[[\"totalLibraries\"],\" librerie\"],\"t2TMzs\":[\"Chiudi scheda\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Seleziona una tabella...\"],\"t7KRl1\":[\"Log di ogni chiamata MCP e delle query in attesa di approvazione. Tutto è salvato localmente.\"],\"t9NJIk\":[\"Rilevate operazioni con scansione pesante\"],\"tB7xof\":[\"Operazioni Temp o Sort\"],\"tBBXTO\":[\"Intervallo di Ping\"],\"tFrT3w\":[\"Aggiungi questo al file di configurazione del client manualmente se l'installazione automatica fallisce.\"],\"tJ7UbA\":[\"analizza selezionata\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Dividi Orizzontale\"],\"tQhW-D\":[\"Impostazioni Log\"],\"tT-BQX\":[\"Installati\"],\"tXFGEx\":[\"Nessuna connessione Kubernetes salvata. Clicca \\\"Aggiungi\\\" per crearne una.\"],\"tXLz_8\":[\"Elimina\"],\"tXpRby\":[\"Griglia dati\"],\"tbysEk\":[\"Azioni\"],\"tdta9X\":[\"Pagina \",[\"0\"]],\"tfDRzk\":[\"Salva\"],\"tfEioV\":[\"Esegui tutte le celle SQL dall'alto in basso\"],\"tiAIaJ\":[\"Password SSH mancante. Per favore reinseriscila.\"],\"tk22BR\":[\"Incolla dati strutturati e rivedi lo schema prima dell'importazione\"],\"tst44n\":[\"Eventi\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"File SQL eseguito con successo\"],\"u6QeR6\":[\"Riavvia Ora\"],\"uAQUqI\":[\"Stato\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc per chiudere\"],\"uFViPK\":[\"Nessuna connessione SSH disponibile\"],\"uHUuhp\":[\"Analizza questa query\"],\"uHfFzS\":[\"Dimensione Font dell'Editor\"],\"uJ_3K5\":[\"Eliminare il notebook \\\"\",[\"0\"],\"\\\"? L'operazione non è reversibile.\"],\"uKaNJ3\":[\"Apri nell'editor JSON\"],\"uQBwTo\":[\"Schemi\"],\"ub54ff\":[\"Centro Plugin\"],\"ufFyBs\":[\"Database esportato con successo\"],\"upNmR2\":[\"Apri Barra Laterale\"],\"upwIY4\":[\"Definizione Vista\"],\"utMia3\":[\"Deseleziona Tutto\"],\"uyNaJg\":[\"1 elemento\"],\"v61dnS\":[\"Inserisci il nome esatto del modello per il tuo provider compatibile OpenAI.\"],\"v6oeyr\":[\"Installato\"],\"v75DGg\":[\"Sfoglia file\"],\"v99dO4\":[\"Chiave Primaria\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query trovate\"],\"other\":[\"#\",\" query trovate\"]}]],\"vCSBPD\":[\"Aggiungi filtro\"],\"vH7uJj\":[\"Ordina per…\"],\"vUOA1-\":[\"Cerca modelli...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE include righe reali, tempi, cicli e contatori buffer quando disponibili.\"],\"vXIe7J\":[\"Lingua\"],\"vYf4Jm\":[\"Inserisci una funzione SQL completa (es: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Preferito\"],\"vditm4\":[\"Piano Query\"],\"vks_ls\":[\"Chiudi altre schede\"],\"vnAnIp\":[\"Modello \",[\"0\"],\" non trovato in \",[\"1\"],\". Potrebbe non funzionare correttamente.\"],\"vqoN5u\":[\"Struttura\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Esplora\"],\"vujQJ5\":[\"Localizzazione\"],\"vvJPVL\":[\"Mostra panoramica\"],\"vwI5S4\":[\"Successo\"],\"vzH-7Z\":[\"Spiega\"],\"w7QmD_\":[\"Inserisci prompt di sistema...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Tempo trascorso\"],\"wCfv2R\":[\"Aggiungi Connessione\"],\"wGfc86\":[\"Cancella Tutta la Cronologia\"],\"wGwNv4\":[\"Database attivo\"],\"wJJ-Wy\":[\"Installazione in corso...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffer Hit\"],\"wQn-RM\":[\"Aggiungi Colonna\"],\"wRXcR2\":[\"In uso l'icona predefinita del driver.\"],\"wTOwz-\":[\"Applicato\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Importa dagli Appunti\"],\"w_bY7R\":[\"Log\"],\"wc_8bA\":[\"In attesa\"],\"wckWOP\":[\"Gestisci\"],\"wdYcKH\":[\"Tab Aperte\"],\"wja8aL\":[\"Senza nome\"],\"wkOAzk\":[\"Nessun notebook corrisponde alla ricerca.\"],\"wp49Ao\":[\"Impossibile processare gli inserimenti: \"],\"wqG2hQ\":[\"Salta (non importare)\"],\"wwrAsK\":[\"Per favore compila tutti i campi obbligatori\"],\"wwu18a\":[\"Icona\"],\"x2fr_j\":[\"Grafo\"],\"xANKBj\":[\"Funzioni\"],\"xBwjck\":[\"È necessario un riavvio per applicare le modifiche.\"],\"xDAtGP\":[\"Messaggio\"],\"xECY01\":[\"Procedure\"],\"xGPNgZ\":[\"Personalizzazione Prompt\"],\"xNgtS-\":[\"Nessuna vista trovata\"],\"xOPa1b\":[\"La porta deve essere compresa tra 1 e 65535\"],\"xY9s5E\":[\"Timeout\"],\"xaVUr1\":[\"La volpe marrone salta sopra il cane pigro\"],\"xbvTzL\":[\"Percorso File\"],\"xlew5F\":[\"Svuota\"],\"xmNyKz\":[\"Test in corso...\"],\"xtuh6D\":[\"Espandi Explorer\"],\"y-Zdqj\":[\"Scegli un contesto...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Apri visualizzatore JSON\"],\"yQXjG5\":[\"Deseleziona Tutti\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Ieri\"],\"ygCKqB\":[\"Stop\"],\"ykCc6r\":[\"Database cambiato (cella \",[\"n\"],\")\"],\"ynVMSc\":[\"Seleziona tutte\"],\"ytdz1d\":[\"L'AI vuole eseguire una scrittura sul database\"],\"yyhzur\":[\"Crea tabella\"],\"yz7wBu\":[\"Chiudi\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"Password SSH\"],\"z4oF5T\":[\"Esporta Database\"],\"z5kV0h\":[\"Connessioni\"],\"zBTMzx\":[\"Anteprima\"],\"zCaAKs\":[\"Errore Aggiornamento\"],\"zDAakK\":[\"Impossibile visualizzare il diagramma senza un ID connessione.\"],\"zGe21h\":[\"Questa chiave è caricata da una variabile d'ambiente\"],\"zGfL5t\":[\"valore\"],\"zL6-4A\":[\"Nessun processo plugin in esecuzione\"],\"zLZhCi\":[\"Nuova community Discord!\"],\"zLlCou\":[\"Copia nome colonna\"],\"zNEL34\":[\"Unisciti alla Community\"],\"zNgTlV\":[\"Chiudi schede a destra\"],\"zQz55p\":[\"Ispeziona struttura\"],\"zR0FfH\":[\"Esportato in \",[\"target\"]],\"zRZeOc\":[\"Cerca tabelle, viste, routine, trigger...\"],\"zUNMsr\":[\"Chiave SSH\"],\"zXMRzb\":[\"Porta SSH\"],\"zZgoXr\":[\"Nessuna tabella trovata\"],\"zaWbms\":[\"Annulla Modifiche\"],\"zgClmU\":[\"Installa Config\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Inserisci valore...\"],\"zvzN4C\":[\"Imposta come attiva\"],\"zzDlyQ\":[\"Successo\"],\"zzMxrp\":[\"Modifica config.json\"],\"zz_Wd_\":[\"Modalità\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/ja/messages.po b/src/locales/ja/messages.po index 5d5f181c..a411c736 100644 --- a/src/locales/ja/messages.po +++ b/src/locales/ja/messages.po @@ -1207,12 +1207,22 @@ msgid "Create a new database view" msgstr "新しいデータベースビューを作成します" #: src/components/modals/CreateForeignKeyModal.tsx -msgctxt "createFk" +msgctxt "createFk.create" msgid "Create Foreign Key" msgstr "外部キーを作成" +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk.title" +msgid "Create Foreign Key" +msgstr "外部キーを作成" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex.create" +msgid "Create Index" +msgstr "インデックスを作成" + #: src/components/modals/CreateIndexModal.tsx -msgctxt "createIndex" +msgctxt "createIndex.title" msgid "Create Index" msgstr "インデックスを作成" @@ -1258,7 +1268,12 @@ msgid "Create Trigger" msgstr "トリガーを作成" #: src/components/modals/ViewEditorModal.tsx -msgctxt "views" +msgctxt "views.create" +msgid "Create View" +msgstr "ビューを作成" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views.createView" msgid "Create View" msgstr "ビューを作成" @@ -1639,8 +1654,12 @@ msgstr "ビューを削除" #: src/components/layout/ExplorerSidebar.tsx #: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgctxt "dump.dumpDatabase" +msgid "Dump Database" +msgstr "データベースをダンプ" + #: src/components/modals/DumpDatabaseModal.tsx -msgctxt "dump" +msgctxt "dump.title" msgid "Dump Database" msgstr "データベースをダンプ" @@ -1904,17 +1923,25 @@ msgid "Error" msgstr "エラー" #: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings.plugins.installError.details" +msgid "Error Details" +msgstr "エラーの詳細" + #: src/components/modals/PluginStartErrorModal.tsx -msgctxt "settings" +msgctxt "settings.plugins.startError.details" msgid "Error Details" msgstr "エラーの詳細" #: src/components/modals/QuickNavigatorModal.tsx -#: src/components/modals/TabSwitcherModal.tsx -msgctxt "editor" +msgctxt "editor.quickNavigator.escHint" msgid "Esc to close" msgstr "Escで閉じる" +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor.tabSwitcher.escHint" +msgid "Esc to close" +msgstr "Esc で閉じる" + #: src/components/modals/visual-explain/ExplainNodeDetails.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx @@ -1941,7 +1968,12 @@ msgid "Events" msgstr "イベント" #: src/components/settings/ai-activity/AiActivitySessionsTab.tsx -msgctxt "aiActivity" +msgctxt "aiActivity.events" +msgid "Events" +msgstr "イベント" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity.sort.eventCount" msgid "Events" msgstr "イベント" @@ -2074,7 +2106,12 @@ msgid "Export as Notebook" msgstr "ノートブックとしてエクスポート" #: src/pages/Connections.tsx -msgctxt "connections" +msgctxt "connections.export" +msgid "Export Connections" +msgstr "接続をエクスポート" + +#: src/pages/Connections.tsx +msgctxt "connections.exportTitle" msgid "Export Connections" msgstr "接続をエクスポート" @@ -2639,7 +2676,17 @@ msgid "Installed" msgstr "インストール済み" #: src/components/settings/PluginsTab.tsx -msgctxt "settings" +msgctxt "settings.plugins.filterInstalled" +msgid "Installed" +msgstr "インストール済み" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installed" +msgid "Installed" +msgstr "インストール済み" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installedMetric" msgid "Installed" msgstr "インストール済み" @@ -4005,9 +4052,13 @@ msgstr "既存テーブルに行が追加されます" msgid "Run" msgstr "実行" -#: src/components/modals/QuerySelectionModal.tsx #: src/components/notebook/NotebookToolbar.tsx -msgctxt "editor" +msgctxt "editor.notebook.runAll" +msgid "Run All" +msgstr "すべて実行" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor.querySelection.runAll" msgid "Run All" msgstr "すべて実行" @@ -4736,10 +4787,14 @@ msgid "table" msgstr "テーブル" #: src/components/modals/visual-explain/ExplainNodeDetails.tsx -#: src/components/modals/visual-explain/ExplainSummaryBar.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx -msgctxt "editor" +msgctxt "editor.visualExplain.relation" +msgid "Table" +msgstr "テーブル" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgctxt "editor.visualExplain.tableView" msgid "Table" msgstr "テーブル" @@ -5188,10 +5243,15 @@ msgid "View created successfully" msgstr "ビューを正常に作成しました" #: src/components/layout/ExplorerSidebar.tsx -msgctxt "sidebar" +msgctxt "sidebar.viewDefinition" msgid "View Definition" msgstr "ビュー定義" +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar.viewTriggerDefinition" +msgid "View Definition" +msgstr "定義を表示" + #: src/components/modals/ViewEditorModal.tsx msgid "View Definition (SQL)" msgstr "ビュー定義 (SQL)" diff --git a/src/locales/ja/messages.ts b/src/locales/ja/messages.ts index 91f804a2..05a9cced 100644 --- a/src/locales/ja/messages.ts +++ b/src/locales/ja/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"最大履歴件数\"],\"-6AWa-\":[\"接続をインポート\"],\"-6NyRG\":[\"クライアント\"],\"-K0AvT\":[\"切断\"],\"-PLZfh\":[\"モデルの更新に失敗しました\"],\"-T5W2e\":[\"ドライバ補足\"],\"-ZgeeE\":[\"編集履歴\"],\"-aYrdc\":[\"バージョン \",[\"0\"],\" が利用可能です\"],\"-fBGXl\":[\"最高コスト\"],\"-jIQDz\":[\"セルを折りたたむ\"],\"-u1eRo\":[\"データベースなし\"],\"-yoeVU\":[\"スキーマを読み込み中...\"],\"-zy2Nq\":[\"タイプ\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"承認 ID\"],\"0E5-gF\":[\"この接続を削除してもよろしいですか?\"],\"0HCubq\":[\"展開\"],\"0Kmdvy\":[\"カスタムフォント\"],\"0Nj13E\":[\"SQL を生成\"],\"0ROgz5\":[\"JSON を入力...\"],\"0SY9sU\":[\"データベースからの切断に失敗しました\"],\"0b3kL9\":[\"データベースを選択\"],\"0caMy7\":[\"履歴\"],\"0mx5ow\":[\"クエリ\"],\"0n9BtL\":[\"プレビュー\"],\"0pHB9N\":[\"table.column 形式でコピー\"],\"0sQzZK\":[\"データベースをフィルター...\"],\"0uPP9X\":[\"FK 名 (任意)\"],\"0wxuek\":[\"現在のバージョン\"],\"0x09Aw\":[\"エラー時に停止を切り替え\"],\"0yBP6v\":[\"開発をサポート\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"0yVAoD\":[\"行数をカウント\"],\"0zxJ87\":[\"ログがありません\"],\"1-ETbn\":[\"ビジュアル Explain\"],\"1133_z\":[\"ビューを編集\"],\"11fGJ6\":[\"クエリ\"],\"13hIUA\":[[\"0\"],\" API キー\"],\"14qNWF\":[\"SSH 接続を選択\"],\"17qHRP\":[\"新規接続\"],\"1Dn6bg\":[\"クリップボードからインポート\"],\"1Dnd0I\":[\"行数を読み込む\"],\"1FjTLW\":[\"例: python3\"],\"1GOvbo\":[\"Ollama に接続しました (\",[\"0\"],\" 個のモデルを検出)\"],\"1I6UoR\":[\"ビュー\"],\"1U7hS5\":[\"長さ\"],\"1UTmg5\":[\"最大許容パケットサイズ\"],\"1b7aSU\":[\"エディタのフォントファミリー\"],\"1ekzlY\":[\"プラグインプロセス\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"テーマ選択\"],\"1xVZkL\":[\"モデルが見つかりません\"],\"26Joci\":[[\"0\"],\" 行を取得しました\"],\"2Bf-Qe\":[\"新規コンソール\"],\"2CrSmP\":[\"Tabularis の成長をサポート\"],\"2D9F8_\":[\"接続の複製に失敗しました\"],\"2Eoi_a\":[\"詳細を表示\"],\"2F4pE5\":[\"Rust ビルド・テスト\"],\"2Fsd9r\":[\"今月\"],\"2JzKXI\":[\"GENERATED に設定\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"すべて選択\"],\"2SO5RM\":[\"このドライバーでは Kubernetes を使用できません。\"],\"2Uh5GA\":[\"Cargo エコシステム\"],\"2YylFp\":[\"新規ビジュアルクエリ\"],\"2luuSG\":[\"再試行\"],\"2wxgft\":[\"名前を変更\"],\"2yG2GC\":[\"書き込み(またはすべてのクエリ)を一時停止し、データベースに到達する前に Tabularis 内でユーザーに承認を求めます。\"],\"30-b5r\":[\"削除\"],\"31kwdN\":[\"フィルターを複製\"],\"34nxyb\":[\"トリガー\"],\"35148H\":[\"すべてのツール\"],\"3Am5DS\":[\"タブ表示\"],\"3BhBCj\":[\"イベント\"],\"3FVg9_\":[\"ローカルカラム\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"実行\"],\"3L0HCz\":[\"検索に一致するプラグインがありません。\"],\"3Nv3JV\":[\"クエリを実行中...\"],\"3TSz9S\":[\"最小化\"],\"3UW8fG\":[\"アップデートは \",[\"0\"],\" によって管理されています\"],\"3YvS-c\":[\"新規タブ\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"ノートブックセル名プロンプト\"],\"3qkggm\":[\"フルスクリーン\"],\"3rBJ1T\":[\"スキーマを表示\"],\"3xZ-xV\":[\"現在のタイムスタンプを挿入\"],\"40Gx0U\":[\"タイムゾーン\"],\"41GP4f\":[\"行を CSV としてコピーまたはエクスポートする際のデフォルト区切り文字を選択します。\"],\"42iaEi\":[\"ANALYZE なしの PostgreSQL はプランナーの推定のみを表示します。\"],\"44cXI8\":[[\"colName\"],\" を昇順で並べ替え\"],\"4AF7FO\":[\"データベースを管理\"],\"4CK17g\":[\"ビュー「\",[\"name\"],\"」を変更してもよろしいですか?\"],\"4DDaw-\":[\"少なくとも 1 つのデータベースを選択してください\"],\"4D_Nvt\":[\"グループの作成に失敗しました\"],\"4RiR6c\":[\"HTML としてエクスポート\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 個の子プロセス\"],\"other\":[\"#\",\" 個の子プロセス\"]}]],\"4VyuY3\":[\"すべてのログを消去してもよろしいですか?\"],\"4WWqS3\":[\"Toggle inline JSON tree\"],\"4cEClj\":[\"セッション\"],\"4cmfYp\":[\"行を複製\"],\"4lIZTB\":[\"フロントエンド開発依存\"],\"4oYjvJ\":[\"クエリを検索…\"],\"4tMxW4\":[\"関連レコードをプレビュー\"],\"4yJcjm\":[\"タイプを選択...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"フィルターパネルを閉じる (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"セミコロン (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のイベント\"],\"other\":[\"#\",\" 件のイベント\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"リスト表示\"],\"5To6Z6\":[\"クエリをコピー\"],\"5gqNQl\":[\"グリッド表示\"],\"5igIzr\":[\"インポートをキャンセルしました\"],\"5nTIup\":[\"ビューを編集中: \",[\"name\"]],\"66bEht\":[\"プロジェクトの状態\"],\"6PIJVc\":[\"起動\"],\"6QvP0l\":[\"JSON としてエクスポート\"],\"6W41Xq\":[\"タスクマネージャ\"],\"6WngBH\":[\"NULL に設定\"],\"6YtxFj\":[\"名前\"],\"6_dCYd\":[\"概要\"],\"6gvoHP\":[\"エラーメッセージをコピー\"],\"6oCVzX\":[\"Kubernetes コンテキストは必須です\"],\"6wQO0f\":[\"データを表示\"],\"6z9W13\":[\"再起動\"],\"71agNy\":[\"AI で未命名セルの名前を生成\"],\"74J3FG\":[\"初期バージョン\"],\"75BWdo\":[\"トリガー定義の読み込みに失敗しました: \"],\"76d3Uz\":[\"イベント\"],\"76gPWk\":[\"了解\"],\"77nSMU\":[\"AI アクティビティ履歴をすべて削除しますか?この操作は元に戻せません。\"],\"79UVYW\":[\"Escで閉じる\"],\"7ABmyQ\":[\"再試行\"],\"7Ap0JP\":[[\"0\"],\" 件中 \",[\"activeFilterCount\"],\" 件が有効\"],\"7E864M\":[\"データベースの種類\"],\"7FqaG1\":[\"AI による EXPLAIN クエリ計画分析の指示をカスタマイズします。\",[\"LANGUAGE\"],\" を出力言語に使用します。\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"混在タイプを検出、TEXT にデフォルト設定\"],\"7RSQQd\":[\"パスワードをキーチェーンに保存\"],\"7VpPHA\":[\"確定\"],\"7e7bPs\":[\"トリガー本体 (SQL)\"],\"7eRaA9\":[\"トリガーを削除\"],\"7l15X4\":[\"失敗\"],\"7sMeHQ\":[\"キー\"],\"7sNhEz\":[\"ユーザー名\"],\"7tATh2\":[\"クエリを実行\"],\"7yb4gk\":[\"失敗: \"],\"8-4V8D\":[\"テーブル\"],\"82G-l5\":[\"Model Context Protocol (MCP) を使うと、AI アシスタント (Claude など) がローカルツールに接続できます。Tabularis は MCP サーバーを公開しており、AI がデータベーススキーマを読み取り、クエリを安全に実行できるようにします。\"],\"83VjWE\":[\"新規ノートブック\"],\"86IgoU\":[\"クエリを実行 (エディタ内)\"],\"86fCgf\":[\"AI によるクエリ結果タブ名生成の指示をカスタマイズします。SQL クエリがユーザーメッセージとして送信されます。\"],\"87a_t_\":[\"ラベル\"],\"8CWirf\":[\"MCP サーバー\"],\"8S8aIX\":[\"接続ヘルスチェック\"],\"8TMaZI\":[\"タイムスタンプ\"],\"8Tg_JR\":[\"カスタム\"],\"8UFKYr\":[\"実行するクエリを選択\"],\"8VKSGV\":[\"SQL を生成\"],\"8Wjy6z\":[\"左側のタブを閉じる\"],\"8ZsakT\":[\"パスワード\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL エディタ\"],\"8bRgTe\":[\"AI プロバイダが未設定です。設定 > AI に移動してください。\"],\"8c_W0h\":[\"以前のバージョン\"],\"8guEQP\":[\"ビューを更新\"],\"8lm5qE\":[\"SQLite の EXPLAIN QUERY PLAN は軽量で、主に構造情報のみを提供します。\"],\"8q_sOc\":[\"削除\"],\"8t-akp\":[\"先頭 \",[\"MAX_PREVIEW_ROWS\"],\" 行を表示中\"],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"接続名\"],\"91gnWY\":[\"ログをエクスポート\"],\"91rtHL\":[\"ビューを新規作成\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"新規グループ\"],\"9DOfTQ\":[\"トリガーを編集中: \",[\"name\"]],\"9JdjEN\":[\"ビューを正常に更新しました\"],\"9NzDFn\":[\"アプリ起動時にウェルカム画面を表示します。\"],\"9OoUS3\":[\"新しい SSH 接続を作成\"],\"9QGRD5\":[\"対象カラム\"],\"9QTny9\":[\"クエリが失敗しました。\"],\"9S-fyV\":[\"プリフライト実行計画\"],\"9SJ_Sx\":[\"システムリソース\"],\"9UQ730\":[\"複製\"],\"9X6cky\":[\"いいえ\"],\"9XUV5V\":[\"クリップボードにデータが見つかりません\"],\"9mMU1R\":[\"時間\"],\"9mvFo_\":[\"時刻\"],\"9npOH9\":[\"ファイルを開く\"],\"9uI_rE\":[\"元に戻す\"],\"9xUjzm\":[\"すべて選択\"],\"9y_02p\":[\"コミュニティとの交流、サポート、機能提案\"],\"A1pPcI\":[\"SSH ホスト\"],\"A1taO8\":[\"Search\"],\"A6C0pv\":[\"総コスト\"],\"A7WG0p\":[\"プラグインが無効\"],\"A7yRz3\":[\"ビュー定義は必須です\"],\"A9Uyp6\":[\"インポートに失敗しました: \"],\"ABEd-z\":[\"Tabularis のアップデートにはパッケージマネージャを使用してください。\"],\"AMdgKV\":[\"実行計画分析プロンプト\"],\"ANSTMe\":[\"現在のプランサマリに大きな問題は検出されませんでした。\"],\"ANzIr7\":[\"クエリ履歴\"],\"AOnaU7\":[\"スキップ\"],\"AVlZoM\":[\"環境変数\"],\"AXTVsE\":[\"完全検証\"],\"AXdRYR\":[\"現在のログ\"],\"Aa-YkQ\":[\"ノートブックをエクスポート\"],\"Ai2U7L\":[\"ホスト\"],\"AidayG\":[\"レベルでフィルター\"],\"AlPiMN\":[\"クリックでページ移動\"],\"An-1rA\":[\"取得行数\"],\"AnV8j-\":[\"カラムを変更\"],\"AvEr_L\":[\"新規コンソール\"],\"AvYbUL\":[\"GitHub でスター\"],\"Aw_eOs\":[\"Tabularis ≥ \",[\"minVersion\"],\" が必要です\"],\"AxPAXW\":[\"結果が見つかりません\"],\"B0mJGb\":[\"生出力\"],\"B1c58n\":[\"カラムを変更\"],\"B3toQF\":[\"オブジェクト\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"接続名は必須です\"],\"BAVvWJ\":[\"ER 図\"],\"BBtVak\":[\"すべて折りたたむ\"],\"BEVzjL\":[\"インポートに失敗しました\"],\"BFxXo5\":[\"すべて実行\"],\"BJe2lZ\":[\"サイドバーを切り替え\"],\"BK3WCj\":[\"レジストリの読み込みに失敗しました\"],\"BKbO3i\":[\"ノートブックを編集\"],\"BMB51y\":[\"コンソールで実行\"],\"BNW_Z4\":[\"例: active_users, order_summary\"],\"BUO_JN\":[\"クエリをコピー\"],\"BYkhHY\":[\"起動時にアップデートを確認\"],\"BbHofF\":[\"接続をエクスポート\"],\"BeSg6-\":[\"デバッグ用にアプリケーションログをメモリに収集します\"],\"BgAyQH\":[\"並べ替えを解除\"],\"BinTJI\":[\"npm エコシステム\"],\"BkFson\":[\"自動ページング\"],\"Bpglf1\":[\"上に移動\"],\"BrGo6h\":[\"ノートブックを検索\"],\"BxiAN_\":[\"クエリを削除\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"フロントエンド依存\"],\"CE-M2e\":[\"情報\"],\"CHIyL8\":[\"フィルターなし —\"],\"CJnUoU\":[\"トリガーを更新\"],\"CLWWRV\":[\"ダウンロード中...\"],\"CUxwxn\":[\"すべてのテーブルを表示\"],\"CWMXbw\":[\"のプロセスを強制的に停止します。このプラグインを使用しているアクティブなデータベース接続は、プラグインが再起動されるまで動作しなくなります。\"],\"CZt6BX\":[\"手動設定\"],\"Ca8ixZ\":[\"削除\"],\"CbJBQS\":[\"更新に失敗しました: \"],\"Cdz-YU\":[\"スタック表示\"],\"CpeQf9\":[\"ループ\"],\"D2wXBw\":[\"自動インクリメント\"],\"D6Ql0c\":[\"生成と説明に使用するモデルを選択します。\"],\"DB8zMK\":[\"適用\"],\"DDXf5E\":[\"SQL 関数\"],\"DEwnwi\":[\"削除\"],\"DNTvdl\":[\"エディタで開く\"],\"DPc2P9\":[\"セルを削除\"],\"DUY8Ba\":[\"破壊的変更\"],\"DVnBSM\":[\"行の高さ\"],\"Dd7YLj\":[\"あとで\"],\"Deej3j\":[\"無効な JSON\"],\"DfKhk_\":[\"更新\"],\"DiRiTz\":[\"パッケージページを開く\"],\"DlRHAD\":[\"EXPLAIN を実行中...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のエラー\"],\"other\":[\"#\",\" 件のエラー\"]}]],\"Dvdihe\":[[\"0\"],\" 上 — 実行前に確認して判断してください。\"],\"DzFLzw\":[\"はい\"],\"E-JUtQ\":[\"承認ゲート\"],\"E0kcnZ\":[\"一般\"],\"E2mje_\":[\"説明するクエリを選択\"],\"EDieyg\":[\"この SSH 接続を削除してもよろしいですか?\"],\"EHZxPj\":[\"Expand\"],\"EL4oDO\":[\"新しいバージョンが利用可能\"],\"EPi4gT\":[[\"field\"],\" で並び替え\"],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"未分類\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"不明\"],\"EhADgB\":[\"カラムを削除\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"最新の状態です\"],\"Em6JFd\":[\"行数をカウント\"],\"EnGiqG\":[[\"0\"],\"件\"],\"Ew1n5z\":[\"プラグインを検索…\"],\"F18WP3\":[\"パラメータ\"],\"F3uc1x\":[\"エクスポートされたファイルには、データベースおよび SSH のパスワードが平文で含まれます。安全な場所に保管してください。\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"F6pfE9\":[\"アクティブ\"],\"F8tXg7\":[\"データプレビュー\"],\"F9-6yK\":[\"デフォルトのコピー形式\"],\"F9lxfG\":[\"削除\"],\"F9nsa2\":[\"履歴ファイルが破損していたためバックアップに移動しました。新しいクエリは通常どおり記録されます。バックアップ ファイル:\"],\"FF_oap\":[\"デフォルト\"],\"FK8rlP\":[\"SSH 接続が設定されていません\"],\"FMRcH8\":[\"最初の行をヘッダーとして扱う\"],\"FNvDMc\":[\"今週\"],\"FQe1FI\":[\"推定行数\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"警告\"],\"FZg3wM\":[\"操作\"],\"Fa_cky\":[\"スキーマ: \",[\"tableName\"]],\"FpEL5o\":[\"SQL エディタに独立したテーマを選択するか、アプリのテーマと同期するかを選びます。\"],\"FsvZQL\":[\"セル \",[\"n\"],\" を編集\"],\"FtwKL9\":[\"タブを切り替え\"],\"FznI3z\":[\"外部キー「\",[\"name\"],\"」を削除しますか?\"],\"G6W8j1\":[\"プレビューに失敗しました: \"],\"G8Q5Zq\":[\"ネームスペースは必須です\"],\"GAohqx\":[\"カラムを削除\"],\"GJR99u\":[\"カラムの削除に失敗しました: \"],\"GKfzzM\":[\"接続を選択...\"],\"GS-Mus\":[\"エクスポート\"],\"GUaLUq\":[\"スキーマの読み込みに失敗しました: \"],\"GXP-Iw\":[\"SQL セルを追加\"],\"Gj1mLb\":[\"セルを並べ替え\"],\"GlbqG2\":[\"ドライバーの初期設定に戻す\"],\"Gs5AlY\":[\"開く\"],\"GtmO8_\":[\"開始\"],\"GxkJXS\":[\"アップロード中...\"],\"H-o4D2\":[\"新規カラムを作成\"],\"H2B-KW\":[\"Ctrl+C / Cmd+C で行をコピーする際のデフォルト形式を選択します。\"],\"H3oH0g\":[\"やり直す\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"折りたたむ\"],\"H9P8CD\":[\"最初のフィルターを追加\"],\"HAQlGl\":[\"AI アクティビティ\"],\"HKNZrs\":[\"インデックス条件\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"#\",\" 行を削除\"],\"other\":[\"#\",\" 行を削除\"]}]],\"HPuCiP\":[\"フォルダパス\"],\"HUs1R3\":[\"この接続に対して開いているタブはありません。\"],\"HV4Isp\":[\"SSH パスワードを入力\"],\"HVC8Hh\":[\"クリップボードにコピーしました\"],\"HWEpq8\":[\"ディスク書き込み/秒\"],\"HY4nP5\":[\"インライン\"],\"HcmoWv\":[\"ビューの保存に失敗しました: \"],\"He8v1Y\":[\"すべて適用から除外\"],\"HehHP1\":[\"デフォルトレイアウト\"],\"HilYn4\":[\"このノートブックは空です。セルを追加して始めましょう。\"],\"HjxVK_\":[\"簡易接続テスト\"],\"HmMnRx\":[\"WKT モード\"],\"HoKCiI\":[\"インストール後にアプリは自動的に再起動します\"],\"HpK_8d\":[\"再読み込み\"],\"Hpi4Jm\":[\"今すぐ参加\"],\"HuA3RU\":[\"タブ\"],\"I128p7\":[\"パイプ (|)\"],\"I3AgqA\":[\"SSH をインラインで設定\"],\"I5VBsr\":[\"アプリと同じ\"],\"I8yrPb\":[\"テーブルを置換\"],\"I92BdB\":[\"グループから削除\"],\"I92fr4\":[\"あとで通知\"],\"I99Miw\":[\"コスト\"],\"IETZIR\":[\"セル名を編集\"],\"IG9wzA\":[\"行の挿入に失敗しました: \"],\"ILleOG\":[\"リソースタイプは \\\"service\\\" または \\\"pod\\\" である必要があります\"],\"IQ3gAw\":[\"ファイルをアップロード\"],\"IUwGEM\":[\"変更を保存\"],\"IUwmLq\":[\"package.json および src-tauri/Cargo.toml に宣言された直接依存です。\"],\"IVrBTT\":[\"オープンソースライブラリ\"],\"I_43p6\":[\"セーフティ\"],\"Iaizf4\":[\"外観\"],\"Il3FBB\":[\"構造化フィルターパネルを切り替え\"],\"IniZRK\":[\"ダウンロード不可 - プレビューのみ読み込み済み\"],\"Isaozb\":[\"確認・調整\"],\"J17_9Z\":[\"トリガーの保存に失敗しました: \"],\"J2Cb95\":[\"このプラグインを経由するアクティブなクエリや接続は中断されます。\"],\"J6v1s_\":[\"デフォルトモデル\"],\"JE-DVk\":[\"インタプリタ\"],\"JEGlfK\":[\"開始\"],\"JKDPqP\":[\"先にコンテキストを選択してください\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"SSH トンネルを使用\"],\"JRz8tw\":[\"MySQL および MariaDB では、サポートされた EXPLAIN ANALYZE または ANALYZE FORMAT バリアントでのみ実測値が得られます。\"],\"JUICth\":[\"PNG、JPG、WebP または SVG · 最大 512 KB\"],\"JY5Oyv\":[\"データベース\"],\"JlFRIB\":[\"接続後に MySQL に送信するセッションタイムゾーンです。\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"拒否\"],\"K3H9p5\":[\"未設定\"],\"K5Dgu_\":[\"データベース\"],\"K8IGKf\":[\"認証方式\"],\"KAYNSW\":[\"メモリに保持するログの件数 (1〜10000)\"],\"KHTGbr\":[\"プリフライト EXPLAIN\"],\"KHvda8\":[\"NOT NULL\"],\"KJKNaZ\":[\"`column` 形式でコピー\"],\"KM5Kc8\":[\"少なくとも 1 つのカラムを選択してください\"],\"KSCnVQ\":[\"種別\"],\"KUjOb9\":[\"実行中\"],\"KXBdwy\":[\"ルーチンを更新\"],\"KXNyX7\":[\"DEFAULT に設定\"],\"Kd70-v\":[\"クリップボードからインポート...\"],\"KhI4oS\":[[\"0\"],\" で参照行を開く\"],\"KhgrNu\":[\"MCP サーバー連携\"],\"KirERL\":[\"タイムアウト\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"インデックスの削除に失敗しました: \"],\"KzeARD\":[\"テーブルの削除に失敗しました: \"],\"L-rMC9\":[\"デフォルトに戻す\"],\"L3HXkQ\":[\"バグ修正\"],\"LCZ7Dy\":[\"名前をコピー\"],\"LFDf6p\":[\"新しいデータベーストリガーを作成します\"],\"LK1m4W\":[\"インデックス\"],\"LMeAoR\":[\"行\"],\"LPCdc-\":[\"クエリタブ名プロンプト\"],\"LPFmga\":[\"すべて適用に含める\"],\"LYzbQ2\":[\"ツール\"],\"Lbis_V\":[\"クイックナビゲーター\"],\"Lcpbe2\":[\"プラグインプロセスを起動できませんでした。下記のエラー詳細を確認してください。\"],\"LhUHHO\":[\"生成 SQL プレビュー\"],\"LihabZ\":[\"EXPLAIN は DML ステートメント (SELECT, INSERT, UPDATE, DELETE) のみサポートされます。CREATE、DROP、ALTER などの DDL は説明できません。\"],\"LnT0hQ\":[\"カラムを追加\"],\"LvutiO\":[\"AI 提案\"],\"M-rHQO\":[\"フルスクリーンを終了\"],\"M0XJba\":[\"この接続のクエリ履歴をすべて削除してもよろしいですか?\"],\"M1co_O\":[\"設定済み\"],\"M73whl\":[\"コンテキスト\"],\"MDa5o0\":[\"例: before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"すべて表示\"],\"MXdOwj\":[\"接続を分離\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"K8s 接続を選択\"],\"Mc1tjS\":[\"ANALYZE を有効にすると、実行行数、時間、ループ、バッファを確認できます。\"],\"Mm4p0T\":[\"+\",[\"0\"],\" 行以上\"],\"Mp0jQ_\":[\"このドライバはテーブル作成時のみ主キーをサポートします\"],\"MqpZwN\":[\"Tabularis プロセス\"],\"MxIx43\":[\"↑↓で移動、Enterで開く\"],\"MygtgQ\":[\"Markdown セルを追加\"],\"N40H-G\":[\"すべて\"],\"N5UQxq\":[\"ポート \",[\"0\"],\" で Ollama を検出できませんでした。起動していますか?\"],\"N6GBcC\":[\"削除の確認\"],\"N6aqHp\":[\"実行クエリ\"],\"N9_S15\":[\"新規テーブルが作成されます\"],\"NBdMa1\":[\"最も遅いステップ\"],\"NC2AI2\":[\"長さ\"],\"NCzNnx\":[\"昇順で並び替え\"],\"NT4Ubs\":[\"カスタムキーを削除し、環境変数に戻します (存在する場合)\"],\"NUjrCO\":[\"検索に一致するお気に入りがありません\"],\"NWJrXh\":[\"トリガー SQL は必須です\"],\"NZUDnP\":[\"ツリー合計: \",[\"0\"]],\"Nc2VQn\":[\"既存に追加\"],\"NgFERn\":[\"お気に入りに追加\"],\"NktMHG\":[\"データベース名\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"テスト\"],\"Nq5QTk\":[\"N 番目を説明\"],\"O2STgu\":[\"エクスポートに失敗しました: \"],\"O8SV8O\":[\"ダウンロード中...\"],\"O9_WW6\":[\"接続\"],\"OGEsKj\":[\"すべてのセルを実行\"],\"OGWdBg\":[\"ビュー名\"],\"OHqT6w\":[\"キーの組み合わせを押してください...\"],\"OXJsaG\":[\"不正なパラメータ名です\"],\"OfhWJH\":[\"リセット\"],\"OlAl5i\":[\"すべて展開\"],\"Osn70z\":[\"デバッグ\"],\"Ou8b_n\":[\"Discord に参加\"],\"P1YGsb\":[\"SQL 生成\"],\"P2m1xb\":[\"エラー時に停止\"],\"P3Qlys\":[\"接続 ID がありません\"],\"P6Y3Yf\":[\"このコマンドをターミナルで実行し、Claude Code を再起動してください。\"],\"PCdj-c\":[\"すべて解除\"],\"PMnFt9\":[\"ディスク読み取り/秒\"],\"PQU2Va\":[\"Enter で候補を確定\"],\"PRnH8G\":[\"/ \",[\"0\"],\" 件中\"],\"PY8UF3\":[\"並列を切り替え(セル \",[\"n\"],\")\"],\"PiH3UR\":[\"コピーしました!\"],\"Pia95d\":[\"カラム名は必須です\"],\"PrElXQ\":[\"更新\"],\"PrixCC\":[\"既存テーブルに行が追加されます\"],\"Pujgbb\":[\"インポート先を設定\"],\"Pw_eQV\":[\"プラグインの起動に失敗\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"保存済みクエリはありません\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"子プロセスはありません\"],\"QCxMC0\":[\"アプリ起動時に自動で新しいバージョンを確認します\"],\"QEazml\":[\"選択を削除\"],\"QHcLEN\":[\"接続済み\"],\"QLHHFO\":[\"読み取り専用モード\"],\"QOvAW3\":[\"新機能\"],\"QULGRi\":[\"有効なクエリが見つかりません\"],\"QZwllF\":[\"参照...\"],\"QbkSr_\":[\"このクエリは EXPLAIN に対応していません。\"],\"QeHFYZ\":[\"EXPLAIN 失敗: \",[\"0\"]],\"Qll2Tb\":[\"降順\"],\"Qoq-GP\":[\"もっと読む\"],\"Qu4Hog\":[\"ノートブックを正常にインポートしました\"],\"R-A2Vd\":[\"表示するデータがありません\"],\"R0Hkb2\":[[\"0\"],\" 個のデータベースを選択中\"],\"R1nHhB\":[\"既に存在します\"],\"R2Iz3m\":[\"トリガー名\"],\"R6oBUl\":[\"コンソールに変換\"],\"R9Khdg\":[\"自動\"],\"RDjuBN\":[\"セットアップ\"],\"RF-HyV\":[\"使用する言語を選択します。「自動」はシステムの言語を使用します。\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"名前をコピー\"],\"RI-HZc\":[[\"0\"],\" キーを入力\"],\"RJrE17\":[\"ビュー「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"スターはプロジェクトを他の人に見つけてもらう助けになります\"],\"Rb3Tdm\":[\"ノートブック名\"],\"RcbKJ3\":[\"更新時\"],\"RkefFq\":[\"承認モーダルを表示する前にクエリに対して EXPLAIN を実行し、ユーザーに実行計画を表示します。\"],\"RnF_hl\":[\"プラグインレジストリを読み込み中...\"],\"Rns7_C\":[\"この操作はすぐには取り消せません\"],\"RoKRqW\":[\"利用可能なプラグイン\"],\"RphpKk\":[\"外観\"],\"Rt8sHM\":[\"ソートまたは一時処理を検出\"],\"RuSW0a\":[\"タイムスタンプの表示とエクスポートに使用するタイムゾーン。「自動」はシステムのタイムゾーンに従います。\"],\"RxzN1M\":[\"有効\"],\"S1veKH\":[\"選択を元に戻す\"],\"S5zeZU\":[\"プレビューを切り替え\"],\"S8Yqbl\":[\"挿入\"],\"SDND4q\":[\"未設定\"],\"SJRy3D\":[\"(自動生成)\"],\"SSwIjo\":[\"EMPTY に設定\"],\"SgvA_r\":[\"Run (Ctrl/Command+F5) を押してテーブルデータを読み込んでください\"],\"SlfejT\":[\"エラー\"],\"SoATkx\":[\"セルをコピー\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"エンドポイント URL\"],\"T7w5CQ\":[\"新規行の作成に失敗しました: \"],\"T9947j\":[\"値 (例: 'text' や 123)\"],\"TCizFv\":[\"タイムゾーンを検索...\"],\"TI33l7\":[\"垂直レイアウトに切り替え\"],\"TK5oex\":[\"プロンプトを保存\"],\"TKQ7K-\":[\"インストール\"],\"TKZreP\":[\"必須\"],\"TMLAx2\":[\"必須\"],\"TO08JI\":[\"外部キー\"],\"TQloo1\":[\"外部キーを作成\"],\"TVKqvO\":[\"行を編集\"],\"TYSdQ3\":[\"SELECTクエリを実行\"],\"TfDFHS\":[\"エディタ内の長い行を横スクロールせず折り返します。\"],\"Tibfjs\":[\"保存された接続がありません — 下で作成してください\"],\"Tj36Dr\":[\"デフォルトに戻す\"],\"Tjg925\":[\"トリガー定義を読み込み中...\"],\"TlZ7Ul\":[\"クエリをロック\"],\"TpwXyg\":[\"タイミングが欠落している場合、サーバーは推定のみのプランを返している可能性があります。\"],\"Tw2M1h\":[\"インストール失敗\"],\"Ty-rm9\":[\"SSH 接続\"],\"Tz0i8g\":[\"設定\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes 接続\"],\"U4uzyV\":[\"新機能\"],\"U8W7sX\":[\"トリガー定義の取得に失敗しました: \"],\"UB112k\":[\"セルが失敗したら実行を停止します\"],\"UCQiqt\":[[\"0\"],\" に対して\"],\"UECR2b\":[[\"0\"],\" が \",[\"1\"],\" 上 — 実行前に確認して判断してください。\"],\"UI85PB\":[\"条件に一致するトリガーがありません\"],\"UNKlAy\":[[\"clientName\"],\" の設定が正常にインストールされました。変更を反映するにはアプリを再起動してください。\"],\"URmyfc\":[\"詳細\"],\"UWQBvp\":[\"SQLテンプレートを生成\"],\"UawTKZ\":[\"任意。このプラグインの実行に使用する実行ファイルを指定します (例: macOS/Linux では python3、Windows では python またはフルパス)。空欄の場合はデフォルトが使用されます。\"],\"Ub8sf5\":[\"SQLite は ALTER TABLE による FK 削除をサポートしていません。\"],\"UbbJ8j\":[\"選択肢が見つかりません\"],\"Ubs68g\":[\"一般\"],\"UftN8J\":[\"これらの接続は MCP からの書き込みを拒否します。他の接続は通常通り動作します。\"],\"UnQNah\":[\"テーブル「\",[\"tableName\"],\"」のカラム「\",[\"0\"],\"」を削除してもよろしいですか?\\n\\n警告: このカラムのすべてのデータが完全に削除されます。この操作は取り消せません。\"],\"UncTTh\":[\"プロセスツリー全体の RSS 合計 — 共有メモリを重複して計算している可能性があります\"],\"UpjgFm\":[\"パラメータを変更\"],\"UsAnu1\":[\"ANALYZE はクエリを実行します。データを変更するステートメントでは注意して使用してください。\"],\"UxKoFf\":[\"ナビゲーション\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"タブサイズ\"],\"UzWGWO\":[\"SQL WHERE 入力に切り替え\"],\"V-chk5\":[\"アクティブな接続の生存確認を行う間隔です。0 にすると無効になります。\"],\"V-pw1j\":[\"テーブル名\"],\"V2T0Uw\":[\"保存されたノートブックはまだありません。\"],\"V3aNwx\":[\"データエディタ\"],\"VGYp2r\":[\"すべてに適用\"],\"VH8S7x\":[\"クリップボードのカラム\"],\"VIAEcS\":[\"データベースの読み込みに失敗しました。認証情報を確認してください。\"],\"VKdztF\":[\"行を追加\"],\"VLiHXI\":[\"分析データ\"],\"VMbmXc\":[\"「\",[\"pluginName\"],\"」を削除してもよろしいですか?プラグインファイルが削除されます。\"],\"VO3weF\":[\"ファイルが読み込まれていません\"],\"VOZlKc\":[\"データベースをインポート\"],\"VPzsIz\":[\"名前を生成中...\"],\"VUul0v\":[\"強制終了中:\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"トリガーの削除に失敗しました: \"],\"VfOb_W\":[\"トリガーが見つかりません\"],\"Vgy9LX\":[\"すべてのクエリ\"],\"Vi2Pqx\":[\"作成者:\"],\"Vl2zn2\":[\"停止\"],\"Vo4uBA\":[\"プラグインのインストール中にエラーが発生しました。詳細は下記を参照してください。\"],\"VqqyOs\":[\"クエリを実行すると結果が表示されます\"],\"VzhDFh\":[\"下記で明示的に許可されていない限り、MCP 経由の SELECT 以外のステートメントをブロックします。\"],\"W3uwpT\":[\"すべてのタブを閉じる\"],\"W4MKLh\":[\"例: 本番環境でリスクがありそう、確認お願いします…\"],\"WA8RND\":[\"テーブル「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"WG8Qgt\":[\"テーブルを削除\"],\"WLnvCZ\":[\"ユーザー名を入力\"],\"WM-__8\":[\"接続を検索...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行を「\",[\"tableName\"],\"」にインポートしました\"],\"other\":[\"#\",\" 行を「\",[\"tableName\"],\"」にインポートしました\"]}]],\"WTfntM\":[\"クエリ「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"WarTN_\":[\"成功\"],\"WcF1uL\":[\"グループ名\"],\"Weq9zb\":[\"一般\"],\"WmPpB1\":[\"実行計画を読み込み中…\"],\"Wu7cK0\":[\"データベースが見つかりません\"],\"WvoUQF\":[\"セル \",[\"n\"],\" を削除\"],\"Ww3pDD\":[\"手動コマンド\"],\"X-20AU\":[\"クエリタブ名プロンプトを入力...\"],\"X-U6_w\":[\"フォントファミリー\"],\"X5fs0g\":[\"最初の接続を作成して始めましょう。\"],\"X7Ayjp\":[\"パスワードをシステムのキーチェーンに保存しました\"],\"X9kySA\":[\"お気に入り\"],\"XJOV1Y\":[\"アクティビティ\"],\"XMCLEL\":[\"トリガーを新規作成\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"クエリ説明\"],\"XVF2Pf\":[\"スキーマを編集\"],\"XW6OYF\":[\"このプラグインにはインタプリタ (例: Python) が必要な場合があります。プラグイン設定からインタプリタのパスを設定してください。\"],\"XZB6Xr\":[\"最大ログエントリ数\"],\"Xcffv2\":[\"エディタに AI Assist と Explain ボタンを表示します\"],\"XeqTSh\":[\"結合タイプ\"],\"XmJfZT\":[\"名前\"],\"XoQfG1\":[\"SSH ユーザー\"],\"XwI0Vw\":[\"自動 (システム)\"],\"XyDlLX\":[\"インデックス名\"],\"Y2P2aK\":[\"読み込むスキーマを選択:\"],\"Y8HYw2\":[\"値\"],\"Y8zX3R\":[\"エディタに挿入\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"検索...\"],\"YWlnMZ\":[\"Ollama ポート\"],\"YYdC3A\":[\"バージョン \",[\"0\"]],\"YYn8b5\":[\"レジストリからプラグインを閲覧・インストールします。\"],\"Y_3yKT\":[\"新しいタブで開く\"],\"YiAQ_Q\":[\"テーブルを更新\"],\"Ysjr9Y\":[\"SQL プレビュー\"],\"YswNf7\":[\"すべてのレベル\"],\"YtNwr6\":[\"接続ごとに保存されるクエリ履歴の最大件数です。\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"読み込み中...\"],\"Z7ZXbT\":[\"承認\"],\"Z8JpBH\":[\"ノートブックとしてエクスポート\"],\"Z8fBIc\":[\"実行行数が推定を超過\"],\"ZC2VJP\":[\"実行\"],\"ZCIS4k\":[\"有効なフィルターなし\"],\"ZF1_UT\":[\"SSL モード\"],\"ZGjBPa\":[\"ログを消去\"],\"ZHQTlM\":[\"インポート元\"],\"ZIFDoJ\":[\"構造かデータのいずれかを選択してください\"],\"ZIZA6o\":[\"承認前に編集\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件の解析警告\"],\"other\":[\"#\",\" 件の解析警告\"]}]],\"ZVn8p2\":[\"エディタの左端に行番号を表示します。\"],\"ZYnwzF\":[\"切断済み\"],\"Za3_fO\":[\"エラー\"],\"Zf7LHg\":[\"コンテキストが見つかりません(kubectl はインストールされていますか?)\"],\"Zfotp5\":[\"大きな推定乖離は通常、古い統計やプランナーがモデル化しきれない述語を示します。\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"スキーマの読み込みに失敗しました\"],\"ZqXGPF\":[\"ビューの削除に失敗しました: \"],\"ZuL73E\":[\"新しいデータベースビューを作成します\"],\"_-bi4r\":[\"参照テーブル\"],\"_AEYGI\":[\"実行履歴はまだありません\"],\"_FdpZc\":[\"ビュー定義の読み込みに失敗しました: \"],\"_FxSdi\":[\"アプリ、バックエンド、ツールで使用している直接依存のオープンソースを閲覧できます。\"],\"_JyTG8\":[\"説明プロンプトを入力...\"],\"_Ltc_k\":[\"詳細\"],\"_Q2Wix\":[\"行\"],\"_TK1zF\":[\"保存された接続\"],\"_bJFBE\":[\"接続タイムアウト\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Tree\"],\"_dqduX\":[\"次のページ\"],\"_fwE6J\":[\"それ以前\"],\"_n04sB\":[\"停止\"],\"_otxbQ\":[\"鍵ファイル\"],\"_pezIT\":[[\"0\"],\" への接続に失敗しました。設定を確認するか、データベースが稼働していることを確認してください。\"],\"_srfkj\":[\"カスタムキーを正常に削除しました\"],\"_t6aFo\":[\"MySQL および MariaDB はサーバーのバージョンに応じて EXPLAIN FORMAT=JSON または表形式 EXPLAIN にフォールバックする場合があります。\"],\"_xTbaM\":[\"カラム\"],\"_yxaaL\":[\"ユニークインデックス\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis は無料のオープンソースプロジェクトです。便利だと感じたら、プロジェクトのサポートやコミュニティへの参加をご検討ください。\"],\"a9CASo\":[\"SQLite はカラムの名前変更のみサポートします。その他の変更にはテーブルの再作成が必要です。\"],\"aAIQg2\":[\"外観\"],\"aC_vCa\":[\"AI で名前を生成\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"ノードを選択して詳細を表示\"],\"aHKcKc\":[\"前のページ\"],\"aI-5wG\":[\"CAを検証\"],\"aJJySV\":[\"例: users\"],\"aQ8swY\":[\"デフォルト値\"],\"aScJP1\":[\"このクエリを実行\"],\"aVNbN8\":[\"フィルター条件\"],\"aWhdMQ\":[\"既存の SSH 接続を使用\"],\"aXYd8V\":[\"タイムアウト\"],\"aX_S_r\":[[\"0\"],\" / \",[\"totalPages\"],\" ページ\"],\"agZcf8\":[\"生成された SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [フィールド]\"],\"alplHn\":[\"AI でクエリ計画を分析中...\"],\"anBcU3\":[\"Tabularis を気に入っていただけたら、コードへの貢献、バグ報告、リポジトリへのスターなどでプロジェクトのサポートをご検討ください。\"],\"arHmj2\":[\"このクエリを履歴から削除してもよろしいですか?\"],\"arKcqW\":[\"古いサーバーでは、指標の少ない推定プランにフォールバックする場合があります。\"],\"arcpYe\":[\"承認が必要\"],\"aurEkh\":[\"プロセスを読み込み中…\"],\"avtdsd\":[\"SQL モード\"],\"az8lvo\":[\"オフ\"],\"b1Ah3z\":[\"フォーカス中\"],\"b392Dr\":[\"すべて展開\"],\"b5S_PU\":[\"データベース名\"],\"bAvovP\":[\"下に移動\"],\"bH3JqY\":[\"テーブルが見つかりません\"],\"bP5JOn\":[\"ワードラップ\"],\"bcOdok\":[\"グループを削除\"],\"bcqeas\":[\"MCP クエリをすべて読み取り専用にする\"],\"bmca5u\":[\"書き込みのみ\"],\"bpCiBU\":[\"MCP からの書き込みを許可\"],\"bqnhqW\":[\"推定が実行行数を超過\"],\"bqpcP7\":[\"データベースをダンプ\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"エラーで失敗\"],\"bw22Gk\":[\"カラムスキーマ\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"主な問題\"],\"cFCKYZ\":[\"拒否\"],\"cFGrCP\":[\"テーブル\"],\"cGeFup\":[\"フォントサイズ\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"テーブルにフォーカス\"],\"cM9NHc\":[\"ダウングレード:\"],\"cO9-2L\":[\"無効\"],\"cSev-j\":[\"フィルター\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行をインポート\"],\"other\":[\"#\",\" 行をインポート\"]}]],\"c_xoSn\":[\"セル \",[\"n\"],\" の名前を変更\"],\"cd0XEW\":[\"クエリを保存\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"グループを分割\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" ステートメント\"],\"d34vwG\":[\"データベースを読み込み\"],\"d6ynQ7\":[\"降順で並び替え\"],\"d8_6_v\":[\"キャンセル\"],\"d8wc1_\":[\"サンプル値\"],\"dBXoCS\":[\"環境変数が検出されていますが、上でキーを設定すれば上書きできます。\"],\"dD7NPy\":[\"アウトライン\"],\"dEgA5A\":[\"キャンセル\"],\"dMtLDE\":[\"終了\"],\"dPJVhW\":[\"インストール失敗\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のセッション\"],\"other\":[\"#\",\" 件のセッション\"]}]],\"dTUzKm\":[\"選択したものを実行 (\",[\"0\"],\")\"],\"dU_iQN\":[\"現在のフィルタに一致するセッションがありません。\"],\"dUh9QW\":[\"プランニング\"],\"dVoir2\":[\"Markdown セル \",[\"n\"],\" を追加\"],\"dZ0d2O\":[\"少なくとも 1 つのテーブルを選択してください\"],\"dhi13U\":[\"画像を選択…\"],\"dli1JX\":[\"変更を送信\"],\"dmYV6f\":[\"ルーチン\"],\"dohZCo\":[\"AI による SQL 生成の指示です。\",[\"SCHEMA\"],\" をデータベース構造のプレースホルダーとして使用します。\"],\"dtxpK2\":[\"分析\"],\"dwW9nJ\":[\"行番号を表示\"],\"dwWVw_\":[\"ウェルカム画面を表示\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"既存時の動作\"],\"dyN4j9\":[\"「プレビューを実行」をクリックすると結果が表示されます\"],\"e07Iz5\":[\"タスクマネージャを開く\"],\"e0NzXu\":[\"このプロジェクトは現在開発中 (WIP) です。主要機能は安定していますが、より大きな構想も進めています。\"],\"e1UKxf\":[\"このクエリを保存\"],\"e34gdU\":[\"MCP サブプロセスがリクエストをタイムアウトさせる前にユーザーの判断を待つ時間。\"],\"e62LQd\":[\"強制終了\"],\"e6QZsM\":[\"エディタテーマ\"],\"e8CirT\":[\"クエリを実行\"],\"eD2kUP\":[\"バッファ読み込み\"],\"eE0JZ4\":[\"バージョン\"],\"eIDch7\":[\"実行計画分析プロンプトを入力...\"],\"eIVolo\":[\"ディスク R/W\"],\"eJOEBy\":[\"エクスポート中...\"],\"eKHY3W\":[\"プラグイン設定\"],\"eMb6Ub\":[\"リソースを選択...\"],\"ePK91l\":[\"編集\"],\"eXweu6\":[\"セルを展開\"],\"ecNsTE\":[\"検索に一致するクエリがありません\"],\"ecUA8p\":[\"今日\"],\"ecpIZP\":[\"鍵が暗号化されている場合はパスフレーズを入力\"],\"esl-Tv\":[\"リソースタイプ\"],\"exyUec\":[\"接続\"],\"f2AJjl\":[\"行を削除\"],\"f4pD-j\":[\"接続テストに失敗しました\"],\"f7sXvi\":[\"パスワードを入力\"],\"fAsxc0\":[\"シーケンシャルスキャン\"],\"fIeFs0\":[\"値を選択...\"],\"fJm92A\":[\"EXPLAIN プランを含むファイル (Postgres JSON またはテキスト形式) を選択して可視化します。\"],\"fOuPPd\":[\"プラグイン\"],\"fXVIZq\":[\"値\"],\"f_b1TA\":[\"実行履歴\"],\"fghnqP\":[\"接続 1〜9 に切り替え\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"カンマ (,)\"],\"fp711N\":[\"ブロック (読み取り専用)\"],\"fpzyLj\":[[\"0\"],\" / \",[\"1\"],\" ページ\"],\"fuA6oy\":[\"ソケットタイムアウト\"],\"fvImQM\":[[\"0\"],\" 件選択中\"],\"fwr_nh\":[\"拡張機能のインストール、プラグインドライバの管理、実行時設定のコントロールを行います。\"],\"g0ZzK4\":[\"有効な JSON\"],\"g11hAR\":[\"新規行\"],\"g8VcMm\":[\"マイ K8s クラスター\"],\"gCFR_O\":[\"並列実行 (すべて実行)\"],\"gEjU98\":[\"接続を開く\"],\"gPQ8z1\":[\"NULL 許可\"],\"gShKPx\":[\"少なくとも 1 つのカラムが必要です\"],\"gSuQrG\":[\"「\",[\"search\"],\"」に一致する接続はありません\"],\"gUypqb\":[\"クエリを再実行\"],\"gZWMnn\":[\"AI 分析\"],\"ghYd73\":[\"対象を選択...\"],\"giAqEC\":[\"新規テーブルを作成\"],\"gnQS8X\":[\"MySQL コネクタが使用する最大パケットサイズです。\"],\"gqV5VL\":[\"組み込み、カスタマイズ不可\"],\"gww_XE\":[\"参照カラム\"],\"gxXPJ9\":[\"インタプリタを設定\"],\"gxutEv\":[\"トリガーを正常に更新しました\"],\"gz6UQ3\":[\"最大化\"],\"h-XNc9\":[\"CSV 区切り文字\"],\"h-kNAk\":[\"例: sales_data\"],\"h3Z_aK\":[\"ここに Markdown を記述...\"],\"h7MgpO\":[\"キーボードショートカット\"],\"h7peZQ\":[\"許可\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 個のシステムプロセスが実行中\"],\"other\":[\"#\",\" 個のシステムプロセスが実行中\"]}]],\"hEZrFh\":[\"SQL ファイルを実行...\"],\"hEipgW\":[\"今すぐアップデートを確認\"],\"hG89Ed\":[\"画像\"],\"hIHcBE\":[\"CSV としてエクスポート\"],\"hItdtk\":[\"フォルダを参照\"],\"hXFVjo\":[\"テーブル名は必須です\"],\"hZ6znB\":[\"ポート\"],\"h_huI6\":[\"再実行\"],\"hbz1rh\":[\"キー\"],\"hdsaJo\":[\"インポート中...\"],\"he3ygx\":[\"コピー\"],\"hfGimp\":[\"ネームスペースを選択...\"],\"hjjSEi\":[\"読み取り専用接続\"],\"hjwN_s\":[\"リソース名\"],\"hlF1mD\":[\"選択範囲をコピー\"],\"hnboBb\":[\"AI によるクエリ計画分析\"],\"hq4-D2\":[\"API キーはシステムのキーチェーンに安全に保管されます。ここでキーを設定すると環境変数より優先されます。\"],\"hqjXdn\":[\"SSH 接続の削除に失敗しました\"],\"hqofAK\":[\"SQL をコピー\"],\"hy6L14\":[\"GitHub で表示\"],\"hyjACX\":[\"セルを折りたたみ/展開\"],\"hz1b5W\":[\"一致する要素が見つかりません\"],\"i1vAVM\":[\"新規テーブルを作成\"],\"i3S5T3\":[\"お気に入りを検索...\"],\"i4_LY_\":[\"書き込み\"],\"i5HBWh\":[\"クエリ履歴をリセットしました\"],\"iAVlge\":[\"AI によるノートブックセル名生成の指示をカスタマイズします。セルの内容 (SQL または Markdown) がユーザーメッセージとして送信されます。\"],\"iE1yAB\":[\"テーブルをフィルター...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"接続\"],\"iSryJ2\":[\"My SSH Server\"],\"iT7UeX\":[\"インデックスを追加\"],\"iUWwuR\":[\"ダウンロードしてインストール\"],\"ia7i08\":[\"先にコンテキスト/ネームスペース/タイプを選択してください\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"保存しました\"],\"igcsfY\":[\"レジストリに利用可能なプラグインがありません。\"],\"ij-Elv\":[\"画像プレビュー\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"説明可能なクエリが \",\"#\",\" 件見つかりました\"],\"other\":[\"説明可能なクエリが \",\"#\",\" 件見つかりました\"]}]],\"ioL38P\":[\"プラグインプロセス、CPU、RAM、ディスク使用量をリアルタイムで監視します\"],\"ixlL_e\":[\"SSH 鍵ファイル (任意)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"モデルを選択\"],\"j3gyYH\":[\"すべて適用\"],\"j5CWO4\":[\"最新\"],\"j9HPuI\":[\"行 #\",[\"0\"]],\"jBtpMP\":[\"すべてのステータス\"],\"jEu4bB\":[\"カラム\"],\"jEyQIs\":[\"ルーチンが見つかりません\"],\"jHc1By\":[\"ビューを削除\"],\"jI6sj4\":[\"コスト、タイミング、行数推定は PostgreSQL や MySQL と比べて得られないことが多いです。\"],\"jIxQCZ\":[\"お使いのプラットフォームでは利用できません\"],\"jKIncn\":[\"データベース名は必須です\"],\"jPSk57\":[\"理由 (任意)\"],\"jUNY_d\":[\"ビュー\"],\"jVqjDo\":[\"不正なノートブックファイル形式です\"],\"jWSZ-A\":[\"プレビューのみ - 完全なデータは読み込まれていません\"],\"jgjIDU\":[\"既存のトリガーの削除に失敗しました: \"],\"jnhuWy\":[\"ソケットタイムアウト (ミリ秒)。\"],\"jpeU_Z\":[\"ノートブック\"],\"jpgB4Y\":[\"接続名は必須です\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"子プロセス\"],\"jx0t66\":[\"子プロセスを折りたたむ\"],\"jxShEf\":[\"ビューを作成\"],\"jz5PKx\":[\"ビュー定義\"],\"k-0mL-\":[\"カラムを追加\"],\"k-XiMX\":[\"Raw\"],\"k2UnVy\":[\"ハッシュ条件\"],\"k5UUX3\":[\"トリガーを正常に作成しました\"],\"kALwhk\":[\"秒\"],\"kBiBq7\":[\"インデックス「\",[\"name\"],\"」を削除しますか?\"],\"kEYasw\":[\"チャートを切り替え\"],\"kI1qVD\":[\"整形\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行 · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" 行 · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"イベントの詳細\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"レジストリ\"],\"kY-q3P\":[[\"label\"],\" は必須です\"],\"kexIdC\":[\"Kubernetes ポートフォワードを使用\"],\"kj2-CR\":[\"エラーの詳細\"],\"krksx_\":[\"成功\"],\"kwY6nh\":[\"閉じる\"],\"kx0s-n\":[\"結果\"],\"kxUEfE\":[\"ルーチン定義の取得に失敗しました: \"],\"l2Op2p\":[\"クエリパラメータ\"],\"l9Ivba\":[\"プラグインプロセスとシステムリソース\"],\"lBdPxu\":[\"アクセントカラー\"],\"lCF0wC\":[\"更新\"],\"lEQRwq\":[\"データ (INSERT)\"],\"lIvS11\":[\"トリガーを再作成\"],\"lKS0ce\":[\"新規テーブルを作成しました\"],\"lOekZ3\":[\"水平レイアウトに切り替え\"],\"lUA1C1\":[\"SSH 鍵のパスフレーズ (任意)\"],\"lVeG20\":[\"Rust 依存\"],\"lXAG6D\":[\"AI によるクエリ説明の指示です。\",[\"LANGUAGE\"],\" を出力言語のプレースホルダーとして使用します。\"],\"lbbYjy\":[\"生の設定ファイルを直接編集します。変更を反映するには再起動が必要です。\"],\"lhKW0m\":[\"SQL セル \",[\"n\"],\" を追加\"],\"lk-wOz\":[\"トリガーを絞り込み...\"],\"lk0x32\":[\"結果ページサイズ (上限)\"],\"lkz6PL\":[\"所要時間\"],\"lmVGeo\":[\"外部キーを追加\"],\"lnnx3E\":[\"Tabularis を Claude Desktop、Cursor などに接続\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"追加\"],\"m2Q_r8\":[\"Detect JSON in text columns\"],\"m2tskz\":[\"成功\"],\"mA-qpe\":[\"すべての実行が完了\"],\"mBhhbA\":[\"ログをクリップボードにエクスポートしました\"],\"mCNdzH\":[\"セルを実行\"],\"mO95sp\":[\"パネルを閉じる\"],\"mP7dLi\":[\"上にフォント名を入力してください\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件ブロック\"],\"other\":[\"#\",\" 件ブロック\"]}]],\"mS74ir\":[\"SSH 接続の保存に失敗しました\"],\"mSqtw8\":[\"プレビューを実行\"],\"mURmfQ\":[\"ビュー定義 (SQL)\"],\"mX_isJ\":[\"垂直\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"構造 (DDL)\"],\"mrk4Cf\":[[\"colName\"],\" を降順で並べ替え\"],\"msJ8t1\":[\"Tabularis ユーザー専用のコミュニティを立ち上げました。質問・情報交換・ロードマップへのフィードバックをお寄せください。\"],\"mtvVdV\":[\"処理行数\"],\"mx4evv\":[\"テーブルを作成\"],\"myXGZW\":[\"ガイド\"],\"mzI_c-\":[\"ダウンロード\"],\"n7JDTx\":[\"プラグインをインストールして有効化するとここに表示されます\"],\"nDDJir\":[\"セッション、クライアント、接続を検索…\"],\"nHP-Kr\":[\"アクティブなセッションがありません。接続を選択してください。\"],\"nKhCjW\":[\"テーブルを選択\"],\"nNmhuY\":[\"インデックスを作成\"],\"nNwvm4\":[\"エラー\"],\"nOVim5\":[\"接続の保存に失敗しました\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"拡張機能が必要: \",[\"0\"]],\"ngO6Pv\":[\"Tab に加えて Enter でもオートコンプリートの候補を確定できるようにします。オフの場合、Enter は常に改行を挿入します。\"],\"nhmF3p\":[\"接続\"],\"noM5A_\":[\"最初の接続を作成\"],\"nohy4m\":[\"MCP アクティビティはまだありません。\"],\"nr-axf\":[\"プラグインを削除\"],\"nsPFX9\":[\"Visual Explain で開く\"],\"nuBbBr\":[\"チャート\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"変更\"],\"o21Y-P\":[\"件\"],\"o3tP_A\":[\"インデックスを削除\"],\"o45L8r\":[\"接続名を入力\"],\"o53XGh\":[\"選択した行をコピー\"],\"o7J4JM\":[\"フィルター\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"レベル\"],\"oGiIL7\":[\"デフォルトプロバイダ\"],\"oJ4rAm\":[\"接続が失われました\"],\"oJlXF2\":[\"ノートブックをインポート\"],\"oMFv82\":[\"垂直分割\"],\"oOFiQg\":[\"パフォーマンス問題を避けるため、クエリごとに取得する行数を制限します。0 に設定すると無効化されます (非推奨)。\"],\"oT9ZD3\":[\"概要を非表示\"],\"oUzLtx\":[\"トリガーを編集するには、いったん削除して再作成する必要があります。「\",[\"name\"],\"」の変更を続行しますか?\"],\"oVRbyk\":[\"チャートを変更(セル \",[\"n\"],\")\"],\"oWfclW\":[\"Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.\"],\"obpbdz\":[\"設定ファイルが見つかりません (手動で作成してください)\"],\"odZgfC\":[\"AI クライアント\"],\"ogZhXn\":[\"ER 図のデフォルトのレイアウト方向を選択します\"],\"ohUJJM\":[\"プラグイン\"],\"ok3hJJ\":[\"インストール済み\"],\"olAdaI\":[\"実行行数\"],\"olWzar\":[\"プラグインプロセスを強制終了\"],\"ovBPCi\":[\"デフォルト\"],\"owzTWN\":[\"プロバイダから AI モデルを更新しました\"],\"oxYi6j\":[\"アプリケーション全体で使用される基本フォントサイズを調整します (10〜20px)。\"],\"p--hsQ\":[\"データベース接続が失われました\"],\"p6NueD\":[\"NEW\"],\"pOYHox\":[\"アクション\"],\"pR9bTR\":[\"BLOB データなし\"],\"pRDT0m\":[\"テーブル\"],\"pS8S5q\":[\"例: users, orders, products\"],\"pSws_M\":[\"テーブル名\"],\"pVLbKZ\":[\"ビューを正常に作成しました\"],\"pWT04I\":[\"確認中...\"],\"pZJ_6D\":[\"インデックス名は必須です\"],\"pddYFG\":[\"ノートブックセル名プロンプトを入力...\"],\"pnpyuD\":[\"ログを有効化\"],\"pqKMPv\":[\"テーブルの作成に失敗しました: \"],\"pqaP1h\":[\"閉じる\"],\"pqarBu\":[\"昇順\"],\"ptuq35\":[\"例: Comic Sans MS\"],\"pzu7v4\":[\"水平\"],\"q-ch8m\":[\"他のすべての接続は読み取り専用のままです。ここでチェックされた接続のみ書き込みを実行できます。\"],\"qIrtcK\":[\"アップデート\"],\"qOqy8G\":[\"設定を確認中...\"],\"qWaVNs\":[\"保存して再起動\"],\"qb3LPX\":[\"ER 図を表示\"],\"qkK0vq\":[\"ビュー名は必須です\"],\"qki9tG\":[\"エラー\"],\"qoIir-\":[\"OpenAI 互換 API のベース URL です。例: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"すべて折りたたむ\"],\"r6ncaO\":[\"タブを閉じる\"],\"rAJlpP\":[\"コンテナポート\"],\"rG3WVm\":[\"SELECT\"],\"rGRCeK\":[\"クエリ履歴を削除\"],\"rNIto7\":[\"リソース名は必須です\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"ノートブックを正常にエクスポートしました\"],\"rY4sEV\":[\"FK を削除\"],\"rbu0nO\":[\"SSH 接続を管理\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件の接続\"],\"other\":[\"#\",\" 件の接続\"]}]],\"rn2_2V\":[\"フィルターを削除\"],\"roABNH\":[\"クエリ履歴はありません\"],\"rtir7c\":[\"不明\"],\"ru0-2W\":[\"アクティブな接続はありません\"],\"rvDPWO\":[\"推定の乖離\"],\"rwWjWg\":[\"リリースノート\"],\"s6m9gy\":[\"トリガー「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"s7uMvM\":[\"接続テスト\"],\"sBOaim\":[\"設定ファイルを保存しました。変更を反映するために今すぐ再起動しますか?\"],\"sCyv9B\":[\"モデルを更新\"],\"sSUqe4\":[\"削除\"],\"sUBkgN\":[\"SQL を生成中...\"],\"sZZG3d\":[\"「\",[\"0\"],\"」をインポートしてもよろしいですか?\\n既存のデータが上書きされる可能性があります。\"],\"sbK5ck\":[\"履歴を検索...\"],\"sq_bS6\":[\"削除時\"],\"suW7-E\":[\"接続タイムアウト (ミリ秒)。\"],\"t-R8-P\":[\"実行\"],\"t1OfVY\":[[\"totalLibraries\"],\" 個のライブラリ\"],\"t2TMzs\":[\"タブを閉じる\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"テーブルを選択...\"],\"t7KRl1\":[\"すべての MCP ツール呼び出しの監査ログと、承認待ちのクエリ。ローカルに保存され、外部には送信されません。\"],\"t9NJIk\":[\"スキャンの多い操作を検出\"],\"tB7xof\":[\"一時またはソート操作\"],\"tBBXTO\":[\"Ping 間隔\"],\"tFrT3w\":[\"自動インストールが失敗する場合は、これをクライアントの設定ファイルに手動で追加してください。\"],\"tJ7UbA\":[\"フォーカス中のものを説明\"],\"tKlWWY\":[\"絵文字\"],\"tMFzq-\":[\"水平分割\"],\"tQhW-D\":[\"ログ設定\"],\"tXFGEx\":[\"保存された Kubernetes 接続がありません。「追加」をクリックして作成してください。\"],\"tXLz_8\":[\"削除\"],\"tXpRby\":[\"データグリッド\"],\"tbysEk\":[\"操作\"],\"tdta9X\":[[\"0\"],\" ページ\"],\"tfDRzk\":[\"保存\"],\"tfEioV\":[\"上から下へすべての SQL セルを実行\"],\"tiAIaJ\":[\"SSH パスワードが未入力です。再入力してください。\"],\"tk22BR\":[\"構造化データを貼り付け、インポート前にスキーマをプレビューします\"],\"tst44n\":[\"イベント\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL ファイルを正常に実行しました\"],\"u6QeR6\":[\"今すぐ再起動\"],\"uAQUqI\":[\"ステータス\"],\"uBAxNB\":[\"エディタ\"],\"uFViPK\":[\"利用可能な SSH 接続がありません\"],\"uHUuhp\":[\"このクエリを説明\"],\"uHfFzS\":[\"エディタのフォントサイズ\"],\"uJ_3K5\":[\"ノートブック「\",[\"0\"],\"」を削除しますか?この操作は元に戻せません。\"],\"uKaNJ3\":[\"Open in JSON Editor\"],\"uQBwTo\":[\"スキーマ\"],\"ub54ff\":[\"プラグインセンター\"],\"ufFyBs\":[\"データベースを正常にエクスポートしました\"],\"upNmR2\":[\"サイドバーエディタで開く\"],\"utMia3\":[\"すべて解除\"],\"uyNaJg\":[\"1件\"],\"v61dnS\":[\"OpenAI 互換プロバイダの正確なモデル名を入力してください。\"],\"v6oeyr\":[\"インストール済み\"],\"v75DGg\":[\"ファイルを参照\"],\"v99dO4\":[\"主キー\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のクエリが見つかりました\"],\"other\":[\"#\",\" 件のクエリが見つかりました\"]}]],\"vCSBPD\":[\"フィルターを追加\"],\"vH7uJj\":[\"並び替え…\"],\"vUOA1-\":[\"モデルを検索...\"],\"vWcB0p\":[\"PostgreSQL の ANALYZE では、利用可能な場合は実行行数、時間、ループ、バッファカウンタが含まれます。\"],\"vXIe7J\":[\"言語\"],\"vYf4Jm\":[\"完全な SQL 関数を入力してください (例: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"優先\"],\"vditm4\":[\"実行計画\"],\"vks_ls\":[\"他のタブを閉じる\"],\"vnAnIp\":[\"\",[\"1\"],\" ではモデル \",[\"0\"],\" が見つかりません。正しく動作しない可能性があります。\"],\"vqoN5u\":[\"構造\"],\"vrAvbP\":[\"グループ「\",[\"0\"],\"」を削除してもよろしいですか?このグループ内の接続は未分類に移動されます。\"],\"vtJ2yO\":[\"エクスプローラー\"],\"vujQJ5\":[\"ローカライズ\"],\"vvJPVL\":[\"概要を表示\"],\"vwI5S4\":[\"成功\"],\"vzH-7Z\":[\"Explain\"],\"w7QmD_\":[\"システムプロンプトを入力...\"],\"w9eMXw\":[\"トリガー\"],\"wCJFlW\":[\"経過時間\"],\"wCfv2R\":[\"接続を追加\"],\"wGfc86\":[\"すべての履歴を削除\"],\"wGwNv4\":[\"アクティブなデータベース\"],\"wJJ-Wy\":[\"インストール中...\"],\"wMe2Qp\":[\"ネームスペース\"],\"wQiel_\":[\"バッファヒット\"],\"wQn-RM\":[\"カラムを追加\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"適用済み\"],\"wTmVhm\":[\"削除\"],\"wZeIWq\":[\"クリップボードからインポート\"],\"w_bY7R\":[\"ログ\"],\"wc_8bA\":[\"承認待ち\"],\"wckWOP\":[\"管理\"],\"wdYcKH\":[\"開いているタブ\"],\"wja8aL\":[\"無題\"],\"wkOAzk\":[\"一致するノートブックがありません。\"],\"wp49Ao\":[\"挿入の処理に失敗しました: \"],\"wqG2hQ\":[\"スキップ (インポートしない)\"],\"wwrAsK\":[\"必須項目をすべて入力してください\"],\"wwu18a\":[\"アイコン\"],\"x2fr_j\":[\"グラフ\"],\"xANKBj\":[\"関数\"],\"xBwjck\":[\"変更を反映するには再起動が必要です。\"],\"xDAtGP\":[\"メッセージ\"],\"xECY01\":[\"プロシージャ\"],\"xGPNgZ\":[\"プロンプトのカスタマイズ\"],\"xNgtS-\":[\"ビューが見つかりません\"],\"xOPa1b\":[\"ポートは 1 から 65535 の範囲で指定してください\"],\"xY9s5E\":[\"タイムアウト\"],\"xaVUr1\":[\"いろはにほへと ちりぬるを わかよたれそ つねならむ\"],\"xbvTzL\":[\"ファイルパス\"],\"xlew5F\":[\"クリア\"],\"xmNyKz\":[\"テスト中...\"],\"xtuh6D\":[\"エクスプローラーを展開\"],\"y-Zdqj\":[\"コンテキストを選択...\"],\"y3HaQk\":[\"タイミング\"],\"yLFey_\":[\"トリガーを作成\"],\"yLianM\":[\"Open JSON viewer\"],\"yQXjG5\":[\"すべて解除\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"トリガーを編集\"],\"y_0uwd\":[\"昨日\"],\"ygCKqB\":[\"停止\"],\"ykCc6r\":[\"データベースを変更(セル \",[\"n\"],\")\"],\"ynVMSc\":[\"すべて選択\"],\"ytdz1d\":[\"AI がデータベース書き込みを要求しています\"],\"yyhzur\":[\"テーブル作成\"],\"yz7wBu\":[\"閉じる\"],\"z0VdfR\":[\"ルーチン\"],\"z407wX\":[\"SSH パスワード\"],\"z5kV0h\":[\"接続\"],\"zBTMzx\":[\"プレビュー\"],\"zCaAKs\":[\"アップデートエラー\"],\"zDAakK\":[\"接続 ID がないため、図を表示できません。\"],\"zGe21h\":[\"このキーは環境変数から読み込まれています\"],\"zGfL5t\":[\"値\"],\"zL6-4A\":[\"実行中のプラグインプロセスはありません\"],\"zLZhCi\":[\"Discord コミュニティが新登場!\"],\"zLlCou\":[\"カラム名をコピー\"],\"zNEL34\":[\"コミュニティに参加\"],\"zNgTlV\":[\"右側のタブを閉じる\"],\"zQz55p\":[\"構造を表示\"],\"zR0FfH\":[[\"target\"],\" にエクスポートしました\"],\"zRZeOc\":[\"テーブル、ビュー、ルーチン、トリガーを検索...\"],\"zUNMsr\":[\"SSH 鍵\"],\"zXMRzb\":[\"SSH ポート\"],\"zZgoXr\":[\"一致するテーブルがありません\"],\"zaWbms\":[\"変更をロールバック\"],\"zgClmU\":[\"設定をインストール\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"値を入力...\"],\"zvzN4C\":[\"アクティブに設定\"],\"zzDlyQ\":[\"成功\"],\"zzMxrp\":[\"config.json を編集\"],\"zz_Wd_\":[\"モード\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"最大履歴件数\"],\"-6AWa-\":[\"接続をインポート\"],\"-6NyRG\":[\"クライアント\"],\"-K0AvT\":[\"切断\"],\"-PLZfh\":[\"モデルの更新に失敗しました\"],\"-T5W2e\":[\"ドライバ補足\"],\"-ZgeeE\":[\"編集履歴\"],\"-aYrdc\":[\"バージョン \",[\"0\"],\" が利用可能です\"],\"-fBGXl\":[\"最高コスト\"],\"-jIQDz\":[\"セルを折りたたむ\"],\"-u1eRo\":[\"データベースなし\"],\"-yoeVU\":[\"スキーマを読み込み中...\"],\"-zy2Nq\":[\"タイプ\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"承認 ID\"],\"0E5-gF\":[\"この接続を削除してもよろしいですか?\"],\"0HCubq\":[\"展開\"],\"0Kmdvy\":[\"カスタムフォント\"],\"0Nj13E\":[\"SQL を生成\"],\"0ROgz5\":[\"JSON を入力...\"],\"0SY9sU\":[\"データベースからの切断に失敗しました\"],\"0b3kL9\":[\"データベースを選択\"],\"0caMy7\":[\"履歴\"],\"0mx5ow\":[\"クエリ\"],\"0n9BtL\":[\"プレビュー\"],\"0pHB9N\":[\"table.column 形式でコピー\"],\"0sQzZK\":[\"データベースをフィルター...\"],\"0uPP9X\":[\"FK 名 (任意)\"],\"0wxuek\":[\"現在のバージョン\"],\"0x09Aw\":[\"エラー時に停止を切り替え\"],\"0yBP6v\":[\"開発をサポート\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"0yVAoD\":[\"行数をカウント\"],\"0zxJ87\":[\"ログがありません\"],\"1-ETbn\":[\"ビジュアル Explain\"],\"1133_z\":[\"ビューを編集\"],\"11fGJ6\":[\"クエリ\"],\"13hIUA\":[[\"0\"],\" API キー\"],\"14qNWF\":[\"SSH 接続を選択\"],\"17qHRP\":[\"新規接続\"],\"1Dn6bg\":[\"クリップボードからインポート\"],\"1Dnd0I\":[\"行数を読み込む\"],\"1FjTLW\":[\"例: python3\"],\"1GOvbo\":[\"Ollama に接続しました (\",[\"0\"],\" 個のモデルを検出)\"],\"1I6UoR\":[\"ビュー\"],\"1U7hS5\":[\"長さ\"],\"1UTmg5\":[\"最大許容パケットサイズ\"],\"1b7aSU\":[\"エディタのフォントファミリー\"],\"1ekzlY\":[\"プラグインプロセス\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"テーマ選択\"],\"1xVZkL\":[\"モデルが見つかりません\"],\"26Joci\":[[\"0\"],\" 行を取得しました\"],\"2Bf-Qe\":[\"新規コンソール\"],\"2CrSmP\":[\"Tabularis の成長をサポート\"],\"2D9F8_\":[\"接続の複製に失敗しました\"],\"2Eoi_a\":[\"詳細を表示\"],\"2F4pE5\":[\"Rust ビルド・テスト\"],\"2Fsd9r\":[\"今月\"],\"2JzKXI\":[\"GENERATED に設定\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"すべて選択\"],\"2SO5RM\":[\"このドライバーでは Kubernetes を使用できません。\"],\"2Uh5GA\":[\"Cargo エコシステム\"],\"2YylFp\":[\"新規ビジュアルクエリ\"],\"2luuSG\":[\"再試行\"],\"2wxgft\":[\"名前を変更\"],\"2yG2GC\":[\"書き込み(またはすべてのクエリ)を一時停止し、データベースに到達する前に Tabularis 内でユーザーに承認を求めます。\"],\"30-b5r\":[\"削除\"],\"31kwdN\":[\"フィルターを複製\"],\"34nxyb\":[\"トリガー\"],\"35148H\":[\"すべてのツール\"],\"3Am5DS\":[\"タブ表示\"],\"3FVg9_\":[\"ローカルカラム\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"実行\"],\"3L0HCz\":[\"検索に一致するプラグインがありません。\"],\"3Nv3JV\":[\"クエリを実行中...\"],\"3TSz9S\":[\"最小化\"],\"3UW8fG\":[\"アップデートは \",[\"0\"],\" によって管理されています\"],\"3YvS-c\":[\"新規タブ\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"ノートブックセル名プロンプト\"],\"3qkggm\":[\"フルスクリーン\"],\"3rBJ1T\":[\"スキーマを表示\"],\"3xZ-xV\":[\"現在のタイムスタンプを挿入\"],\"40Gx0U\":[\"タイムゾーン\"],\"41GP4f\":[\"行を CSV としてコピーまたはエクスポートする際のデフォルト区切り文字を選択します。\"],\"42iaEi\":[\"ANALYZE なしの PostgreSQL はプランナーの推定のみを表示します。\"],\"44cXI8\":[[\"colName\"],\" を昇順で並べ替え\"],\"4AF7FO\":[\"データベースを管理\"],\"4CK17g\":[\"ビュー「\",[\"name\"],\"」を変更してもよろしいですか?\"],\"4DDaw-\":[\"少なくとも 1 つのデータベースを選択してください\"],\"4D_Nvt\":[\"グループの作成に失敗しました\"],\"4RiR6c\":[\"HTML としてエクスポート\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 個の子プロセス\"],\"other\":[\"#\",\" 個の子プロセス\"]}]],\"4VyuY3\":[\"すべてのログを消去してもよろしいですか?\"],\"4WWqS3\":[\"Toggle inline JSON tree\"],\"4XAQdl\":[\"インデックスを作成\"],\"4cEClj\":[\"セッション\"],\"4cmfYp\":[\"行を複製\"],\"4hsr6d\":[\"ビューを作成\"],\"4lIZTB\":[\"フロントエンド開発依存\"],\"4oYjvJ\":[\"クエリを検索…\"],\"4tMxW4\":[\"関連レコードをプレビュー\"],\"4yJcjm\":[\"タイプを選択...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"フィルターパネルを閉じる (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"セミコロン (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のイベント\"],\"other\":[\"#\",\" 件のイベント\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"リスト表示\"],\"5To6Z6\":[\"クエリをコピー\"],\"5gqNQl\":[\"グリッド表示\"],\"5igIzr\":[\"インポートをキャンセルしました\"],\"5nTIup\":[\"ビューを編集中: \",[\"name\"]],\"5qIe8E\":[\"すべて実行\"],\"66bEht\":[\"プロジェクトの状態\"],\"6PIJVc\":[\"起動\"],\"6QvP0l\":[\"JSON としてエクスポート\"],\"6W41Xq\":[\"タスクマネージャ\"],\"6WngBH\":[\"NULL に設定\"],\"6YtxFj\":[\"名前\"],\"6_dCYd\":[\"概要\"],\"6dOBsk\":[\"ビューを作成\"],\"6gvoHP\":[\"エラーメッセージをコピー\"],\"6oCVzX\":[\"Kubernetes コンテキストは必須です\"],\"6wQO0f\":[\"データを表示\"],\"6z9W13\":[\"再起動\"],\"71agNy\":[\"AI で未命名セルの名前を生成\"],\"74J3FG\":[\"初期バージョン\"],\"75BWdo\":[\"トリガー定義の読み込みに失敗しました: \"],\"76d3Uz\":[\"イベント\"],\"76gPWk\":[\"了解\"],\"77nSMU\":[\"AI アクティビティ履歴をすべて削除しますか?この操作は元に戻せません。\"],\"7ABmyQ\":[\"再試行\"],\"7Ap0JP\":[[\"0\"],\" 件中 \",[\"activeFilterCount\"],\" 件が有効\"],\"7E864M\":[\"データベースの種類\"],\"7FqaG1\":[\"AI による EXPLAIN クエリ計画分析の指示をカスタマイズします。\",[\"LANGUAGE\"],\" を出力言語に使用します。\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"混在タイプを検出、TEXT にデフォルト設定\"],\"7RSQQd\":[\"パスワードをキーチェーンに保存\"],\"7VpPHA\":[\"確定\"],\"7e7bPs\":[\"トリガー本体 (SQL)\"],\"7eRaA9\":[\"トリガーを削除\"],\"7l15X4\":[\"失敗\"],\"7sMeHQ\":[\"キー\"],\"7sNhEz\":[\"ユーザー名\"],\"7tATh2\":[\"クエリを実行\"],\"7yb4gk\":[\"失敗: \"],\"8-4V8D\":[\"テーブル\"],\"82G-l5\":[\"Model Context Protocol (MCP) を使うと、AI アシスタント (Claude など) がローカルツールに接続できます。Tabularis は MCP サーバーを公開しており、AI がデータベーススキーマを読み取り、クエリを安全に実行できるようにします。\"],\"83VjWE\":[\"新規ノートブック\"],\"86IgoU\":[\"クエリを実行 (エディタ内)\"],\"86fCgf\":[\"AI によるクエリ結果タブ名生成の指示をカスタマイズします。SQL クエリがユーザーメッセージとして送信されます。\"],\"87a_t_\":[\"ラベル\"],\"87kWsr\":[\"接続をエクスポート\"],\"8CWirf\":[\"MCP サーバー\"],\"8S8aIX\":[\"接続ヘルスチェック\"],\"8TMaZI\":[\"タイムスタンプ\"],\"8Tg_JR\":[\"カスタム\"],\"8UFKYr\":[\"実行するクエリを選択\"],\"8VKSGV\":[\"SQL を生成\"],\"8Wjy6z\":[\"左側のタブを閉じる\"],\"8ZsakT\":[\"パスワード\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL エディタ\"],\"8bRgTe\":[\"AI プロバイダが未設定です。設定 > AI に移動してください。\"],\"8c_W0h\":[\"以前のバージョン\"],\"8guEQP\":[\"ビューを更新\"],\"8lm5qE\":[\"SQLite の EXPLAIN QUERY PLAN は軽量で、主に構造情報のみを提供します。\"],\"8q_sOc\":[\"削除\"],\"8t-akp\":[\"先頭 \",[\"MAX_PREVIEW_ROWS\"],\" 行を表示中\"],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"接続名\"],\"91gnWY\":[\"ログをエクスポート\"],\"91rtHL\":[\"ビューを新規作成\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"新規グループ\"],\"9DOfTQ\":[\"トリガーを編集中: \",[\"name\"]],\"9JdjEN\":[\"ビューを正常に更新しました\"],\"9NzDFn\":[\"アプリ起動時にウェルカム画面を表示します。\"],\"9OoUS3\":[\"新しい SSH 接続を作成\"],\"9QGRD5\":[\"対象カラム\"],\"9QTny9\":[\"クエリが失敗しました。\"],\"9S-fyV\":[\"プリフライト実行計画\"],\"9SJ_Sx\":[\"システムリソース\"],\"9UQ730\":[\"複製\"],\"9X6cky\":[\"いいえ\"],\"9XUV5V\":[\"クリップボードにデータが見つかりません\"],\"9hGjL2\":[\"インデックスを作成\"],\"9mMU1R\":[\"時間\"],\"9mvFo_\":[\"時刻\"],\"9npOH9\":[\"ファイルを開く\"],\"9uI_rE\":[\"元に戻す\"],\"9xUjzm\":[\"すべて選択\"],\"9y_02p\":[\"コミュニティとの交流、サポート、機能提案\"],\"A1pPcI\":[\"SSH ホスト\"],\"A1taO8\":[\"Search\"],\"A6C0pv\":[\"総コスト\"],\"A7WG0p\":[\"プラグインが無効\"],\"A7yRz3\":[\"ビュー定義は必須です\"],\"A9Uyp6\":[\"インポートに失敗しました: \"],\"ABEd-z\":[\"Tabularis のアップデートにはパッケージマネージャを使用してください。\"],\"AMdgKV\":[\"実行計画分析プロンプト\"],\"ANSTMe\":[\"現在のプランサマリに大きな問題は検出されませんでした。\"],\"ANzIr7\":[\"クエリ履歴\"],\"AOnaU7\":[\"スキップ\"],\"AVlZoM\":[\"環境変数\"],\"AXTVsE\":[\"完全検証\"],\"AXdRYR\":[\"現在のログ\"],\"Aa-YkQ\":[\"ノートブックをエクスポート\"],\"Ai2U7L\":[\"ホスト\"],\"AidayG\":[\"レベルでフィルター\"],\"AlPiMN\":[\"クリックでページ移動\"],\"An-1rA\":[\"取得行数\"],\"AnV8j-\":[\"カラムを変更\"],\"AvEr_L\":[\"新規コンソール\"],\"AvYbUL\":[\"GitHub でスター\"],\"Aw_eOs\":[\"Tabularis ≥ \",[\"minVersion\"],\" が必要です\"],\"AxPAXW\":[\"結果が見つかりません\"],\"B0mJGb\":[\"生出力\"],\"B1c58n\":[\"カラムを変更\"],\"B3toQF\":[\"オブジェクト\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"接続名は必須です\"],\"BAVvWJ\":[\"ER 図\"],\"BBtVak\":[\"すべて折りたたむ\"],\"BEVzjL\":[\"インポートに失敗しました\"],\"BHATjK\":[\"接続をエクスポート\"],\"BJe2lZ\":[\"サイドバーを切り替え\"],\"BK3WCj\":[\"レジストリの読み込みに失敗しました\"],\"BKbO3i\":[\"ノートブックを編集\"],\"BMB51y\":[\"コンソールで実行\"],\"BNW_Z4\":[\"例: active_users, order_summary\"],\"BPkXj7\":[\"外部キーを作成\"],\"BUO_JN\":[\"クエリをコピー\"],\"BYkhHY\":[\"起動時にアップデートを確認\"],\"BeSg6-\":[\"デバッグ用にアプリケーションログをメモリに収集します\"],\"BgAyQH\":[\"並べ替えを解除\"],\"BinTJI\":[\"npm エコシステム\"],\"BkFson\":[\"自動ページング\"],\"Bpglf1\":[\"上に移動\"],\"BrGo6h\":[\"ノートブックを検索\"],\"BxiAN_\":[\"クエリを削除\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"フロントエンド依存\"],\"CE-M2e\":[\"情報\"],\"CHIyL8\":[\"フィルターなし —\"],\"CJnUoU\":[\"トリガーを更新\"],\"CLWWRV\":[\"ダウンロード中...\"],\"CUxwxn\":[\"すべてのテーブルを表示\"],\"CWMXbw\":[\"のプロセスを強制的に停止します。このプラグインを使用しているアクティブなデータベース接続は、プラグインが再起動されるまで動作しなくなります。\"],\"CZt6BX\":[\"手動設定\"],\"Ca8ixZ\":[\"削除\"],\"CbJBQS\":[\"更新に失敗しました: \"],\"Cdz-YU\":[\"スタック表示\"],\"CpeQf9\":[\"ループ\"],\"D2wXBw\":[\"自動インクリメント\"],\"D6Ql0c\":[\"生成と説明に使用するモデルを選択します。\"],\"DB8zMK\":[\"適用\"],\"DDXf5E\":[\"SQL 関数\"],\"DEwnwi\":[\"削除\"],\"DNTvdl\":[\"エディタで開く\"],\"DPc2P9\":[\"セルを削除\"],\"DUY8Ba\":[\"破壊的変更\"],\"DVnBSM\":[\"行の高さ\"],\"Dd7YLj\":[\"あとで\"],\"Deej3j\":[\"無効な JSON\"],\"DfKhk_\":[\"更新\"],\"DiRiTz\":[\"パッケージページを開く\"],\"DlRHAD\":[\"EXPLAIN を実行中...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のエラー\"],\"other\":[\"#\",\" 件のエラー\"]}]],\"Dvdihe\":[[\"0\"],\" 上 — 実行前に確認して判断してください。\"],\"DzFLzw\":[\"はい\"],\"E-JUtQ\":[\"承認ゲート\"],\"E0kcnZ\":[\"一般\"],\"E2mje_\":[\"説明するクエリを選択\"],\"EDieyg\":[\"この SSH 接続を削除してもよろしいですか?\"],\"EHZxPj\":[\"Expand\"],\"EL4oDO\":[\"新しいバージョンが利用可能\"],\"EPi4gT\":[[\"field\"],\" で並び替え\"],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"未分類\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"不明\"],\"EhADgB\":[\"カラムを削除\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"最新の状態です\"],\"Em6JFd\":[\"行数をカウント\"],\"EnGiqG\":[[\"0\"],\"件\"],\"Ew1n5z\":[\"プラグインを検索…\"],\"F18WP3\":[\"パラメータ\"],\"F3uc1x\":[\"エクスポートされたファイルには、データベースおよび SSH のパスワードが平文で含まれます。安全な場所に保管してください。\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"F6pfE9\":[\"アクティブ\"],\"F8tXg7\":[\"データプレビュー\"],\"F9-6yK\":[\"デフォルトのコピー形式\"],\"F9lxfG\":[\"削除\"],\"F9nsa2\":[\"履歴ファイルが破損していたためバックアップに移動しました。新しいクエリは通常どおり記録されます。バックアップ ファイル:\"],\"FF_oap\":[\"デフォルト\"],\"FK8rlP\":[\"SSH 接続が設定されていません\"],\"FMRcH8\":[\"最初の行をヘッダーとして扱う\"],\"FNvDMc\":[\"今週\"],\"FQe1FI\":[\"推定行数\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"警告\"],\"FZg3wM\":[\"操作\"],\"Fa_cky\":[\"スキーマ: \",[\"tableName\"]],\"FpEL5o\":[\"SQL エディタに独立したテーマを選択するか、アプリのテーマと同期するかを選びます。\"],\"FsvZQL\":[\"セル \",[\"n\"],\" を編集\"],\"FtwKL9\":[\"タブを切り替え\"],\"FznI3z\":[\"外部キー「\",[\"name\"],\"」を削除しますか?\"],\"G6W8j1\":[\"プレビューに失敗しました: \"],\"G8Q5Zq\":[\"ネームスペースは必須です\"],\"GAohqx\":[\"カラムを削除\"],\"GJR99u\":[\"カラムの削除に失敗しました: \"],\"GKfzzM\":[\"接続を選択...\"],\"GS-Mus\":[\"エクスポート\"],\"GUaLUq\":[\"スキーマの読み込みに失敗しました: \"],\"GXP-Iw\":[\"SQL セルを追加\"],\"Gj1mLb\":[\"セルを並べ替え\"],\"GlbqG2\":[\"ドライバーの初期設定に戻す\"],\"Gq1YzP\":[\"イベント\"],\"Gs5AlY\":[\"開く\"],\"GtmO8_\":[\"開始\"],\"GxkJXS\":[\"アップロード中...\"],\"H-o4D2\":[\"新規カラムを作成\"],\"H2B-KW\":[\"Ctrl+C / Cmd+C で行をコピーする際のデフォルト形式を選択します。\"],\"H3oH0g\":[\"やり直す\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"折りたたむ\"],\"H9P8CD\":[\"最初のフィルターを追加\"],\"HAQlGl\":[\"AI アクティビティ\"],\"HKNZrs\":[\"インデックス条件\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"#\",\" 行を削除\"],\"other\":[\"#\",\" 行を削除\"]}]],\"HPuCiP\":[\"フォルダパス\"],\"HUs1R3\":[\"この接続に対して開いているタブはありません。\"],\"HV4Isp\":[\"SSH パスワードを入力\"],\"HVC8Hh\":[\"クリップボードにコピーしました\"],\"HWEpq8\":[\"ディスク書き込み/秒\"],\"HY4nP5\":[\"インライン\"],\"HcmoWv\":[\"ビューの保存に失敗しました: \"],\"He8v1Y\":[\"すべて適用から除外\"],\"HehHP1\":[\"デフォルトレイアウト\"],\"HilYn4\":[\"このノートブックは空です。セルを追加して始めましょう。\"],\"HjxVK_\":[\"簡易接続テスト\"],\"HmMnRx\":[\"WKT モード\"],\"HoKCiI\":[\"インストール後にアプリは自動的に再起動します\"],\"HpK_8d\":[\"再読み込み\"],\"Hpi4Jm\":[\"今すぐ参加\"],\"HuA3RU\":[\"タブ\"],\"I128p7\":[\"パイプ (|)\"],\"I3AgqA\":[\"SSH をインラインで設定\"],\"I5VBsr\":[\"アプリと同じ\"],\"I8yrPb\":[\"テーブルを置換\"],\"I92BdB\":[\"グループから削除\"],\"I92fr4\":[\"あとで通知\"],\"I99Miw\":[\"コスト\"],\"IETZIR\":[\"セル名を編集\"],\"IG9wzA\":[\"行の挿入に失敗しました: \"],\"ILleOG\":[\"リソースタイプは \\\"service\\\" または \\\"pod\\\" である必要があります\"],\"IQ3gAw\":[\"ファイルをアップロード\"],\"IUwGEM\":[\"変更を保存\"],\"IUwmLq\":[\"package.json および src-tauri/Cargo.toml に宣言された直接依存です。\"],\"IVrBTT\":[\"オープンソースライブラリ\"],\"I_43p6\":[\"セーフティ\"],\"Iaizf4\":[\"外観\"],\"Il3FBB\":[\"構造化フィルターパネルを切り替え\"],\"IniZRK\":[\"ダウンロード不可 - プレビューのみ読み込み済み\"],\"Isaozb\":[\"確認・調整\"],\"J17_9Z\":[\"トリガーの保存に失敗しました: \"],\"J2Cb95\":[\"このプラグインを経由するアクティブなクエリや接続は中断されます。\"],\"J6v1s_\":[\"デフォルトモデル\"],\"JE-DVk\":[\"インタプリタ\"],\"JEGlfK\":[\"開始\"],\"JKDPqP\":[\"先にコンテキストを選択してください\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"SSH トンネルを使用\"],\"JRz8tw\":[\"MySQL および MariaDB では、サポートされた EXPLAIN ANALYZE または ANALYZE FORMAT バリアントでのみ実測値が得られます。\"],\"JUICth\":[\"PNG、JPG、WebP または SVG · 最大 512 KB\"],\"JY5Oyv\":[\"データベース\"],\"JlFRIB\":[\"接続後に MySQL に送信するセッションタイムゾーンです。\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"拒否\"],\"K3H9p5\":[\"未設定\"],\"K5Dgu_\":[\"データベース\"],\"K8IGKf\":[\"認証方式\"],\"KAYNSW\":[\"メモリに保持するログの件数 (1〜10000)\"],\"KHTGbr\":[\"プリフライト EXPLAIN\"],\"KHvda8\":[\"NOT NULL\"],\"KJKNaZ\":[\"`column` 形式でコピー\"],\"KM5Kc8\":[\"少なくとも 1 つのカラムを選択してください\"],\"KSCnVQ\":[\"種別\"],\"KUjOb9\":[\"実行中\"],\"KXBdwy\":[\"ルーチンを更新\"],\"KXNyX7\":[\"DEFAULT に設定\"],\"Kd70-v\":[\"クリップボードからインポート...\"],\"KhI4oS\":[[\"0\"],\" で参照行を開く\"],\"KhgrNu\":[\"MCP サーバー連携\"],\"KirERL\":[\"タイムアウト\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"インデックスの削除に失敗しました: \"],\"KzeARD\":[\"テーブルの削除に失敗しました: \"],\"L-rMC9\":[\"デフォルトに戻す\"],\"L3HXkQ\":[\"バグ修正\"],\"LCZ7Dy\":[\"名前をコピー\"],\"LFDf6p\":[\"新しいデータベーストリガーを作成します\"],\"LK1m4W\":[\"インデックス\"],\"LMeAoR\":[\"行\"],\"LPCdc-\":[\"クエリタブ名プロンプト\"],\"LPFmga\":[\"すべて適用に含める\"],\"LYzbQ2\":[\"ツール\"],\"Lbis_V\":[\"クイックナビゲーター\"],\"Lcpbe2\":[\"プラグインプロセスを起動できませんでした。下記のエラー詳細を確認してください。\"],\"LhUHHO\":[\"生成 SQL プレビュー\"],\"LihabZ\":[\"EXPLAIN は DML ステートメント (SELECT, INSERT, UPDATE, DELETE) のみサポートされます。CREATE、DROP、ALTER などの DDL は説明できません。\"],\"LnT0hQ\":[\"カラムを追加\"],\"LvutiO\":[\"AI 提案\"],\"M-rHQO\":[\"フルスクリーンを終了\"],\"M0XJba\":[\"この接続のクエリ履歴をすべて削除してもよろしいですか?\"],\"M1co_O\":[\"設定済み\"],\"M73whl\":[\"コンテキスト\"],\"MDa5o0\":[\"例: before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"すべて表示\"],\"MXdOwj\":[\"接続を分離\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"K8s 接続を選択\"],\"Mc1tjS\":[\"ANALYZE を有効にすると、実行行数、時間、ループ、バッファを確認できます。\"],\"Mm4p0T\":[\"+\",[\"0\"],\" 行以上\"],\"Mp0jQ_\":[\"このドライバはテーブル作成時のみ主キーをサポートします\"],\"MqpZwN\":[\"Tabularis プロセス\"],\"MxIx43\":[\"↑↓で移動、Enterで開く\"],\"MygtgQ\":[\"Markdown セルを追加\"],\"N40H-G\":[\"すべて\"],\"N5UQxq\":[\"ポート \",[\"0\"],\" で Ollama を検出できませんでした。起動していますか?\"],\"N6GBcC\":[\"削除の確認\"],\"N6aqHp\":[\"実行クエリ\"],\"N9_S15\":[\"新規テーブルが作成されます\"],\"NBdMa1\":[\"最も遅いステップ\"],\"NC2AI2\":[\"長さ\"],\"NCzNnx\":[\"昇順で並び替え\"],\"NT4Ubs\":[\"カスタムキーを削除し、環境変数に戻します (存在する場合)\"],\"NUjrCO\":[\"検索に一致するお気に入りがありません\"],\"NWJrXh\":[\"トリガー SQL は必須です\"],\"NZUDnP\":[\"ツリー合計: \",[\"0\"]],\"Nc2VQn\":[\"既存に追加\"],\"NgFERn\":[\"お気に入りに追加\"],\"NktMHG\":[\"データベース名\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"テスト\"],\"Nq5QTk\":[\"N 番目を説明\"],\"O2STgu\":[\"エクスポートに失敗しました: \"],\"O8SV8O\":[\"ダウンロード中...\"],\"O9_WW6\":[\"接続\"],\"OGEsKj\":[\"すべてのセルを実行\"],\"OGWdBg\":[\"ビュー名\"],\"OHqT6w\":[\"キーの組み合わせを押してください...\"],\"OXJsaG\":[\"不正なパラメータ名です\"],\"OfhWJH\":[\"リセット\"],\"OlAl5i\":[\"すべて展開\"],\"Osn70z\":[\"デバッグ\"],\"Ou8b_n\":[\"Discord に参加\"],\"P1YGsb\":[\"SQL 生成\"],\"P2m1xb\":[\"エラー時に停止\"],\"P3Qlys\":[\"接続 ID がありません\"],\"P6Y3Yf\":[\"このコマンドをターミナルで実行し、Claude Code を再起動してください。\"],\"PCdj-c\":[\"すべて解除\"],\"PMnFt9\":[\"ディスク読み取り/秒\"],\"PQU2Va\":[\"Enter で候補を確定\"],\"PRnH8G\":[\"/ \",[\"0\"],\" 件中\"],\"PY8UF3\":[\"並列を切り替え(セル \",[\"n\"],\")\"],\"PiH3UR\":[\"コピーしました!\"],\"Pia95d\":[\"カラム名は必須です\"],\"PrElXQ\":[\"更新\"],\"PrixCC\":[\"既存テーブルに行が追加されます\"],\"Pujgbb\":[\"インポート先を設定\"],\"Pw_eQV\":[\"プラグインの起動に失敗\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"保存済みクエリはありません\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"子プロセスはありません\"],\"QCxMC0\":[\"アプリ起動時に自動で新しいバージョンを確認します\"],\"QEazml\":[\"選択を削除\"],\"QHcLEN\":[\"接続済み\"],\"QLHHFO\":[\"読み取り専用モード\"],\"QOvAW3\":[\"新機能\"],\"QULGRi\":[\"有効なクエリが見つかりません\"],\"QZwllF\":[\"参照...\"],\"QbkSr_\":[\"このクエリは EXPLAIN に対応していません。\"],\"QeHFYZ\":[\"EXPLAIN 失敗: \",[\"0\"]],\"Qll2Tb\":[\"降順\"],\"Qoq-GP\":[\"もっと読む\"],\"Qu4Hog\":[\"ノートブックを正常にインポートしました\"],\"R-A2Vd\":[\"表示するデータがありません\"],\"R0Hkb2\":[[\"0\"],\" 個のデータベースを選択中\"],\"R1nHhB\":[\"既に存在します\"],\"R2Iz3m\":[\"トリガー名\"],\"R6oBUl\":[\"コンソールに変換\"],\"R9Khdg\":[\"自動\"],\"RDjuBN\":[\"セットアップ\"],\"RF-HyV\":[\"使用する言語を選択します。「自動」はシステムの言語を使用します。\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"名前をコピー\"],\"RI-HZc\":[[\"0\"],\" キーを入力\"],\"RJrE17\":[\"ビュー「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"スターはプロジェクトを他の人に見つけてもらう助けになります\"],\"Rb3Tdm\":[\"ノートブック名\"],\"RcbKJ3\":[\"更新時\"],\"RkefFq\":[\"承認モーダルを表示する前にクエリに対して EXPLAIN を実行し、ユーザーに実行計画を表示します。\"],\"RnF_hl\":[\"プラグインレジストリを読み込み中...\"],\"Rns7_C\":[\"この操作はすぐには取り消せません\"],\"RoKRqW\":[\"利用可能なプラグイン\"],\"RphpKk\":[\"外観\"],\"Rt8sHM\":[\"ソートまたは一時処理を検出\"],\"RuSW0a\":[\"タイムスタンプの表示とエクスポートに使用するタイムゾーン。「自動」はシステムのタイムゾーンに従います。\"],\"RxzN1M\":[\"有効\"],\"S1veKH\":[\"選択を元に戻す\"],\"S5zeZU\":[\"プレビューを切り替え\"],\"S8Yqbl\":[\"挿入\"],\"SDND4q\":[\"未設定\"],\"SJRy3D\":[\"(自動生成)\"],\"SSwIjo\":[\"EMPTY に設定\"],\"SgvA_r\":[\"Run (Ctrl/Command+F5) を押してテーブルデータを読み込んでください\"],\"SlfejT\":[\"エラー\"],\"SoATkx\":[\"セルをコピー\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"エンドポイント URL\"],\"T7w5CQ\":[\"新規行の作成に失敗しました: \"],\"T9947j\":[\"値 (例: 'text' や 123)\"],\"TCizFv\":[\"タイムゾーンを検索...\"],\"TI33l7\":[\"垂直レイアウトに切り替え\"],\"TK5oex\":[\"プロンプトを保存\"],\"TKQ7K-\":[\"インストール\"],\"TKZreP\":[\"必須\"],\"TMLAx2\":[\"必須\"],\"TO08JI\":[\"外部キー\"],\"TVKqvO\":[\"行を編集\"],\"TYSdQ3\":[\"SELECTクエリを実行\"],\"TfDFHS\":[\"エディタ内の長い行を横スクロールせず折り返します。\"],\"Tibfjs\":[\"保存された接続がありません — 下で作成してください\"],\"Tj36Dr\":[\"デフォルトに戻す\"],\"Tjg925\":[\"トリガー定義を読み込み中...\"],\"TlZ7Ul\":[\"クエリをロック\"],\"TpwXyg\":[\"タイミングが欠落している場合、サーバーは推定のみのプランを返している可能性があります。\"],\"Tw2M1h\":[\"インストール失敗\"],\"Ty-rm9\":[\"SSH 接続\"],\"Tz0i8g\":[\"設定\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes 接続\"],\"U4uzyV\":[\"新機能\"],\"U8W7sX\":[\"トリガー定義の取得に失敗しました: \"],\"UB112k\":[\"セルが失敗したら実行を停止します\"],\"UCQiqt\":[[\"0\"],\" に対して\"],\"UECR2b\":[[\"0\"],\" が \",[\"1\"],\" 上 — 実行前に確認して判断してください。\"],\"UI85PB\":[\"条件に一致するトリガーがありません\"],\"UNKlAy\":[[\"clientName\"],\" の設定が正常にインストールされました。変更を反映するにはアプリを再起動してください。\"],\"URmyfc\":[\"詳細\"],\"UWQBvp\":[\"SQLテンプレートを生成\"],\"UawTKZ\":[\"任意。このプラグインの実行に使用する実行ファイルを指定します (例: macOS/Linux では python3、Windows では python またはフルパス)。空欄の場合はデフォルトが使用されます。\"],\"Ub8sf5\":[\"SQLite は ALTER TABLE による FK 削除をサポートしていません。\"],\"UbbJ8j\":[\"選択肢が見つかりません\"],\"Ubs68g\":[\"一般\"],\"UftN8J\":[\"これらの接続は MCP からの書き込みを拒否します。他の接続は通常通り動作します。\"],\"UnQNah\":[\"テーブル「\",[\"tableName\"],\"」のカラム「\",[\"0\"],\"」を削除してもよろしいですか?\\n\\n警告: このカラムのすべてのデータが完全に削除されます。この操作は取り消せません。\"],\"UncTTh\":[\"プロセスツリー全体の RSS 合計 — 共有メモリを重複して計算している可能性があります\"],\"UpjgFm\":[\"パラメータを変更\"],\"UsAnu1\":[\"ANALYZE はクエリを実行します。データを変更するステートメントでは注意して使用してください。\"],\"UxKoFf\":[\"ナビゲーション\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"タブサイズ\"],\"UzWGWO\":[\"SQL WHERE 入力に切り替え\"],\"V-chk5\":[\"アクティブな接続の生存確認を行う間隔です。0 にすると無効になります。\"],\"V-pw1j\":[\"テーブル名\"],\"V2T0Uw\":[\"保存されたノートブックはまだありません。\"],\"V3aNwx\":[\"データエディタ\"],\"VGYp2r\":[\"すべてに適用\"],\"VH8S7x\":[\"クリップボードのカラム\"],\"VIAEcS\":[\"データベースの読み込みに失敗しました。認証情報を確認してください。\"],\"VKdztF\":[\"行を追加\"],\"VLiHXI\":[\"分析データ\"],\"VMbmXc\":[\"「\",[\"pluginName\"],\"」を削除してもよろしいですか?プラグインファイルが削除されます。\"],\"VO3weF\":[\"ファイルが読み込まれていません\"],\"VOZlKc\":[\"データベースをインポート\"],\"VPzsIz\":[\"名前を生成中...\"],\"VUul0v\":[\"強制終了中:\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"トリガーの削除に失敗しました: \"],\"VfOb_W\":[\"トリガーが見つかりません\"],\"Vgy9LX\":[\"すべてのクエリ\"],\"Vi2Pqx\":[\"作成者:\"],\"Vl2zn2\":[\"停止\"],\"Vo4uBA\":[\"プラグインのインストール中にエラーが発生しました。詳細は下記を参照してください。\"],\"VqqyOs\":[\"クエリを実行すると結果が表示されます\"],\"VzhDFh\":[\"下記で明示的に許可されていない限り、MCP 経由の SELECT 以外のステートメントをブロックします。\"],\"W3uwpT\":[\"すべてのタブを閉じる\"],\"W4MKLh\":[\"例: 本番環境でリスクがありそう、確認お願いします…\"],\"W60eXm\":[\"テーブル\"],\"WA8RND\":[\"テーブル「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"WG8Qgt\":[\"テーブルを削除\"],\"WLnvCZ\":[\"ユーザー名を入力\"],\"WM-__8\":[\"接続を検索...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行を「\",[\"tableName\"],\"」にインポートしました\"],\"other\":[\"#\",\" 行を「\",[\"tableName\"],\"」にインポートしました\"]}]],\"WTfntM\":[\"クエリ「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"WarTN_\":[\"成功\"],\"WcF1uL\":[\"グループ名\"],\"Weq9zb\":[\"一般\"],\"WmPpB1\":[\"実行計画を読み込み中…\"],\"Wu7cK0\":[\"データベースが見つかりません\"],\"WvoUQF\":[\"セル \",[\"n\"],\" を削除\"],\"Ww3pDD\":[\"手動コマンド\"],\"X-20AU\":[\"クエリタブ名プロンプトを入力...\"],\"X-U6_w\":[\"フォントファミリー\"],\"X5fs0g\":[\"最初の接続を作成して始めましょう。\"],\"X7Ayjp\":[\"パスワードをシステムのキーチェーンに保存しました\"],\"X9kySA\":[\"お気に入り\"],\"XJOV1Y\":[\"アクティビティ\"],\"XMCLEL\":[\"トリガーを新規作成\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"クエリ説明\"],\"XVF2Pf\":[\"スキーマを編集\"],\"XW6OYF\":[\"このプラグインにはインタプリタ (例: Python) が必要な場合があります。プラグイン設定からインタプリタのパスを設定してください。\"],\"XZB6Xr\":[\"最大ログエントリ数\"],\"Xcffv2\":[\"エディタに AI Assist と Explain ボタンを表示します\"],\"XeqTSh\":[\"結合タイプ\"],\"XmJfZT\":[\"名前\"],\"XoQfG1\":[\"SSH ユーザー\"],\"XwI0Vw\":[\"自動 (システム)\"],\"XyDlLX\":[\"インデックス名\"],\"Y2P2aK\":[\"読み込むスキーマを選択:\"],\"Y8HYw2\":[\"値\"],\"Y8zX3R\":[\"エディタに挿入\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"検索...\"],\"YWlnMZ\":[\"Ollama ポート\"],\"YYdC3A\":[\"バージョン \",[\"0\"]],\"YYn8b5\":[\"レジストリからプラグインを閲覧・インストールします。\"],\"Y_3yKT\":[\"新しいタブで開く\"],\"YiAQ_Q\":[\"テーブルを更新\"],\"Ysjr9Y\":[\"SQL プレビュー\"],\"YswNf7\":[\"すべてのレベル\"],\"YtNwr6\":[\"接続ごとに保存されるクエリ履歴の最大件数です。\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"読み込み中...\"],\"Z7ZXbT\":[\"承認\"],\"Z8JpBH\":[\"ノートブックとしてエクスポート\"],\"Z8fBIc\":[\"実行行数が推定を超過\"],\"ZC2VJP\":[\"実行\"],\"ZCIS4k\":[\"有効なフィルターなし\"],\"ZF1_UT\":[\"SSL モード\"],\"ZGjBPa\":[\"ログを消去\"],\"ZHQTlM\":[\"インポート元\"],\"ZIFDoJ\":[\"構造かデータのいずれかを選択してください\"],\"ZIZA6o\":[\"承認前に編集\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件の解析警告\"],\"other\":[\"#\",\" 件の解析警告\"]}]],\"ZVn8p2\":[\"エディタの左端に行番号を表示します。\"],\"ZYnwzF\":[\"切断済み\"],\"Za3_fO\":[\"エラー\"],\"ZcOxO1\":[\"外部キーを作成\"],\"Zf7LHg\":[\"コンテキストが見つかりません(kubectl はインストールされていますか?)\"],\"Zfotp5\":[\"大きな推定乖離は通常、古い統計やプランナーがモデル化しきれない述語を示します。\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"スキーマの読み込みに失敗しました\"],\"ZqXGPF\":[\"ビューの削除に失敗しました: \"],\"ZuL73E\":[\"新しいデータベースビューを作成します\"],\"_-bi4r\":[\"参照テーブル\"],\"_AEYGI\":[\"実行履歴はまだありません\"],\"_FdpZc\":[\"ビュー定義の読み込みに失敗しました: \"],\"_FxSdi\":[\"アプリ、バックエンド、ツールで使用している直接依存のオープンソースを閲覧できます。\"],\"_JyTG8\":[\"説明プロンプトを入力...\"],\"_Ltc_k\":[\"詳細\"],\"_Q2Wix\":[\"行\"],\"_TK1zF\":[\"保存された接続\"],\"_bJFBE\":[\"接続タイムアウト\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Tree\"],\"_dqduX\":[\"次のページ\"],\"_fwE6J\":[\"それ以前\"],\"_n04sB\":[\"停止\"],\"_otxbQ\":[\"鍵ファイル\"],\"_pezIT\":[[\"0\"],\" への接続に失敗しました。設定を確認するか、データベースが稼働していることを確認してください。\"],\"_srfkj\":[\"カスタムキーを正常に削除しました\"],\"_t6aFo\":[\"MySQL および MariaDB はサーバーのバージョンに応じて EXPLAIN FORMAT=JSON または表形式 EXPLAIN にフォールバックする場合があります。\"],\"_xTbaM\":[\"カラム\"],\"_yxaaL\":[\"ユニークインデックス\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis は無料のオープンソースプロジェクトです。便利だと感じたら、プロジェクトのサポートやコミュニティへの参加をご検討ください。\"],\"a9CASo\":[\"SQLite はカラムの名前変更のみサポートします。その他の変更にはテーブルの再作成が必要です。\"],\"aAIQg2\":[\"外観\"],\"aAURrV\":[\"インストール済み\"],\"aC_vCa\":[\"AI で名前を生成\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"ノードを選択して詳細を表示\"],\"aHKcKc\":[\"前のページ\"],\"aI-5wG\":[\"CAを検証\"],\"aJJySV\":[\"例: users\"],\"aQ8swY\":[\"デフォルト値\"],\"aScJP1\":[\"このクエリを実行\"],\"aVNbN8\":[\"フィルター条件\"],\"aWhdMQ\":[\"既存の SSH 接続を使用\"],\"aXYd8V\":[\"タイムアウト\"],\"aX_S_r\":[[\"0\"],\" / \",[\"totalPages\"],\" ページ\"],\"agZcf8\":[\"生成された SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [フィールド]\"],\"alplHn\":[\"AI でクエリ計画を分析中...\"],\"anBcU3\":[\"Tabularis を気に入っていただけたら、コードへの貢献、バグ報告、リポジトリへのスターなどでプロジェクトのサポートをご検討ください。\"],\"arHmj2\":[\"このクエリを履歴から削除してもよろしいですか?\"],\"arKcqW\":[\"古いサーバーでは、指標の少ない推定プランにフォールバックする場合があります。\"],\"arcpYe\":[\"承認が必要\"],\"aurEkh\":[\"プロセスを読み込み中…\"],\"avtdsd\":[\"SQL モード\"],\"az8lvo\":[\"オフ\"],\"b1Ah3z\":[\"フォーカス中\"],\"b392Dr\":[\"すべて展開\"],\"b5S_PU\":[\"データベース名\"],\"bAvovP\":[\"下に移動\"],\"bH3JqY\":[\"テーブルが見つかりません\"],\"bP5JOn\":[\"ワードラップ\"],\"bcOdok\":[\"グループを削除\"],\"bcqeas\":[\"MCP クエリをすべて読み取り専用にする\"],\"bmca5u\":[\"書き込みのみ\"],\"bpCiBU\":[\"MCP からの書き込みを許可\"],\"bqnhqW\":[\"推定が実行行数を超過\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"エラーで失敗\"],\"bw22Gk\":[\"カラムスキーマ\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"主な問題\"],\"cFCKYZ\":[\"拒否\"],\"cFGrCP\":[\"テーブル\"],\"cGeFup\":[\"フォントサイズ\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"テーブルにフォーカス\"],\"cM9NHc\":[\"ダウングレード:\"],\"cO9-2L\":[\"無効\"],\"cSev-j\":[\"フィルター\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行をインポート\"],\"other\":[\"#\",\" 行をインポート\"]}]],\"c_xoSn\":[\"セル \",[\"n\"],\" の名前を変更\"],\"cd0XEW\":[\"クエリを保存\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"グループを分割\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" ステートメント\"],\"d34vwG\":[\"データベースを読み込み\"],\"d6ynQ7\":[\"降順で並び替え\"],\"d8_6_v\":[\"キャンセル\"],\"d8wc1_\":[\"サンプル値\"],\"dBXoCS\":[\"環境変数が検出されていますが、上でキーを設定すれば上書きできます。\"],\"dD7NPy\":[\"アウトライン\"],\"dEgA5A\":[\"キャンセル\"],\"dMtLDE\":[\"終了\"],\"dPJVhW\":[\"インストール失敗\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のセッション\"],\"other\":[\"#\",\" 件のセッション\"]}]],\"dTUzKm\":[\"選択したものを実行 (\",[\"0\"],\")\"],\"dU_iQN\":[\"現在のフィルタに一致するセッションがありません。\"],\"dUh9QW\":[\"プランニング\"],\"dVoir2\":[\"Markdown セル \",[\"n\"],\" を追加\"],\"dZ0d2O\":[\"少なくとも 1 つのテーブルを選択してください\"],\"dhi13U\":[\"画像を選択…\"],\"dli1JX\":[\"変更を送信\"],\"dmYV6f\":[\"ルーチン\"],\"dohZCo\":[\"AI による SQL 生成の指示です。\",[\"SCHEMA\"],\" をデータベース構造のプレースホルダーとして使用します。\"],\"dtxpK2\":[\"分析\"],\"dwW9nJ\":[\"行番号を表示\"],\"dwWVw_\":[\"ウェルカム画面を表示\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"既存時の動作\"],\"dyN4j9\":[\"「プレビューを実行」をクリックすると結果が表示されます\"],\"e07Iz5\":[\"タスクマネージャを開く\"],\"e0NzXu\":[\"このプロジェクトは現在開発中 (WIP) です。主要機能は安定していますが、より大きな構想も進めています。\"],\"e1UKxf\":[\"このクエリを保存\"],\"e34gdU\":[\"MCP サブプロセスがリクエストをタイムアウトさせる前にユーザーの判断を待つ時間。\"],\"e62LQd\":[\"強制終了\"],\"e6QZsM\":[\"エディタテーマ\"],\"e8CirT\":[\"クエリを実行\"],\"eD2kUP\":[\"バッファ読み込み\"],\"eE0JZ4\":[\"バージョン\"],\"eIDch7\":[\"実行計画分析プロンプトを入力...\"],\"eIVolo\":[\"ディスク R/W\"],\"eJOEBy\":[\"エクスポート中...\"],\"eKHY3W\":[\"プラグイン設定\"],\"eMb6Ub\":[\"リソースを選択...\"],\"ePK91l\":[\"編集\"],\"eXweu6\":[\"セルを展開\"],\"ecNsTE\":[\"検索に一致するクエリがありません\"],\"ecUA8p\":[\"今日\"],\"ecpIZP\":[\"鍵が暗号化されている場合はパスフレーズを入力\"],\"ejmeDY\":[\"インストール済み\"],\"esl-Tv\":[\"リソースタイプ\"],\"exyUec\":[\"接続\"],\"f2AJjl\":[\"行を削除\"],\"f4pD-j\":[\"接続テストに失敗しました\"],\"f7sXvi\":[\"パスワードを入力\"],\"fAsxc0\":[\"シーケンシャルスキャン\"],\"fIeFs0\":[\"値を選択...\"],\"fJm92A\":[\"EXPLAIN プランを含むファイル (Postgres JSON またはテキスト形式) を選択して可視化します。\"],\"fOuPPd\":[\"プラグイン\"],\"fXVIZq\":[\"値\"],\"f_b1TA\":[\"実行履歴\"],\"fghnqP\":[\"接続 1〜9 に切り替え\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"カンマ (,)\"],\"fp711N\":[\"ブロック (読み取り専用)\"],\"fpzyLj\":[[\"0\"],\" / \",[\"1\"],\" ページ\"],\"fuA6oy\":[\"ソケットタイムアウト\"],\"fvImQM\":[[\"0\"],\" 件選択中\"],\"fwr_nh\":[\"拡張機能のインストール、プラグインドライバの管理、実行時設定のコントロールを行います。\"],\"g0ZzK4\":[\"有効な JSON\"],\"g11hAR\":[\"新規行\"],\"g8VcMm\":[\"マイ K8s クラスター\"],\"gCFR_O\":[\"並列実行 (すべて実行)\"],\"gEjU98\":[\"接続を開く\"],\"gPQ8z1\":[\"NULL 許可\"],\"gShKPx\":[\"少なくとも 1 つのカラムが必要です\"],\"gSuQrG\":[\"「\",[\"search\"],\"」に一致する接続はありません\"],\"gUypqb\":[\"クエリを再実行\"],\"gZWMnn\":[\"AI 分析\"],\"ghYd73\":[\"対象を選択...\"],\"giAqEC\":[\"新規テーブルを作成\"],\"gnQS8X\":[\"MySQL コネクタが使用する最大パケットサイズです。\"],\"gqV5VL\":[\"組み込み、カスタマイズ不可\"],\"gww_XE\":[\"参照カラム\"],\"gxXPJ9\":[\"インタプリタを設定\"],\"gxutEv\":[\"トリガーを正常に更新しました\"],\"gz6UQ3\":[\"最大化\"],\"h-XNc9\":[\"CSV 区切り文字\"],\"h-kNAk\":[\"例: sales_data\"],\"h3Z_aK\":[\"ここに Markdown を記述...\"],\"h7MgpO\":[\"キーボードショートカット\"],\"h7peZQ\":[\"許可\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 個のシステムプロセスが実行中\"],\"other\":[\"#\",\" 個のシステムプロセスが実行中\"]}]],\"hEZrFh\":[\"SQL ファイルを実行...\"],\"hEipgW\":[\"今すぐアップデートを確認\"],\"hG89Ed\":[\"画像\"],\"hIHcBE\":[\"CSV としてエクスポート\"],\"hItdtk\":[\"フォルダを参照\"],\"hXFVjo\":[\"テーブル名は必須です\"],\"hZ6znB\":[\"ポート\"],\"h_huI6\":[\"再実行\"],\"hbz1rh\":[\"キー\"],\"hdsaJo\":[\"インポート中...\"],\"he3ygx\":[\"コピー\"],\"hfGimp\":[\"ネームスペースを選択...\"],\"hjjSEi\":[\"読み取り専用接続\"],\"hjwN_s\":[\"リソース名\"],\"hlF1mD\":[\"選択範囲をコピー\"],\"hnboBb\":[\"AI によるクエリ計画分析\"],\"hnvu2p\":[\"エラーの詳細\"],\"hq4-D2\":[\"API キーはシステムのキーチェーンに安全に保管されます。ここでキーを設定すると環境変数より優先されます。\"],\"hqjXdn\":[\"SSH 接続の削除に失敗しました\"],\"hqofAK\":[\"SQL をコピー\"],\"hy6L14\":[\"GitHub で表示\"],\"hyjACX\":[\"セルを折りたたみ/展開\"],\"hz1b5W\":[\"一致する要素が見つかりません\"],\"i1vAVM\":[\"新規テーブルを作成\"],\"i3S5T3\":[\"お気に入りを検索...\"],\"i4_LY_\":[\"書き込み\"],\"i5HBWh\":[\"クエリ履歴をリセットしました\"],\"i5zCt4\":[\"テーブル\"],\"iAVlge\":[\"AI によるノートブックセル名生成の指示をカスタマイズします。セルの内容 (SQL または Markdown) がユーザーメッセージとして送信されます。\"],\"iE1yAB\":[\"テーブルをフィルター...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"接続\"],\"iSryJ2\":[\"My SSH Server\"],\"iT7UeX\":[\"インデックスを追加\"],\"iUWwuR\":[\"ダウンロードしてインストール\"],\"ia7i08\":[\"先にコンテキスト/ネームスペース/タイプを選択してください\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"保存しました\"],\"igcsfY\":[\"レジストリに利用可能なプラグインがありません。\"],\"ij-Elv\":[\"画像プレビュー\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"説明可能なクエリが \",\"#\",\" 件見つかりました\"],\"other\":[\"説明可能なクエリが \",\"#\",\" 件見つかりました\"]}]],\"ioL38P\":[\"プラグインプロセス、CPU、RAM、ディスク使用量をリアルタイムで監視します\"],\"ixlL_e\":[\"SSH 鍵ファイル (任意)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"モデルを選択\"],\"j3gyYH\":[\"すべて適用\"],\"j5CWO4\":[\"最新\"],\"j9HPuI\":[\"行 #\",[\"0\"]],\"jBtpMP\":[\"すべてのステータス\"],\"jEu4bB\":[\"カラム\"],\"jEyQIs\":[\"ルーチンが見つかりません\"],\"jHc1By\":[\"ビューを削除\"],\"jI6sj4\":[\"コスト、タイミング、行数推定は PostgreSQL や MySQL と比べて得られないことが多いです。\"],\"jIxQCZ\":[\"お使いのプラットフォームでは利用できません\"],\"jKIncn\":[\"データベース名は必須です\"],\"jPSk57\":[\"理由 (任意)\"],\"jUNY_d\":[\"ビュー\"],\"jVqjDo\":[\"不正なノートブックファイル形式です\"],\"jWSZ-A\":[\"プレビューのみ - 完全なデータは読み込まれていません\"],\"jgjIDU\":[\"既存のトリガーの削除に失敗しました: \"],\"jnhuWy\":[\"ソケットタイムアウト (ミリ秒)。\"],\"jpeU_Z\":[\"ノートブック\"],\"jpgB4Y\":[\"接続名は必須です\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"子プロセス\"],\"jx0t66\":[\"子プロセスを折りたたむ\"],\"k-0mL-\":[\"カラムを追加\"],\"k-XiMX\":[\"Raw\"],\"k2UnVy\":[\"ハッシュ条件\"],\"k5UUX3\":[\"トリガーを正常に作成しました\"],\"kALwhk\":[\"秒\"],\"kBiBq7\":[\"インデックス「\",[\"name\"],\"」を削除しますか?\"],\"kEYasw\":[\"チャートを切り替え\"],\"kI1qVD\":[\"整形\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行 · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" 行 · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"イベントの詳細\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"レジストリ\"],\"kY-q3P\":[[\"label\"],\" は必須です\"],\"kexIdC\":[\"Kubernetes ポートフォワードを使用\"],\"krksx_\":[\"成功\"],\"ktYUe9\":[\"すべて実行\"],\"kwY6nh\":[\"閉じる\"],\"kx0s-n\":[\"結果\"],\"kxUEfE\":[\"ルーチン定義の取得に失敗しました: \"],\"l2Op2p\":[\"クエリパラメータ\"],\"l9Ivba\":[\"プラグインプロセスとシステムリソース\"],\"lBdPxu\":[\"アクセントカラー\"],\"lCF0wC\":[\"更新\"],\"lEQRwq\":[\"データ (INSERT)\"],\"lIvS11\":[\"トリガーを再作成\"],\"lKS0ce\":[\"新規テーブルを作成しました\"],\"lOekZ3\":[\"水平レイアウトに切り替え\"],\"lUA1C1\":[\"SSH 鍵のパスフレーズ (任意)\"],\"lVeG20\":[\"Rust 依存\"],\"lXAG6D\":[\"AI によるクエリ説明の指示です。\",[\"LANGUAGE\"],\" を出力言語のプレースホルダーとして使用します。\"],\"lbbYjy\":[\"生の設定ファイルを直接編集します。変更を反映するには再起動が必要です。\"],\"lhKW0m\":[\"SQL セル \",[\"n\"],\" を追加\"],\"lk-wOz\":[\"トリガーを絞り込み...\"],\"lk0x32\":[\"結果ページサイズ (上限)\"],\"lkz6PL\":[\"所要時間\"],\"lmVGeo\":[\"外部キーを追加\"],\"lnnx3E\":[\"Tabularis を Claude Desktop、Cursor などに接続\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"追加\"],\"m2Q_r8\":[\"Detect JSON in text columns\"],\"m2tskz\":[\"成功\"],\"mA-qpe\":[\"すべての実行が完了\"],\"mBhhbA\":[\"ログをクリップボードにエクスポートしました\"],\"mCNdzH\":[\"セルを実行\"],\"mO95sp\":[\"パネルを閉じる\"],\"mP7dLi\":[\"上にフォント名を入力してください\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件ブロック\"],\"other\":[\"#\",\" 件ブロック\"]}]],\"mS74ir\":[\"SSH 接続の保存に失敗しました\"],\"mSqtw8\":[\"プレビューを実行\"],\"mURmfQ\":[\"ビュー定義 (SQL)\"],\"mX_isJ\":[\"垂直\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"構造 (DDL)\"],\"mrk4Cf\":[[\"colName\"],\" を降順で並べ替え\"],\"msJ8t1\":[\"Tabularis ユーザー専用のコミュニティを立ち上げました。質問・情報交換・ロードマップへのフィードバックをお寄せください。\"],\"mtvVdV\":[\"処理行数\"],\"mx4evv\":[\"テーブルを作成\"],\"myXGZW\":[\"ガイド\"],\"mzI_c-\":[\"ダウンロード\"],\"n7JDTx\":[\"プラグインをインストールして有効化するとここに表示されます\"],\"nDDJir\":[\"セッション、クライアント、接続を検索…\"],\"nHP-Kr\":[\"アクティブなセッションがありません。接続を選択してください。\"],\"nKhCjW\":[\"テーブルを選択\"],\"nNwvm4\":[\"エラー\"],\"nOVim5\":[\"接続の保存に失敗しました\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"イベント\"],\"nf14vn\":[\"拡張機能が必要: \",[\"0\"]],\"ngO6Pv\":[\"Tab に加えて Enter でもオートコンプリートの候補を確定できるようにします。オフの場合、Enter は常に改行を挿入します。\"],\"nhmF3p\":[\"接続\"],\"noM5A_\":[\"最初の接続を作成\"],\"nohy4m\":[\"MCP アクティビティはまだありません。\"],\"nr-axf\":[\"プラグインを削除\"],\"nsPFX9\":[\"Visual Explain で開く\"],\"nuBbBr\":[\"チャート\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"データベースをダンプ\"],\"o-XJ9D\":[\"変更\"],\"o21Y-P\":[\"件\"],\"o3tP_A\":[\"インデックスを削除\"],\"o45L8r\":[\"接続名を入力\"],\"o53XGh\":[\"選択した行をコピー\"],\"o7J4JM\":[\"フィルター\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"レベル\"],\"oGiIL7\":[\"デフォルトプロバイダ\"],\"oH8GS6\":[\"定義を表示\"],\"oJ4rAm\":[\"接続が失われました\"],\"oJlXF2\":[\"ノートブックをインポート\"],\"oMFv82\":[\"垂直分割\"],\"oOFiQg\":[\"パフォーマンス問題を避けるため、クエリごとに取得する行数を制限します。0 に設定すると無効化されます (非推奨)。\"],\"oT9ZD3\":[\"概要を非表示\"],\"oUzLtx\":[\"トリガーを編集するには、いったん削除して再作成する必要があります。「\",[\"name\"],\"」の変更を続行しますか?\"],\"oVRbyk\":[\"チャートを変更(セル \",[\"n\"],\")\"],\"oWfclW\":[\"Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.\"],\"obpbdz\":[\"設定ファイルが見つかりません (手動で作成してください)\"],\"odZgfC\":[\"AI クライアント\"],\"ogZhXn\":[\"ER 図のデフォルトのレイアウト方向を選択します\"],\"ohUJJM\":[\"プラグイン\"],\"olAdaI\":[\"実行行数\"],\"olWzar\":[\"プラグインプロセスを強制終了\"],\"ovBPCi\":[\"デフォルト\"],\"owzTWN\":[\"プロバイダから AI モデルを更新しました\"],\"oxYi6j\":[\"アプリケーション全体で使用される基本フォントサイズを調整します (10〜20px)。\"],\"p--hsQ\":[\"データベース接続が失われました\"],\"p6NueD\":[\"NEW\"],\"pOYHox\":[\"アクション\"],\"pR9bTR\":[\"BLOB データなし\"],\"pS8S5q\":[\"例: users, orders, products\"],\"pSws_M\":[\"テーブル名\"],\"pVLbKZ\":[\"ビューを正常に作成しました\"],\"pWT04I\":[\"確認中...\"],\"pZJ_6D\":[\"インデックス名は必須です\"],\"pddYFG\":[\"ノートブックセル名プロンプトを入力...\"],\"pnpyuD\":[\"ログを有効化\"],\"pqKMPv\":[\"テーブルの作成に失敗しました: \"],\"pqaP1h\":[\"閉じる\"],\"pqarBu\":[\"昇順\"],\"ptuq35\":[\"例: Comic Sans MS\"],\"pzu7v4\":[\"水平\"],\"q-ch8m\":[\"他のすべての接続は読み取り専用のままです。ここでチェックされた接続のみ書き込みを実行できます。\"],\"qA5jLs\":[\"エラーの詳細\"],\"qIrtcK\":[\"アップデート\"],\"qOqy8G\":[\"設定を確認中...\"],\"qWaVNs\":[\"保存して再起動\"],\"qb3LPX\":[\"ER 図を表示\"],\"qkK0vq\":[\"ビュー名は必須です\"],\"qki9tG\":[\"エラー\"],\"qoIir-\":[\"OpenAI 互換 API のベース URL です。例: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"すべて折りたたむ\"],\"r6ncaO\":[\"タブを閉じる\"],\"rAJlpP\":[\"コンテナポート\"],\"rG3WVm\":[\"SELECT\"],\"rGRCeK\":[\"クエリ履歴を削除\"],\"rNIto7\":[\"リソース名は必須です\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"ノートブックを正常にエクスポートしました\"],\"rY4sEV\":[\"FK を削除\"],\"rbu0nO\":[\"SSH 接続を管理\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件の接続\"],\"other\":[\"#\",\" 件の接続\"]}]],\"rn2_2V\":[\"フィルターを削除\"],\"roABNH\":[\"クエリ履歴はありません\"],\"rtir7c\":[\"不明\"],\"ru0-2W\":[\"アクティブな接続はありません\"],\"rvDPWO\":[\"推定の乖離\"],\"rwWjWg\":[\"リリースノート\"],\"s6m9gy\":[\"トリガー「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"s7uMvM\":[\"接続テスト\"],\"sBOaim\":[\"設定ファイルを保存しました。変更を反映するために今すぐ再起動しますか?\"],\"sCyv9B\":[\"モデルを更新\"],\"sSUqe4\":[\"削除\"],\"sUBkgN\":[\"SQL を生成中...\"],\"sZZG3d\":[\"「\",[\"0\"],\"」をインポートしてもよろしいですか?\\n既存のデータが上書きされる可能性があります。\"],\"sbK5ck\":[\"履歴を検索...\"],\"sq_bS6\":[\"削除時\"],\"suW7-E\":[\"接続タイムアウト (ミリ秒)。\"],\"suqtBX\":[\"Escで閉じる\"],\"t-R8-P\":[\"実行\"],\"t1OfVY\":[[\"totalLibraries\"],\" 個のライブラリ\"],\"t2TMzs\":[\"タブを閉じる\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"テーブルを選択...\"],\"t7KRl1\":[\"すべての MCP ツール呼び出しの監査ログと、承認待ちのクエリ。ローカルに保存され、外部には送信されません。\"],\"t9NJIk\":[\"スキャンの多い操作を検出\"],\"tB7xof\":[\"一時またはソート操作\"],\"tBBXTO\":[\"Ping 間隔\"],\"tFrT3w\":[\"自動インストールが失敗する場合は、これをクライアントの設定ファイルに手動で追加してください。\"],\"tJ7UbA\":[\"フォーカス中のものを説明\"],\"tKlWWY\":[\"絵文字\"],\"tMFzq-\":[\"水平分割\"],\"tQhW-D\":[\"ログ設定\"],\"tT-BQX\":[\"インストール済み\"],\"tXFGEx\":[\"保存された Kubernetes 接続がありません。「追加」をクリックして作成してください。\"],\"tXLz_8\":[\"削除\"],\"tXpRby\":[\"データグリッド\"],\"tbysEk\":[\"操作\"],\"tdta9X\":[[\"0\"],\" ページ\"],\"tfDRzk\":[\"保存\"],\"tfEioV\":[\"上から下へすべての SQL セルを実行\"],\"tiAIaJ\":[\"SSH パスワードが未入力です。再入力してください。\"],\"tk22BR\":[\"構造化データを貼り付け、インポート前にスキーマをプレビューします\"],\"tst44n\":[\"イベント\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL ファイルを正常に実行しました\"],\"u6QeR6\":[\"今すぐ再起動\"],\"uAQUqI\":[\"ステータス\"],\"uBAxNB\":[\"エディタ\"],\"uBI8D9\":[\"Esc で閉じる\"],\"uFViPK\":[\"利用可能な SSH 接続がありません\"],\"uHUuhp\":[\"このクエリを説明\"],\"uHfFzS\":[\"エディタのフォントサイズ\"],\"uJ_3K5\":[\"ノートブック「\",[\"0\"],\"」を削除しますか?この操作は元に戻せません。\"],\"uKaNJ3\":[\"Open in JSON Editor\"],\"uQBwTo\":[\"スキーマ\"],\"ub54ff\":[\"プラグインセンター\"],\"ufFyBs\":[\"データベースを正常にエクスポートしました\"],\"upNmR2\":[\"サイドバーエディタで開く\"],\"upwIY4\":[\"ビュー定義\"],\"utMia3\":[\"すべて解除\"],\"uyNaJg\":[\"1件\"],\"v61dnS\":[\"OpenAI 互換プロバイダの正確なモデル名を入力してください。\"],\"v6oeyr\":[\"インストール済み\"],\"v75DGg\":[\"ファイルを参照\"],\"v99dO4\":[\"主キー\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のクエリが見つかりました\"],\"other\":[\"#\",\" 件のクエリが見つかりました\"]}]],\"vCSBPD\":[\"フィルターを追加\"],\"vH7uJj\":[\"並び替え…\"],\"vUOA1-\":[\"モデルを検索...\"],\"vWcB0p\":[\"PostgreSQL の ANALYZE では、利用可能な場合は実行行数、時間、ループ、バッファカウンタが含まれます。\"],\"vXIe7J\":[\"言語\"],\"vYf4Jm\":[\"完全な SQL 関数を入力してください (例: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"優先\"],\"vditm4\":[\"実行計画\"],\"vks_ls\":[\"他のタブを閉じる\"],\"vnAnIp\":[\"\",[\"1\"],\" ではモデル \",[\"0\"],\" が見つかりません。正しく動作しない可能性があります。\"],\"vqoN5u\":[\"構造\"],\"vrAvbP\":[\"グループ「\",[\"0\"],\"」を削除してもよろしいですか?このグループ内の接続は未分類に移動されます。\"],\"vtJ2yO\":[\"エクスプローラー\"],\"vujQJ5\":[\"ローカライズ\"],\"vvJPVL\":[\"概要を表示\"],\"vwI5S4\":[\"成功\"],\"vzH-7Z\":[\"Explain\"],\"w7QmD_\":[\"システムプロンプトを入力...\"],\"w9eMXw\":[\"トリガー\"],\"wCJFlW\":[\"経過時間\"],\"wCfv2R\":[\"接続を追加\"],\"wGfc86\":[\"すべての履歴を削除\"],\"wGwNv4\":[\"アクティブなデータベース\"],\"wJJ-Wy\":[\"インストール中...\"],\"wMe2Qp\":[\"ネームスペース\"],\"wQiel_\":[\"バッファヒット\"],\"wQn-RM\":[\"カラムを追加\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"適用済み\"],\"wTmVhm\":[\"削除\"],\"wZeIWq\":[\"クリップボードからインポート\"],\"w_bY7R\":[\"ログ\"],\"wc_8bA\":[\"承認待ち\"],\"wckWOP\":[\"管理\"],\"wdYcKH\":[\"開いているタブ\"],\"wja8aL\":[\"無題\"],\"wkOAzk\":[\"一致するノートブックがありません。\"],\"wp49Ao\":[\"挿入の処理に失敗しました: \"],\"wqG2hQ\":[\"スキップ (インポートしない)\"],\"wwrAsK\":[\"必須項目をすべて入力してください\"],\"wwu18a\":[\"アイコン\"],\"x2fr_j\":[\"グラフ\"],\"xANKBj\":[\"関数\"],\"xBwjck\":[\"変更を反映するには再起動が必要です。\"],\"xDAtGP\":[\"メッセージ\"],\"xECY01\":[\"プロシージャ\"],\"xGPNgZ\":[\"プロンプトのカスタマイズ\"],\"xNgtS-\":[\"ビューが見つかりません\"],\"xOPa1b\":[\"ポートは 1 から 65535 の範囲で指定してください\"],\"xY9s5E\":[\"タイムアウト\"],\"xaVUr1\":[\"いろはにほへと ちりぬるを わかよたれそ つねならむ\"],\"xbvTzL\":[\"ファイルパス\"],\"xlew5F\":[\"クリア\"],\"xmNyKz\":[\"テスト中...\"],\"xtuh6D\":[\"エクスプローラーを展開\"],\"y-Zdqj\":[\"コンテキストを選択...\"],\"y3HaQk\":[\"タイミング\"],\"yLFey_\":[\"トリガーを作成\"],\"yLianM\":[\"Open JSON viewer\"],\"yQXjG5\":[\"すべて解除\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"トリガーを編集\"],\"y_0uwd\":[\"昨日\"],\"ygCKqB\":[\"停止\"],\"ykCc6r\":[\"データベースを変更(セル \",[\"n\"],\")\"],\"ynVMSc\":[\"すべて選択\"],\"ytdz1d\":[\"AI がデータベース書き込みを要求しています\"],\"yyhzur\":[\"テーブル作成\"],\"yz7wBu\":[\"閉じる\"],\"z0VdfR\":[\"ルーチン\"],\"z407wX\":[\"SSH パスワード\"],\"z4oF5T\":[\"データベースをダンプ\"],\"z5kV0h\":[\"接続\"],\"zBTMzx\":[\"プレビュー\"],\"zCaAKs\":[\"アップデートエラー\"],\"zDAakK\":[\"接続 ID がないため、図を表示できません。\"],\"zGe21h\":[\"このキーは環境変数から読み込まれています\"],\"zGfL5t\":[\"値\"],\"zL6-4A\":[\"実行中のプラグインプロセスはありません\"],\"zLZhCi\":[\"Discord コミュニティが新登場!\"],\"zLlCou\":[\"カラム名をコピー\"],\"zNEL34\":[\"コミュニティに参加\"],\"zNgTlV\":[\"右側のタブを閉じる\"],\"zQz55p\":[\"構造を表示\"],\"zR0FfH\":[[\"target\"],\" にエクスポートしました\"],\"zRZeOc\":[\"テーブル、ビュー、ルーチン、トリガーを検索...\"],\"zUNMsr\":[\"SSH 鍵\"],\"zXMRzb\":[\"SSH ポート\"],\"zZgoXr\":[\"一致するテーブルがありません\"],\"zaWbms\":[\"変更をロールバック\"],\"zgClmU\":[\"設定をインストール\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"値を入力...\"],\"zvzN4C\":[\"アクティブに設定\"],\"zzDlyQ\":[\"成功\"],\"zzMxrp\":[\"config.json を編集\"],\"zz_Wd_\":[\"モード\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/ru/messages.po b/src/locales/ru/messages.po index 5d2f45e1..b3e5aefe 100644 --- a/src/locales/ru/messages.po +++ b/src/locales/ru/messages.po @@ -1207,12 +1207,22 @@ msgid "Create a new database view" msgstr "Создать новое представление базы данных" #: src/components/modals/CreateForeignKeyModal.tsx -msgctxt "createFk" +msgctxt "createFk.create" msgid "Create Foreign Key" msgstr "Создать внешний ключ" +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk.title" +msgid "Create Foreign Key" +msgstr "Создать внешний ключ" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex.create" +msgid "Create Index" +msgstr "Создать индекс" + #: src/components/modals/CreateIndexModal.tsx -msgctxt "createIndex" +msgctxt "createIndex.title" msgid "Create Index" msgstr "Создать индекс" @@ -1258,7 +1268,12 @@ msgid "Create Trigger" msgstr "Создать триггер" #: src/components/modals/ViewEditorModal.tsx -msgctxt "views" +msgctxt "views.create" +msgid "Create View" +msgstr "Создать представление" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views.createView" msgid "Create View" msgstr "Создать представление" @@ -1639,8 +1654,12 @@ msgstr "Удалить представление" #: src/components/layout/ExplorerSidebar.tsx #: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgctxt "dump.dumpDatabase" +msgid "Dump Database" +msgstr "Экспортировать базу данных" + #: src/components/modals/DumpDatabaseModal.tsx -msgctxt "dump" +msgctxt "dump.title" msgid "Dump Database" msgstr "Экспорт базы данных" @@ -1904,14 +1923,22 @@ msgid "Error" msgstr "Error" #: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings.plugins.installError.details" +msgid "Error Details" +msgstr "Подробности ошибки" + #: src/components/modals/PluginStartErrorModal.tsx -msgctxt "settings" +msgctxt "settings.plugins.startError.details" msgid "Error Details" msgstr "Подробности ошибки" #: src/components/modals/QuickNavigatorModal.tsx +msgctxt "editor.quickNavigator.escHint" +msgid "Esc to close" +msgstr "Esc для закрытия" + #: src/components/modals/TabSwitcherModal.tsx -msgctxt "editor" +msgctxt "editor.tabSwitcher.escHint" msgid "Esc to close" msgstr "Esc для закрытия" @@ -1941,7 +1968,12 @@ msgid "Events" msgstr "События" #: src/components/settings/ai-activity/AiActivitySessionsTab.tsx -msgctxt "aiActivity" +msgctxt "aiActivity.events" +msgid "Events" +msgstr "События" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity.sort.eventCount" msgid "Events" msgstr "События" @@ -2074,7 +2106,12 @@ msgid "Export as Notebook" msgstr "Экспортировать как ноутбук" #: src/pages/Connections.tsx -msgctxt "connections" +msgctxt "connections.export" +msgid "Export Connections" +msgstr "Экспортировать подключения" + +#: src/pages/Connections.tsx +msgctxt "connections.exportTitle" msgid "Export Connections" msgstr "Экспорт подключений" @@ -2639,7 +2676,17 @@ msgid "Installed" msgstr "Установлено" #: src/components/settings/PluginsTab.tsx -msgctxt "settings" +msgctxt "settings.plugins.filterInstalled" +msgid "Installed" +msgstr "Установленные" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installed" +msgid "Installed" +msgstr "Установлено" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installedMetric" msgid "Installed" msgstr "Установлено" @@ -4005,9 +4052,13 @@ msgstr "Строки будут добавлены в существующую msgid "Run" msgstr "Запустить" -#: src/components/modals/QuerySelectionModal.tsx #: src/components/notebook/NotebookToolbar.tsx -msgctxt "editor" +msgctxt "editor.notebook.runAll" +msgid "Run All" +msgstr "Запустить все" + +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor.querySelection.runAll" msgid "Run All" msgstr "Запустить все" @@ -4736,10 +4787,14 @@ msgid "table" msgstr "таблица" #: src/components/modals/visual-explain/ExplainNodeDetails.tsx -#: src/components/modals/visual-explain/ExplainSummaryBar.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx -msgctxt "editor" +msgctxt "editor.visualExplain.relation" +msgid "Table" +msgstr "Таблица" + +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgctxt "editor.visualExplain.tableView" msgid "Table" msgstr "Таблица" @@ -5188,10 +5243,15 @@ msgid "View created successfully" msgstr "Представление создано" #: src/components/layout/ExplorerSidebar.tsx -msgctxt "sidebar" +msgctxt "sidebar.viewDefinition" msgid "View Definition" msgstr "Определение представления" +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar.viewTriggerDefinition" +msgid "View Definition" +msgstr "Просмотреть определение" + #: src/components/modals/ViewEditorModal.tsx msgid "View Definition (SQL)" msgstr "Определение представления (SQL)" diff --git a/src/locales/ru/messages.ts b/src/locales/ru/messages.ts index 176ff7de..6e78d75e 100644 --- a/src/locales/ru/messages.ts +++ b/src/locales/ru/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Максимум записей в истории\"],\"-6AWa-\":[\"Импортировать подключения\"],\"-6NyRG\":[\"Клиент\"],\"-K0AvT\":[\"Отключиться\"],\"-PLZfh\":[\"Не удалось обновить модели\"],\"-T5W2e\":[\"Примечания драйвера\"],\"-ZgeeE\":[\"История изменений\"],\"-aYrdc\":[\"Доступна версия \",[\"0\"]],\"-fBGXl\":[\"Наибольшая стоимость\"],\"-jIQDz\":[\"Свернуть ячейку\"],\"-u1eRo\":[\"Нет базы данных\"],\"-yoeVU\":[\"Загрузка схемы...\"],\"-zy2Nq\":[\"Тип\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID подтверждения\"],\"0E5-gF\":[\"Удалить это подключение?\"],\"0HCubq\":[\"Развернуть\"],\"0Kmdvy\":[\"Пользовательский шрифт\"],\"0Nj13E\":[\"Сгенерировать SQL\"],\"0ROgz5\":[\"Введите JSON...\"],\"0SY9sU\":[\"Не удалось отключиться от базы данных\"],\"0b3kL9\":[\"Выберите базу данных\"],\"0caMy7\":[\"История\"],\"0mx5ow\":[\"Запрос\"],\"0n9BtL\":[\"Предпросмотр\"],\"0pHB9N\":[\"Копировать как table.column\"],\"0sQzZK\":[\"Фильтр баз данных...\"],\"0uPP9X\":[\"Имя внешнего ключа (необязательно)\"],\"0wxuek\":[\"Текущая версия\"],\"0x09Aw\":[\"Переключён останов при ошибке\"],\"0yBP6v\":[\"Поддержать разработку\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка\"],\"few\":[\"#\",\" строки\"],\"many\":[\"#\",\" строк\"],\"other\":[\"#\",\" строки\"]}]],\"0yVAoD\":[\"Подсчитать строки\"],\"0zxJ87\":[\"Логи отсутствуют\"],\"1-ETbn\":[\"Визуальный Explain\"],\"1133_z\":[\"Изменить представление\"],\"11fGJ6\":[\"Запросы\"],\"13hIUA\":[\"API-ключ \",[\"0\"]],\"14qNWF\":[\"Выбрать SSH-подключение\"],\"17qHRP\":[\"Новое подключение\"],\"1Dn6bg\":[\"Импортировать из буфера обмена\"],\"1Dnd0I\":[\"Загрузить количество строк\"],\"1FjTLW\":[\"например, python3\"],\"1GOvbo\":[\"Ollama подключён (найдено моделей: \",[\"0\"],\")\"],\"1I6UoR\":[\"Представления\"],\"1U7hS5\":[\"Длина\"],\"1UTmg5\":[\"Максимальный размер пакета\"],\"1b7aSU\":[\"Шрифт редактора\"],\"1ekzlY\":[\"Процессы плагинов\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Выбор темы\"],\"1xVZkL\":[\"Модели не найдены\"],\"26Joci\":[\"Строк: \",[\"0\"]],\"2Bf-Qe\":[\"Новая консоль\"],\"2CrSmP\":[\"Помогите Tabularis развиваться\"],\"2D9F8_\":[\"Не удалось дублировать подключение\"],\"2Eoi_a\":[\"Подробности\"],\"2F4pE5\":[\"Сборка и тесты Rust\"],\"2Fsd9r\":[\"В этом месяце\"],\"2JzKXI\":[\"Установить GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Выбрать все\"],\"2SO5RM\":[\"Kubernetes недоступен для этого драйвера.\"],\"2Uh5GA\":[\"Экосистема Cargo\"],\"2YylFp\":[\"Новый визуальный запрос\"],\"2luuSG\":[\"Повторить\"],\"2wxgft\":[\"Переименовать\"],\"2yG2GC\":[\"Приостанавливать запись (или любой запрос) и запрашивать подтверждение в Tabularis перед отправкой в базу данных.\"],\"30-b5r\":[\"Удалить\"],\"31kwdN\":[\"Дублировать фильтр\"],\"34nxyb\":[\"Триггеры\"],\"35148H\":[\"Все инструменты\"],\"3Am5DS\":[\"Вкладки\"],\"3BhBCj\":[\"События\"],\"3FVg9_\":[\"Локальный столбец\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Запустить\"],\"3L0HCz\":[\"Плагины не найдены.\"],\"3Nv3JV\":[\"Выполнение запроса...\"],\"3TSz9S\":[\"Свернуть\"],\"3UW8fG\":[\"Обновления управляются через \",[\"0\"]],\"3YvS-c\":[\"Новая вкладка\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Промпт для названия ячейки ноутбука\"],\"3qkggm\":[\"На весь экран\"],\"3rBJ1T\":[\"Просмотреть схему\"],\"3xZ-xV\":[\"Вставить текущую метку времени\"],\"40Gx0U\":[\"Часовой пояс\"],\"41GP4f\":[\"Разделитель по умолчанию при копировании или экспорте строк в формате CSV.\"],\"42iaEi\":[\"PostgreSQL без ANALYZE показывает только оценки планировщика.\"],\"44cXI8\":[\"Сортировать по \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Управление базами данных\"],\"4CK17g\":[\"Изменить представление \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Выберите хотя бы одну базу данных\"],\"4D_Nvt\":[\"Не удалось создать группу\"],\"4RiR6c\":[\"Экспортировать как HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" дочерний процесс\"],\"few\":[\"#\",\" дочерних процесса\"],\"many\":[\"#\",\" дочерних процессов\"],\"other\":[\"#\",\" дочерних процессов\"]}]],\"4VyuY3\":[\"Очистить все логи?\"],\"4WWqS3\":[\"Показать/скрыть JSON-дерево\"],\"4cEClj\":[\"Сессии\"],\"4cmfYp\":[\"Дублировать строку\"],\"4lIZTB\":[\"Dev-зависимости фронтенда\"],\"4oYjvJ\":[\"Поиск запроса…\"],\"4tMxW4\":[\"Preview related record\"],\"4yJcjm\":[\"Выберите тип...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Закрыть панель фильтров (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Точка с запятой (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" событие\"],\"few\":[\"#\",\" события\"],\"many\":[\"#\",\" событий\"],\"other\":[\"#\",\" событий\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"Список\"],\"5To6Z6\":[\"Копировать запрос\"],\"5gqNQl\":[\"Сетка\"],\"5igIzr\":[\"Импорт отменён\"],\"5nTIup\":[\"Редактирование представления: \",[\"name\"]],\"66bEht\":[\"Статус проекта\"],\"6PIJVc\":[\"Запуск\"],\"6QvP0l\":[\"Экспортировать как JSON\"],\"6W41Xq\":[\"Диспетчер задач\"],\"6WngBH\":[\"Установить NULL\"],\"6YtxFj\":[\"Имя\"],\"6_dCYd\":[\"Обзор\"],\"6gvoHP\":[\"Скопировать сообщение об ошибке\"],\"6oCVzX\":[\"Контекст Kubernetes обязателен\"],\"6wQO0f\":[\"Показать данные\"],\"6z9W13\":[\"Перезапустить\"],\"71agNy\":[\"Сгенерировать названия для безымянных ячеек с помощью AI\"],\"74J3FG\":[\"Начальная версия\"],\"75BWdo\":[\"Не удалось загрузить определение триггера: \"],\"76d3Uz\":[\"События\"],\"76gPWk\":[\"Понятно\"],\"77nSMU\":[\"Удалить всю историю активности AI? Это действие необратимо.\"],\"79UVYW\":[\"Esc для закрытия\"],\"7ABmyQ\":[\"Попробовать снова\"],\"7Ap0JP\":[\"Активно \",[\"activeFilterCount\"],\" из \",[\"0\"]],\"7E864M\":[\"Тип базы данных\"],\"7FqaG1\":[\"Настройте инструкции для AI-анализа планов EXPLAIN. Используйте \",[\"LANGUAGE\"],\" для языка вывода.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Обнаружены смешанные типы, использован TEXT\"],\"7RSQQd\":[\"Сохранять пароли в Keychain\"],\"7VpPHA\":[\"Подтвердить\"],\"7e7bPs\":[\"Тело триггера (SQL)\"],\"7eRaA9\":[\"Удалить триггер\"],\"7l15X4\":[\"с ошибкой\"],\"7sMeHQ\":[\"Ключ\"],\"7sNhEz\":[\"Пользователь\"],\"7tATh2\":[\"Выполнить запрос\"],\"7yb4gk\":[\"Ошибка: \"],\"8-4V8D\":[\"Таблицы\"],\"82G-l5\":[\"Model Context Protocol (MCP) позволяет AI-ассистентам (например, Claude) подключаться к локальным инструментам. Tabularis предоставляет MCP-сервер, через который AI читает схему базы данных и выполняет запросы.\"],\"83VjWE\":[\"Новый ноутбук\"],\"86IgoU\":[\"Выполнить запрос (в редакторе)\"],\"86fCgf\":[\"Настройте инструкции для AI-генерации названий вкладок с результатами. SQL-запрос передаётся как сообщение пользователя.\"],\"87a_t_\":[\"Метка\"],\"8CWirf\":[\"MCP-сервер\"],\"8S8aIX\":[\"Проверка состояния подключения\"],\"8TMaZI\":[\"Время\"],\"8Tg_JR\":[\"Custom\"],\"8UFKYr\":[\"Выбрать запрос для выполнения\"],\"8VKSGV\":[\"Сгенерировать SQL\"],\"8Wjy6z\":[\"Закрыть вкладки слева\"],\"8ZsakT\":[\"Пароль\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL-редактор\"],\"8bRgTe\":[\"AI-провайдер не настроен. Перейдите в Настройки > AI.\"],\"8c_W0h\":[\"Старые версии\"],\"8guEQP\":[\"Обновить представления\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN — лёгкий инструмент преимущественно для анализа структуры.\"],\"8q_sOc\":[\"Remove\"],\"8t-akp\":[\"показаны первые \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Показать/скрыть текстовый редактор\"],\"8zfThY\":[\"Название подключения\"],\"91gnWY\":[\"Экспортировать логи\"],\"91rtHL\":[\"Создать новое представление\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Новая группа\"],\"9DOfTQ\":[\"Редактирование триггера: \",[\"name\"]],\"9JdjEN\":[\"Представление обновлено\"],\"9NzDFn\":[\"Показывать экран приветствия при запуске приложения.\"],\"9OoUS3\":[\"Создать новое SSH-подключение\"],\"9QGRD5\":[\"Целевой столбец\"],\"9QTny9\":[\"Ошибка выполнения запроса.\"],\"9S-fyV\":[\"Предварительный план выполнения\"],\"9SJ_Sx\":[\"Системные ресурсы\"],\"9UQ730\":[\"Клонировать\"],\"9X6cky\":[\"Нет\"],\"9XUV5V\":[\"В буфере обмена нет данных\"],\"9mMU1R\":[\"Время\"],\"9mvFo_\":[\"Время\"],\"9npOH9\":[\"Открыть файл\"],\"9uI_rE\":[\"Отменить\"],\"9xUjzm\":[\"Выбрать все\"],\"9y_02p\":[\"Общайтесь с сообществом, получайте помощь, предлагайте функции\"],\"A1pPcI\":[\"SSH-хост\"],\"A1taO8\":[\"Поиск\"],\"A6C0pv\":[\"Общая стоимость\"],\"A7WG0p\":[\"Плагин отключён\"],\"A7yRz3\":[\"Определение представления обязательно\"],\"A9Uyp6\":[\"Ошибка импорта: \"],\"ABEd-z\":[\"Для обновления Tabularis используйте менеджер пакетов.\"],\"AMdgKV\":[\"Промпт для анализа плана выполнения\"],\"ANSTMe\":[\"Серьёзных проблем в текущем плане не обнаружено.\"],\"ANzIr7\":[\"История запросов\"],\"AOnaU7\":[\"пропущено\"],\"AVlZoM\":[\"Окружение\"],\"AXTVsE\":[\"Verify Full\"],\"AXdRYR\":[\"Текущие логи\"],\"Aa-YkQ\":[\"Экспортировать ноутбук\"],\"Ai2U7L\":[\"Хост\"],\"AidayG\":[\"Фильтр по уровню\"],\"AlPiMN\":[\"Нажмите для перехода на страницу\"],\"An-1rA\":[\"Возвращено строк\"],\"AnV8j-\":[\"Изменить столбец\"],\"AvEr_L\":[\"Новая консоль\"],\"AvYbUL\":[\"Поставить звезду на GitHub\"],\"Aw_eOs\":[\"Требуется Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Ничего не найдено\"],\"B0mJGb\":[\"Сырой вывод\"],\"B1c58n\":[\"Изменить столбец\"],\"B3toQF\":[\"Объекты\"],\"B5nKny\":[\"/абсолютный/путь/к/папке\"],\"B5xevr\":[\"Имя подключения обязательно\"],\"BAVvWJ\":[\"ER-диаграмма\"],\"BBtVak\":[\"Свернуть все\"],\"BEVzjL\":[\"Импорт не удался\"],\"BFxXo5\":[\"Запустить все\"],\"BJe2lZ\":[\"Показать/скрыть боковую панель\"],\"BK3WCj\":[\"Не удалось загрузить реестр\"],\"BKbO3i\":[\"Блокнот изменён\"],\"BMB51y\":[\"Запустить в консоли\"],\"BNW_Z4\":[\"например, active_users, order_summary\"],\"BUO_JN\":[\"Копировать запрос\"],\"BYkhHY\":[\"Проверять обновления при запуске\"],\"BbHofF\":[\"Экспорт подключений\"],\"BeSg6-\":[\"Собирать логи приложения в памяти для отладки\"],\"BgAyQH\":[\"Сбросить сортировку\"],\"BinTJI\":[\"экосистема npm\"],\"BkFson\":[\"Автопостраничный вывод\"],\"Bpglf1\":[\"Переместить вверх\"],\"BrGo6h\":[\"Поиск блокнотов\"],\"BxiAN_\":[\"Удалить запрос\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Зависимости фронтенда\"],\"CE-M2e\":[\"Информация\"],\"CHIyL8\":[\"Нет фильтров —\"],\"CJnUoU\":[\"Обновить триггеры\"],\"CLWWRV\":[\"Скачивание...\"],\"CUxwxn\":[\"Показать все таблицы\"],\"CWMXbw\":[\"принудительно остановит процесс. Все активные подключения к базе данных через этот плагин перестанут работать до его перезапуска.\"],\"CZt6BX\":[\"РУЧНАЯ НАСТРОЙКА\"],\"Ca8ixZ\":[\"Удалить\"],\"CbJBQS\":[\"Ошибка обновления: \"],\"Cdz-YU\":[\"Список\"],\"CpeQf9\":[\"Итерации\"],\"D2wXBw\":[\"Автоинкремент\"],\"D6Ql0c\":[\"Выберите модель для генерации и объяснения запросов.\"],\"DB8zMK\":[\"Применить\"],\"DDXf5E\":[\"SQL-функции\"],\"DEwnwi\":[\"Удалить\"],\"DNTvdl\":[\"Открыть в редакторе\"],\"DPc2P9\":[\"Удалить ячейку\"],\"DUY8Ba\":[\"Критические изменения\"],\"DVnBSM\":[\"Межстрочный интервал\"],\"Dd7YLj\":[\"Может быть позже\"],\"Deej3j\":[\"Некорректный JSON\"],\"DfKhk_\":[\"Обновить\"],\"DiRiTz\":[\"Открыть страницу пакета\"],\"DlRHAD\":[\"Выполнение EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" ошибка\"],\"few\":[\"#\",\" ошибки\"],\"many\":[\"#\",\" ошибок\"],\"other\":[\"#\",\" ошибок\"]}]],\"Dvdihe\":[\"На \",[\"0\"],\" — проверьте запрос перед выполнением.\"],\"DzFLzw\":[\"Да\"],\"E-JUtQ\":[\"Подтверждение операций\"],\"E0kcnZ\":[\"Общее\"],\"E2mje_\":[\"Выбрать запрос для объяснения\"],\"EDieyg\":[\"Удалить это SSH-подключение?\"],\"EHZxPj\":[\"Развернуть\"],\"EL4oDO\":[\"Доступна новая версия\"],\"EPi4gT\":[\"Сортировать по \",[\"field\"]],\"EWPtMO\":[\"Код\"],\"EWX0mQ\":[\"Без группы\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Неизвестно\"],\"EhADgB\":[\"Удалить столбец\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Используется актуальная версия\"],\"Em6JFd\":[\"Подсчитать строки\"],\"EnGiqG\":[[\"0\"],\" элементов\"],\"Ew1n5z\":[\"Поиск плагинов…\"],\"F18WP3\":[\"Параметры\"],\"F3uc1x\":[\"Экспортируемый файл будет содержать пароли к базам данных и SSH в открытом виде. Храните его в надёжном месте!\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" строка\"],\"few\":[\"#\",\" строки\"],\"many\":[\"#\",\" строк\"],\"other\":[\"#\",\" строки\"]}]],\"F6pfE9\":[\"Активно\"],\"F8tXg7\":[\"Предпросмотр данных\"],\"F9-6yK\":[\"Формат копирования по умолчанию\"],\"F9lxfG\":[\"Удалить\"],\"F9nsa2\":[\"Файл истории был повреждён и перенесён в резервную копию. Новые запросы будут записываться как обычно. Резервный файл:\"],\"FF_oap\":[\"По умолчанию\"],\"FK8rlP\":[\"SSH-подключения не настроены\"],\"FMRcH8\":[\"Первая строка как заголовок\"],\"FNvDMc\":[\"На этой неделе\"],\"FQe1FI\":[\"Оценка строк\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Операция\"],\"Fa_cky\":[\"Схема: \",[\"tableName\"]],\"FpEL5o\":[\"Выберите отдельную тему для SQL-редактора или синхронизируйте её с темой приложения.\"],\"FsvZQL\":[\"Изменена ячейка \",[\"n\"]],\"FtwKL9\":[\"Переключить вкладку\"],\"FznI3z\":[\"Удалить внешний ключ \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Ошибка предпросмотра: \"],\"G8Q5Zq\":[\"Пространство имён обязательно\"],\"GAohqx\":[\"Удалить столбец\"],\"GJR99u\":[\"Не удалось удалить столбец: \"],\"GKfzzM\":[\"Выберите подключение...\"],\"GS-Mus\":[\"Экспортировать\"],\"GUaLUq\":[\"Не удалось загрузить схему: \"],\"GXP-Iw\":[\"Добавить SQL-ячейку\"],\"Gj1mLb\":[\"Ячейки переупорядочены\"],\"GlbqG2\":[\"Reset to driver default\"],\"Gs5AlY\":[\"Открыть\"],\"GtmO8_\":[\"от\"],\"GxkJXS\":[\"Загрузка...\"],\"H-o4D2\":[\"Создать новый столбец\"],\"H2B-KW\":[\"Формат по умолчанию при копировании строк через Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Повторить\"],\"H7mlCc\":[\"/абсолютный/путь/к/db.sqlite\"],\"H86f9p\":[\"Свернуть\"],\"H9P8CD\":[\"добавить первый фильтр\"],\"HAQlGl\":[\"Активность AI\"],\"HKNZrs\":[\"Условие индекса\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Удалить \",\"#\",\" строку\"],\"few\":[\"Удалить \",\"#\",\" строки\"],\"many\":[\"Удалить \",\"#\",\" строк\"],\"other\":[\"Удалить \",\"#\",\" строки\"]}]],\"HPuCiP\":[\"Путь к папке\"],\"HUs1R3\":[\"Нет открытых вкладок для этого подключения.\"],\"HV4Isp\":[\"Введите SSH-пароль\"],\"HVC8Hh\":[\"Скопировано в буфер обмена\"],\"HWEpq8\":[\"Запись на диск/с\"],\"HY4nP5\":[\"Встроенно\"],\"HcmoWv\":[\"Не удалось сохранить представление: \"],\"He8v1Y\":[\"Убрать из «Применить все»\"],\"HehHP1\":[\"Расположение по умолчанию\"],\"HilYn4\":[\"Ноутбук пуст. Добавьте ячейку для начала работы.\"],\"HjxVK_\":[\"Быстрая проверка подключения\"],\"HmMnRx\":[\"Режим WKT\"],\"HoKCiI\":[\"Приложение автоматически перезапустится после установки\"],\"HpK_8d\":[\"Перезагрузить\"],\"Hpi4Jm\":[\"Вступить сейчас\"],\"HuA3RU\":[\"Табуляция\"],\"I128p7\":[\"Вертикальная черта (|)\"],\"I3AgqA\":[\"Настроить SSH вручную\"],\"I5VBsr\":[\"Как в приложении\"],\"I8yrPb\":[\"Заменить таблицу\"],\"I92BdB\":[\"Убрать из группы\"],\"I92fr4\":[\"Напомнить позже\"],\"I99Miw\":[\"Стоимость\"],\"IETZIR\":[\"Изменить название ячейки\"],\"IG9wzA\":[\"Не удалось добавить строку: \"],\"ILleOG\":[\"Тип ресурса должен быть \\\"service\\\" или \\\"pod\\\"\"],\"IQ3gAw\":[\"Загрузить файл\"],\"IUwGEM\":[\"Сохранить изменения\"],\"IUwmLq\":[\"Прямые зависимости из package.json и src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Библиотеки с открытым исходным кодом\"],\"I_43p6\":[\"Безопасность\"],\"Iaizf4\":[\"Appearance\"],\"Il3FBB\":[\"Открыть/закрыть панель фильтров\"],\"IniZRK\":[\"Загрузка недоступна — загружен только предпросмотр\"],\"Isaozb\":[\"Проверить и настроить\"],\"J17_9Z\":[\"Не удалось сохранить триггер: \"],\"J2Cb95\":[\"Активные запросы и подключения через этот плагин будут прерваны.\"],\"J6v1s_\":[\"Модель по умолчанию\"],\"JE-DVk\":[\"Интерпретатор\"],\"JEGlfK\":[\"Начало\"],\"JKDPqP\":[\"Сначала выберите контекст\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Использовать SSH-туннель\"],\"JRz8tw\":[\"MySQL и MariaDB предоставляют реальные метрики только в поддерживаемых вариантах EXPLAIN ANALYZE или ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP or SVG · max 512 KB\"],\"JY5Oyv\":[\"База данных\"],\"JlFRIB\":[\"Часовой пояс сессии, отправляемый в MySQL после подключения.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Отклонено\"],\"K3H9p5\":[\"Не задано\"],\"K5Dgu_\":[\"Базы данных\"],\"K8IGKf\":[\"Тип аутентификации\"],\"KAYNSW\":[\"Количество логов, хранимых в памяти (1–10000)\"],\"KHTGbr\":[\"Предварительный EXPLAIN\"],\"KHvda8\":[\"Не null\"],\"KJKNaZ\":[\"Копировать как `column`\"],\"KM5Kc8\":[\"Выберите хотя бы один столбец\"],\"KSCnVQ\":[\"Тип\"],\"KUjOb9\":[\"работает\"],\"KXBdwy\":[\"Обновить подпрограммы\"],\"KXNyX7\":[\"Установить DEFAULT\"],\"Kd70-v\":[\"Импортировать из буфера обмена...\"],\"KhI4oS\":[\"Открыть связанную строку в \",[\"0\"]],\"KhgrNu\":[\"Интеграция MCP-сервера\"],\"KirERL\":[\"Таймаут\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Не удалось удалить индекс: \"],\"KzeARD\":[\"Не удалось удалить таблицу: \"],\"L-rMC9\":[\"Сбросить по умолчанию\"],\"L3HXkQ\":[\"Исправления ошибок\"],\"LCZ7Dy\":[\"Копировать имя\"],\"LFDf6p\":[\"Создать новый триггер базы данных\"],\"LK1m4W\":[\"индексы\"],\"LMeAoR\":[\"строки\"],\"LPCdc-\":[\"Промпт для названия вкладки запроса\"],\"LPFmga\":[\"Добавить в «Применить все»\"],\"LYzbQ2\":[\"Инструмент\"],\"Lbis_V\":[\"Быстрый навигатор\"],\"Lcpbe2\":[\"Процесс плагина не удалось запустить. Подробности ниже.\"],\"LhUHHO\":[\"Предпросмотр сгенерированного SQL\"],\"LihabZ\":[\"EXPLAIN поддерживается только для DML-запросов (SELECT, INSERT, UPDATE, DELETE). DDL-запросы (CREATE, DROP, ALTER) не поддерживаются.\"],\"LnT0hQ\":[\"Добавить столбец\"],\"LvutiO\":[\"Предложить (AI)\"],\"M-rHQO\":[\"Выйти из полноэкранного режима\"],\"M0XJba\":[\"Очистить всю историю запросов для этого подключения?\"],\"M1co_O\":[\"Настроено\"],\"M73whl\":[\"Контекст\"],\"MDa5o0\":[\"например, before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Показать все\"],\"MXdOwj\":[\"Отдельные подключения\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Выберите подключение K8s\"],\"Mc1tjS\":[\"Включите ANALYZE для просмотра реальных строк, времени, итераций и буферов.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" строк\"],\"Mp0jQ_\":[\"Этот драйвер поддерживает первичные ключи только при создании таблицы\"],\"MqpZwN\":[\"Процесс Tabularis\"],\"MxIx43\":[\"↑↓ для навигации, Enter для открытия\"],\"MygtgQ\":[\"Добавить Markdown-ячейку\"],\"N40H-G\":[\"Все\"],\"N5UQxq\":[\"Ollama не обнаружен на порту \",[\"0\"],\". Запущен ли он?\"],\"N6GBcC\":[\"Подтверждение удаления\"],\"N6aqHp\":[\"Запросы\"],\"N9_S15\":[\"Будет создана новая таблица\"],\"NBdMa1\":[\"Самый медленный шаг\"],\"NC2AI2\":[\"Длина\"],\"NCzNnx\":[\"Сортировать по возрастанию\"],\"NT4Ubs\":[\"Удалить пользовательский ключ и вернуться к переменной окружения (если задана)\"],\"NUjrCO\":[\"Ничего не найдено в избранном\"],\"NWJrXh\":[\"SQL триггера обязателен\"],\"NZUDnP\":[\"Итого по дереву: \",[\"0\"]],\"Nc2VQn\":[\"Добавить в существующую\"],\"NgFERn\":[\"Добавить в избранное\"],\"NktMHG\":[\"Имя базы данных\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Проверить\"],\"Nq5QTk\":[\"объяснить N-й\"],\"O2STgu\":[\"Ошибка экспорта: \"],\"O8SV8O\":[\"Загрузка...\"],\"O9_WW6\":[\"подключение\"],\"OGEsKj\":[\"Выполнить все ячейки\"],\"OGWdBg\":[\"Название представления\"],\"OHqT6w\":[\"Нажмите сочетание клавиш...\"],\"OXJsaG\":[\"Недопустимое имя параметра\"],\"OfhWJH\":[\"Сбросить\"],\"OlAl5i\":[\"Развернуть все\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Присоединиться к Discord\"],\"P1YGsb\":[\"Генерация SQL\"],\"P2m1xb\":[\"Остановить при ошибке\"],\"P3Qlys\":[\"Нет ID подключения\"],\"P6Y3Yf\":[\"Выполните эту команду в терминале, затем перезапустите Claude Code.\"],\"PCdj-c\":[\"Снять выбор\"],\"PMnFt9\":[\"Чтение с диска/с\"],\"PQU2Va\":[\"Принимать подсказку по Enter\"],\"PRnH8G\":[\"из \",[\"0\"]],\"PY8UF3\":[\"Переключён параллельный режим (ячейка \",[\"n\"],\")\"],\"PiH3UR\":[\"Скопировано!\"],\"Pia95d\":[\"Имя столбца обязательно\"],\"PrElXQ\":[\"Обновить\"],\"PrixCC\":[\"Строки будут добавлены в существующую таблицу\"],\"Pujgbb\":[\"Настроить назначение\"],\"Pw_eQV\":[\"Плагин не запустился\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Нет сохранённых запросов\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Нет дочерних процессов\"],\"QCxMC0\":[\"Автоматически проверять новые версии при запуске приложения\"],\"QEazml\":[\"Удалить выбранные\"],\"QHcLEN\":[\"Подключено\"],\"QLHHFO\":[\"Режим только для чтения\"],\"QOvAW3\":[\"Новые функции\"],\"QULGRi\":[\"Допустимые запросы не найдены\"],\"QZwllF\":[\"Обзор...\"],\"QbkSr_\":[\"EXPLAIN недоступен для этого запроса.\"],\"QeHFYZ\":[\"EXPLAIN завершился с ошибкой: \",[\"0\"]],\"Qll2Tb\":[\"По убыв.\"],\"Qoq-GP\":[\"Подробнее\"],\"Qu4Hog\":[\"Ноутбук импортирован\"],\"R-A2Vd\":[\"Нет данных для отображения\"],\"R0Hkb2\":[\"Выбрано баз данных: \",[\"0\"]],\"R1nHhB\":[\"Уже существует\"],\"R2Iz3m\":[\"Название триггера\"],\"R6oBUl\":[\"Преобразовать в консоль\"],\"R9Khdg\":[\"Авто\"],\"RDjuBN\":[\"Настройка\"],\"RF-HyV\":[\"Выберите язык интерфейса. «Авто» использует язык системы.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Скопировать имя\"],\"RI-HZc\":[\"Введите ключ \",[\"0\"]],\"RJrE17\":[\"Удалить представление \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Звезда помогает другим найти проект\"],\"Rb3Tdm\":[\"Имя блокнота\"],\"RcbKJ3\":[\"При обновлении\"],\"RkefFq\":[\"Выполнить EXPLAIN перед показом окна подтверждения, чтобы пользователь видел план выполнения.\"],\"RnF_hl\":[\"Загрузка реестра плагинов...\"],\"Rns7_C\":[\"Это действие нельзя немедленно отменить\"],\"RoKRqW\":[\"Доступные плагины\"],\"RphpKk\":[\"Внешний вид\"],\"Rt8sHM\":[\"Обнаружена сортировка или временные операции\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Включено\"],\"S1veKH\":[\"Отменить выбранные изменения\"],\"S5zeZU\":[\"Переключить предпросмотр\"],\"S8Yqbl\":[\"Вставить\"],\"SDND4q\":[\"Не настроено\"],\"SJRy3D\":[\"(Генерируется автоматически)\"],\"SSwIjo\":[\"Установить EMPTY\"],\"SgvA_r\":[\"Нажмите «Запустить» (Ctrl/Command+F5) для загрузки данных таблицы\"],\"SlfejT\":[\"Ошибка\"],\"SoATkx\":[\"Копировать ячейку\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL эндпоинта\"],\"T7w5CQ\":[\"Не удалось создать новую строку: \"],\"T9947j\":[\"Значение (например, 'текст' или 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Переключить на вертикальное расположение\"],\"TK5oex\":[\"Сохранить промпт\"],\"TKQ7K-\":[\"Установить\"],\"TKZreP\":[\"Обязательный\"],\"TMLAx2\":[\"Обязательно\"],\"TO08JI\":[\"внешние ключи\"],\"TQloo1\":[\"Создать внешний ключ\"],\"TVKqvO\":[\"Изменить строку\"],\"TYSdQ3\":[\"Выполнить SELECT-запрос\"],\"TfDFHS\":[\"Переносить длинные строки в редакторе вместо горизонтальной прокрутки.\"],\"Tibfjs\":[\"Нет сохранённых подключений — создайте ниже\"],\"Tj36Dr\":[\"Сбросить по умолчанию\"],\"Tjg925\":[\"Загрузка определения триггера...\"],\"TlZ7Ul\":[\"Заблокировать запрос\"],\"TpwXyg\":[\"Если время отсутствует, сервер вернул только оценочный план.\"],\"Tw2M1h\":[\"Ошибка установки\"],\"Ty-rm9\":[\"SSH-подключения\"],\"Tz0i8g\":[\"Настройки\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Подключения Kubernetes\"],\"U4uzyV\":[\"Что нового\"],\"U8W7sX\":[\"Не удалось получить определение триггера: \"],\"UB112k\":[\"Прекратить выполнение при ошибке в ячейке\"],\"UCQiqt\":[\"на \",[\"0\"]],\"UECR2b\":[[\"0\"],\" на \",[\"1\"],\" — проверьте запрос перед выполнением.\"],\"UI85PB\":[\"Ни один триггер не соответствует фильтру\"],\"UNKlAy\":[\"Настройки для \",[\"clientName\"],\" установлены. Перезапустите приложение.\"],\"URmyfc\":[\"Подробности\"],\"UWQBvp\":[\"Сгенерировать SQL-шаблоны\"],\"UawTKZ\":[\"Необязательно. Укажите исполняемый файл для запуска плагина (например, python3 на macOS/Linux или python либо полный путь на Windows). Оставьте пустым, чтобы использовать значение по умолчанию.\"],\"Ub8sf5\":[\"SQLite не поддерживает удаление внешних ключей через ALTER TABLE.\"],\"UbbJ8j\":[\"Варианты не найдены\"],\"Ubs68g\":[\"Общие\"],\"UftN8J\":[\"Отметьте подключения, которые должны быть только для чтения. Остальные работают как обычно.\"],\"UnQNah\":[\"Удалить столбец \\\"\",[\"0\"],\"\\\" из таблицы \\\"\",[\"tableName\"],\"\\\"?\\n\\nВНИМАНИЕ: Все данные в этом столбце будут безвозвратно удалены. Действие необратимо.\"],\"UncTTh\":[\"Сумма RSS по дереву процессов — общая память может учитываться несколько раз\"],\"UpjgFm\":[\"Изменены параметры\"],\"UsAnu1\":[\"ANALYZE выполняет запрос. Осторожно с операторами изменения данных.\"],\"UxKoFf\":[\"Навигация\"],\"Uy4iQO\":[\"Рядом\"],\"UzFX5x\":[\"Размер отступа\"],\"UzWGWO\":[\"Перейти к вводу SQL WHERE\"],\"V-chk5\":[\"Как часто проверять активные подключения. Установите 0 для отключения.\"],\"V-pw1j\":[\"Название таблицы\"],\"V2T0Uw\":[\"Сохранённых блокнотов пока нет.\"],\"V3aNwx\":[\"Редактор данных\"],\"VGYp2r\":[\"Применить ко всем\"],\"VH8S7x\":[\"Столбец из буфера обмена\"],\"VIAEcS\":[\"Не удалось загрузить базы данных. Проверьте учётные данные.\"],\"VKdztF\":[\"Добавить строки\"],\"VLiHXI\":[\"Данные ANALYZE\"],\"VMbmXc\":[\"Удалить «\",[\"pluginName\"],\"»? Файлы плагина будут удалены.\"],\"VO3weF\":[\"Файл не загружен\"],\"VOZlKc\":[\"Импорт базы данных\"],\"VPzsIz\":[\"Генерация названия...\"],\"VUul0v\":[\"Завершение\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Не удалось удалить триггер: \"],\"VfOb_W\":[\"Триггеры не найдены\"],\"Vgy9LX\":[\"Все запросы\"],\"Vi2Pqx\":[\"от\"],\"Vl2zn2\":[\"остановлен\"],\"Vo4uBA\":[\"Ошибка при установке плагина. Подробности ниже.\"],\"VqqyOs\":[\"Выполните запрос, чтобы увидеть результаты\"],\"VzhDFh\":[\"Блокировать любые не-SELECT запросы через MCP, если подключение явно не разрешено ниже.\"],\"W3uwpT\":[\"Закрыть все вкладки\"],\"W4MKLh\":[\"например: Выглядит рискованно на проде, нужно подтверждение…\"],\"WA8RND\":[\"Удалить таблицу \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Удалить таблицу\"],\"WLnvCZ\":[\"Введите имя пользователя\"],\"WM-__8\":[\"Поиск подключений...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка импортирована в «\",[\"tableName\"],\"»\"],\"few\":[\"#\",\" строки импортированы в «\",[\"tableName\"],\"»\"],\"many\":[\"#\",\" строк импортировано в «\",[\"tableName\"],\"»\"],\"other\":[\"#\",\" строки импортированы в «\",[\"tableName\"],\"»\"]}]],\"WTfntM\":[\"Удалить запрос \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"успешно\"],\"WcF1uL\":[\"Название группы\"],\"Weq9zb\":[\"Общие\"],\"WmPpB1\":[\"Загрузка плана выполнения…\"],\"Wu7cK0\":[\"Базы данных не найдены\"],\"WvoUQF\":[\"Удалена ячейка \",[\"n\"]],\"Ww3pDD\":[\"РУЧНАЯ КОМАНДА\"],\"X-20AU\":[\"Введите промпт для названия вкладки...\"],\"X-U6_w\":[\"Шрифт\"],\"X5fs0g\":[\"Создайте первое подключение, чтобы начать работу.\"],\"X7Ayjp\":[\"Пароль сохранён в системном хранилище ключей\"],\"X9kySA\":[\"Избранное\"],\"XJOV1Y\":[\"Активность\"],\"XMCLEL\":[\"Создать новый триггер\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Объяснение запроса\"],\"XVF2Pf\":[\"Изменить схемы\"],\"XW6OYF\":[\"Для этого плагина может потребоваться интерпретатор (например, Python). Укажите путь к нему в настройках плагина.\"],\"XZB6Xr\":[\"Максимум записей в логе\"],\"Xcffv2\":[\"Показывать кнопки AI-помощи и объяснения в редакторе\"],\"XeqTSh\":[\"Тип соединения\"],\"XmJfZT\":[\"имя\"],\"XoQfG1\":[\"SSH-пользователь\"],\"XwI0Vw\":[\"Авто (системный)\"],\"XyDlLX\":[\"Название индекса\"],\"Y2P2aK\":[\"Выберите схемы для загрузки:\"],\"Y8HYw2\":[\"значение\"],\"Y8zX3R\":[\"Вставить в редактор\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Поиск...\"],\"YWlnMZ\":[\"Порт Ollama\"],\"YYdC3A\":[\"Версия \",[\"0\"]],\"YYn8b5\":[\"Просмотр и установка плагинов из реестра.\"],\"Y_3yKT\":[\"Открыть в новой вкладке\"],\"YiAQ_Q\":[\"Обновить таблицы\"],\"Ysjr9Y\":[\"Предпросмотр SQL\"],\"YswNf7\":[\"Все уровни\"],\"YtNwr6\":[\"Максимальное количество записей истории запросов для одного подключения.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Загрузка...\"],\"Z7ZXbT\":[\"Подтвердить\"],\"Z8JpBH\":[\"Экспортировать как ноутбук\"],\"Z8fBIc\":[\"Реальных строк больше оценки\"],\"ZC2VJP\":[\"Выполнить\"],\"ZCIS4k\":[\"нет активных фильтров\"],\"ZF1_UT\":[\"Режим SSL\"],\"ZGjBPa\":[\"Очистить логи\"],\"ZHQTlM\":[\"Импорт из\"],\"ZIFDoJ\":[\"Выберите хотя бы структуру или данные\"],\"ZIZA6o\":[\"Изменить перед подтверждением\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" предупреждение при разборе\"],\"few\":[\"#\",\" предупреждения при разборе\"],\"many\":[\"#\",\" предупреждений при разборе\"],\"other\":[\"#\",\" предупреждения при разборе\"]}]],\"ZVn8p2\":[\"Отображать номера строк на полях редактора.\"],\"ZYnwzF\":[\"Отключено\"],\"Za3_fO\":[\"Error\"],\"Zf7LHg\":[\"Контексты не найдены (установлен ли kubectl?)\"],\"Zfotp5\":[\"Большие расхождения в оценках обычно указывают на устаревшую статистику или предикаты, которые планировщик не может смоделировать точно.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Не удалось загрузить схемы\"],\"ZqXGPF\":[\"Не удалось удалить представление: \"],\"ZuL73E\":[\"Создать новое представление базы данных\"],\"_-bi4r\":[\"Ссылочная таблица\"],\"_AEYGI\":[\"История выполнения пуста\"],\"_FdpZc\":[\"Не удалось загрузить определение представления: \"],\"_FxSdi\":[\"Прямые зависимости приложения, бэкенда и инструментов с открытым исходным кодом.\"],\"_JyTG8\":[\"Введите промпт для объяснения...\"],\"_Ltc_k\":[\"Дополнительно\"],\"_Q2Wix\":[\"строк\"],\"_TK1zF\":[\"Сохранённое подключение\"],\"_bJFBE\":[\"Таймаут подключения\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Дерево\"],\"_dqduX\":[\"Следующая страница\"],\"_fwE6J\":[\"Ранее\"],\"_n04sB\":[\"Завершить\"],\"_otxbQ\":[\"Файл ключа\"],\"_pezIT\":[\"Не удалось подключиться к \",[\"0\"],\". Проверьте настройки или убедитесь, что база данных запущена.\"],\"_srfkj\":[\"Пользовательский ключ удалён\"],\"_t6aFo\":[\"MySQL и MariaDB могут возвращать EXPLAIN FORMAT=JSON или табличный EXPLAIN в зависимости от версии сервера.\"],\"_xTbaM\":[\"столбцы\"],\"_yxaaL\":[\"Уникальный индекс\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis — бесплатный проект с открытым исходным кодом. Если он вам полезен, поддержите проект и присоединяйтесь к сообществу.\"],\"a9CASo\":[\"SQLite поддерживает только переименование столбцов. Другие изменения требуют пересоздания таблицы вручную.\"],\"aAIQg2\":[\"Внешний вид\"],\"aC_vCa\":[\"Сгенерировать название с помощью AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Выберите узел для просмотра подробностей\"],\"aHKcKc\":[\"Предыдущая страница\"],\"aI-5wG\":[\"Verify CA\"],\"aJJySV\":[\"например, users\"],\"aQ8swY\":[\"Значение по умолчанию\"],\"aScJP1\":[\"Запустить этот запрос\"],\"aVNbN8\":[\"Условия фильтрации\"],\"aWhdMQ\":[\"Использовать существующее SSH-подключение\"],\"aXYd8V\":[\"Таймаут\"],\"aX_S_r\":[\"Страница \",[\"0\"],\" из \",[\"totalPages\"]],\"agZcf8\":[\"Сгенерированный SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [поля]\"],\"alplHn\":[\"Анализ плана запроса с помощью AI...\"],\"anBcU3\":[\"Если Tabularis вам полезен и вы хотите видеть больше возможностей — поддержите проект: вносите вклад в код, сообщайте об ошибках или поставьте звезду репозиторию.\"],\"arHmj2\":[\"Удалить этот запрос из истории?\"],\"arKcqW\":[\"Старые серверы могут возвращать только оценочные планы с меньшим количеством метрик.\"],\"arcpYe\":[\"Требовать подтверждение\"],\"aurEkh\":[\"Загрузка процессов…\"],\"avtdsd\":[\"Режим SQL\"],\"az8lvo\":[\"Выключено\"],\"b1Ah3z\":[\"Фокус на\"],\"b392Dr\":[\"Развернуть все\"],\"b5S_PU\":[\"Имя базы данных\"],\"bAvovP\":[\"Переместить вниз\"],\"bH3JqY\":[\"Таблицы не найдены\"],\"bP5JOn\":[\"Перенос строк\"],\"bcOdok\":[\"Удалить группу\"],\"bcqeas\":[\"Все MCP-запросы только для чтения\"],\"bmca5u\":[\"Только запись\"],\"bpCiBU\":[\"Разрешить запись из MCP\"],\"bqnhqW\":[\"Оценка превышает реальное количество строк\"],\"bqpcP7\":[\"Экспорт базы данных\"],\"bspG20\":[\"Сравнение\"],\"bu5X4V\":[\"Завершить с ошибкой\"],\"bw22Gk\":[\"Схема столбцов\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Основные проблемы\"],\"cFCKYZ\":[\"Отклонить\"],\"cFGrCP\":[\"таблица\"],\"cGeFup\":[\"Размер шрифта\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Фокус на таблице\"],\"cM9NHc\":[\"Откатить до\"],\"cO9-2L\":[\"Отключён\"],\"cSev-j\":[\"Фильтры\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Импортировать \",\"#\",\" строку\"],\"few\":[\"Импортировать \",\"#\",\" строки\"],\"many\":[\"Импортировать \",\"#\",\" строк\"],\"other\":[\"Импортировать \",\"#\",\" строки\"]}]],\"c_xoSn\":[\"Переименована ячейка \",[\"n\"]],\"cd0XEW\":[\"Сохранить запрос\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Разделить группу\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" операторов\"],\"d34vwG\":[\"Загрузить базы данных\"],\"d6ynQ7\":[\"Сортировать по убыванию\"],\"d8_6_v\":[\"отменить\"],\"d8wc1_\":[\"Примеры значений\"],\"dBXoCS\":[\"Обнаружена переменная окружения, но её можно переопределить, указав ключ выше.\"],\"dD7NPy\":[\"Структура\"],\"dEgA5A\":[\"Отменить\"],\"dMtLDE\":[\"до\"],\"dPJVhW\":[\"Ошибка установки\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" сессия\"],\"few\":[\"#\",\" сессии\"],\"many\":[\"#\",\" сессий\"],\"other\":[\"#\",\" сессий\"]}]],\"dTUzKm\":[\"Запустить выбранные (\",[\"0\"],\")\"],\"dU_iQN\":[\"Сессии не соответствуют текущим фильтрам.\"],\"dUh9QW\":[\"Планирование\"],\"dVoir2\":[\"Добавлена Markdown-ячейка \",[\"n\"]],\"dZ0d2O\":[\"Выберите хотя бы одну таблицу\"],\"dhi13U\":[\"Choose image…\"],\"dli1JX\":[\"Применить изменения\"],\"dmYV6f\":[\"Подпрограммы\"],\"dohZCo\":[\"Инструкции для AI-генерации SQL. Используйте \",[\"SCHEMA\"],\" как заполнитель структуры базы данных.\"],\"dtxpK2\":[\"Анализ\"],\"dwW9nJ\":[\"Показывать номера строк\"],\"dwWVw_\":[\"Показывать экран приветствия\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" вкладка\"],\"few\":[\"#\",\" вкладки\"],\"many\":[\"#\",\" вкладок\"],\"other\":[\"#\",\" вкладки\"]}]],\"dxxY9r\":[\"При совпадении\"],\"dyN4j9\":[\"Нажмите «Запустить предпросмотр», чтобы увидеть результаты\"],\"e07Iz5\":[\"Открыть диспетчер задач\"],\"e0NzXu\":[\"Проект находится в активной разработке (WIP). Основные функции стабильны, впереди много интересного.\"],\"e1UKxf\":[\"Сохранить этот запрос\"],\"e34gdU\":[\"Сколько времени MCP-процесс ожидает решения пользователя перед отменой запроса.\"],\"e62LQd\":[\"Завершить принудительно\"],\"e6QZsM\":[\"Тема редактора\"],\"e8CirT\":[\"Выполнить запрос\"],\"eD2kUP\":[\"Чтений буфера\"],\"eE0JZ4\":[\"Версия\"],\"eIDch7\":[\"Введите промпт для анализа плана выполнения...\"],\"eIVolo\":[\"Диск R/W\"],\"eJOEBy\":[\"Экспорт...\"],\"eKHY3W\":[\"Настройки плагина\"],\"eMb6Ub\":[\"Выберите ресурс...\"],\"ePK91l\":[\"Изменить\"],\"eXweu6\":[\"Развернуть ячейку\"],\"ecNsTE\":[\"Запросы не найдены\"],\"ecUA8p\":[\"Сегодня\"],\"ecpIZP\":[\"Введите пароль, если ключ зашифрован\"],\"esl-Tv\":[\"Тип ресурса\"],\"exyUec\":[\"Подключение\"],\"f2AJjl\":[\"Удалить строку\"],\"f4pD-j\":[\"Проверка подключения не удалась\"],\"f7sXvi\":[\"Введите пароль\"],\"fAsxc0\":[\"Последовательные сканирования\"],\"fIeFs0\":[\"Выберите значение...\"],\"fJm92A\":[\"Выберите файл с планом EXPLAIN (Postgres JSON или текст) для визуализации.\"],\"fOuPPd\":[\"Плагин\"],\"fXVIZq\":[\"Значения\"],\"f_b1TA\":[\"История выполнения\"],\"fghnqP\":[\"Переключиться на подключение 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Запятая (,)\"],\"fp711N\":[\"Заблокировано (только чтение)\"],\"fpzyLj\":[\"Страница \",[\"0\"],\" из \",[\"1\"]],\"fuA6oy\":[\"Таймаут сокета\"],\"fvImQM\":[\"Выбрано: \",[\"0\"]],\"fwr_nh\":[\"Устанавливайте расширения, управляйте драйверами плагинов и настройками среды выполнения.\"],\"g0ZzK4\":[\"Корректный JSON\"],\"g11hAR\":[\"Новая строка\"],\"g8VcMm\":[\"Мой кластер K8s\"],\"gCFR_O\":[\"Параллельное выполнение (Запустить все)\"],\"gEjU98\":[\"Открыть подключения\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Требуется хотя бы один столбец\"],\"gSuQrG\":[\"Подключения по запросу \\\"\",[\"search\"],\"\\\" не найдены\"],\"gUypqb\":[\"Перезапустить запрос\"],\"gZWMnn\":[\"AI-анализ\"],\"ghYd73\":[\"Выберите цель...\"],\"giAqEC\":[\"Создать новую таблицу\"],\"gnQS8X\":[\"Максимальный размер пакета для MySQL-коннектора.\"],\"gqV5VL\":[\"Встроенное, не настраивается\"],\"gww_XE\":[\"Ссылочный столбец\"],\"gxXPJ9\":[\"Настроить интерпретатор\"],\"gxutEv\":[\"Триггер обновлён\"],\"gz6UQ3\":[\"Развернуть\"],\"h-XNc9\":[\"Разделитель CSV\"],\"h-kNAk\":[\"например, sales_data\"],\"h3Z_aK\":[\"Введите Markdown...\"],\"h7MgpO\":[\"Горячие клавиши\"],\"h7peZQ\":[\"Разрешён\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" системный процесс\"],\"few\":[\"#\",\" системных процесса\"],\"many\":[\"#\",\" системных процессов\"],\"other\":[\"#\",\" системных процессов\"]}]],\"hEZrFh\":[\"Выполнить SQL-файл...\"],\"hEipgW\":[\"Проверить обновления сейчас\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Экспортировать как CSV\"],\"hItdtk\":[\"Выбрать папку\"],\"hXFVjo\":[\"Название таблицы обязательно\"],\"hZ6znB\":[\"Порт\"],\"h_huI6\":[\"Перезапустить\"],\"hbz1rh\":[\"ключи\"],\"hdsaJo\":[\"Импорт...\"],\"he3ygx\":[\"Копировать\"],\"hfGimp\":[\"Выберите пространство имён...\"],\"hjjSEi\":[\"Подключения только для чтения\"],\"hjwN_s\":[\"Имя ресурса\"],\"hlF1mD\":[\"Копировать выделение\"],\"hnboBb\":[\"AI-анализ плана запроса\"],\"hq4-D2\":[\"API-ключ хранится в системном хранилище ключей. Указанный здесь ключ имеет приоритет над переменной окружения.\"],\"hqjXdn\":[\"Не удалось удалить SSH-подключение\"],\"hqofAK\":[\"Копировать SQL\"],\"hy6L14\":[\"Открыть на GitHub\"],\"hyjACX\":[\"Ячейки свёрнуты/развёрнуты\"],\"hz1b5W\":[\"Совпадающие элементы не найдены\"],\"i1vAVM\":[\"Создать новую таблицу\"],\"i3S5T3\":[\"Поиск в избранном...\"],\"i4_LY_\":[\"Запись\"],\"i5HBWh\":[\"История запросов сброшена\"],\"iAVlge\":[\"Настройте инструкции для AI-генерации названий ячеек ноутбука. Содержимое ячейки (SQL или Markdown) передаётся как сообщение пользователя.\"],\"iE1yAB\":[\"Фильтр таблиц...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Подключиться\"],\"iSryJ2\":[\"Мой SSH-сервер\"],\"iT7UeX\":[\"Добавить индекс\"],\"iUWwuR\":[\"Скачать и установить\"],\"ia7i08\":[\"Сначала выберите контекст/пространство имён/тип\"],\"ibepZK\":[\"Сырой SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Сохранено\"],\"igcsfY\":[\"В реестре нет доступных плагинов.\"],\"ij-Elv\":[\"Предпросмотр изображения\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" запрос\"],\"few\":[\"#\",\" запроса\"],\"many\":[\"#\",\" запросов\"],\"other\":[\"#\",\" запроса\"]}]],\"ioL38P\":[\"Мониторинг процессов плагинов, CPU, RAM и диска в реальном времени\"],\"ixlL_e\":[\"SSH-ключ (необязательно)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Выберите модель\"],\"j3gyYH\":[\"Применить все\"],\"j5CWO4\":[\"Актуально\"],\"j9HPuI\":[\"Строка #\",[\"0\"]],\"jBtpMP\":[\"Все статусы\"],\"jEu4bB\":[\"Столбцы\"],\"jEyQIs\":[\"Подпрограммы не найдены\"],\"jHc1By\":[\"Удалить представление\"],\"jI6sj4\":[\"Стоимость, время и оценки строк зачастую недоступны по сравнению с PostgreSQL и MySQL.\"],\"jIxQCZ\":[\"Недоступно для вашей платформы\"],\"jKIncn\":[\"Название базы данных обязательно\"],\"jPSk57\":[\"Причина (необязательно)\"],\"jUNY_d\":[\"представление\"],\"jVqjDo\":[\"Недопустимый формат файла ноутбука\"],\"jWSZ-A\":[\"Только предпросмотр — полные данные не загружены\"],\"jgjIDU\":[\"Не удалось удалить существующий триггер: \"],\"jnhuWy\":[\"Таймаут сокета в миллисекундах.\"],\"jpeU_Z\":[\"Блокноты\"],\"jpgB4Y\":[\"Название подключения обязательно\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"дочерний процесс\"],\"jx0t66\":[\"Свернуть дочерние процессы\"],\"jxShEf\":[\"Создать представление\"],\"jz5PKx\":[\"Определение представления\"],\"k-0mL-\":[\"Добавить столбец\"],\"k-XiMX\":[\"Сырой\"],\"k2UnVy\":[\"Условие хеша\"],\"k5UUX3\":[\"Триггер создан\"],\"kALwhk\":[\"секунд\"],\"kBiBq7\":[\"Удалить индекс \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Показать/скрыть график\"],\"kI1qVD\":[\"Форматировать\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка · \",[\"1\"],\"мс\"],\"few\":[\"#\",\" строки · \",[\"2\"],\"мс\"],\"many\":[\"#\",\" строк · \",[\"2\"],\"мс\"],\"other\":[\"#\",\" строки · \",[\"2\"],\"мс\"]}]],\"kJDmsI\":[\"Подробности события\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Реестр\"],\"kY-q3P\":[[\"label\"],\" обязательно\"],\"kexIdC\":[\"Использовать проброс портов Kubernetes\"],\"kj2-CR\":[\"Подробности ошибки\"],\"krksx_\":[\"Готово\"],\"kwY6nh\":[\"Закрыть\"],\"kx0s-n\":[\"Результаты\"],\"kxUEfE\":[\"Не удалось получить определение подпрограммы: \"],\"l2Op2p\":[\"Параметры запроса\"],\"l9Ivba\":[\"Процессы плагинов и системные ресурсы\"],\"lBdPxu\":[\"Accent color\"],\"lCF0wC\":[\"Обновить\"],\"lEQRwq\":[\"Данные (INSERT)\"],\"lIvS11\":[\"Пересоздать триггер\"],\"lKS0ce\":[\"Новая таблица создана\"],\"lOekZ3\":[\"Переключить на горизонтальное расположение\"],\"lUA1C1\":[\"Пароль SSH-ключа (необязательно)\"],\"lVeG20\":[\"Зависимости Rust\"],\"lXAG6D\":[\"Инструкции для AI-объяснения запросов. Используйте \",[\"LANGUAGE\"],\" как заполнитель языка вывода.\"],\"lbbYjy\":[\"Прямое редактирование файла конфигурации. Изменения вступят в силу после перезапуска.\"],\"lhKW0m\":[\"Добавлена SQL-ячейка \",[\"n\"]],\"lk-wOz\":[\"Фильтр триггеров...\"],\"lk0x32\":[\"Размер страницы результатов (Limit)\"],\"lkz6PL\":[\"Длительность\"],\"lmVGeo\":[\"Добавить внешний ключ\"],\"lnnx3E\":[\"Подключить Tabularis к Claude Desktop, Cursor и другим клиентам\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Добавить\"],\"m2Q_r8\":[\"Определять JSON в текстовых столбцах\"],\"m2tskz\":[\"Успешно\"],\"mA-qpe\":[\"Выполнение завершено\"],\"mBhhbA\":[\"Логи скопированы в буфер обмена\"],\"mCNdzH\":[\"Запустить ячейку\"],\"mO95sp\":[\"Закрыть панель\"],\"mP7dLi\":[\"Введите название шрифта выше\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" заблокированное\"],\"few\":[\"#\",\" заблокированных\"],\"many\":[\"#\",\" заблокированных\"],\"other\":[\"#\",\" заблокированных\"]}]],\"mS74ir\":[\"Не удалось сохранить SSH-подключение\"],\"mSqtw8\":[\"Запустить предпросмотр\"],\"mURmfQ\":[\"Определение представления (SQL)\"],\"mX_isJ\":[\"Вертикально\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Структура (DDL)\"],\"mrk4Cf\":[\"Сортировать по \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Мы только что открыли отдельное место для пользователей Tabularis. Получайте помощь, делитесь советами, участвуйте в формировании дорожной карты.\"],\"mtvVdV\":[\"Обработано строк\"],\"mx4evv\":[\"Создать таблицу\"],\"myXGZW\":[\"Пошаговый\"],\"mzI_c-\":[\"Скачать\"],\"n7JDTx\":[\"Установите и включите плагины, чтобы увидеть их здесь\"],\"nDDJir\":[\"Поиск по сессии, клиенту, подключению…\"],\"nHP-Kr\":[\"Нет активной сессии. Выберите подключение.\"],\"nKhCjW\":[\"Выбрать таблицы\"],\"nNmhuY\":[\"Создать индекс\"],\"nNwvm4\":[\"Ошибка\"],\"nOVim5\":[\"Не удалось сохранить подключение\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Требуется расширение: \",[\"0\"]],\"ngO6Pv\":[\"Разрешить Enter (в дополнение к Tab) для принятия активной подсказки автодополнения. При отключении Enter всегда вставляет новую строку.\"],\"nhmF3p\":[\"подключений\"],\"noM5A_\":[\"Создайте первое подключение\"],\"nohy4m\":[\"Нет активности MCP.\"],\"nr-axf\":[\"Удалить плагин\"],\"nsPFX9\":[\"Открыть в Visual Explain\"],\"nuBbBr\":[\"График\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"Изменить\"],\"o21Y-P\":[\"записей\"],\"o3tP_A\":[\"Удалить индекс\"],\"o45L8r\":[\"Введите название подключения\"],\"o53XGh\":[\"Копировать выбранные строки\"],\"o7J4JM\":[\"Фильтр\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Уровень\"],\"oGiIL7\":[\"Провайдер по умолчанию\"],\"oJ4rAm\":[\"Подключение потеряно\"],\"oJlXF2\":[\"Импортировать ноутбук\"],\"oMFv82\":[\"Разделить вертикально\"],\"oOFiQg\":[\"Ограничивает количество строк, получаемых за один запрос, во избежание проблем с производительностью. Установите 0, чтобы отключить (не рекомендуется).\"],\"oT9ZD3\":[\"Скрыть обзор\"],\"oUzLtx\":[\"Редактирование триггера требует его удаления и повторного создания. Продолжить изменение \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Изменён график (ячейка \",[\"n\"],\")\"],\"oWfclW\":[\"Показывать просмотрщик JSON, когда нетипизированная текстовая ячейка содержит объект или массив JSON. Создаёт небольшие издержки на разбор каждой ячейки.\"],\"obpbdz\":[\"Файл конфигурации не найден (создайте вручную)\"],\"odZgfC\":[\"AI-КЛИЕНТЫ\"],\"ogZhXn\":[\"Направление по умолчанию для ER-диаграмм\"],\"ohUJJM\":[\"Плагины\"],\"ok3hJJ\":[\"Установлено\"],\"olAdaI\":[\"Реальных строк\"],\"olWzar\":[\"Принудительно завершить процесс плагина\"],\"ovBPCi\":[\"Default\"],\"owzTWN\":[\"Список моделей AI обновлён\"],\"oxYi6j\":[\"Базовый размер шрифта во всём приложении (10–20 пикселей).\"],\"p--hsQ\":[\"Соединение с базой данных прервано\"],\"p6NueD\":[\"НОВАЯ\"],\"pOYHox\":[\"Действия\"],\"pR9bTR\":[\"Нет данных BLOB\"],\"pRDT0m\":[\"Таблица\"],\"pS8S5q\":[\"например, users, orders, products\"],\"pSws_M\":[\"Название таблицы\"],\"pVLbKZ\":[\"Представление создано\"],\"pWT04I\":[\"Проверка...\"],\"pZJ_6D\":[\"Название индекса обязательно\"],\"pddYFG\":[\"Введите промпт для названия ячейки...\"],\"pnpyuD\":[\"Включить логирование\"],\"pqKMPv\":[\"Не удалось создать таблицу: \"],\"pqaP1h\":[\"Закрыть\"],\"pqarBu\":[\"По возр.\"],\"ptuq35\":[\"например, Comic Sans MS\"],\"pzu7v4\":[\"Горизонтально\"],\"q-ch8m\":[\"Отметьте подключения, которым разрешена запись. Остальные — только для чтения.\"],\"qIrtcK\":[\"Обновления\"],\"qOqy8G\":[\"Проверка конфигурации...\"],\"qWaVNs\":[\"Сохранить и перезапустить\"],\"qb3LPX\":[\"Открыть ER-диаграмму\"],\"qkK0vq\":[\"Название представления обязательно\"],\"qki9tG\":[\"Ошибка\"],\"qoIir-\":[\"Базовый URL OpenAI-совместимого API. Примеры: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Свернуть все\"],\"r6ncaO\":[\"Закрыть вкладку\"],\"rAJlpP\":[\"Порт контейнера\"],\"rG3WVm\":[\"Чтение\"],\"rGRCeK\":[\"Очистить историю запросов\"],\"rNIto7\":[\"Имя ресурса обязательно\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Ноутбук экспортирован\"],\"rY4sEV\":[\"Удалить внешний ключ\"],\"rbu0nO\":[\"Управление SSH-подключениями\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" подключение\"],\"few\":[\"#\",\" подключения\"],\"many\":[\"#\",\" подключений\"],\"other\":[\"#\",\" подключения\"]}]],\"rn2_2V\":[\"Удалить фильтр\"],\"roABNH\":[\"История запросов пуста\"],\"rtir7c\":[\"неизвестно\"],\"ru0-2W\":[\"Нет активных подключений\"],\"rvDPWO\":[\"Разрыв оценки\"],\"rwWjWg\":[\"Что нового\"],\"s6m9gy\":[\"Удалить триггер \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Проверить подключение\"],\"sBOaim\":[\"Файл конфигурации сохранён. Перезапустить сейчас?\"],\"sCyv9B\":[\"Обновить модели\"],\"sSUqe4\":[\"Удалить\"],\"sUBkgN\":[\"Генерация SQL...\"],\"sZZG3d\":[\"Импортировать \\\"\",[\"0\"],\"\\\"?\\nСуществующие данные могут быть перезаписаны.\"],\"sbK5ck\":[\"Поиск в истории...\"],\"sq_bS6\":[\"При удалении\"],\"suW7-E\":[\"Таймаут подключения в миллисекундах.\"],\"t-R8-P\":[\"Выполнение\"],\"t1OfVY\":[[\"totalLibraries\"],\" библиотек\"],\"t2TMzs\":[\"Закрыть вкладку\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Выберите таблицу...\"],\"t7KRl1\":[\"Журнал всех вызовов MCP-инструментов и запросов, ожидающих подтверждения. Хранится локально — никуда не отправляется.\"],\"t9NJIk\":[\"Обнаружены интенсивные сканирования\"],\"tB7xof\":[\"Временные операции или сортировка\"],\"tBBXTO\":[\"Интервал пинга\"],\"tFrT3w\":[\"Добавьте этот фрагмент в файл конфигурации клиента вручную, если автоматическая установка не сработала.\"],\"tJ7UbA\":[\"объяснить активный\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Разделить горизонтально\"],\"tQhW-D\":[\"Настройки логирования\"],\"tXFGEx\":[\"Нет сохранённых подключений Kubernetes. Нажмите «Добавить», чтобы создать.\"],\"tXLz_8\":[\"Удалить\"],\"tXpRby\":[\"Таблица данных\"],\"tbysEk\":[\"Действия\"],\"tdta9X\":[\"Страница \",[\"0\"]],\"tfDRzk\":[\"Сохранить\"],\"tfEioV\":[\"Выполнить все SQL-ячейки сверху вниз\"],\"tiAIaJ\":[\"SSH-пароль отсутствует. Введите заново.\"],\"tk22BR\":[\"Вставьте структурированные данные и проверьте схему перед импортом\"],\"tst44n\":[\"События\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL-файл выполнен\"],\"u6QeR6\":[\"Перезапустить сейчас\"],\"uAQUqI\":[\"Статус\"],\"uBAxNB\":[\"Редактор\"],\"uFViPK\":[\"Нет доступных SSH-подключений\"],\"uHUuhp\":[\"Объяснить этот запрос\"],\"uHfFzS\":[\"Размер шрифта редактора\"],\"uJ_3K5\":[\"Удалить блокнот «\",[\"0\"],\"»? Это действие нельзя отменить.\"],\"uKaNJ3\":[\"Открыть в JSON-редакторе\"],\"uQBwTo\":[\"Схемы\"],\"ub54ff\":[\"Центр плагинов\"],\"ufFyBs\":[\"База данных экспортирована\"],\"upNmR2\":[\"Открыть в боковом редакторе\"],\"utMia3\":[\"Снять выбор\"],\"uyNaJg\":[\"1 элемент\"],\"v61dnS\":[\"Укажите точное название модели вашего OpenAI-совместимого провайдера.\"],\"v6oeyr\":[\"Установлено\"],\"v75DGg\":[\"Выбрать файл\"],\"v99dO4\":[\"Первичный ключ\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" запрос\"],\"few\":[\"#\",\" запроса\"],\"many\":[\"#\",\" запросов\"],\"other\":[\"#\",\" запроса\"]}]],\"vCSBPD\":[\"Добавить фильтр\"],\"vH7uJj\":[\"Сортировать по…\"],\"vUOA1-\":[\"Поиск моделей...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE включает реальные строки, время, итерации и счётчики буферов при наличии.\"],\"vXIe7J\":[\"Язык\"],\"vYf4Jm\":[\"Введите полную SQL-функцию (например, ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Предпочтительный\"],\"vditm4\":[\"План выполнения\"],\"vks_ls\":[\"Закрыть остальные вкладки\"],\"vnAnIp\":[\"Модель \",[\"0\"],\" не найдена у провайдера \",[\"1\"],\". Она может работать некорректно.\"],\"vqoN5u\":[\"Структура\"],\"vrAvbP\":[\"Удалить группу «\",[\"0\"],\"»? Подключения переместятся в раздел без группы.\"],\"vtJ2yO\":[\"Проводник\"],\"vujQJ5\":[\"Локализация\"],\"vvJPVL\":[\"Показать обзор\"],\"vwI5S4\":[\"Готово\"],\"vzH-7Z\":[\"Объяснить\"],\"w7QmD_\":[\"Введите системный промпт...\"],\"w9eMXw\":[\"триггер\"],\"wCJFlW\":[\"Прошло времени\"],\"wCfv2R\":[\"Добавить подключение\"],\"wGfc86\":[\"Очистить всю историю\"],\"wGwNv4\":[\"Активная база данных\"],\"wJJ-Wy\":[\"Установка...\"],\"wMe2Qp\":[\"Пространство имён\"],\"wQiel_\":[\"Попаданий в буфер\"],\"wQn-RM\":[\"Добавить столбец\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Применено\"],\"wTmVhm\":[\"Удалить\"],\"wZeIWq\":[\"Импорт из буфера обмена\"],\"w_bY7R\":[\"Логи\"],\"wc_8bA\":[\"Ожидает подтверждения\"],\"wckWOP\":[\"Управление\"],\"wdYcKH\":[\"Открытые вкладки\"],\"wja8aL\":[\"Без названия\"],\"wkOAzk\":[\"Нет блокнотов, соответствующих запросу.\"],\"wp49Ao\":[\"Не удалось обработать вставки: \"],\"wqG2hQ\":[\"Пропустить (не импортировать)\"],\"wwrAsK\":[\"Заполните все обязательные поля\"],\"wwu18a\":[\"Icon\"],\"x2fr_j\":[\"Граф\"],\"xANKBj\":[\"Функции\"],\"xBwjck\":[\"Изменения вступят в силу после перезапуска.\"],\"xDAtGP\":[\"Сообщение\"],\"xECY01\":[\"Хранимые процедуры\"],\"xGPNgZ\":[\"Настройка промптов\"],\"xNgtS-\":[\"Представления не найдены\"],\"xOPa1b\":[\"Порт должен быть в диапазоне от 1 до 65535\"],\"xY9s5E\":[\"Таймаут\"],\"xaVUr1\":[\"Съешь же ещё этих мягких французских булок, да выпей чаю\"],\"xbvTzL\":[\"Путь к файлу\"],\"xlew5F\":[\"Очистить\"],\"xmNyKz\":[\"Проверка...\"],\"xtuh6D\":[\"Развернуть проводник\"],\"y-Zdqj\":[\"Выберите контекст...\"],\"y3HaQk\":[\"Момент срабатывания\"],\"yLFey_\":[\"Создать триггер\"],\"yLianM\":[\"Открыть просмотрщик JSON\"],\"yQXjG5\":[\"Снять выбор\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Изменить триггер\"],\"y_0uwd\":[\"Вчера\"],\"ygCKqB\":[\"Остановить\"],\"ykCc6r\":[\"Изменена база данных (ячейка \",[\"n\"],\")\"],\"ynVMSc\":[\"Выбрать все\"],\"ytdz1d\":[\"AI запрашивает запись в базу данных\"],\"yyhzur\":[\"Создать таблицу\"],\"yz7wBu\":[\"Закрыть\"],\"z0VdfR\":[\"процедура\"],\"z407wX\":[\"SSH-пароль\"],\"z5kV0h\":[\"Подключения\"],\"zBTMzx\":[\"Предпросмотр\"],\"zCaAKs\":[\"Ошибка обновления\"],\"zDAakK\":[\"Отображение диаграммы невозможно без ID подключения.\"],\"zGe21h\":[\"Этот ключ загружен из переменной окружения\"],\"zGfL5t\":[\"значение\"],\"zL6-4A\":[\"Нет запущенных процессов плагинов\"],\"zLZhCi\":[\"Новое сообщество в Discord!\"],\"zLlCou\":[\"Копировать имя столбца\"],\"zNEL34\":[\"Присоединяйтесь к сообществу\"],\"zNgTlV\":[\"Закрыть вкладки справа\"],\"zQz55p\":[\"Показать структуру\"],\"zR0FfH\":[\"Экспортировано в \",[\"target\"]],\"zRZeOc\":[\"Поиск таблиц, представлений, процедур, триггеров...\"],\"zUNMsr\":[\"SSH-ключ\"],\"zXMRzb\":[\"SSH-порт\"],\"zZgoXr\":[\"Таблицы не найдены\"],\"zaWbms\":[\"Откатить изменения\"],\"zgClmU\":[\"Установить конфигурацию\"],\"zga9sT\":[\"ОК\"],\"zgk5iK\":[\"Введите значение...\"],\"zvzN4C\":[\"Сделать активным\"],\"zzDlyQ\":[\"Успешно\"],\"zzMxrp\":[\"Изменить config.json\"],\"zz_Wd_\":[\"Режим\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Максимум записей в истории\"],\"-6AWa-\":[\"Импортировать подключения\"],\"-6NyRG\":[\"Клиент\"],\"-K0AvT\":[\"Отключиться\"],\"-PLZfh\":[\"Не удалось обновить модели\"],\"-T5W2e\":[\"Примечания драйвера\"],\"-ZgeeE\":[\"История изменений\"],\"-aYrdc\":[\"Доступна версия \",[\"0\"]],\"-fBGXl\":[\"Наибольшая стоимость\"],\"-jIQDz\":[\"Свернуть ячейку\"],\"-u1eRo\":[\"Нет базы данных\"],\"-yoeVU\":[\"Загрузка схемы...\"],\"-zy2Nq\":[\"Тип\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID подтверждения\"],\"0E5-gF\":[\"Удалить это подключение?\"],\"0HCubq\":[\"Развернуть\"],\"0Kmdvy\":[\"Пользовательский шрифт\"],\"0Nj13E\":[\"Сгенерировать SQL\"],\"0ROgz5\":[\"Введите JSON...\"],\"0SY9sU\":[\"Не удалось отключиться от базы данных\"],\"0b3kL9\":[\"Выберите базу данных\"],\"0caMy7\":[\"История\"],\"0mx5ow\":[\"Запрос\"],\"0n9BtL\":[\"Предпросмотр\"],\"0pHB9N\":[\"Копировать как table.column\"],\"0sQzZK\":[\"Фильтр баз данных...\"],\"0uPP9X\":[\"Имя внешнего ключа (необязательно)\"],\"0wxuek\":[\"Текущая версия\"],\"0x09Aw\":[\"Переключён останов при ошибке\"],\"0yBP6v\":[\"Поддержать разработку\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка\"],\"few\":[\"#\",\" строки\"],\"many\":[\"#\",\" строк\"],\"other\":[\"#\",\" строки\"]}]],\"0yVAoD\":[\"Подсчитать строки\"],\"0zxJ87\":[\"Логи отсутствуют\"],\"1-ETbn\":[\"Визуальный Explain\"],\"1133_z\":[\"Изменить представление\"],\"11fGJ6\":[\"Запросы\"],\"13hIUA\":[\"API-ключ \",[\"0\"]],\"14qNWF\":[\"Выбрать SSH-подключение\"],\"17qHRP\":[\"Новое подключение\"],\"1Dn6bg\":[\"Импортировать из буфера обмена\"],\"1Dnd0I\":[\"Загрузить количество строк\"],\"1FjTLW\":[\"например, python3\"],\"1GOvbo\":[\"Ollama подключён (найдено моделей: \",[\"0\"],\")\"],\"1I6UoR\":[\"Представления\"],\"1U7hS5\":[\"Длина\"],\"1UTmg5\":[\"Максимальный размер пакета\"],\"1b7aSU\":[\"Шрифт редактора\"],\"1ekzlY\":[\"Процессы плагинов\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Выбор темы\"],\"1xVZkL\":[\"Модели не найдены\"],\"26Joci\":[\"Строк: \",[\"0\"]],\"2Bf-Qe\":[\"Новая консоль\"],\"2CrSmP\":[\"Помогите Tabularis развиваться\"],\"2D9F8_\":[\"Не удалось дублировать подключение\"],\"2Eoi_a\":[\"Подробности\"],\"2F4pE5\":[\"Сборка и тесты Rust\"],\"2Fsd9r\":[\"В этом месяце\"],\"2JzKXI\":[\"Установить GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Выбрать все\"],\"2SO5RM\":[\"Kubernetes недоступен для этого драйвера.\"],\"2Uh5GA\":[\"Экосистема Cargo\"],\"2YylFp\":[\"Новый визуальный запрос\"],\"2luuSG\":[\"Повторить\"],\"2wxgft\":[\"Переименовать\"],\"2yG2GC\":[\"Приостанавливать запись (или любой запрос) и запрашивать подтверждение в Tabularis перед отправкой в базу данных.\"],\"30-b5r\":[\"Удалить\"],\"31kwdN\":[\"Дублировать фильтр\"],\"34nxyb\":[\"Триггеры\"],\"35148H\":[\"Все инструменты\"],\"3Am5DS\":[\"Вкладки\"],\"3FVg9_\":[\"Локальный столбец\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Запустить\"],\"3L0HCz\":[\"Плагины не найдены.\"],\"3Nv3JV\":[\"Выполнение запроса...\"],\"3TSz9S\":[\"Свернуть\"],\"3UW8fG\":[\"Обновления управляются через \",[\"0\"]],\"3YvS-c\":[\"Новая вкладка\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Промпт для названия ячейки ноутбука\"],\"3qkggm\":[\"На весь экран\"],\"3rBJ1T\":[\"Просмотреть схему\"],\"3xZ-xV\":[\"Вставить текущую метку времени\"],\"40Gx0U\":[\"Часовой пояс\"],\"41GP4f\":[\"Разделитель по умолчанию при копировании или экспорте строк в формате CSV.\"],\"42iaEi\":[\"PostgreSQL без ANALYZE показывает только оценки планировщика.\"],\"44cXI8\":[\"Сортировать по \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Управление базами данных\"],\"4CK17g\":[\"Изменить представление \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Выберите хотя бы одну базу данных\"],\"4D_Nvt\":[\"Не удалось создать группу\"],\"4RiR6c\":[\"Экспортировать как HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" дочерний процесс\"],\"few\":[\"#\",\" дочерних процесса\"],\"many\":[\"#\",\" дочерних процессов\"],\"other\":[\"#\",\" дочерних процессов\"]}]],\"4VyuY3\":[\"Очистить все логи?\"],\"4WWqS3\":[\"Показать/скрыть JSON-дерево\"],\"4XAQdl\":[\"Создать индекс\"],\"4cEClj\":[\"Сессии\"],\"4cmfYp\":[\"Дублировать строку\"],\"4hsr6d\":[\"Создать представление\"],\"4lIZTB\":[\"Dev-зависимости фронтенда\"],\"4oYjvJ\":[\"Поиск запроса…\"],\"4tMxW4\":[\"Preview related record\"],\"4yJcjm\":[\"Выберите тип...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Закрыть панель фильтров (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Точка с запятой (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" событие\"],\"few\":[\"#\",\" события\"],\"many\":[\"#\",\" событий\"],\"other\":[\"#\",\" событий\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"Список\"],\"5To6Z6\":[\"Копировать запрос\"],\"5gqNQl\":[\"Сетка\"],\"5igIzr\":[\"Импорт отменён\"],\"5nTIup\":[\"Редактирование представления: \",[\"name\"]],\"5qIe8E\":[\"Запустить все\"],\"66bEht\":[\"Статус проекта\"],\"6PIJVc\":[\"Запуск\"],\"6QvP0l\":[\"Экспортировать как JSON\"],\"6W41Xq\":[\"Диспетчер задач\"],\"6WngBH\":[\"Установить NULL\"],\"6YtxFj\":[\"Имя\"],\"6_dCYd\":[\"Обзор\"],\"6dOBsk\":[\"Создать представление\"],\"6gvoHP\":[\"Скопировать сообщение об ошибке\"],\"6oCVzX\":[\"Контекст Kubernetes обязателен\"],\"6wQO0f\":[\"Показать данные\"],\"6z9W13\":[\"Перезапустить\"],\"71agNy\":[\"Сгенерировать названия для безымянных ячеек с помощью AI\"],\"74J3FG\":[\"Начальная версия\"],\"75BWdo\":[\"Не удалось загрузить определение триггера: \"],\"76d3Uz\":[\"События\"],\"76gPWk\":[\"Понятно\"],\"77nSMU\":[\"Удалить всю историю активности AI? Это действие необратимо.\"],\"7ABmyQ\":[\"Попробовать снова\"],\"7Ap0JP\":[\"Активно \",[\"activeFilterCount\"],\" из \",[\"0\"]],\"7E864M\":[\"Тип базы данных\"],\"7FqaG1\":[\"Настройте инструкции для AI-анализа планов EXPLAIN. Используйте \",[\"LANGUAGE\"],\" для языка вывода.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Обнаружены смешанные типы, использован TEXT\"],\"7RSQQd\":[\"Сохранять пароли в Keychain\"],\"7VpPHA\":[\"Подтвердить\"],\"7e7bPs\":[\"Тело триггера (SQL)\"],\"7eRaA9\":[\"Удалить триггер\"],\"7l15X4\":[\"с ошибкой\"],\"7sMeHQ\":[\"Ключ\"],\"7sNhEz\":[\"Пользователь\"],\"7tATh2\":[\"Выполнить запрос\"],\"7yb4gk\":[\"Ошибка: \"],\"8-4V8D\":[\"Таблицы\"],\"82G-l5\":[\"Model Context Protocol (MCP) позволяет AI-ассистентам (например, Claude) подключаться к локальным инструментам. Tabularis предоставляет MCP-сервер, через который AI читает схему базы данных и выполняет запросы.\"],\"83VjWE\":[\"Новый ноутбук\"],\"86IgoU\":[\"Выполнить запрос (в редакторе)\"],\"86fCgf\":[\"Настройте инструкции для AI-генерации названий вкладок с результатами. SQL-запрос передаётся как сообщение пользователя.\"],\"87a_t_\":[\"Метка\"],\"87kWsr\":[\"Экспорт подключений\"],\"8CWirf\":[\"MCP-сервер\"],\"8S8aIX\":[\"Проверка состояния подключения\"],\"8TMaZI\":[\"Время\"],\"8Tg_JR\":[\"Custom\"],\"8UFKYr\":[\"Выбрать запрос для выполнения\"],\"8VKSGV\":[\"Сгенерировать SQL\"],\"8Wjy6z\":[\"Закрыть вкладки слева\"],\"8ZsakT\":[\"Пароль\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL-редактор\"],\"8bRgTe\":[\"AI-провайдер не настроен. Перейдите в Настройки > AI.\"],\"8c_W0h\":[\"Старые версии\"],\"8guEQP\":[\"Обновить представления\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN — лёгкий инструмент преимущественно для анализа структуры.\"],\"8q_sOc\":[\"Remove\"],\"8t-akp\":[\"показаны первые \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Показать/скрыть текстовый редактор\"],\"8zfThY\":[\"Название подключения\"],\"91gnWY\":[\"Экспортировать логи\"],\"91rtHL\":[\"Создать новое представление\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Новая группа\"],\"9DOfTQ\":[\"Редактирование триггера: \",[\"name\"]],\"9JdjEN\":[\"Представление обновлено\"],\"9NzDFn\":[\"Показывать экран приветствия при запуске приложения.\"],\"9OoUS3\":[\"Создать новое SSH-подключение\"],\"9QGRD5\":[\"Целевой столбец\"],\"9QTny9\":[\"Ошибка выполнения запроса.\"],\"9S-fyV\":[\"Предварительный план выполнения\"],\"9SJ_Sx\":[\"Системные ресурсы\"],\"9UQ730\":[\"Клонировать\"],\"9X6cky\":[\"Нет\"],\"9XUV5V\":[\"В буфере обмена нет данных\"],\"9hGjL2\":[\"Создать индекс\"],\"9mMU1R\":[\"Время\"],\"9mvFo_\":[\"Время\"],\"9npOH9\":[\"Открыть файл\"],\"9uI_rE\":[\"Отменить\"],\"9xUjzm\":[\"Выбрать все\"],\"9y_02p\":[\"Общайтесь с сообществом, получайте помощь, предлагайте функции\"],\"A1pPcI\":[\"SSH-хост\"],\"A1taO8\":[\"Поиск\"],\"A6C0pv\":[\"Общая стоимость\"],\"A7WG0p\":[\"Плагин отключён\"],\"A7yRz3\":[\"Определение представления обязательно\"],\"A9Uyp6\":[\"Ошибка импорта: \"],\"ABEd-z\":[\"Для обновления Tabularis используйте менеджер пакетов.\"],\"AMdgKV\":[\"Промпт для анализа плана выполнения\"],\"ANSTMe\":[\"Серьёзных проблем в текущем плане не обнаружено.\"],\"ANzIr7\":[\"История запросов\"],\"AOnaU7\":[\"пропущено\"],\"AVlZoM\":[\"Окружение\"],\"AXTVsE\":[\"Verify Full\"],\"AXdRYR\":[\"Текущие логи\"],\"Aa-YkQ\":[\"Экспортировать ноутбук\"],\"Ai2U7L\":[\"Хост\"],\"AidayG\":[\"Фильтр по уровню\"],\"AlPiMN\":[\"Нажмите для перехода на страницу\"],\"An-1rA\":[\"Возвращено строк\"],\"AnV8j-\":[\"Изменить столбец\"],\"AvEr_L\":[\"Новая консоль\"],\"AvYbUL\":[\"Поставить звезду на GitHub\"],\"Aw_eOs\":[\"Требуется Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Ничего не найдено\"],\"B0mJGb\":[\"Сырой вывод\"],\"B1c58n\":[\"Изменить столбец\"],\"B3toQF\":[\"Объекты\"],\"B5nKny\":[\"/абсолютный/путь/к/папке\"],\"B5xevr\":[\"Имя подключения обязательно\"],\"BAVvWJ\":[\"ER-диаграмма\"],\"BBtVak\":[\"Свернуть все\"],\"BEVzjL\":[\"Импорт не удался\"],\"BHATjK\":[\"Экспортировать подключения\"],\"BJe2lZ\":[\"Показать/скрыть боковую панель\"],\"BK3WCj\":[\"Не удалось загрузить реестр\"],\"BKbO3i\":[\"Блокнот изменён\"],\"BMB51y\":[\"Запустить в консоли\"],\"BNW_Z4\":[\"например, active_users, order_summary\"],\"BPkXj7\":[\"Создать внешний ключ\"],\"BUO_JN\":[\"Копировать запрос\"],\"BYkhHY\":[\"Проверять обновления при запуске\"],\"BeSg6-\":[\"Собирать логи приложения в памяти для отладки\"],\"BgAyQH\":[\"Сбросить сортировку\"],\"BinTJI\":[\"экосистема npm\"],\"BkFson\":[\"Автопостраничный вывод\"],\"Bpglf1\":[\"Переместить вверх\"],\"BrGo6h\":[\"Поиск блокнотов\"],\"BxiAN_\":[\"Удалить запрос\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Зависимости фронтенда\"],\"CE-M2e\":[\"Информация\"],\"CHIyL8\":[\"Нет фильтров —\"],\"CJnUoU\":[\"Обновить триггеры\"],\"CLWWRV\":[\"Скачивание...\"],\"CUxwxn\":[\"Показать все таблицы\"],\"CWMXbw\":[\"принудительно остановит процесс. Все активные подключения к базе данных через этот плагин перестанут работать до его перезапуска.\"],\"CZt6BX\":[\"РУЧНАЯ НАСТРОЙКА\"],\"Ca8ixZ\":[\"Удалить\"],\"CbJBQS\":[\"Ошибка обновления: \"],\"Cdz-YU\":[\"Список\"],\"CpeQf9\":[\"Итерации\"],\"D2wXBw\":[\"Автоинкремент\"],\"D6Ql0c\":[\"Выберите модель для генерации и объяснения запросов.\"],\"DB8zMK\":[\"Применить\"],\"DDXf5E\":[\"SQL-функции\"],\"DEwnwi\":[\"Удалить\"],\"DNTvdl\":[\"Открыть в редакторе\"],\"DPc2P9\":[\"Удалить ячейку\"],\"DUY8Ba\":[\"Критические изменения\"],\"DVnBSM\":[\"Межстрочный интервал\"],\"Dd7YLj\":[\"Может быть позже\"],\"Deej3j\":[\"Некорректный JSON\"],\"DfKhk_\":[\"Обновить\"],\"DiRiTz\":[\"Открыть страницу пакета\"],\"DlRHAD\":[\"Выполнение EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" ошибка\"],\"few\":[\"#\",\" ошибки\"],\"many\":[\"#\",\" ошибок\"],\"other\":[\"#\",\" ошибок\"]}]],\"Dvdihe\":[\"На \",[\"0\"],\" — проверьте запрос перед выполнением.\"],\"DzFLzw\":[\"Да\"],\"E-JUtQ\":[\"Подтверждение операций\"],\"E0kcnZ\":[\"Общее\"],\"E2mje_\":[\"Выбрать запрос для объяснения\"],\"EDieyg\":[\"Удалить это SSH-подключение?\"],\"EHZxPj\":[\"Развернуть\"],\"EL4oDO\":[\"Доступна новая версия\"],\"EPi4gT\":[\"Сортировать по \",[\"field\"]],\"EWPtMO\":[\"Код\"],\"EWX0mQ\":[\"Без группы\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Неизвестно\"],\"EhADgB\":[\"Удалить столбец\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Используется актуальная версия\"],\"Em6JFd\":[\"Подсчитать строки\"],\"EnGiqG\":[[\"0\"],\" элементов\"],\"Ew1n5z\":[\"Поиск плагинов…\"],\"F18WP3\":[\"Параметры\"],\"F3uc1x\":[\"Экспортируемый файл будет содержать пароли к базам данных и SSH в открытом виде. Храните его в надёжном месте!\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" строка\"],\"few\":[\"#\",\" строки\"],\"many\":[\"#\",\" строк\"],\"other\":[\"#\",\" строки\"]}]],\"F6pfE9\":[\"Активно\"],\"F8tXg7\":[\"Предпросмотр данных\"],\"F9-6yK\":[\"Формат копирования по умолчанию\"],\"F9lxfG\":[\"Удалить\"],\"F9nsa2\":[\"Файл истории был повреждён и перенесён в резервную копию. Новые запросы будут записываться как обычно. Резервный файл:\"],\"FF_oap\":[\"По умолчанию\"],\"FK8rlP\":[\"SSH-подключения не настроены\"],\"FMRcH8\":[\"Первая строка как заголовок\"],\"FNvDMc\":[\"На этой неделе\"],\"FQe1FI\":[\"Оценка строк\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Операция\"],\"Fa_cky\":[\"Схема: \",[\"tableName\"]],\"FpEL5o\":[\"Выберите отдельную тему для SQL-редактора или синхронизируйте её с темой приложения.\"],\"FsvZQL\":[\"Изменена ячейка \",[\"n\"]],\"FtwKL9\":[\"Переключить вкладку\"],\"FznI3z\":[\"Удалить внешний ключ \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Ошибка предпросмотра: \"],\"G8Q5Zq\":[\"Пространство имён обязательно\"],\"GAohqx\":[\"Удалить столбец\"],\"GJR99u\":[\"Не удалось удалить столбец: \"],\"GKfzzM\":[\"Выберите подключение...\"],\"GS-Mus\":[\"Экспортировать\"],\"GUaLUq\":[\"Не удалось загрузить схему: \"],\"GXP-Iw\":[\"Добавить SQL-ячейку\"],\"Gj1mLb\":[\"Ячейки переупорядочены\"],\"GlbqG2\":[\"Reset to driver default\"],\"Gq1YzP\":[\"События\"],\"Gs5AlY\":[\"Открыть\"],\"GtmO8_\":[\"от\"],\"GxkJXS\":[\"Загрузка...\"],\"H-o4D2\":[\"Создать новый столбец\"],\"H2B-KW\":[\"Формат по умолчанию при копировании строк через Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Повторить\"],\"H7mlCc\":[\"/абсолютный/путь/к/db.sqlite\"],\"H86f9p\":[\"Свернуть\"],\"H9P8CD\":[\"добавить первый фильтр\"],\"HAQlGl\":[\"Активность AI\"],\"HKNZrs\":[\"Условие индекса\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Удалить \",\"#\",\" строку\"],\"few\":[\"Удалить \",\"#\",\" строки\"],\"many\":[\"Удалить \",\"#\",\" строк\"],\"other\":[\"Удалить \",\"#\",\" строки\"]}]],\"HPuCiP\":[\"Путь к папке\"],\"HUs1R3\":[\"Нет открытых вкладок для этого подключения.\"],\"HV4Isp\":[\"Введите SSH-пароль\"],\"HVC8Hh\":[\"Скопировано в буфер обмена\"],\"HWEpq8\":[\"Запись на диск/с\"],\"HY4nP5\":[\"Встроенно\"],\"HcmoWv\":[\"Не удалось сохранить представление: \"],\"He8v1Y\":[\"Убрать из «Применить все»\"],\"HehHP1\":[\"Расположение по умолчанию\"],\"HilYn4\":[\"Ноутбук пуст. Добавьте ячейку для начала работы.\"],\"HjxVK_\":[\"Быстрая проверка подключения\"],\"HmMnRx\":[\"Режим WKT\"],\"HoKCiI\":[\"Приложение автоматически перезапустится после установки\"],\"HpK_8d\":[\"Перезагрузить\"],\"Hpi4Jm\":[\"Вступить сейчас\"],\"HuA3RU\":[\"Табуляция\"],\"I128p7\":[\"Вертикальная черта (|)\"],\"I3AgqA\":[\"Настроить SSH вручную\"],\"I5VBsr\":[\"Как в приложении\"],\"I8yrPb\":[\"Заменить таблицу\"],\"I92BdB\":[\"Убрать из группы\"],\"I92fr4\":[\"Напомнить позже\"],\"I99Miw\":[\"Стоимость\"],\"IETZIR\":[\"Изменить название ячейки\"],\"IG9wzA\":[\"Не удалось добавить строку: \"],\"ILleOG\":[\"Тип ресурса должен быть \\\"service\\\" или \\\"pod\\\"\"],\"IQ3gAw\":[\"Загрузить файл\"],\"IUwGEM\":[\"Сохранить изменения\"],\"IUwmLq\":[\"Прямые зависимости из package.json и src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Библиотеки с открытым исходным кодом\"],\"I_43p6\":[\"Безопасность\"],\"Iaizf4\":[\"Appearance\"],\"Il3FBB\":[\"Открыть/закрыть панель фильтров\"],\"IniZRK\":[\"Загрузка недоступна — загружен только предпросмотр\"],\"Isaozb\":[\"Проверить и настроить\"],\"J17_9Z\":[\"Не удалось сохранить триггер: \"],\"J2Cb95\":[\"Активные запросы и подключения через этот плагин будут прерваны.\"],\"J6v1s_\":[\"Модель по умолчанию\"],\"JE-DVk\":[\"Интерпретатор\"],\"JEGlfK\":[\"Начало\"],\"JKDPqP\":[\"Сначала выберите контекст\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Использовать SSH-туннель\"],\"JRz8tw\":[\"MySQL и MariaDB предоставляют реальные метрики только в поддерживаемых вариантах EXPLAIN ANALYZE или ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP or SVG · max 512 KB\"],\"JY5Oyv\":[\"База данных\"],\"JlFRIB\":[\"Часовой пояс сессии, отправляемый в MySQL после подключения.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Отклонено\"],\"K3H9p5\":[\"Не задано\"],\"K5Dgu_\":[\"Базы данных\"],\"K8IGKf\":[\"Тип аутентификации\"],\"KAYNSW\":[\"Количество логов, хранимых в памяти (1–10000)\"],\"KHTGbr\":[\"Предварительный EXPLAIN\"],\"KHvda8\":[\"Не null\"],\"KJKNaZ\":[\"Копировать как `column`\"],\"KM5Kc8\":[\"Выберите хотя бы один столбец\"],\"KSCnVQ\":[\"Тип\"],\"KUjOb9\":[\"работает\"],\"KXBdwy\":[\"Обновить подпрограммы\"],\"KXNyX7\":[\"Установить DEFAULT\"],\"Kd70-v\":[\"Импортировать из буфера обмена...\"],\"KhI4oS\":[\"Открыть связанную строку в \",[\"0\"]],\"KhgrNu\":[\"Интеграция MCP-сервера\"],\"KirERL\":[\"Таймаут\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Не удалось удалить индекс: \"],\"KzeARD\":[\"Не удалось удалить таблицу: \"],\"L-rMC9\":[\"Сбросить по умолчанию\"],\"L3HXkQ\":[\"Исправления ошибок\"],\"LCZ7Dy\":[\"Копировать имя\"],\"LFDf6p\":[\"Создать новый триггер базы данных\"],\"LK1m4W\":[\"индексы\"],\"LMeAoR\":[\"строки\"],\"LPCdc-\":[\"Промпт для названия вкладки запроса\"],\"LPFmga\":[\"Добавить в «Применить все»\"],\"LYzbQ2\":[\"Инструмент\"],\"Lbis_V\":[\"Быстрый навигатор\"],\"Lcpbe2\":[\"Процесс плагина не удалось запустить. Подробности ниже.\"],\"LhUHHO\":[\"Предпросмотр сгенерированного SQL\"],\"LihabZ\":[\"EXPLAIN поддерживается только для DML-запросов (SELECT, INSERT, UPDATE, DELETE). DDL-запросы (CREATE, DROP, ALTER) не поддерживаются.\"],\"LnT0hQ\":[\"Добавить столбец\"],\"LvutiO\":[\"Предложить (AI)\"],\"M-rHQO\":[\"Выйти из полноэкранного режима\"],\"M0XJba\":[\"Очистить всю историю запросов для этого подключения?\"],\"M1co_O\":[\"Настроено\"],\"M73whl\":[\"Контекст\"],\"MDa5o0\":[\"например, before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Показать все\"],\"MXdOwj\":[\"Отдельные подключения\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Выберите подключение K8s\"],\"Mc1tjS\":[\"Включите ANALYZE для просмотра реальных строк, времени, итераций и буферов.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" строк\"],\"Mp0jQ_\":[\"Этот драйвер поддерживает первичные ключи только при создании таблицы\"],\"MqpZwN\":[\"Процесс Tabularis\"],\"MxIx43\":[\"↑↓ для навигации, Enter для открытия\"],\"MygtgQ\":[\"Добавить Markdown-ячейку\"],\"N40H-G\":[\"Все\"],\"N5UQxq\":[\"Ollama не обнаружен на порту \",[\"0\"],\". Запущен ли он?\"],\"N6GBcC\":[\"Подтверждение удаления\"],\"N6aqHp\":[\"Запросы\"],\"N9_S15\":[\"Будет создана новая таблица\"],\"NBdMa1\":[\"Самый медленный шаг\"],\"NC2AI2\":[\"Длина\"],\"NCzNnx\":[\"Сортировать по возрастанию\"],\"NT4Ubs\":[\"Удалить пользовательский ключ и вернуться к переменной окружения (если задана)\"],\"NUjrCO\":[\"Ничего не найдено в избранном\"],\"NWJrXh\":[\"SQL триггера обязателен\"],\"NZUDnP\":[\"Итого по дереву: \",[\"0\"]],\"Nc2VQn\":[\"Добавить в существующую\"],\"NgFERn\":[\"Добавить в избранное\"],\"NktMHG\":[\"Имя базы данных\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Проверить\"],\"Nq5QTk\":[\"объяснить N-й\"],\"O2STgu\":[\"Ошибка экспорта: \"],\"O8SV8O\":[\"Загрузка...\"],\"O9_WW6\":[\"подключение\"],\"OGEsKj\":[\"Выполнить все ячейки\"],\"OGWdBg\":[\"Название представления\"],\"OHqT6w\":[\"Нажмите сочетание клавиш...\"],\"OXJsaG\":[\"Недопустимое имя параметра\"],\"OfhWJH\":[\"Сбросить\"],\"OlAl5i\":[\"Развернуть все\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Присоединиться к Discord\"],\"P1YGsb\":[\"Генерация SQL\"],\"P2m1xb\":[\"Остановить при ошибке\"],\"P3Qlys\":[\"Нет ID подключения\"],\"P6Y3Yf\":[\"Выполните эту команду в терминале, затем перезапустите Claude Code.\"],\"PCdj-c\":[\"Снять выбор\"],\"PMnFt9\":[\"Чтение с диска/с\"],\"PQU2Va\":[\"Принимать подсказку по Enter\"],\"PRnH8G\":[\"из \",[\"0\"]],\"PY8UF3\":[\"Переключён параллельный режим (ячейка \",[\"n\"],\")\"],\"PiH3UR\":[\"Скопировано!\"],\"Pia95d\":[\"Имя столбца обязательно\"],\"PrElXQ\":[\"Обновить\"],\"PrixCC\":[\"Строки будут добавлены в существующую таблицу\"],\"Pujgbb\":[\"Настроить назначение\"],\"Pw_eQV\":[\"Плагин не запустился\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Нет сохранённых запросов\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Нет дочерних процессов\"],\"QCxMC0\":[\"Автоматически проверять новые версии при запуске приложения\"],\"QEazml\":[\"Удалить выбранные\"],\"QHcLEN\":[\"Подключено\"],\"QLHHFO\":[\"Режим только для чтения\"],\"QOvAW3\":[\"Новые функции\"],\"QULGRi\":[\"Допустимые запросы не найдены\"],\"QZwllF\":[\"Обзор...\"],\"QbkSr_\":[\"EXPLAIN недоступен для этого запроса.\"],\"QeHFYZ\":[\"EXPLAIN завершился с ошибкой: \",[\"0\"]],\"Qll2Tb\":[\"По убыв.\"],\"Qoq-GP\":[\"Подробнее\"],\"Qu4Hog\":[\"Ноутбук импортирован\"],\"R-A2Vd\":[\"Нет данных для отображения\"],\"R0Hkb2\":[\"Выбрано баз данных: \",[\"0\"]],\"R1nHhB\":[\"Уже существует\"],\"R2Iz3m\":[\"Название триггера\"],\"R6oBUl\":[\"Преобразовать в консоль\"],\"R9Khdg\":[\"Авто\"],\"RDjuBN\":[\"Настройка\"],\"RF-HyV\":[\"Выберите язык интерфейса. «Авто» использует язык системы.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Скопировать имя\"],\"RI-HZc\":[\"Введите ключ \",[\"0\"]],\"RJrE17\":[\"Удалить представление \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Звезда помогает другим найти проект\"],\"Rb3Tdm\":[\"Имя блокнота\"],\"RcbKJ3\":[\"При обновлении\"],\"RkefFq\":[\"Выполнить EXPLAIN перед показом окна подтверждения, чтобы пользователь видел план выполнения.\"],\"RnF_hl\":[\"Загрузка реестра плагинов...\"],\"Rns7_C\":[\"Это действие нельзя немедленно отменить\"],\"RoKRqW\":[\"Доступные плагины\"],\"RphpKk\":[\"Внешний вид\"],\"Rt8sHM\":[\"Обнаружена сортировка или временные операции\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Включено\"],\"S1veKH\":[\"Отменить выбранные изменения\"],\"S5zeZU\":[\"Переключить предпросмотр\"],\"S8Yqbl\":[\"Вставить\"],\"SDND4q\":[\"Не настроено\"],\"SJRy3D\":[\"(Генерируется автоматически)\"],\"SSwIjo\":[\"Установить EMPTY\"],\"SgvA_r\":[\"Нажмите «Запустить» (Ctrl/Command+F5) для загрузки данных таблицы\"],\"SlfejT\":[\"Ошибка\"],\"SoATkx\":[\"Копировать ячейку\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL эндпоинта\"],\"T7w5CQ\":[\"Не удалось создать новую строку: \"],\"T9947j\":[\"Значение (например, 'текст' или 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Переключить на вертикальное расположение\"],\"TK5oex\":[\"Сохранить промпт\"],\"TKQ7K-\":[\"Установить\"],\"TKZreP\":[\"Обязательный\"],\"TMLAx2\":[\"Обязательно\"],\"TO08JI\":[\"внешние ключи\"],\"TVKqvO\":[\"Изменить строку\"],\"TYSdQ3\":[\"Выполнить SELECT-запрос\"],\"TfDFHS\":[\"Переносить длинные строки в редакторе вместо горизонтальной прокрутки.\"],\"Tibfjs\":[\"Нет сохранённых подключений — создайте ниже\"],\"Tj36Dr\":[\"Сбросить по умолчанию\"],\"Tjg925\":[\"Загрузка определения триггера...\"],\"TlZ7Ul\":[\"Заблокировать запрос\"],\"TpwXyg\":[\"Если время отсутствует, сервер вернул только оценочный план.\"],\"Tw2M1h\":[\"Ошибка установки\"],\"Ty-rm9\":[\"SSH-подключения\"],\"Tz0i8g\":[\"Настройки\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Подключения Kubernetes\"],\"U4uzyV\":[\"Что нового\"],\"U8W7sX\":[\"Не удалось получить определение триггера: \"],\"UB112k\":[\"Прекратить выполнение при ошибке в ячейке\"],\"UCQiqt\":[\"на \",[\"0\"]],\"UECR2b\":[[\"0\"],\" на \",[\"1\"],\" — проверьте запрос перед выполнением.\"],\"UI85PB\":[\"Ни один триггер не соответствует фильтру\"],\"UNKlAy\":[\"Настройки для \",[\"clientName\"],\" установлены. Перезапустите приложение.\"],\"URmyfc\":[\"Подробности\"],\"UWQBvp\":[\"Сгенерировать SQL-шаблоны\"],\"UawTKZ\":[\"Необязательно. Укажите исполняемый файл для запуска плагина (например, python3 на macOS/Linux или python либо полный путь на Windows). Оставьте пустым, чтобы использовать значение по умолчанию.\"],\"Ub8sf5\":[\"SQLite не поддерживает удаление внешних ключей через ALTER TABLE.\"],\"UbbJ8j\":[\"Варианты не найдены\"],\"Ubs68g\":[\"Общие\"],\"UftN8J\":[\"Отметьте подключения, которые должны быть только для чтения. Остальные работают как обычно.\"],\"UnQNah\":[\"Удалить столбец \\\"\",[\"0\"],\"\\\" из таблицы \\\"\",[\"tableName\"],\"\\\"?\\n\\nВНИМАНИЕ: Все данные в этом столбце будут безвозвратно удалены. Действие необратимо.\"],\"UncTTh\":[\"Сумма RSS по дереву процессов — общая память может учитываться несколько раз\"],\"UpjgFm\":[\"Изменены параметры\"],\"UsAnu1\":[\"ANALYZE выполняет запрос. Осторожно с операторами изменения данных.\"],\"UxKoFf\":[\"Навигация\"],\"Uy4iQO\":[\"Рядом\"],\"UzFX5x\":[\"Размер отступа\"],\"UzWGWO\":[\"Перейти к вводу SQL WHERE\"],\"V-chk5\":[\"Как часто проверять активные подключения. Установите 0 для отключения.\"],\"V-pw1j\":[\"Название таблицы\"],\"V2T0Uw\":[\"Сохранённых блокнотов пока нет.\"],\"V3aNwx\":[\"Редактор данных\"],\"VGYp2r\":[\"Применить ко всем\"],\"VH8S7x\":[\"Столбец из буфера обмена\"],\"VIAEcS\":[\"Не удалось загрузить базы данных. Проверьте учётные данные.\"],\"VKdztF\":[\"Добавить строки\"],\"VLiHXI\":[\"Данные ANALYZE\"],\"VMbmXc\":[\"Удалить «\",[\"pluginName\"],\"»? Файлы плагина будут удалены.\"],\"VO3weF\":[\"Файл не загружен\"],\"VOZlKc\":[\"Импорт базы данных\"],\"VPzsIz\":[\"Генерация названия...\"],\"VUul0v\":[\"Завершение\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Не удалось удалить триггер: \"],\"VfOb_W\":[\"Триггеры не найдены\"],\"Vgy9LX\":[\"Все запросы\"],\"Vi2Pqx\":[\"от\"],\"Vl2zn2\":[\"остановлен\"],\"Vo4uBA\":[\"Ошибка при установке плагина. Подробности ниже.\"],\"VqqyOs\":[\"Выполните запрос, чтобы увидеть результаты\"],\"VzhDFh\":[\"Блокировать любые не-SELECT запросы через MCP, если подключение явно не разрешено ниже.\"],\"W3uwpT\":[\"Закрыть все вкладки\"],\"W4MKLh\":[\"например: Выглядит рискованно на проде, нужно подтверждение…\"],\"W60eXm\":[\"Таблица\"],\"WA8RND\":[\"Удалить таблицу \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Удалить таблицу\"],\"WLnvCZ\":[\"Введите имя пользователя\"],\"WM-__8\":[\"Поиск подключений...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка импортирована в «\",[\"tableName\"],\"»\"],\"few\":[\"#\",\" строки импортированы в «\",[\"tableName\"],\"»\"],\"many\":[\"#\",\" строк импортировано в «\",[\"tableName\"],\"»\"],\"other\":[\"#\",\" строки импортированы в «\",[\"tableName\"],\"»\"]}]],\"WTfntM\":[\"Удалить запрос \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"успешно\"],\"WcF1uL\":[\"Название группы\"],\"Weq9zb\":[\"Общие\"],\"WmPpB1\":[\"Загрузка плана выполнения…\"],\"Wu7cK0\":[\"Базы данных не найдены\"],\"WvoUQF\":[\"Удалена ячейка \",[\"n\"]],\"Ww3pDD\":[\"РУЧНАЯ КОМАНДА\"],\"X-20AU\":[\"Введите промпт для названия вкладки...\"],\"X-U6_w\":[\"Шрифт\"],\"X5fs0g\":[\"Создайте первое подключение, чтобы начать работу.\"],\"X7Ayjp\":[\"Пароль сохранён в системном хранилище ключей\"],\"X9kySA\":[\"Избранное\"],\"XJOV1Y\":[\"Активность\"],\"XMCLEL\":[\"Создать новый триггер\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Объяснение запроса\"],\"XVF2Pf\":[\"Изменить схемы\"],\"XW6OYF\":[\"Для этого плагина может потребоваться интерпретатор (например, Python). Укажите путь к нему в настройках плагина.\"],\"XZB6Xr\":[\"Максимум записей в логе\"],\"Xcffv2\":[\"Показывать кнопки AI-помощи и объяснения в редакторе\"],\"XeqTSh\":[\"Тип соединения\"],\"XmJfZT\":[\"имя\"],\"XoQfG1\":[\"SSH-пользователь\"],\"XwI0Vw\":[\"Авто (системный)\"],\"XyDlLX\":[\"Название индекса\"],\"Y2P2aK\":[\"Выберите схемы для загрузки:\"],\"Y8HYw2\":[\"значение\"],\"Y8zX3R\":[\"Вставить в редактор\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Поиск...\"],\"YWlnMZ\":[\"Порт Ollama\"],\"YYdC3A\":[\"Версия \",[\"0\"]],\"YYn8b5\":[\"Просмотр и установка плагинов из реестра.\"],\"Y_3yKT\":[\"Открыть в новой вкладке\"],\"YiAQ_Q\":[\"Обновить таблицы\"],\"Ysjr9Y\":[\"Предпросмотр SQL\"],\"YswNf7\":[\"Все уровни\"],\"YtNwr6\":[\"Максимальное количество записей истории запросов для одного подключения.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Загрузка...\"],\"Z7ZXbT\":[\"Подтвердить\"],\"Z8JpBH\":[\"Экспортировать как ноутбук\"],\"Z8fBIc\":[\"Реальных строк больше оценки\"],\"ZC2VJP\":[\"Выполнить\"],\"ZCIS4k\":[\"нет активных фильтров\"],\"ZF1_UT\":[\"Режим SSL\"],\"ZGjBPa\":[\"Очистить логи\"],\"ZHQTlM\":[\"Импорт из\"],\"ZIFDoJ\":[\"Выберите хотя бы структуру или данные\"],\"ZIZA6o\":[\"Изменить перед подтверждением\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" предупреждение при разборе\"],\"few\":[\"#\",\" предупреждения при разборе\"],\"many\":[\"#\",\" предупреждений при разборе\"],\"other\":[\"#\",\" предупреждения при разборе\"]}]],\"ZVn8p2\":[\"Отображать номера строк на полях редактора.\"],\"ZYnwzF\":[\"Отключено\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Создать внешний ключ\"],\"Zf7LHg\":[\"Контексты не найдены (установлен ли kubectl?)\"],\"Zfotp5\":[\"Большие расхождения в оценках обычно указывают на устаревшую статистику или предикаты, которые планировщик не может смоделировать точно.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Не удалось загрузить схемы\"],\"ZqXGPF\":[\"Не удалось удалить представление: \"],\"ZuL73E\":[\"Создать новое представление базы данных\"],\"_-bi4r\":[\"Ссылочная таблица\"],\"_AEYGI\":[\"История выполнения пуста\"],\"_FdpZc\":[\"Не удалось загрузить определение представления: \"],\"_FxSdi\":[\"Прямые зависимости приложения, бэкенда и инструментов с открытым исходным кодом.\"],\"_JyTG8\":[\"Введите промпт для объяснения...\"],\"_Ltc_k\":[\"Дополнительно\"],\"_Q2Wix\":[\"строк\"],\"_TK1zF\":[\"Сохранённое подключение\"],\"_bJFBE\":[\"Таймаут подключения\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Дерево\"],\"_dqduX\":[\"Следующая страница\"],\"_fwE6J\":[\"Ранее\"],\"_n04sB\":[\"Завершить\"],\"_otxbQ\":[\"Файл ключа\"],\"_pezIT\":[\"Не удалось подключиться к \",[\"0\"],\". Проверьте настройки или убедитесь, что база данных запущена.\"],\"_srfkj\":[\"Пользовательский ключ удалён\"],\"_t6aFo\":[\"MySQL и MariaDB могут возвращать EXPLAIN FORMAT=JSON или табличный EXPLAIN в зависимости от версии сервера.\"],\"_xTbaM\":[\"столбцы\"],\"_yxaaL\":[\"Уникальный индекс\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis — бесплатный проект с открытым исходным кодом. Если он вам полезен, поддержите проект и присоединяйтесь к сообществу.\"],\"a9CASo\":[\"SQLite поддерживает только переименование столбцов. Другие изменения требуют пересоздания таблицы вручную.\"],\"aAIQg2\":[\"Внешний вид\"],\"aAURrV\":[\"Установлено\"],\"aC_vCa\":[\"Сгенерировать название с помощью AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Выберите узел для просмотра подробностей\"],\"aHKcKc\":[\"Предыдущая страница\"],\"aI-5wG\":[\"Verify CA\"],\"aJJySV\":[\"например, users\"],\"aQ8swY\":[\"Значение по умолчанию\"],\"aScJP1\":[\"Запустить этот запрос\"],\"aVNbN8\":[\"Условия фильтрации\"],\"aWhdMQ\":[\"Использовать существующее SSH-подключение\"],\"aXYd8V\":[\"Таймаут\"],\"aX_S_r\":[\"Страница \",[\"0\"],\" из \",[\"totalPages\"]],\"agZcf8\":[\"Сгенерированный SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [поля]\"],\"alplHn\":[\"Анализ плана запроса с помощью AI...\"],\"anBcU3\":[\"Если Tabularis вам полезен и вы хотите видеть больше возможностей — поддержите проект: вносите вклад в код, сообщайте об ошибках или поставьте звезду репозиторию.\"],\"arHmj2\":[\"Удалить этот запрос из истории?\"],\"arKcqW\":[\"Старые серверы могут возвращать только оценочные планы с меньшим количеством метрик.\"],\"arcpYe\":[\"Требовать подтверждение\"],\"aurEkh\":[\"Загрузка процессов…\"],\"avtdsd\":[\"Режим SQL\"],\"az8lvo\":[\"Выключено\"],\"b1Ah3z\":[\"Фокус на\"],\"b392Dr\":[\"Развернуть все\"],\"b5S_PU\":[\"Имя базы данных\"],\"bAvovP\":[\"Переместить вниз\"],\"bH3JqY\":[\"Таблицы не найдены\"],\"bP5JOn\":[\"Перенос строк\"],\"bcOdok\":[\"Удалить группу\"],\"bcqeas\":[\"Все MCP-запросы только для чтения\"],\"bmca5u\":[\"Только запись\"],\"bpCiBU\":[\"Разрешить запись из MCP\"],\"bqnhqW\":[\"Оценка превышает реальное количество строк\"],\"bspG20\":[\"Сравнение\"],\"bu5X4V\":[\"Завершить с ошибкой\"],\"bw22Gk\":[\"Схема столбцов\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Основные проблемы\"],\"cFCKYZ\":[\"Отклонить\"],\"cFGrCP\":[\"таблица\"],\"cGeFup\":[\"Размер шрифта\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Фокус на таблице\"],\"cM9NHc\":[\"Откатить до\"],\"cO9-2L\":[\"Отключён\"],\"cSev-j\":[\"Фильтры\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Импортировать \",\"#\",\" строку\"],\"few\":[\"Импортировать \",\"#\",\" строки\"],\"many\":[\"Импортировать \",\"#\",\" строк\"],\"other\":[\"Импортировать \",\"#\",\" строки\"]}]],\"c_xoSn\":[\"Переименована ячейка \",[\"n\"]],\"cd0XEW\":[\"Сохранить запрос\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Разделить группу\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" операторов\"],\"d34vwG\":[\"Загрузить базы данных\"],\"d6ynQ7\":[\"Сортировать по убыванию\"],\"d8_6_v\":[\"отменить\"],\"d8wc1_\":[\"Примеры значений\"],\"dBXoCS\":[\"Обнаружена переменная окружения, но её можно переопределить, указав ключ выше.\"],\"dD7NPy\":[\"Структура\"],\"dEgA5A\":[\"Отменить\"],\"dMtLDE\":[\"до\"],\"dPJVhW\":[\"Ошибка установки\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" сессия\"],\"few\":[\"#\",\" сессии\"],\"many\":[\"#\",\" сессий\"],\"other\":[\"#\",\" сессий\"]}]],\"dTUzKm\":[\"Запустить выбранные (\",[\"0\"],\")\"],\"dU_iQN\":[\"Сессии не соответствуют текущим фильтрам.\"],\"dUh9QW\":[\"Планирование\"],\"dVoir2\":[\"Добавлена Markdown-ячейка \",[\"n\"]],\"dZ0d2O\":[\"Выберите хотя бы одну таблицу\"],\"dhi13U\":[\"Choose image…\"],\"dli1JX\":[\"Применить изменения\"],\"dmYV6f\":[\"Подпрограммы\"],\"dohZCo\":[\"Инструкции для AI-генерации SQL. Используйте \",[\"SCHEMA\"],\" как заполнитель структуры базы данных.\"],\"dtxpK2\":[\"Анализ\"],\"dwW9nJ\":[\"Показывать номера строк\"],\"dwWVw_\":[\"Показывать экран приветствия\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" вкладка\"],\"few\":[\"#\",\" вкладки\"],\"many\":[\"#\",\" вкладок\"],\"other\":[\"#\",\" вкладки\"]}]],\"dxxY9r\":[\"При совпадении\"],\"dyN4j9\":[\"Нажмите «Запустить предпросмотр», чтобы увидеть результаты\"],\"e07Iz5\":[\"Открыть диспетчер задач\"],\"e0NzXu\":[\"Проект находится в активной разработке (WIP). Основные функции стабильны, впереди много интересного.\"],\"e1UKxf\":[\"Сохранить этот запрос\"],\"e34gdU\":[\"Сколько времени MCP-процесс ожидает решения пользователя перед отменой запроса.\"],\"e62LQd\":[\"Завершить принудительно\"],\"e6QZsM\":[\"Тема редактора\"],\"e8CirT\":[\"Выполнить запрос\"],\"eD2kUP\":[\"Чтений буфера\"],\"eE0JZ4\":[\"Версия\"],\"eIDch7\":[\"Введите промпт для анализа плана выполнения...\"],\"eIVolo\":[\"Диск R/W\"],\"eJOEBy\":[\"Экспорт...\"],\"eKHY3W\":[\"Настройки плагина\"],\"eMb6Ub\":[\"Выберите ресурс...\"],\"ePK91l\":[\"Изменить\"],\"eXweu6\":[\"Развернуть ячейку\"],\"ecNsTE\":[\"Запросы не найдены\"],\"ecUA8p\":[\"Сегодня\"],\"ecpIZP\":[\"Введите пароль, если ключ зашифрован\"],\"ejmeDY\":[\"Установлено\"],\"esl-Tv\":[\"Тип ресурса\"],\"exyUec\":[\"Подключение\"],\"f2AJjl\":[\"Удалить строку\"],\"f4pD-j\":[\"Проверка подключения не удалась\"],\"f7sXvi\":[\"Введите пароль\"],\"fAsxc0\":[\"Последовательные сканирования\"],\"fIeFs0\":[\"Выберите значение...\"],\"fJm92A\":[\"Выберите файл с планом EXPLAIN (Postgres JSON или текст) для визуализации.\"],\"fOuPPd\":[\"Плагин\"],\"fXVIZq\":[\"Значения\"],\"f_b1TA\":[\"История выполнения\"],\"fghnqP\":[\"Переключиться на подключение 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Запятая (,)\"],\"fp711N\":[\"Заблокировано (только чтение)\"],\"fpzyLj\":[\"Страница \",[\"0\"],\" из \",[\"1\"]],\"fuA6oy\":[\"Таймаут сокета\"],\"fvImQM\":[\"Выбрано: \",[\"0\"]],\"fwr_nh\":[\"Устанавливайте расширения, управляйте драйверами плагинов и настройками среды выполнения.\"],\"g0ZzK4\":[\"Корректный JSON\"],\"g11hAR\":[\"Новая строка\"],\"g8VcMm\":[\"Мой кластер K8s\"],\"gCFR_O\":[\"Параллельное выполнение (Запустить все)\"],\"gEjU98\":[\"Открыть подключения\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Требуется хотя бы один столбец\"],\"gSuQrG\":[\"Подключения по запросу \\\"\",[\"search\"],\"\\\" не найдены\"],\"gUypqb\":[\"Перезапустить запрос\"],\"gZWMnn\":[\"AI-анализ\"],\"ghYd73\":[\"Выберите цель...\"],\"giAqEC\":[\"Создать новую таблицу\"],\"gnQS8X\":[\"Максимальный размер пакета для MySQL-коннектора.\"],\"gqV5VL\":[\"Встроенное, не настраивается\"],\"gww_XE\":[\"Ссылочный столбец\"],\"gxXPJ9\":[\"Настроить интерпретатор\"],\"gxutEv\":[\"Триггер обновлён\"],\"gz6UQ3\":[\"Развернуть\"],\"h-XNc9\":[\"Разделитель CSV\"],\"h-kNAk\":[\"например, sales_data\"],\"h3Z_aK\":[\"Введите Markdown...\"],\"h7MgpO\":[\"Горячие клавиши\"],\"h7peZQ\":[\"Разрешён\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" системный процесс\"],\"few\":[\"#\",\" системных процесса\"],\"many\":[\"#\",\" системных процессов\"],\"other\":[\"#\",\" системных процессов\"]}]],\"hEZrFh\":[\"Выполнить SQL-файл...\"],\"hEipgW\":[\"Проверить обновления сейчас\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Экспортировать как CSV\"],\"hItdtk\":[\"Выбрать папку\"],\"hXFVjo\":[\"Название таблицы обязательно\"],\"hZ6znB\":[\"Порт\"],\"h_huI6\":[\"Перезапустить\"],\"hbz1rh\":[\"ключи\"],\"hdsaJo\":[\"Импорт...\"],\"he3ygx\":[\"Копировать\"],\"hfGimp\":[\"Выберите пространство имён...\"],\"hjjSEi\":[\"Подключения только для чтения\"],\"hjwN_s\":[\"Имя ресурса\"],\"hlF1mD\":[\"Копировать выделение\"],\"hnboBb\":[\"AI-анализ плана запроса\"],\"hnvu2p\":[\"Подробности ошибки\"],\"hq4-D2\":[\"API-ключ хранится в системном хранилище ключей. Указанный здесь ключ имеет приоритет над переменной окружения.\"],\"hqjXdn\":[\"Не удалось удалить SSH-подключение\"],\"hqofAK\":[\"Копировать SQL\"],\"hy6L14\":[\"Открыть на GitHub\"],\"hyjACX\":[\"Ячейки свёрнуты/развёрнуты\"],\"hz1b5W\":[\"Совпадающие элементы не найдены\"],\"i1vAVM\":[\"Создать новую таблицу\"],\"i3S5T3\":[\"Поиск в избранном...\"],\"i4_LY_\":[\"Запись\"],\"i5HBWh\":[\"История запросов сброшена\"],\"i5zCt4\":[\"Таблица\"],\"iAVlge\":[\"Настройте инструкции для AI-генерации названий ячеек ноутбука. Содержимое ячейки (SQL или Markdown) передаётся как сообщение пользователя.\"],\"iE1yAB\":[\"Фильтр таблиц...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Подключиться\"],\"iSryJ2\":[\"Мой SSH-сервер\"],\"iT7UeX\":[\"Добавить индекс\"],\"iUWwuR\":[\"Скачать и установить\"],\"ia7i08\":[\"Сначала выберите контекст/пространство имён/тип\"],\"ibepZK\":[\"Сырой SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Сохранено\"],\"igcsfY\":[\"В реестре нет доступных плагинов.\"],\"ij-Elv\":[\"Предпросмотр изображения\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" запрос\"],\"few\":[\"#\",\" запроса\"],\"many\":[\"#\",\" запросов\"],\"other\":[\"#\",\" запроса\"]}]],\"ioL38P\":[\"Мониторинг процессов плагинов, CPU, RAM и диска в реальном времени\"],\"ixlL_e\":[\"SSH-ключ (необязательно)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Выберите модель\"],\"j3gyYH\":[\"Применить все\"],\"j5CWO4\":[\"Актуально\"],\"j9HPuI\":[\"Строка #\",[\"0\"]],\"jBtpMP\":[\"Все статусы\"],\"jEu4bB\":[\"Столбцы\"],\"jEyQIs\":[\"Подпрограммы не найдены\"],\"jHc1By\":[\"Удалить представление\"],\"jI6sj4\":[\"Стоимость, время и оценки строк зачастую недоступны по сравнению с PostgreSQL и MySQL.\"],\"jIxQCZ\":[\"Недоступно для вашей платформы\"],\"jKIncn\":[\"Название базы данных обязательно\"],\"jPSk57\":[\"Причина (необязательно)\"],\"jUNY_d\":[\"представление\"],\"jVqjDo\":[\"Недопустимый формат файла ноутбука\"],\"jWSZ-A\":[\"Только предпросмотр — полные данные не загружены\"],\"jgjIDU\":[\"Не удалось удалить существующий триггер: \"],\"jnhuWy\":[\"Таймаут сокета в миллисекундах.\"],\"jpeU_Z\":[\"Блокноты\"],\"jpgB4Y\":[\"Название подключения обязательно\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"дочерний процесс\"],\"jx0t66\":[\"Свернуть дочерние процессы\"],\"k-0mL-\":[\"Добавить столбец\"],\"k-XiMX\":[\"Сырой\"],\"k2UnVy\":[\"Условие хеша\"],\"k5UUX3\":[\"Триггер создан\"],\"kALwhk\":[\"секунд\"],\"kBiBq7\":[\"Удалить индекс \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Показать/скрыть график\"],\"kI1qVD\":[\"Форматировать\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка · \",[\"1\"],\"мс\"],\"few\":[\"#\",\" строки · \",[\"2\"],\"мс\"],\"many\":[\"#\",\" строк · \",[\"2\"],\"мс\"],\"other\":[\"#\",\" строки · \",[\"2\"],\"мс\"]}]],\"kJDmsI\":[\"Подробности события\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Реестр\"],\"kY-q3P\":[[\"label\"],\" обязательно\"],\"kexIdC\":[\"Использовать проброс портов Kubernetes\"],\"krksx_\":[\"Готово\"],\"ktYUe9\":[\"Запустить все\"],\"kwY6nh\":[\"Закрыть\"],\"kx0s-n\":[\"Результаты\"],\"kxUEfE\":[\"Не удалось получить определение подпрограммы: \"],\"l2Op2p\":[\"Параметры запроса\"],\"l9Ivba\":[\"Процессы плагинов и системные ресурсы\"],\"lBdPxu\":[\"Accent color\"],\"lCF0wC\":[\"Обновить\"],\"lEQRwq\":[\"Данные (INSERT)\"],\"lIvS11\":[\"Пересоздать триггер\"],\"lKS0ce\":[\"Новая таблица создана\"],\"lOekZ3\":[\"Переключить на горизонтальное расположение\"],\"lUA1C1\":[\"Пароль SSH-ключа (необязательно)\"],\"lVeG20\":[\"Зависимости Rust\"],\"lXAG6D\":[\"Инструкции для AI-объяснения запросов. Используйте \",[\"LANGUAGE\"],\" как заполнитель языка вывода.\"],\"lbbYjy\":[\"Прямое редактирование файла конфигурации. Изменения вступят в силу после перезапуска.\"],\"lhKW0m\":[\"Добавлена SQL-ячейка \",[\"n\"]],\"lk-wOz\":[\"Фильтр триггеров...\"],\"lk0x32\":[\"Размер страницы результатов (Limit)\"],\"lkz6PL\":[\"Длительность\"],\"lmVGeo\":[\"Добавить внешний ключ\"],\"lnnx3E\":[\"Подключить Tabularis к Claude Desktop, Cursor и другим клиентам\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Добавить\"],\"m2Q_r8\":[\"Определять JSON в текстовых столбцах\"],\"m2tskz\":[\"Успешно\"],\"mA-qpe\":[\"Выполнение завершено\"],\"mBhhbA\":[\"Логи скопированы в буфер обмена\"],\"mCNdzH\":[\"Запустить ячейку\"],\"mO95sp\":[\"Закрыть панель\"],\"mP7dLi\":[\"Введите название шрифта выше\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" заблокированное\"],\"few\":[\"#\",\" заблокированных\"],\"many\":[\"#\",\" заблокированных\"],\"other\":[\"#\",\" заблокированных\"]}]],\"mS74ir\":[\"Не удалось сохранить SSH-подключение\"],\"mSqtw8\":[\"Запустить предпросмотр\"],\"mURmfQ\":[\"Определение представления (SQL)\"],\"mX_isJ\":[\"Вертикально\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Структура (DDL)\"],\"mrk4Cf\":[\"Сортировать по \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Мы только что открыли отдельное место для пользователей Tabularis. Получайте помощь, делитесь советами, участвуйте в формировании дорожной карты.\"],\"mtvVdV\":[\"Обработано строк\"],\"mx4evv\":[\"Создать таблицу\"],\"myXGZW\":[\"Пошаговый\"],\"mzI_c-\":[\"Скачать\"],\"n7JDTx\":[\"Установите и включите плагины, чтобы увидеть их здесь\"],\"nDDJir\":[\"Поиск по сессии, клиенту, подключению…\"],\"nHP-Kr\":[\"Нет активной сессии. Выберите подключение.\"],\"nKhCjW\":[\"Выбрать таблицы\"],\"nNwvm4\":[\"Ошибка\"],\"nOVim5\":[\"Не удалось сохранить подключение\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"События\"],\"nf14vn\":[\"Требуется расширение: \",[\"0\"]],\"ngO6Pv\":[\"Разрешить Enter (в дополнение к Tab) для принятия активной подсказки автодополнения. При отключении Enter всегда вставляет новую строку.\"],\"nhmF3p\":[\"подключений\"],\"noM5A_\":[\"Создайте первое подключение\"],\"nohy4m\":[\"Нет активности MCP.\"],\"nr-axf\":[\"Удалить плагин\"],\"nsPFX9\":[\"Открыть в Visual Explain\"],\"nuBbBr\":[\"График\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Экспортировать базу данных\"],\"o-XJ9D\":[\"Изменить\"],\"o21Y-P\":[\"записей\"],\"o3tP_A\":[\"Удалить индекс\"],\"o45L8r\":[\"Введите название подключения\"],\"o53XGh\":[\"Копировать выбранные строки\"],\"o7J4JM\":[\"Фильтр\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Уровень\"],\"oGiIL7\":[\"Провайдер по умолчанию\"],\"oH8GS6\":[\"Просмотреть определение\"],\"oJ4rAm\":[\"Подключение потеряно\"],\"oJlXF2\":[\"Импортировать ноутбук\"],\"oMFv82\":[\"Разделить вертикально\"],\"oOFiQg\":[\"Ограничивает количество строк, получаемых за один запрос, во избежание проблем с производительностью. Установите 0, чтобы отключить (не рекомендуется).\"],\"oT9ZD3\":[\"Скрыть обзор\"],\"oUzLtx\":[\"Редактирование триггера требует его удаления и повторного создания. Продолжить изменение \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Изменён график (ячейка \",[\"n\"],\")\"],\"oWfclW\":[\"Показывать просмотрщик JSON, когда нетипизированная текстовая ячейка содержит объект или массив JSON. Создаёт небольшие издержки на разбор каждой ячейки.\"],\"obpbdz\":[\"Файл конфигурации не найден (создайте вручную)\"],\"odZgfC\":[\"AI-КЛИЕНТЫ\"],\"ogZhXn\":[\"Направление по умолчанию для ER-диаграмм\"],\"ohUJJM\":[\"Плагины\"],\"olAdaI\":[\"Реальных строк\"],\"olWzar\":[\"Принудительно завершить процесс плагина\"],\"ovBPCi\":[\"Default\"],\"owzTWN\":[\"Список моделей AI обновлён\"],\"oxYi6j\":[\"Базовый размер шрифта во всём приложении (10–20 пикселей).\"],\"p--hsQ\":[\"Соединение с базой данных прервано\"],\"p6NueD\":[\"НОВАЯ\"],\"pOYHox\":[\"Действия\"],\"pR9bTR\":[\"Нет данных BLOB\"],\"pS8S5q\":[\"например, users, orders, products\"],\"pSws_M\":[\"Название таблицы\"],\"pVLbKZ\":[\"Представление создано\"],\"pWT04I\":[\"Проверка...\"],\"pZJ_6D\":[\"Название индекса обязательно\"],\"pddYFG\":[\"Введите промпт для названия ячейки...\"],\"pnpyuD\":[\"Включить логирование\"],\"pqKMPv\":[\"Не удалось создать таблицу: \"],\"pqaP1h\":[\"Закрыть\"],\"pqarBu\":[\"По возр.\"],\"ptuq35\":[\"например, Comic Sans MS\"],\"pzu7v4\":[\"Горизонтально\"],\"q-ch8m\":[\"Отметьте подключения, которым разрешена запись. Остальные — только для чтения.\"],\"qA5jLs\":[\"Подробности ошибки\"],\"qIrtcK\":[\"Обновления\"],\"qOqy8G\":[\"Проверка конфигурации...\"],\"qWaVNs\":[\"Сохранить и перезапустить\"],\"qb3LPX\":[\"Открыть ER-диаграмму\"],\"qkK0vq\":[\"Название представления обязательно\"],\"qki9tG\":[\"Ошибка\"],\"qoIir-\":[\"Базовый URL OpenAI-совместимого API. Примеры: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Свернуть все\"],\"r6ncaO\":[\"Закрыть вкладку\"],\"rAJlpP\":[\"Порт контейнера\"],\"rG3WVm\":[\"Чтение\"],\"rGRCeK\":[\"Очистить историю запросов\"],\"rNIto7\":[\"Имя ресурса обязательно\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Ноутбук экспортирован\"],\"rY4sEV\":[\"Удалить внешний ключ\"],\"rbu0nO\":[\"Управление SSH-подключениями\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" подключение\"],\"few\":[\"#\",\" подключения\"],\"many\":[\"#\",\" подключений\"],\"other\":[\"#\",\" подключения\"]}]],\"rn2_2V\":[\"Удалить фильтр\"],\"roABNH\":[\"История запросов пуста\"],\"rtir7c\":[\"неизвестно\"],\"ru0-2W\":[\"Нет активных подключений\"],\"rvDPWO\":[\"Разрыв оценки\"],\"rwWjWg\":[\"Что нового\"],\"s6m9gy\":[\"Удалить триггер \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Проверить подключение\"],\"sBOaim\":[\"Файл конфигурации сохранён. Перезапустить сейчас?\"],\"sCyv9B\":[\"Обновить модели\"],\"sSUqe4\":[\"Удалить\"],\"sUBkgN\":[\"Генерация SQL...\"],\"sZZG3d\":[\"Импортировать \\\"\",[\"0\"],\"\\\"?\\nСуществующие данные могут быть перезаписаны.\"],\"sbK5ck\":[\"Поиск в истории...\"],\"sq_bS6\":[\"При удалении\"],\"suW7-E\":[\"Таймаут подключения в миллисекундах.\"],\"suqtBX\":[\"Esc для закрытия\"],\"t-R8-P\":[\"Выполнение\"],\"t1OfVY\":[[\"totalLibraries\"],\" библиотек\"],\"t2TMzs\":[\"Закрыть вкладку\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Выберите таблицу...\"],\"t7KRl1\":[\"Журнал всех вызовов MCP-инструментов и запросов, ожидающих подтверждения. Хранится локально — никуда не отправляется.\"],\"t9NJIk\":[\"Обнаружены интенсивные сканирования\"],\"tB7xof\":[\"Временные операции или сортировка\"],\"tBBXTO\":[\"Интервал пинга\"],\"tFrT3w\":[\"Добавьте этот фрагмент в файл конфигурации клиента вручную, если автоматическая установка не сработала.\"],\"tJ7UbA\":[\"объяснить активный\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Разделить горизонтально\"],\"tQhW-D\":[\"Настройки логирования\"],\"tT-BQX\":[\"Установленные\"],\"tXFGEx\":[\"Нет сохранённых подключений Kubernetes. Нажмите «Добавить», чтобы создать.\"],\"tXLz_8\":[\"Удалить\"],\"tXpRby\":[\"Таблица данных\"],\"tbysEk\":[\"Действия\"],\"tdta9X\":[\"Страница \",[\"0\"]],\"tfDRzk\":[\"Сохранить\"],\"tfEioV\":[\"Выполнить все SQL-ячейки сверху вниз\"],\"tiAIaJ\":[\"SSH-пароль отсутствует. Введите заново.\"],\"tk22BR\":[\"Вставьте структурированные данные и проверьте схему перед импортом\"],\"tst44n\":[\"События\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL-файл выполнен\"],\"u6QeR6\":[\"Перезапустить сейчас\"],\"uAQUqI\":[\"Статус\"],\"uBAxNB\":[\"Редактор\"],\"uBI8D9\":[\"Esc для закрытия\"],\"uFViPK\":[\"Нет доступных SSH-подключений\"],\"uHUuhp\":[\"Объяснить этот запрос\"],\"uHfFzS\":[\"Размер шрифта редактора\"],\"uJ_3K5\":[\"Удалить блокнот «\",[\"0\"],\"»? Это действие нельзя отменить.\"],\"uKaNJ3\":[\"Открыть в JSON-редакторе\"],\"uQBwTo\":[\"Схемы\"],\"ub54ff\":[\"Центр плагинов\"],\"ufFyBs\":[\"База данных экспортирована\"],\"upNmR2\":[\"Открыть в боковом редакторе\"],\"upwIY4\":[\"Определение представления\"],\"utMia3\":[\"Снять выбор\"],\"uyNaJg\":[\"1 элемент\"],\"v61dnS\":[\"Укажите точное название модели вашего OpenAI-совместимого провайдера.\"],\"v6oeyr\":[\"Установлено\"],\"v75DGg\":[\"Выбрать файл\"],\"v99dO4\":[\"Первичный ключ\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" запрос\"],\"few\":[\"#\",\" запроса\"],\"many\":[\"#\",\" запросов\"],\"other\":[\"#\",\" запроса\"]}]],\"vCSBPD\":[\"Добавить фильтр\"],\"vH7uJj\":[\"Сортировать по…\"],\"vUOA1-\":[\"Поиск моделей...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE включает реальные строки, время, итерации и счётчики буферов при наличии.\"],\"vXIe7J\":[\"Язык\"],\"vYf4Jm\":[\"Введите полную SQL-функцию (например, ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Предпочтительный\"],\"vditm4\":[\"План выполнения\"],\"vks_ls\":[\"Закрыть остальные вкладки\"],\"vnAnIp\":[\"Модель \",[\"0\"],\" не найдена у провайдера \",[\"1\"],\". Она может работать некорректно.\"],\"vqoN5u\":[\"Структура\"],\"vrAvbP\":[\"Удалить группу «\",[\"0\"],\"»? Подключения переместятся в раздел без группы.\"],\"vtJ2yO\":[\"Проводник\"],\"vujQJ5\":[\"Локализация\"],\"vvJPVL\":[\"Показать обзор\"],\"vwI5S4\":[\"Готово\"],\"vzH-7Z\":[\"Объяснить\"],\"w7QmD_\":[\"Введите системный промпт...\"],\"w9eMXw\":[\"триггер\"],\"wCJFlW\":[\"Прошло времени\"],\"wCfv2R\":[\"Добавить подключение\"],\"wGfc86\":[\"Очистить всю историю\"],\"wGwNv4\":[\"Активная база данных\"],\"wJJ-Wy\":[\"Установка...\"],\"wMe2Qp\":[\"Пространство имён\"],\"wQiel_\":[\"Попаданий в буфер\"],\"wQn-RM\":[\"Добавить столбец\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Применено\"],\"wTmVhm\":[\"Удалить\"],\"wZeIWq\":[\"Импорт из буфера обмена\"],\"w_bY7R\":[\"Логи\"],\"wc_8bA\":[\"Ожидает подтверждения\"],\"wckWOP\":[\"Управление\"],\"wdYcKH\":[\"Открытые вкладки\"],\"wja8aL\":[\"Без названия\"],\"wkOAzk\":[\"Нет блокнотов, соответствующих запросу.\"],\"wp49Ao\":[\"Не удалось обработать вставки: \"],\"wqG2hQ\":[\"Пропустить (не импортировать)\"],\"wwrAsK\":[\"Заполните все обязательные поля\"],\"wwu18a\":[\"Icon\"],\"x2fr_j\":[\"Граф\"],\"xANKBj\":[\"Функции\"],\"xBwjck\":[\"Изменения вступят в силу после перезапуска.\"],\"xDAtGP\":[\"Сообщение\"],\"xECY01\":[\"Хранимые процедуры\"],\"xGPNgZ\":[\"Настройка промптов\"],\"xNgtS-\":[\"Представления не найдены\"],\"xOPa1b\":[\"Порт должен быть в диапазоне от 1 до 65535\"],\"xY9s5E\":[\"Таймаут\"],\"xaVUr1\":[\"Съешь же ещё этих мягких французских булок, да выпей чаю\"],\"xbvTzL\":[\"Путь к файлу\"],\"xlew5F\":[\"Очистить\"],\"xmNyKz\":[\"Проверка...\"],\"xtuh6D\":[\"Развернуть проводник\"],\"y-Zdqj\":[\"Выберите контекст...\"],\"y3HaQk\":[\"Момент срабатывания\"],\"yLFey_\":[\"Создать триггер\"],\"yLianM\":[\"Открыть просмотрщик JSON\"],\"yQXjG5\":[\"Снять выбор\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Изменить триггер\"],\"y_0uwd\":[\"Вчера\"],\"ygCKqB\":[\"Остановить\"],\"ykCc6r\":[\"Изменена база данных (ячейка \",[\"n\"],\")\"],\"ynVMSc\":[\"Выбрать все\"],\"ytdz1d\":[\"AI запрашивает запись в базу данных\"],\"yyhzur\":[\"Создать таблицу\"],\"yz7wBu\":[\"Закрыть\"],\"z0VdfR\":[\"процедура\"],\"z407wX\":[\"SSH-пароль\"],\"z4oF5T\":[\"Экспорт базы данных\"],\"z5kV0h\":[\"Подключения\"],\"zBTMzx\":[\"Предпросмотр\"],\"zCaAKs\":[\"Ошибка обновления\"],\"zDAakK\":[\"Отображение диаграммы невозможно без ID подключения.\"],\"zGe21h\":[\"Этот ключ загружен из переменной окружения\"],\"zGfL5t\":[\"значение\"],\"zL6-4A\":[\"Нет запущенных процессов плагинов\"],\"zLZhCi\":[\"Новое сообщество в Discord!\"],\"zLlCou\":[\"Копировать имя столбца\"],\"zNEL34\":[\"Присоединяйтесь к сообществу\"],\"zNgTlV\":[\"Закрыть вкладки справа\"],\"zQz55p\":[\"Показать структуру\"],\"zR0FfH\":[\"Экспортировано в \",[\"target\"]],\"zRZeOc\":[\"Поиск таблиц, представлений, процедур, триггеров...\"],\"zUNMsr\":[\"SSH-ключ\"],\"zXMRzb\":[\"SSH-порт\"],\"zZgoXr\":[\"Таблицы не найдены\"],\"zaWbms\":[\"Откатить изменения\"],\"zgClmU\":[\"Установить конфигурацию\"],\"zga9sT\":[\"ОК\"],\"zgk5iK\":[\"Введите значение...\"],\"zvzN4C\":[\"Сделать активным\"],\"zzDlyQ\":[\"Успешно\"],\"zzMxrp\":[\"Изменить config.json\"],\"zz_Wd_\":[\"Режим\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/zh/messages.po b/src/locales/zh/messages.po index 01f5fe6e..4787b48c 100644 --- a/src/locales/zh/messages.po +++ b/src/locales/zh/messages.po @@ -1207,12 +1207,22 @@ msgid "Create a new database view" msgstr "创建新的数据库视图" #: src/components/modals/CreateForeignKeyModal.tsx -msgctxt "createFk" +msgctxt "createFk.create" msgid "Create Foreign Key" msgstr "创建外键" +#: src/components/modals/CreateForeignKeyModal.tsx +msgctxt "createFk.title" +msgid "Create Foreign Key" +msgstr "创建外键" + +#: src/components/modals/CreateIndexModal.tsx +msgctxt "createIndex.create" +msgid "Create Index" +msgstr "创建索引" + #: src/components/modals/CreateIndexModal.tsx -msgctxt "createIndex" +msgctxt "createIndex.title" msgid "Create Index" msgstr "创建索引" @@ -1258,7 +1268,12 @@ msgid "Create Trigger" msgstr "" #: src/components/modals/ViewEditorModal.tsx -msgctxt "views" +msgctxt "views.create" +msgid "Create View" +msgstr "创建视图" + +#: src/components/modals/ViewEditorModal.tsx +msgctxt "views.createView" msgid "Create View" msgstr "创建视图" @@ -1639,8 +1654,12 @@ msgstr "删除视图" #: src/components/layout/ExplorerSidebar.tsx #: src/components/layout/sidebar/SidebarDatabaseItem.tsx +msgctxt "dump.dumpDatabase" +msgid "Dump Database" +msgstr "导出数据库" + #: src/components/modals/DumpDatabaseModal.tsx -msgctxt "dump" +msgctxt "dump.title" msgid "Dump Database" msgstr "导出数据库" @@ -1904,17 +1923,25 @@ msgid "Error" msgstr "错误" #: src/components/modals/PluginInstallErrorModal.tsx +msgctxt "settings.plugins.installError.details" +msgid "Error Details" +msgstr "错误详情" + #: src/components/modals/PluginStartErrorModal.tsx -msgctxt "settings" +msgctxt "settings.plugins.startError.details" msgid "Error Details" msgstr "错误详情" #: src/components/modals/QuickNavigatorModal.tsx -#: src/components/modals/TabSwitcherModal.tsx -msgctxt "editor" +msgctxt "editor.quickNavigator.escHint" msgid "Esc to close" msgstr "Esc 关闭" +#: src/components/modals/TabSwitcherModal.tsx +msgctxt "editor.tabSwitcher.escHint" +msgid "Esc to close" +msgstr "按 Esc 关闭" + #: src/components/modals/visual-explain/ExplainNodeDetails.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx @@ -1941,7 +1968,12 @@ msgid "Events" msgstr "事件" #: src/components/settings/ai-activity/AiActivitySessionsTab.tsx -msgctxt "aiActivity" +msgctxt "aiActivity.events" +msgid "Events" +msgstr "事件" + +#: src/components/settings/ai-activity/AiActivitySessionsTab.tsx +msgctxt "aiActivity.sort.eventCount" msgid "Events" msgstr "事件数" @@ -2074,7 +2106,12 @@ msgid "Export as Notebook" msgstr "导出为 Notebook" #: src/pages/Connections.tsx -msgctxt "connections" +msgctxt "connections.export" +msgid "Export Connections" +msgstr "导出连接" + +#: src/pages/Connections.tsx +msgctxt "connections.exportTitle" msgid "Export Connections" msgstr "导出连接" @@ -2639,7 +2676,17 @@ msgid "Installed" msgstr "已安装" #: src/components/settings/PluginsTab.tsx -msgctxt "settings" +msgctxt "settings.plugins.filterInstalled" +msgid "Installed" +msgstr "已安装" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installed" +msgid "Installed" +msgstr "已安装" + +#: src/components/settings/PluginsTab.tsx +msgctxt "settings.plugins.installedMetric" msgid "Installed" msgstr "已安装" @@ -4005,12 +4052,16 @@ msgstr "行将追加到现有表" msgid "Run" msgstr "运行" -#: src/components/modals/QuerySelectionModal.tsx #: src/components/notebook/NotebookToolbar.tsx -msgctxt "editor" +msgctxt "editor.notebook.runAll" msgid "Run All" msgstr "全部运行" +#: src/components/modals/QuerySelectionModal.tsx +msgctxt "editor.querySelection.runAll" +msgid "Run All" +msgstr "全部执行" + #: src/i18n/registries/shortcutLabels.ts msgid "Run All Cells" msgstr "运行所有单元格" @@ -4736,13 +4787,17 @@ msgid "table" msgstr "表" #: src/components/modals/visual-explain/ExplainNodeDetails.tsx -#: src/components/modals/visual-explain/ExplainSummaryBar.tsx #: src/components/modals/visual-explain/ExplainTableView.tsx #: src/components/ui/ExplainPlanNode.tsx -msgctxt "editor" +msgctxt "editor.visualExplain.relation" msgid "Table" msgstr "表" +#: src/components/modals/visual-explain/ExplainSummaryBar.tsx +msgctxt "editor.visualExplain.tableView" +msgid "Table" +msgstr "表格" + #: src/components/modals/ClipboardImport/TableNameInput.tsx #: src/components/modals/ClipboardImportModal.tsx msgid "Table name" @@ -5188,10 +5243,15 @@ msgid "View created successfully" msgstr "视图创建成功" #: src/components/layout/ExplorerSidebar.tsx -msgctxt "sidebar" +msgctxt "sidebar.viewDefinition" msgid "View Definition" msgstr "视图定义" +#: src/components/layout/ExplorerSidebar.tsx +msgctxt "sidebar.viewTriggerDefinition" +msgid "View Definition" +msgstr "" + #: src/components/modals/ViewEditorModal.tsx msgid "View Definition (SQL)" msgstr "视图定义 (SQL)" diff --git a/src/locales/zh/messages.ts b/src/locales/zh/messages.ts index e8065a50..2fc984ba 100644 --- a/src/locales/zh/messages.ts +++ b/src/locales/zh/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"最大历史条目\"],\"-6AWa-\":[\"导入连接\"],\"-6NyRG\":[\"客户端\"],\"-K0AvT\":[\"断开连接\"],\"-PLZfh\":[\"刷新模型失败\"],\"-T5W2e\":[\"驱动说明\"],\"-ZgeeE\":[\"编辑历史\"],\"-aYrdc\":[\"版本 \",[\"0\"],\" 可用\"],\"-fBGXl\":[\"最高成本\"],\"-jIQDz\":[\"折叠单元格\"],\"-u1eRo\":[\"无数据库\"],\"-yoeVU\":[\"加载模式中...\"],\"-zy2Nq\":[\"类型\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"审批 ID\"],\"0E5-gF\":[\"确定要删除此连接吗?\"],\"0HCubq\":[\"展开\"],\"0Kmdvy\":[\"自定义字体\"],\"0Nj13E\":[\"生成 SQL\"],\"0ROgz5\":[\"输入 JSON...\"],\"0SY9sU\":[\"断开数据库连接失败\"],\"0b3kL9\":[\"选择一个数据库\"],\"0caMy7\":[\"历史\"],\"0mx5ow\":[\"查询\"],\"0n9BtL\":[\"预览\"],\"0pHB9N\":[\"复制为 表.列\"],\"0sQzZK\":[\"筛选数据库...\"],\"0uPP9X\":[\"FK 名称(可选)\"],\"0wxuek\":[\"当前版本\"],\"0x09Aw\":[\"切换了出错时停止\"],\"0yBP6v\":[\"支持开发\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"0yVAoD\":[\"统计行数\"],\"0zxJ87\":[\"无日志可用\"],\"1-ETbn\":[\"可视化执行计划\"],\"1133_z\":[\"编辑视图\"],\"11fGJ6\":[\"查询\"],\"13hIUA\":[[\"0\"],\" API 密钥\"],\"14qNWF\":[\"选择 SSH 连接\"],\"17qHRP\":[\"新建连接\"],\"1Dn6bg\":[\"Import from Clipboard\"],\"1Dnd0I\":[\"加载行数\"],\"1FjTLW\":[\"例如:python3\"],\"1GOvbo\":[\"Ollama 已连接(找到 \",[\"0\"],\" 个模型)\"],\"1I6UoR\":[\"视图\"],\"1U7hS5\":[\"长度\"],\"1UTmg5\":[\"最大允许数据包\"],\"1b7aSU\":[\"Editor Font Family\"],\"1ekzlY\":[\"插件进程\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"主题选择\"],\"1xVZkL\":[\"未找到模型\"],\"26Joci\":[\"已检索 \",[\"0\"],\" 行\"],\"2Bf-Qe\":[\"新建控制台\"],\"2CrSmP\":[\"帮助 Tabularis 成长\"],\"2D9F8_\":[\"复制连接失败\"],\"2Eoi_a\":[\"查看详情\"],\"2F4pE5\":[\"Rust 构建与测试\"],\"2Fsd9r\":[\"本月\"],\"2JzKXI\":[\"设为 GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"全选\"],\"2SO5RM\":[\"此驱动不支持 Kubernetes。\"],\"2Uh5GA\":[\"Cargo 生态\"],\"2YylFp\":[\"新建可视化查询\"],\"2luuSG\":[\"重试\"],\"2wxgft\":[\"重命名\"],\"2yG2GC\":[\"在执行前暂停写入(或所有查询)并要求用户在 Tabularis 中批准。\"],\"30-b5r\":[\"删除\"],\"31kwdN\":[\"复制筛选器\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"所有工具\"],\"3Am5DS\":[\"Tab view\"],\"3BhBCj\":[\"事件数\"],\"3FVg9_\":[\"本地列\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"运行\"],\"3L0HCz\":[\"没有匹配的插件。\"],\"3Nv3JV\":[\"执行查询中...\"],\"3TSz9S\":[\"最小化\"],\"3UW8fG\":[\"更新由 \",[\"0\"],\" 管理\"],\"3YvS-c\":[\"新建标签\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook 单元格名称提示词\"],\"3qkggm\":[\"全屏\"],\"3rBJ1T\":[\"查看模式\"],\"3xZ-xV\":[\"插入当前时间戳\"],\"40Gx0U\":[\"时区\"],\"41GP4f\":[\"选择复制或导出行为 CSV 时使用的默认分隔符。\"],\"42iaEi\":[\"未启用 ANALYZE 的 PostgreSQL 仅显示规划器估算值。\"],\"44cXI8\":[\"按 \",[\"colName\"],\" 升序排序\"],\"4AF7FO\":[\"管理数据库\"],\"4CK17g\":[\"确定要修改视图 \\\"\",[\"name\"],\"\\\" 吗?\"],\"4DDaw-\":[\"请至少选择一个数据库\"],\"4D_Nvt\":[\"创建分组失败\"],\"4RiR6c\":[\"导出为 HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个子进程\"],\"other\":[\"#\",\" 个子进程\"]}]],\"4VyuY3\":[\"确定要清除所有日志吗?\"],\"4WWqS3\":[\"展开/收起 JSON 树\"],\"4cEClj\":[\"会话\"],\"4cmfYp\":[\"复制行\"],\"4lIZTB\":[\"前端开发依赖\"],\"4oYjvJ\":[\"搜索查询…\"],\"4tMxW4\":[\"预览相关记录\"],\"4yJcjm\":[\"选择类型...\"],\"52O82A\":[\"非空\"],\"570t6W\":[\"关闭筛选面板 (ESC)\"],\"592-gw\":[\"自增\"],\"5FvuZv\":[\"分号 (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个事件\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"列表视图\"],\"5To6Z6\":[\"复制查询\"],\"5gqNQl\":[\"网格视图\"],\"5igIzr\":[\"导入已取消\"],\"5nTIup\":[\"正在编辑视图:\",[\"name\"]],\"66bEht\":[\"项目状态\"],\"6PIJVc\":[\"启动\"],\"6QvP0l\":[\"导出为 JSON\"],\"6W41Xq\":[\"任务管理器\"],\"6WngBH\":[\"设为 NULL\"],\"6YtxFj\":[\"名称\"],\"6_dCYd\":[\"概览\"],\"6gvoHP\":[\"复制错误信息\"],\"6oCVzX\":[\"Kubernetes 上下文为必填项\"],\"6wQO0f\":[\"显示数据\"],\"6z9W13\":[\"重启\"],\"71agNy\":[\"使用 AI 为未命名单元格生成名称\"],\"74J3FG\":[\"初始版本\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"知道了\"],\"77nSMU\":[\"删除全部 AI 活动历史?此操作不可撤销。\"],\"79UVYW\":[\"Esc 关闭\"],\"7ABmyQ\":[\"重试\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" / \",[\"0\"],\" 已激活\"],\"7E864M\":[\"数据库类型\"],\"7FqaG1\":[\"自定义 AI EXPLAIN 计划分析的指令。使用 \",[\"LANGUAGE\"],\" 作为输出语言的占位符。\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"检测到混合类型,默认为 TEXT\"],\"7RSQQd\":[\"在密钥链中保存密码\"],\"7VpPHA\":[\"确认\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"失败\"],\"7sMeHQ\":[\"键\"],\"7sNhEz\":[\"用户名\"],\"7tATh2\":[\"运行查询\"],\"7yb4gk\":[\"失败:\"],\"8-4V8D\":[\"表\"],\"82G-l5\":[\"模型上下文协议 (MCP) 允许 AI 助手(如 Claude)连接到您的本地工具。Tabularis 暴露了一个 MCP 服务器,让 AI 可以安全地读取数据库模式并执行查询。\"],\"83VjWE\":[\"新建笔记本\"],\"86IgoU\":[\"运行查询(编辑器中)\"],\"86fCgf\":[\"自定义 AI 查询结果标签页名称生成的指令。SQL 查询作为用户消息发送。\"],\"87a_t_\":[\"标签\"],\"8CWirf\":[\"MCP 服务器\"],\"8S8aIX\":[\"Connection Health Check\"],\"8TMaZI\":[\"时间戳\"],\"8Tg_JR\":[\"自定义\"],\"8UFKYr\":[\"选择要执行的查询\"],\"8VKSGV\":[\"生成 SQL\"],\"8Wjy6z\":[\"关闭左侧标签\"],\"8ZsakT\":[\"密码\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL Editor\"],\"8bRgTe\":[\"未配置 AI 提供商。请前往 设置 > AI。\"],\"8c_W0h\":[\"旧版本\"],\"8guEQP\":[\"刷新视图\"],\"8lm5qE\":[\"SQLite 的 EXPLAIN QUERY PLAN 很轻量,主要用于展示结构。\"],\"8q_sOc\":[\"移除\"],\"8t-akp\":[\"前 \",[\"MAX_PREVIEW_ROWS\"],\" 行\"],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"连接名称\"],\"91gnWY\":[\"导出日志\"],\"91rtHL\":[\"创建新视图\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"新建分组\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"视图更新成功\"],\"9NzDFn\":[\"应用程序启动时显示欢迎屏幕。\"],\"9OoUS3\":[\"创建新的 SSH 连接\"],\"9QGRD5\":[\"目标列\"],\"9QTny9\":[\"查询失败。\"],\"9S-fyV\":[\"预先执行计划\"],\"9SJ_Sx\":[\"系统资源\"],\"9UQ730\":[\"克隆\"],\"9X6cky\":[\"否\"],\"9XUV5V\":[\"剪贴板中没有数据\"],\"9mMU1R\":[\"时间\"],\"9mvFo_\":[\"时间\"],\"9npOH9\":[\"打开文件\"],\"9uI_rE\":[\"撤销\"],\"9xUjzm\":[\"全选\"],\"9y_02p\":[\"与社区聊天、获取帮助、建议功能\"],\"A1pPcI\":[\"SSH 主机\"],\"A1taO8\":[\"搜索\"],\"A6C0pv\":[\"总成本\"],\"A7WG0p\":[\"插件已禁用\"],\"A7yRz3\":[\"视图定义是必需的\"],\"A9Uyp6\":[\"导入失败:\"],\"ABEd-z\":[\"使用您的包管理器更新 Tabularis。\"],\"AMdgKV\":[\"执行计划分析提示词\"],\"ANSTMe\":[\"当前执行计划摘要中未检测到明显问题。\"],\"ANzIr7\":[\"查询历史\"],\"AOnaU7\":[\"已跳过\"],\"AVlZoM\":[\"环境变量\"],\"AXTVsE\":[\"完全验证\"],\"AXdRYR\":[\"当前日志数\"],\"Aa-YkQ\":[\"导出笔记本\"],\"Ai2U7L\":[\"主机\"],\"AidayG\":[\"按级别筛选\"],\"AlPiMN\":[\"点击跳转到页面\"],\"An-1rA\":[\"返回的行数\"],\"AnV8j-\":[\"修改列\"],\"AvEr_L\":[\"新建控制台\"],\"AvYbUL\":[\"在 GitHub 上 Star\"],\"Aw_eOs\":[\"需要 Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No results found\"],\"B0mJGb\":[\"原始输出\"],\"B1c58n\":[\"修改列\"],\"B3toQF\":[\"对象\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"连接名称为必填项\"],\"BAVvWJ\":[\"ER 图\"],\"BBtVak\":[\"全部折叠\"],\"BEVzjL\":[\"导入失败\"],\"BFxXo5\":[\"全部运行\"],\"BJe2lZ\":[\"切换侧边栏\"],\"BK3WCj\":[\"加载注册表失败\"],\"BKbO3i\":[\"编辑了笔记本\"],\"BMB51y\":[\"在控制台中运行\"],\"BNW_Z4\":[\"例如:active_users, order_summary\"],\"BUO_JN\":[\"复制查询\"],\"BYkhHY\":[\"启动时检查更新\"],\"BbHofF\":[\"导出连接\"],\"BeSg6-\":[\"在内存中收集应用日志以进行调试\"],\"BgAyQH\":[\"清除排序\"],\"BinTJI\":[\"npm 生态\"],\"BkFson\":[\"自动分页\"],\"Bpglf1\":[\"上移\"],\"BrGo6h\":[\"搜索笔记本\"],\"BxiAN_\":[\"删除查询\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"前端依赖\"],\"CE-M2e\":[\"信息\"],\"CHIyL8\":[\"无筛选器 —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"下载中...\"],\"CUxwxn\":[\"显示所有表\"],\"CWMXbw\":[\"将强制停止其进程。使用此插件的任何活动数据库连接将停止工作,直到插件重新启动。\"],\"CZt6BX\":[\"手动配置\"],\"Ca8ixZ\":[\"删除\"],\"CbJBQS\":[\"更新失败:\"],\"Cdz-YU\":[\"Stacked view\"],\"CpeQf9\":[\"循环\"],\"D2wXBw\":[\"自增\"],\"D6Ql0c\":[\"选择用于生成和解释的模型。\"],\"DB8zMK\":[\"应用\"],\"DDXf5E\":[\"SQL 函数\"],\"DEwnwi\":[\"删除\"],\"DNTvdl\":[\"在编辑器中打开\"],\"DPc2P9\":[\"删除单元格\"],\"DUY8Ba\":[\"重大变更\"],\"DVnBSM\":[\"Line Height\"],\"Dd7YLj\":[\"稍后再说\"],\"Deej3j\":[\"JSON 格式错误\"],\"DfKhk_\":[\"更新\"],\"DiRiTz\":[\"打开包页面\"],\"DlRHAD\":[\"正在执行 EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个错误\"]}]],\"Dvdihe\":[\"在 \",[\"0\"],\" 上 — 请审核后再执行。\"],\"DzFLzw\":[\"是\"],\"E-JUtQ\":[\"审批门\"],\"E0kcnZ\":[\"基本信息\"],\"E2mje_\":[\"Select Query to Explain\"],\"EDieyg\":[\"确定要删除此 SSH 连接吗?\"],\"EHZxPj\":[\"展开\"],\"EL4oDO\":[\"有新版本可用\"],\"EPi4gT\":[\"按 \",[\"field\"],\" 排序\"],\"EWPtMO\":[\"代码\"],\"EWX0mQ\":[\"未分组\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"未知\"],\"EhADgB\":[\"删除列\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"已是最新版本\"],\"Em6JFd\":[\"统计行数\"],\"EnGiqG\":[[\"0\"],\" 个元素\"],\"Ew1n5z\":[\"搜索插件…\"],\"F18WP3\":[\"参数\"],\"F3uc1x\":[\"导出的文件将包含您的数据库和 SSH 明文密码。请妥善保管该文件。\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"F6pfE9\":[\"活动\"],\"F8tXg7\":[\"数据预览\"],\"F9-6yK\":[\"默认复制格式\"],\"F9lxfG\":[\"移除\"],\"F9nsa2\":[\"历史文件已损坏并被移至备份。新的查询将正常记录。备份文件:\"],\"FF_oap\":[\"默认值\"],\"FK8rlP\":[\"尚未配置 SSH 连接\"],\"FMRcH8\":[\"第一行作为标题\"],\"FNvDMc\":[\"本周\"],\"FQe1FI\":[\"预估行数\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"警告\"],\"FZg3wM\":[\"操作\"],\"Fa_cky\":[\"模式:\",[\"tableName\"]],\"FpEL5o\":[\"Choose an independent theme for the SQL editor, or keep it in sync with the app theme.\"],\"FsvZQL\":[\"编辑了单元格 \",[\"n\"]],\"FtwKL9\":[\"切换标签\"],\"FznI3z\":[\"删除外键 \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"预览失败:\"],\"G8Q5Zq\":[\"命名空间为必填项\"],\"GAohqx\":[\"删除列\"],\"GJR99u\":[\"删除列失败:\"],\"GKfzzM\":[\"选择连接...\"],\"GS-Mus\":[\"导出\"],\"GUaLUq\":[\"加载模式失败:\"],\"GXP-Iw\":[\"添加 SQL 单元格\"],\"Gj1mLb\":[\"重新排序单元格\"],\"GlbqG2\":[\"重置为驱动默认\"],\"Gs5AlY\":[\"打开\"],\"GtmO8_\":[\"从\"],\"GxkJXS\":[\"上传中...\"],\"H-o4D2\":[\"创建新列\"],\"H2B-KW\":[\"选择使用 Ctrl+C / Cmd+C 复制行时的默认格式。\"],\"H3oH0g\":[\"重做\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"收起\"],\"H9P8CD\":[\"添加第一个筛选器\"],\"HAQlGl\":[\"AI 活动\"],\"HKNZrs\":[\"索引条件\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"删除 \",\"#\",\" 行\"],\"other\":[\"删除 \",\"#\",\" 行\"]}]],\"HPuCiP\":[\"文件夹路径\"],\"HUs1R3\":[\"此连接无打开的标签。\"],\"HV4Isp\":[\"输入 SSH 密码\"],\"HVC8Hh\":[\"已复制到剪贴板\"],\"HWEpq8\":[\"磁盘写入/s\"],\"HY4nP5\":[\"内联\"],\"HcmoWv\":[\"保存视图失败:\"],\"He8v1Y\":[\"从全部应用中取消选择\"],\"HehHP1\":[\"默认布局\"],\"HilYn4\":[\"此笔记本为空。添加一个单元格以开始。\"],\"HjxVK_\":[\"快速连接测试\"],\"HmMnRx\":[\"WKT 模式\"],\"HoKCiI\":[\"安装后应用将自动重启\"],\"HpK_8d\":[\"重新加载\"],\"Hpi4Jm\":[\"立即加入\"],\"HuA3RU\":[\"制表符\"],\"I128p7\":[\"管道符 (|)\"],\"I3AgqA\":[\"配置内联 SSH\"],\"I5VBsr\":[\"Same as App\"],\"I8yrPb\":[\"替换表\"],\"I92BdB\":[\"从分组中移除\"],\"I92fr4\":[\"稍后提醒我\"],\"I99Miw\":[\"成本\"],\"IETZIR\":[\"编辑单元格名称\"],\"IG9wzA\":[\"插入行失败:\"],\"ILleOG\":[\"资源类型必须为 \\\"service\\\" 或 \\\"pod\\\"\"],\"IQ3gAw\":[\"上传文件\"],\"IUwGEM\":[\"保存更改\"],\"IUwmLq\":[\"直接依赖声明于 package.json 和 src-tauri/Cargo.toml。\"],\"IVrBTT\":[\"开源库\"],\"I_43p6\":[\"安全\"],\"Iaizf4\":[\"外观\"],\"Il3FBB\":[\"切换结构化筛选面板\"],\"IniZRK\":[\"下载不可用 - 仅加载了预览\"],\"Isaozb\":[\"查看并调整\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"通过此插件的活动查询和连接将被中断。\"],\"J6v1s_\":[\"默认模型\"],\"JE-DVk\":[\"解释器\"],\"JEGlfK\":[\"开始时间\"],\"JKDPqP\":[\"请先选择上下文\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"使用 SSH 隧道\"],\"JRz8tw\":[\"MySQL 和 MariaDB 仅在支持的 EXPLAIN ANALYZE 或 ANALYZE FORMAT 变体中提供实际指标。\"],\"JUICth\":[\"PNG、JPG、WebP 或 SVG · 最大 512 KB\"],\"JY5Oyv\":[\"数据库\"],\"JlFRIB\":[\"连接建立后发送给 MySQL 的会话时区。\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"已拒绝\"],\"K3H9p5\":[\"取消设置\"],\"K5Dgu_\":[\"数据库\"],\"K8IGKf\":[\"认证类型\"],\"KAYNSW\":[\"在内存中保留的日志数量(1-10000)\"],\"KHTGbr\":[\"预先 EXPLAIN\"],\"KHvda8\":[\"非空\"],\"KJKNaZ\":[\"复制为 `列`\"],\"KM5Kc8\":[\"必须选择至少一列\"],\"KSCnVQ\":[\"类型\"],\"KUjOb9\":[\"运行中\"],\"KXBdwy\":[\"刷新存储过程\"],\"KXNyX7\":[\"设为 DEFAULT\"],\"Kd70-v\":[\"从剪贴板导入...\"],\"KhI4oS\":[\"在 \",[\"0\"],\" 中打开引用的行\"],\"KhgrNu\":[\"MCP 服务器集成\"],\"KirERL\":[\"超时\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"删除索引失败:\"],\"KzeARD\":[\"删除表失败:\"],\"L-rMC9\":[\"重置为默认\"],\"L3HXkQ\":[\"错误修复\"],\"LCZ7Dy\":[\"复制名称\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"索引\"],\"LMeAoR\":[\"行\"],\"LPCdc-\":[\"查询标签页名称提示词\"],\"LPFmga\":[\"选择用于全部应用\"],\"LYzbQ2\":[\"工具\"],\"Lbis_V\":[\"快速导航\"],\"Lcpbe2\":[\"无法启动插件进程。请参阅下面的错误详细信息。\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN 仅支持 DML 语句(SELECT、INSERT、UPDATE、DELETE)。DDL 语句(如 CREATE、DROP、ALTER)无法进行分析。\"],\"LnT0hQ\":[\"添加列\"],\"LvutiO\":[\"AI 建议\"],\"M-rHQO\":[\"退出全屏\"],\"M0XJba\":[\"确定要清除此连接的所有查询历史吗?\"],\"M1co_O\":[\"已配置\"],\"M73whl\":[\"上下文\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"显示全部\"],\"MXdOwj\":[\"分离连接\"],\"MZ4T5z\":[\"主键\"],\"MZX6eL\":[\"选择 K8s 连接\"],\"Mc1tjS\":[\"启用 ANALYZE 后可查看实际行数、耗时、循环次数和缓冲区信息。\"],\"Mm4p0T\":[\"还有 \",[\"0\"],\" 行\"],\"Mp0jQ_\":[\"此驱动程序仅在表创建时支持主键\"],\"MqpZwN\":[\"Tabularis 进程\"],\"MxIx43\":[\"↑↓ 导航,Enter 打开\"],\"MygtgQ\":[\"添加 Markdown 单元格\"],\"N40H-G\":[\"全部\"],\"N5UQxq\":[\"未在端口 \",[\"0\"],\" 上检测到 Ollama。是否正在运行?\"],\"N6GBcC\":[\"确认删除\"],\"N6aqHp\":[\"执行查询数\"],\"N9_S15\":[\"将创建一个新表\"],\"NBdMa1\":[\"最慢步骤\"],\"NC2AI2\":[\"长度\"],\"NCzNnx\":[\"升序排列\"],\"NT4Ubs\":[\"删除自定义密钥并恢复到环境变量(如果有)\"],\"NUjrCO\":[\"没有匹配的收藏\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"树总计:\",[\"0\"]],\"Nc2VQn\":[\"追加到现有表\"],\"NgFERn\":[\"添加到收藏\"],\"NktMHG\":[\"数据库名称\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"测试\"],\"Nq5QTk\":[\"explain Nth\"],\"O2STgu\":[\"导出失败:\"],\"O8SV8O\":[\"下载中...\"],\"O9_WW6\":[\"连接\"],\"OGEsKj\":[\"运行所有单元格\"],\"OGWdBg\":[\"视图名称\"],\"OHqT6w\":[\"按下组合键...\"],\"OXJsaG\":[\"参数名称无效\"],\"OfhWJH\":[\"重置\"],\"OlAl5i\":[\"Expand all\"],\"Osn70z\":[\"调试\"],\"Ou8b_n\":[\"加入 Discord\"],\"P1YGsb\":[\"SQL 生成\"],\"P2m1xb\":[\"出错时停止\"],\"P3Qlys\":[\"无连接 ID\"],\"P6Y3Yf\":[\"在终端中运行此命令,然后重启 Claude Code。\"],\"PCdj-c\":[\"取消全选\"],\"PMnFt9\":[\"磁盘读取/s\"],\"PQU2Va\":[\"Accept Suggestion with Enter\"],\"PRnH8G\":[\"共 \",[\"0\"]],\"PY8UF3\":[\"切换了并行(单元格 \",[\"n\"],\")\"],\"PiH3UR\":[\"已复制!\"],\"Pia95d\":[\"列名称是必需的\"],\"PrElXQ\":[\"更新\"],\"PrixCC\":[\"行将追加到现有表\"],\"Pujgbb\":[\"配置目标\"],\"Pw_eQV\":[\"插件启动失败\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"无已保存查询\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"无子进程\"],\"QCxMC0\":[\"应用启动时自动检查新版本\"],\"QEazml\":[\"删除所选\"],\"QHcLEN\":[\"已连接\"],\"QLHHFO\":[\"只读模式\"],\"QOvAW3\":[\"新功能\"],\"QULGRi\":[\"未找到有效查询\"],\"QZwllF\":[\"浏览...\"],\"QbkSr_\":[\"此查询无法 EXPLAIN。\"],\"QeHFYZ\":[\"EXPLAIN 失败: \",[\"0\"]],\"Qll2Tb\":[\"降序\"],\"Qoq-GP\":[\"了解更多\"],\"Qu4Hog\":[\"笔记本导入成功\"],\"R-A2Vd\":[\"无数据显示\"],\"R0Hkb2\":[\"已选择 \",[\"0\"],\" 个数据库\"],\"R1nHhB\":[\"已存在\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"转换为控制台\"],\"R9Khdg\":[\"自动\"],\"RDjuBN\":[\"设置\"],\"RF-HyV\":[\"选择您的首选语言。自动\\\"将使用您的系统语言。\"],\"RGhYAo\":[\"内存\"],\"RGpZyz\":[\"复制名称\"],\"RI-HZc\":[\"输入 \",[\"0\"],\" 密钥\"],\"RJrE17\":[\"确定要删除视图 \\\"\",[\"0\"],\"\\\" 吗?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"一个 Star 可以帮助其他人发现这个项目\"],\"Rb3Tdm\":[\"笔记本名称\"],\"RcbKJ3\":[\"更新时\"],\"RkefFq\":[\"在显示审批模态之前运行 EXPLAIN,以便用户查看执行计划。\"],\"RnF_hl\":[\"加载插件注册表...\"],\"Rns7_C\":[\"此操作无法立即撤销\"],\"RoKRqW\":[\"可用插件\"],\"RphpKk\":[\"外观\"],\"Rt8sHM\":[\"检测到排序或临时操作\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"已启用\"],\"S1veKH\":[\"还原选中\"],\"S5zeZU\":[\"切换预览\"],\"S8Yqbl\":[\"插入\"],\"SDND4q\":[\"未配置\"],\"SJRy3D\":[\"(自动生成)\"],\"SSwIjo\":[\"设为空\"],\"SgvA_r\":[\"按运行(Ctrl/Command+F5)加载表数据\"],\"SlfejT\":[\"错误\"],\"SoATkx\":[\"复制单元格\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"端点 URL\"],\"T7w5CQ\":[\"创建新行失败:\"],\"T9947j\":[\"值(例如 'text' 或 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"切换到垂直布局\"],\"TK5oex\":[\"保存提示词\"],\"TKQ7K-\":[\"安装\"],\"TKZreP\":[\"要求\"],\"TMLAx2\":[\"必需\"],\"TO08JI\":[\"外键\"],\"TQloo1\":[\"创建外键\"],\"TVKqvO\":[\"编辑行\"],\"TYSdQ3\":[\"执行 SELECT 查询\"],\"TfDFHS\":[\"Wrap long lines in the editor instead of scrolling horizontally.\"],\"Tibfjs\":[\"没有已保存的连接 — 在下方创建一个\"],\"Tj36Dr\":[\"重置为默认\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"锁定查询\"],\"TpwXyg\":[\"如果缺少耗时信息,服务器很可能返回的是仅估算的计划。\"],\"Tw2M1h\":[\"安装失败\"],\"Ty-rm9\":[\"SSH 连接\"],\"Tz0i8g\":[\"设置\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes 连接\"],\"U4uzyV\":[\"新功能\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"当单元格失败时停止执行\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" 在 \",[\"1\"],\" 上 — 请审核后再执行。\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[[\"clientName\"],\" 的配置安装成功!重启应用以应用更改。\"],\"URmyfc\":[\"详情\"],\"UWQBvp\":[\"生成 SQL 模板\"],\"UawTKZ\":[\"可选。指定用于运行此插件的可执行文件(例如 macOS/Linux 上的 python3,Windows 上的 python 或完整路径)。留空使用默认值。\"],\"Ub8sf5\":[\"SQLite 不支持通过 ALTER TABLE 删除外键。\"],\"UbbJ8j\":[\"未找到选项\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"这些连接将拒绝来自 MCP 的写入。其他连接行为不变。\"],\"UnQNah\":[\"确定要从表 \\\"\",[\"tableName\"],\"\\\" 中删除列 \\\"\",[\"0\"],\"\\\" 吗?\\n\\n警告:这将永久删除此列中的所有数据。此操作无法撤销。\"],\"UncTTh\":[\"整个进程树的 RSS 总和 — 可能重复计算共享内存\"],\"UpjgFm\":[\"更改了参数\"],\"UsAnu1\":[\"ANALYZE 会实际执行查询。对数据修改语句请谨慎使用。\"],\"UxKoFf\":[\"导航\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tab Size\"],\"UzWGWO\":[\"切换到 SQL WHERE 输入\"],\"V-chk5\":[\"How often to check if active connections are still alive. Set to 0 to disable.\"],\"V-pw1j\":[\"表名\"],\"V2T0Uw\":[\"暂无已保存的笔记本。\"],\"V3aNwx\":[\"数据编辑器\"],\"VGYp2r\":[\"应用到全部\"],\"VH8S7x\":[\"剪贴板列\"],\"VIAEcS\":[\"加载数据库失败。请检查您的凭据。\"],\"VKdztF\":[\"追加行\"],\"VLiHXI\":[\"分析数据\"],\"VMbmXc\":[\"确定要移除 \\\"\",[\"pluginName\"],\"\\\" 吗?这将删除插件文件。\"],\"VO3weF\":[\"未加载文件\"],\"VOZlKc\":[\"导入数据库\"],\"VPzsIz\":[\"正在生成名称...\"],\"VUul0v\":[\"终止\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"所有查询\"],\"Vi2Pqx\":[\"作者\"],\"Vl2zn2\":[\"已停止\"],\"Vo4uBA\":[\"安装插件时发生错误。请参阅下面的详细信息。\"],\"VqqyOs\":[\"执行查询以查看结果\"],\"VzhDFh\":[\"通过 MCP 阻止任何非 SELECT 语句,除非连接被显式允许。\"],\"W3uwpT\":[\"关闭所有标签\"],\"W4MKLh\":[\"例如:在生产环境中风险较大,请确认…\"],\"WA8RND\":[\"确定要删除表 \\\"\",[\"0\"],\"\\\" 吗?\"],\"WG8Qgt\":[\"删除表\"],\"WLnvCZ\":[\"输入用户名\"],\"WM-__8\":[\"搜索连接...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"已将 \",\"#\",\" 行导入到 \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"已将 \",\"#\",\" 行导入到 \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"确定要删除查询 \\\"\",[\"0\"],\"\\\" 吗?\"],\"WarTN_\":[\"成功\"],\"WcF1uL\":[\"分组名称\"],\"Weq9zb\":[\"通用\"],\"WmPpB1\":[\"正在加载执行计划…\"],\"Wu7cK0\":[\"未找到数据库\"],\"WvoUQF\":[\"删除了单元格 \",[\"n\"]],\"Ww3pDD\":[\"手动命令\"],\"X-20AU\":[\"输入查询标签页名称提示词...\"],\"X-U6_w\":[\"字体\"],\"X5fs0g\":[\"创建您的第一个连接以开始使用。\"],\"X7Ayjp\":[\"密码已保存到系统密钥链\"],\"X9kySA\":[\"收藏\"],\"XJOV1Y\":[\"活动\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"查询解释\"],\"XVF2Pf\":[\"编辑模式\"],\"XW6OYF\":[\"此插件可能需要解释器(如 Python)。使用插件设置配置解释器路径。\"],\"XZB6Xr\":[\"最大日志条目数\"],\"Xcffv2\":[\"在编辑器中显示 AI 辅助和解释按钮\"],\"XeqTSh\":[\"连接类型\"],\"XmJfZT\":[\"名称\"],\"XoQfG1\":[\"SSH 用户\"],\"XwI0Vw\":[\"自动(系统)\"],\"XyDlLX\":[\"索引名称\"],\"Y2P2aK\":[\"选择要加载的模式:\"],\"Y8HYw2\":[\"值\"],\"Y8zX3R\":[\"插入到编辑器\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"搜索...\"],\"YWlnMZ\":[\"Ollama 端口\"],\"YYdC3A\":[\"版本 \",[\"0\"]],\"YYn8b5\":[\"浏览并安装注册表中的插件。\"],\"Y_3yKT\":[\"在新标签中打开\"],\"YiAQ_Q\":[\"刷新表\"],\"Ysjr9Y\":[\"SQL 预览\"],\"YswNf7\":[\"所有级别\"],\"YtNwr6\":[\"每个连接存储的查询历史最大条目数。\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"加载中...\"],\"Z7ZXbT\":[\"批准\"],\"Z8JpBH\":[\"导出为 Notebook\"],\"Z8fBIc\":[\"实际行数高于估算\"],\"ZC2VJP\":[\"执行\"],\"ZCIS4k\":[\"无激活筛选器\"],\"ZF1_UT\":[\"SSL 模式\"],\"ZGjBPa\":[\"清除日志\"],\"ZHQTlM\":[\"从以下文件导入\"],\"ZIFDoJ\":[\"请至少选择结构或数据\"],\"ZIZA6o\":[\"批准前编辑\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 条解析警告\"],\"other\":[\"#\",\" 条解析警告\"]}]],\"ZVn8p2\":[\"Display line numbers in the editor gutter.\"],\"ZYnwzF\":[\"已断开\"],\"Za3_fO\":[\"错误\"],\"Zf7LHg\":[\"未找到上下文(是否已安装 kubectl?)\"],\"Zfotp5\":[\"估算与实际差距过大通常意味着统计信息过旧,或存在规划器难以建模的谓词。\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"加载模式失败\"],\"ZqXGPF\":[\"删除视图失败:\"],\"ZuL73E\":[\"创建新的数据库视图\"],\"_-bi4r\":[\"引用表\"],\"_AEYGI\":[\"暂无执行历史\"],\"_FdpZc\":[\"加载视图定义失败:\"],\"_FxSdi\":[\"查看应用、后端和工具链直接使用的开源依赖。\"],\"_JyTG8\":[\"输入解释提示词...\"],\"_Ltc_k\":[\"其他\"],\"_Q2Wix\":[\"行\"],\"_TK1zF\":[\"已保存的连接\"],\"_bJFBE\":[\"连接超时\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"树形\"],\"_dqduX\":[\"下一页\"],\"_fwE6J\":[\"更早\"],\"_n04sB\":[\"终止\"],\"_otxbQ\":[\"密钥文件\"],\"_pezIT\":[\"连接到 \",[\"0\"],\" 失败。请检查您的设置或确保数据库正在运行。\"],\"_srfkj\":[\"自定义密钥删除成功\"],\"_t6aFo\":[\"MySQL 和 MariaDB 会根据服务器版本回退到 EXPLAIN FORMAT=JSON 或表格版 EXPLAIN。\"],\"_xTbaM\":[\"列\"],\"_yxaaL\":[\"唯一索引\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis 是一个免费的开源项目。如果您觉得有用,请考虑支持该项目并与社区联系。\"],\"a9CASo\":[\"SQLite 仅支持重命名列。其他修改需要手动重建表。\"],\"aAIQg2\":[\"外观\"],\"aC_vCa\":[\"使用 AI 生成名称\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"选择节点查看详情\"],\"aHKcKc\":[\"上一页\"],\"aI-5wG\":[\"验证 CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"默认值\"],\"aScJP1\":[\"执行此查询\"],\"aVNbN8\":[\"筛选条件\"],\"aWhdMQ\":[\"使用现有 SSH 连接\"],\"aXYd8V\":[\"超时\"],\"aX_S_r\":[\"第 \",[\"0\"],\" 页,共 \",[\"totalPages\"],\" 页\"],\"agZcf8\":[\"生成的 SQL:\",[\"tableName\"]],\"ajqPzi\":[\"SELECT [字段]\"],\"alplHn\":[\"正在使用 AI 分析执行计划...\"],\"anBcU3\":[\"如果您喜欢 Tabularis 并希望看到更多功能,请考虑通过贡献代码、报告错误或 Star 项目来支持该项目。\"],\"arHmj2\":[\"确定要从历史中删除此查询吗?\"],\"arKcqW\":[\"较旧的服务器可能会回退到仅估算、指标更少的执行计划。\"],\"arcpYe\":[\"需要审批\"],\"aurEkh\":[\"加载进程中...\"],\"avtdsd\":[\"SQL 模式\"],\"az8lvo\":[\"关闭\"],\"b1Ah3z\":[\"聚焦于\"],\"b392Dr\":[\"全部展开\"],\"b5S_PU\":[\"数据库名称\"],\"bAvovP\":[\"下移\"],\"bH3JqY\":[\"未找到表\"],\"bP5JOn\":[\"Word Wrap\"],\"bcOdok\":[\"删除分组\"],\"bcqeas\":[\"将所有 MCP 查询设为只读\"],\"bmca5u\":[\"仅写入\"],\"bpCiBU\":[\"允许 MCP 写入\"],\"bqnhqW\":[\"估算高于实际行数\"],\"bqpcP7\":[\"导出数据库\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"报错\"],\"bw22Gk\":[\"列结构\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"关键问题\"],\"cFCKYZ\":[\"拒绝\"],\"cFGrCP\":[\"表\"],\"cGeFup\":[\"字体大小\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"聚焦于表\"],\"cM9NHc\":[\"降级到\"],\"cO9-2L\":[\"禁用\"],\"cSev-j\":[\"筛选器\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"导入 \",\"#\",\" 行\"],\"other\":[\"导入 \",\"#\",\" 行\"]}]],\"c_xoSn\":[\"重命名了单元格 \",[\"n\"]],\"cd0XEW\":[\"保存查询\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"分割组\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" 语句\"],\"d34vwG\":[\"加载数据库\"],\"d6ynQ7\":[\"降序排列\"],\"d8_6_v\":[\"cancel\"],\"d8wc1_\":[\"示例值\"],\"dBXoCS\":[\"检测到环境变量,但您可以通过在上方设置密钥来覆盖它。\"],\"dD7NPy\":[\"大纲\"],\"dEgA5A\":[\"取消\"],\"dMtLDE\":[\"到\"],\"dPJVhW\":[\"安装失败\"],\"dQvGiF\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个会话\"]}]],\"dTUzKm\":[\"执行选中 (\",[\"0\"],\")\"],\"dU_iQN\":[\"没有会话匹配当前筛选条件。\"],\"dUh9QW\":[\"规划时间\"],\"dVoir2\":[\"添加了 Markdown 单元格 \",[\"n\"]],\"dZ0d2O\":[\"请至少选择一个表\"],\"dhi13U\":[\"选择图片…\"],\"dli1JX\":[\"提交更改\"],\"dmYV6f\":[\"存储过程\"],\"dohZCo\":[\"AI SQL 生成的指令。使用 \",[\"SCHEMA\"],\" 作为数据库结构的占位符。\"],\"dtxpK2\":[\"分析\"],\"dwW9nJ\":[\"Show Line Numbers\"],\"dwWVw_\":[\"显示欢迎屏幕\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"如果存在\"],\"dyN4j9\":[\"点击\\\"运行预览\\\"查看结果\"],\"e07Iz5\":[\"打开任务管理器\"],\"e0NzXu\":[\"此项目是正在进行的工作 (WIP)。核心功能已稳定,但我们有更大的计划。\"],\"e1UKxf\":[\"保存此查询\"],\"e34gdU\":[\"MCP 子进程等待用户决定的时间。\"],\"e62LQd\":[\"强制终止\"],\"e6QZsM\":[\"Editor Theme\"],\"e8CirT\":[\"运行查询\"],\"eD2kUP\":[\"缓冲区读取\"],\"eE0JZ4\":[\"版本\"],\"eIDch7\":[\"输入执行计划分析提示词...\"],\"eIVolo\":[\"磁盘 R/W\"],\"eJOEBy\":[\"导出中...\"],\"eKHY3W\":[\"插件设置\"],\"eMb6Ub\":[\"选择资源...\"],\"ePK91l\":[\"编辑\"],\"eXweu6\":[\"展开单元格\"],\"ecNsTE\":[\"没有匹配的查询\"],\"ecUA8p\":[\"今天\"],\"ecpIZP\":[\"如果加密请输入密钥密码\"],\"esl-Tv\":[\"资源类型\"],\"exyUec\":[\"连接\"],\"f2AJjl\":[\"删除行\"],\"f4pD-j\":[\"连接测试失败\"],\"f7sXvi\":[\"输入密码\"],\"fAsxc0\":[\"顺序扫描\"],\"fIeFs0\":[\"选择值...\"],\"fJm92A\":[\"选择一个包含 EXPLAIN 计划(PostgreSQL JSON 或文本格式)的文件以进行可视化。\"],\"fOuPPd\":[\"插件\"],\"fXVIZq\":[\"数值\"],\"f_b1TA\":[\"执行历史\"],\"fghnqP\":[\"切换到连接 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"逗号 (,)\"],\"fp711N\":[\"已阻止 (只读)\"],\"fpzyLj\":[\"第 \",[\"0\"],\" 页,共 \",[\"1\"],\" 页\"],\"fuA6oy\":[\"Socket 超时\"],\"fvImQM\":[\"已选 \",[\"0\"],\" 列\"],\"fwr_nh\":[\"安装扩展、管理插件驱动,并控制运行时设置。\"],\"g0ZzK4\":[\"JSON 格式正确\"],\"g11hAR\":[\"新建行\"],\"g8VcMm\":[\"我的 K8s 集群\"],\"gCFR_O\":[\"并行执行(全部运行)\"],\"gEjU98\":[\"打开连接\"],\"gPQ8z1\":[\"可为空\"],\"gShKPx\":[\"至少需要一列\"],\"gSuQrG\":[\"无匹配 \\\"\",[\"search\"],\"\\\" 的连接\"],\"gUypqb\":[\"重新执行查询\"],\"gZWMnn\":[\"AI 分析\"],\"ghYd73\":[\"选择目标...\"],\"giAqEC\":[\"创建新表\"],\"gnQS8X\":[\"MySQL 连接器使用的最大数据包大小。\"],\"gqV5VL\":[\"内置,不可自定义\"],\"gww_XE\":[\"引用列\"],\"gxXPJ9\":[\"配置解释器\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"最大化\"],\"h-XNc9\":[\"CSV 分隔符\"],\"h-kNAk\":[\"例如:销售数据\"],\"h3Z_aK\":[\"在此编写 Markdown...\"],\"h7MgpO\":[\"键盘快捷键\"],\"h7peZQ\":[\"允许\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个系统进程正在运行\"],\"other\":[\"#\",\" 个系统进程正在运行\"]}]],\"hEZrFh\":[\"运行 SQL 文件...\"],\"hEipgW\":[\"立即检查更新\"],\"hG89Ed\":[\"图片\"],\"hIHcBE\":[\"导出为 CSV\"],\"hItdtk\":[\"浏览文件夹\"],\"hXFVjo\":[\"表名称是必需的\"],\"hZ6znB\":[\"端口\"],\"h_huI6\":[\"重新运行\"],\"hbz1rh\":[\"键\"],\"hdsaJo\":[\"导入中...\"],\"he3ygx\":[\"复制\"],\"hfGimp\":[\"选择命名空间...\"],\"hjjSEi\":[\"只读连接\"],\"hjwN_s\":[\"资源名称\"],\"hlF1mD\":[\"复制选区\"],\"hnboBb\":[\"AI 执行计划分析\"],\"hq4-D2\":[\"API 密钥安全存储在您的系统密钥链中。在此设置密钥将覆盖环境变量。\"],\"hqjXdn\":[\"删除 SSH 连接失败\"],\"hqofAK\":[\"复制 SQL\"],\"hy6L14\":[\"在 GitHub 上查看\"],\"hyjACX\":[\"折叠/展开单元格\"],\"hz1b5W\":[\"未找到匹配的元素\"],\"i1vAVM\":[\"创建新表\"],\"i3S5T3\":[\"搜索收藏...\"],\"i4_LY_\":[\"写入\"],\"i5HBWh\":[\"查询历史已重置\"],\"iAVlge\":[\"自定义 AI Notebook 单元格名称生成的指令。单元格内容(SQL 或 Markdown)作为用户消息发送。\"],\"iE1yAB\":[\"筛选表...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"连接\"],\"iSryJ2\":[\"我的 SSH 服务器\"],\"iT7UeX\":[\"添加索引\"],\"iUWwuR\":[\"下载并安装\"],\"ia7i08\":[\"请先选择上下文/命名空间/类型\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"已保存\"],\"igcsfY\":[\"注册表中无可用插件。\"],\"ij-Elv\":[\"图片预览\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" explainable query found\"],\"other\":[\"#\",\" explainable queries found\"]}]],\"ioL38P\":[\"实时监控插件进程、CPU、RAM 和磁盘使用情况\"],\"ixlL_e\":[\"SSH 密钥文件(可选)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"选择一个模型\"],\"j3gyYH\":[\"全部应用\"],\"j5CWO4\":[\"已是最新\"],\"j9HPuI\":[\"行 #\",[\"0\"]],\"jBtpMP\":[\"所有状态\"],\"jEu4bB\":[\"列\"],\"jEyQIs\":[\"未找到存储过程\"],\"jHc1By\":[\"删除视图\"],\"jI6sj4\":[\"与 PostgreSQL 和 MySQL 相比,成本、耗时和行数估算通常不可用。\"],\"jIxQCZ\":[\"您的平台不可用\"],\"jKIncn\":[\"数据库名称是必需的\"],\"jPSk57\":[\"理由 (可选)\"],\"jUNY_d\":[\"视图\"],\"jVqjDo\":[\"无效的笔记本文件格式\"],\"jWSZ-A\":[\"仅预览 - 未加载完整数据\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket 超时时间,单位为毫秒。\"],\"jpeU_Z\":[\"笔记本\"],\"jpgB4Y\":[\"连接名称是必需的\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"子进程\"],\"jx0t66\":[\"折叠子进程\"],\"jxShEf\":[\"创建视图\"],\"jz5PKx\":[\"视图定义\"],\"k-0mL-\":[\"添加列\"],\"k-XiMX\":[\"原始\"],\"k2UnVy\":[\"哈希条件\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"seconds\"],\"kBiBq7\":[\"删除索引 \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"显示/隐藏图表\"],\"kI1qVD\":[\"格式化\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行 · \",[\"1\"],\"毫秒\"],\"other\":[\"#\",\" 行 · \",[\"2\"],\"毫秒\"]}]],\"kJDmsI\":[\"事件详情\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"注册表\"],\"kY-q3P\":[[\"label\"],\" 是必需的\"],\"kexIdC\":[\"使用 Kubernetes 端口转发\"],\"kj2-CR\":[\"错误详情\"],\"krksx_\":[\"成功\"],\"kwY6nh\":[\"关闭\"],\"kx0s-n\":[\"Results\"],\"kxUEfE\":[\"获取存储过程定义失败:\"],\"l2Op2p\":[\"查询参数\"],\"l9Ivba\":[\"插件进程和系统资源\"],\"lBdPxu\":[\"强调色\"],\"lCF0wC\":[\"刷新\"],\"lEQRwq\":[\"数据 (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"新表已创建\"],\"lOekZ3\":[\"切换到水平布局\"],\"lUA1C1\":[\"SSH 密钥密码(可选)\"],\"lVeG20\":[\"Rust 依赖\"],\"lXAG6D\":[\"AI 查询解释的指令。使用 \",[\"LANGUAGE\"],\" 作为输出语言的占位符。\"],\"lbbYjy\":[\"Directly edit the raw configuration file. A restart is required to apply changes.\"],\"lhKW0m\":[\"添加了 SQL 单元格 \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"结果页面大小(限制)\"],\"lkz6PL\":[\"耗时\"],\"lmVGeo\":[\"添加外键\"],\"lnnx3E\":[\"将 Tabularis 连接到 Claude Desktop、Cursor 等\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"添加\"],\"m2Q_r8\":[\"在文本列中检测 JSON\"],\"m2tskz\":[\"成功\"],\"mA-qpe\":[\"全部运行完成\"],\"mBhhbA\":[\"日志已导出到剪贴板\"],\"mCNdzH\":[\"运行单元格\"],\"mO95sp\":[\"关闭面板\"],\"mP7dLi\":[\"在上方输入字体名称\"],\"mQCWzt\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个被阻止\"]}]],\"mS74ir\":[\"保存 SSH 连接失败\"],\"mSqtw8\":[\"运行预览\"],\"mURmfQ\":[\"视图定义 (SQL)\"],\"mX_isJ\":[\"垂直\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"结构 (DDL)\"],\"mrk4Cf\":[\"按 \",[\"colName\"],\" 降序排序\"],\"msJ8t1\":[\"我们为 Tabularis 用户开设了专属社区:获取帮助、分享技巧、共建路线图。\"],\"mtvVdV\":[\"已处理行数\"],\"mx4evv\":[\"创建表\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"下载\"],\"n7JDTx\":[\"安装并启用插件以在此处查看它们\"],\"nDDJir\":[\"搜索会话、客户端、连接…\"],\"nHP-Kr\":[\"无活动会话。请选择一个连接。\"],\"nKhCjW\":[\"选择表\"],\"nNmhuY\":[\"创建索引\"],\"nNwvm4\":[\"错误\"],\"nOVim5\":[\"保存连接失败\"],\"nPQulR\":[\"Client Certificate\"],\"nf14vn\":[\"Requires extension: \",[\"0\"]],\"ngO6Pv\":[\"Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.\"],\"nhmF3p\":[\"连接\"],\"noM5A_\":[\"创建您的第一个连接\"],\"nohy4m\":[\"暂无 MCP 活动。\"],\"nr-axf\":[\"移除插件\"],\"nsPFX9\":[\"在 Visual Explain 中打开\"],\"nuBbBr\":[\"图表\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-XJ9D\":[\"更改\"],\"o21Y-P\":[\"条目\"],\"o3tP_A\":[\"删除索引\"],\"o45L8r\":[\"输入您的连接名称\"],\"o53XGh\":[\"复制选中的行\"],\"o7J4JM\":[\"过滤条件\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"级别\"],\"oGiIL7\":[\"默认提供商\"],\"oJ4rAm\":[\"Connection Lost\"],\"oJlXF2\":[\"导入笔记本\"],\"oMFv82\":[\"垂直分割\"],\"oOFiQg\":[\"限制每次查询获取的行数,以防止性能问题。设置为 0 可禁用(不推荐)。\"],\"oT9ZD3\":[\"隐藏概览\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"更改了图表(单元格 \",[\"n\"],\")\"],\"oWfclW\":[\"当未带类型的文本单元格包含 JSON 对象或数组时显示 JSON 查看器入口。每单元格会增加少量解析开销。\"],\"obpbdz\":[\"未找到配置文件(请手动创建)\"],\"odZgfC\":[\"AI 客户端\"],\"ogZhXn\":[\"选择 ER 图的默认布局方向\"],\"ohUJJM\":[\"插件\"],\"ok3hJJ\":[\"已安装\"],\"olAdaI\":[\"实际行数\"],\"olWzar\":[\"强制终止插件进程\"],\"ovBPCi\":[\"默认\"],\"owzTWN\":[\"已从提供商刷新 AI 模型\"],\"oxYi6j\":[\"调整整个应用使用的基础字体大小(10-20px)。\"],\"p--hsQ\":[\"A database connection was lost\"],\"p6NueD\":[\"新建\"],\"pOYHox\":[\"操作\"],\"pR9bTR\":[\"无 BLOB 数据\"],\"pRDT0m\":[\"表\"],\"pS8S5q\":[\"例如:users, orders, products\"],\"pSws_M\":[\"表名称\"],\"pVLbKZ\":[\"视图创建成功\"],\"pWT04I\":[\"检查中...\"],\"pZJ_6D\":[\"索引名称是必需的\"],\"pddYFG\":[\"输入单元格名称提示词...\"],\"pnpyuD\":[\"启用日志\"],\"pqKMPv\":[\"创建表失败:\"],\"pqaP1h\":[\"关闭\"],\"pqarBu\":[\"升序\"],\"ptuq35\":[\"例如:微软雅黑\"],\"pzu7v4\":[\"水平\"],\"q-ch8m\":[\"其余连接保持只读。仅勾选的连接可以执行写入。\"],\"qIrtcK\":[\"更新\"],\"qOqy8G\":[\"检查配置中...\"],\"qWaVNs\":[\"Save & Restart\"],\"qb3LPX\":[\"查看 ER 图\"],\"qkK0vq\":[\"视图名称是必需的\"],\"qki9tG\":[\"错误\"],\"qoIir-\":[\"您的 OpenAI 兼容 API 的基础 URL。例如:https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Collapse all\"],\"r6ncaO\":[\"关闭标签\"],\"rAJlpP\":[\"容器端口\"],\"rG3WVm\":[\"读取\"],\"rGRCeK\":[\"清除查询历史\"],\"rNIto7\":[\"资源名称为必填项\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"笔记本导出成功\"],\"rY4sEV\":[\"删除外键\"],\"rbu0nO\":[\"管理 SSH 连接\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个连接\"],\"other\":[\"#\",\" 个连接\"]}]],\"rn2_2V\":[\"移除筛选器\"],\"roABNH\":[\"暂无查询历史\"],\"rtir7c\":[\"未知\"],\"ru0-2W\":[\"无活动连接\"],\"rvDPWO\":[\"估算偏差\"],\"rwWjWg\":[\"发布说明\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"测试连接\"],\"sBOaim\":[\"The configuration file has been saved. Restart now to apply the changes?\"],\"sCyv9B\":[\"刷新模型\"],\"sSUqe4\":[\"删除\"],\"sUBkgN\":[\"生成 SQL 中...\"],\"sZZG3d\":[\"确定要导入 \\\"\",[\"0\"],\"\\\" 吗?\\n这可能会覆盖现有数据。\"],\"sbK5ck\":[\"搜索历史...\"],\"sq_bS6\":[\"删除时\"],\"suW7-E\":[\"连接超时时间,单位为毫秒。\"],\"t-R8-P\":[\"执行时间\"],\"t1OfVY\":[[\"totalLibraries\"],\" 个库\"],\"t2TMzs\":[\"关闭标签\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"选择一个表...\"],\"t7KRl1\":[\"MCP 工具调用的审计日志,以及等待批准的查询。仅本地存储。\"],\"t9NJIk\":[\"检测到高扫描操作\"],\"tB7xof\":[\"临时或排序操作\"],\"tBBXTO\":[\"Ping Interval\"],\"tFrT3w\":[\"如果自动安装失败,请将此添加到您的客户端配置文件中。\"],\"tJ7UbA\":[\"explain focused\"],\"tKlWWY\":[\"表情\"],\"tMFzq-\":[\"水平分割\"],\"tQhW-D\":[\"日志设置\"],\"tXFGEx\":[\"没有已保存的 Kubernetes 连接。点击“添加”创建一个。\"],\"tXLz_8\":[\"删除\"],\"tXpRby\":[\"数据网格\"],\"tbysEk\":[\"操作\"],\"tdta9X\":[\"第 \",[\"0\"],\" 页\"],\"tfDRzk\":[\"保存\"],\"tfEioV\":[\"从上到下执行所有 SQL 单元格\"],\"tiAIaJ\":[\"SSH 密码缺失。请重新输入。\"],\"tk22BR\":[\"粘贴结构化数据,导入前预览模式\"],\"tst44n\":[\"事件\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL 文件执行成功\"],\"u6QeR6\":[\"Restart Now\"],\"uAQUqI\":[\"状态\"],\"uBAxNB\":[\"编辑器\"],\"uFViPK\":[\"无 SSH 连接可用\"],\"uHUuhp\":[\"Explain this query\"],\"uHfFzS\":[\"Editor Font Size\"],\"uJ_3K5\":[\"删除笔记本“\",[\"0\"],\"”?此操作无法撤销。\"],\"uKaNJ3\":[\"在 JSON 编辑器中打开\"],\"uQBwTo\":[\"模式\"],\"ub54ff\":[\"插件中心\"],\"ufFyBs\":[\"数据库导出成功\"],\"upNmR2\":[\"打开侧边栏编辑器\"],\"utMia3\":[\"取消全选\"],\"uyNaJg\":[\"1 个元素\"],\"v61dnS\":[\"输入您的 OpenAI 兼容提供商的确切模型名称。\"],\"v6oeyr\":[\"已安装\"],\"v75DGg\":[\"浏览文件\"],\"v99dO4\":[\"主键\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"找到 \",\"#\",\" 个查询\"],\"other\":[\"找到 \",\"#\",\" 个查询\"]}]],\"vCSBPD\":[\"添加筛选器\"],\"vH7uJj\":[\"排序方式…\"],\"vUOA1-\":[\"搜索模型...\"],\"vWcB0p\":[\"PostgreSQL 的 ANALYZE 会在可用时包含实际行数、耗时、循环次数和缓冲区计数。\"],\"vXIe7J\":[\"语言\"],\"vYf4Jm\":[\"输入完整的 SQL 函数(例如 ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"首选\"],\"vditm4\":[\"执行计划\"],\"vks_ls\":[\"关闭其他标签\"],\"vnAnIp\":[\"在 \",[\"1\"],\" 中未找到模型 \",[\"0\"],\"。它可能无法正常工作。\"],\"vqoN5u\":[\"结构\"],\"vrAvbP\":[\"确定要删除分组 \\\"\",[\"0\"],\"\\\" 吗?此分组中的连接将移至未分组。\"],\"vtJ2yO\":[\"浏览器\"],\"vujQJ5\":[\"本地化\"],\"vvJPVL\":[\"显示概览\"],\"vwI5S4\":[\"成功\"],\"vzH-7Z\":[\"解释\"],\"w7QmD_\":[\"输入系统提示词...\"],\"w9eMXw\":[\"触发器\"],\"wCJFlW\":[\"已用时间\"],\"wCfv2R\":[\"添加连接\"],\"wGfc86\":[\"清除所有历史\"],\"wGwNv4\":[\"当前数据库\"],\"wJJ-Wy\":[\"安装中...\"],\"wMe2Qp\":[\"命名空间\"],\"wQiel_\":[\"缓冲区命中\"],\"wQn-RM\":[\"添加列\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"已应用\"],\"wTmVhm\":[\"删除\"],\"wZeIWq\":[\"从剪贴板导入\"],\"w_bY7R\":[\"日志\"],\"wc_8bA\":[\"待审批\"],\"wckWOP\":[\"管理\"],\"wdYcKH\":[\"打开的标签\"],\"wja8aL\":[\"未命名\"],\"wkOAzk\":[\"没有匹配的笔记本。\"],\"wp49Ao\":[\"处理插入失败:\"],\"wqG2hQ\":[\"跳过(不导入)\"],\"wwrAsK\":[\"请填写所有必需字段\"],\"wwu18a\":[\"图标\"],\"x2fr_j\":[\"图形\"],\"xANKBj\":[\"函数\"],\"xBwjck\":[\"A restart is required to apply changes.\"],\"xDAtGP\":[\"消息\"],\"xECY01\":[\"存储过程\"],\"xGPNgZ\":[\"提示词自定义\"],\"xNgtS-\":[\"未找到视图\"],\"xOPa1b\":[\"端口必须介于 1 和 65535 之间\"],\"xY9s5E\":[\"超时\"],\"xaVUr1\":[\"The quick brown fox jumps over the lazy dog\"],\"xbvTzL\":[\"文件路径\"],\"xlew5F\":[\"清空\"],\"xmNyKz\":[\"测试中...\"],\"xtuh6D\":[\"展开浏览器\"],\"y-Zdqj\":[\"选择上下文...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"打开 JSON 查看器\"],\"yQXjG5\":[\"取消全选\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"昨天\"],\"ygCKqB\":[\"停止\"],\"ykCc6r\":[\"更改了数据库(单元格 \",[\"n\"],\")\"],\"ynVMSc\":[\"全选\"],\"ytdz1d\":[\"AI 请求执行数据库写入\"],\"yyhzur\":[\"创建表\"],\"yz7wBu\":[\"关闭\"],\"z0VdfR\":[\"例程\"],\"z407wX\":[\"SSH 密码\"],\"z5kV0h\":[\"连接\"],\"zBTMzx\":[\"预览\"],\"zCaAKs\":[\"更新错误\"],\"zDAakK\":[\"无法在没有连接 ID 的情况下显示图表。\"],\"zGe21h\":[\"此密钥从环境变量加载\"],\"zGfL5t\":[\"值\"],\"zL6-4A\":[\"无插件进程在运行\"],\"zLZhCi\":[\"全新的 Discord 社区!\"],\"zLlCou\":[\"复制列名\"],\"zNEL34\":[\"加入社区\"],\"zNgTlV\":[\"关闭右侧标签\"],\"zQz55p\":[\"查看结构\"],\"zR0FfH\":[\"已导出到 \",[\"target\"]],\"zRZeOc\":[\"搜索表、视图、例程、触发器...\"],\"zUNMsr\":[\"SSH 密钥\"],\"zXMRzb\":[\"SSH 端口\"],\"zZgoXr\":[\"无匹配的表\"],\"zaWbms\":[\"回滚更改\"],\"zgClmU\":[\"安装配置\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"输入值...\"],\"zvzN4C\":[\"设为激活\"],\"zzDlyQ\":[\"成功\"],\"zzMxrp\":[\"Edit config.json\"],\"zz_Wd_\":[\"模式\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"最大历史条目\"],\"-6AWa-\":[\"导入连接\"],\"-6NyRG\":[\"客户端\"],\"-K0AvT\":[\"断开连接\"],\"-PLZfh\":[\"刷新模型失败\"],\"-T5W2e\":[\"驱动说明\"],\"-ZgeeE\":[\"编辑历史\"],\"-aYrdc\":[\"版本 \",[\"0\"],\" 可用\"],\"-fBGXl\":[\"最高成本\"],\"-jIQDz\":[\"折叠单元格\"],\"-u1eRo\":[\"无数据库\"],\"-yoeVU\":[\"加载模式中...\"],\"-zy2Nq\":[\"类型\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"审批 ID\"],\"0E5-gF\":[\"确定要删除此连接吗?\"],\"0HCubq\":[\"展开\"],\"0Kmdvy\":[\"自定义字体\"],\"0Nj13E\":[\"生成 SQL\"],\"0ROgz5\":[\"输入 JSON...\"],\"0SY9sU\":[\"断开数据库连接失败\"],\"0b3kL9\":[\"选择一个数据库\"],\"0caMy7\":[\"历史\"],\"0mx5ow\":[\"查询\"],\"0n9BtL\":[\"预览\"],\"0pHB9N\":[\"复制为 表.列\"],\"0sQzZK\":[\"筛选数据库...\"],\"0uPP9X\":[\"FK 名称(可选)\"],\"0wxuek\":[\"当前版本\"],\"0x09Aw\":[\"切换了出错时停止\"],\"0yBP6v\":[\"支持开发\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"0yVAoD\":[\"统计行数\"],\"0zxJ87\":[\"无日志可用\"],\"1-ETbn\":[\"可视化执行计划\"],\"1133_z\":[\"编辑视图\"],\"11fGJ6\":[\"查询\"],\"13hIUA\":[[\"0\"],\" API 密钥\"],\"14qNWF\":[\"选择 SSH 连接\"],\"17qHRP\":[\"新建连接\"],\"1Dn6bg\":[\"Import from Clipboard\"],\"1Dnd0I\":[\"加载行数\"],\"1FjTLW\":[\"例如:python3\"],\"1GOvbo\":[\"Ollama 已连接(找到 \",[\"0\"],\" 个模型)\"],\"1I6UoR\":[\"视图\"],\"1U7hS5\":[\"长度\"],\"1UTmg5\":[\"最大允许数据包\"],\"1b7aSU\":[\"Editor Font Family\"],\"1ekzlY\":[\"插件进程\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"主题选择\"],\"1xVZkL\":[\"未找到模型\"],\"26Joci\":[\"已检索 \",[\"0\"],\" 行\"],\"2Bf-Qe\":[\"新建控制台\"],\"2CrSmP\":[\"帮助 Tabularis 成长\"],\"2D9F8_\":[\"复制连接失败\"],\"2Eoi_a\":[\"查看详情\"],\"2F4pE5\":[\"Rust 构建与测试\"],\"2Fsd9r\":[\"本月\"],\"2JzKXI\":[\"设为 GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"全选\"],\"2SO5RM\":[\"此驱动不支持 Kubernetes。\"],\"2Uh5GA\":[\"Cargo 生态\"],\"2YylFp\":[\"新建可视化查询\"],\"2luuSG\":[\"重试\"],\"2wxgft\":[\"重命名\"],\"2yG2GC\":[\"在执行前暂停写入(或所有查询)并要求用户在 Tabularis 中批准。\"],\"30-b5r\":[\"删除\"],\"31kwdN\":[\"复制筛选器\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"所有工具\"],\"3Am5DS\":[\"Tab view\"],\"3FVg9_\":[\"本地列\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"运行\"],\"3L0HCz\":[\"没有匹配的插件。\"],\"3Nv3JV\":[\"执行查询中...\"],\"3TSz9S\":[\"最小化\"],\"3UW8fG\":[\"更新由 \",[\"0\"],\" 管理\"],\"3YvS-c\":[\"新建标签\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook 单元格名称提示词\"],\"3qkggm\":[\"全屏\"],\"3rBJ1T\":[\"查看模式\"],\"3xZ-xV\":[\"插入当前时间戳\"],\"40Gx0U\":[\"时区\"],\"41GP4f\":[\"选择复制或导出行为 CSV 时使用的默认分隔符。\"],\"42iaEi\":[\"未启用 ANALYZE 的 PostgreSQL 仅显示规划器估算值。\"],\"44cXI8\":[\"按 \",[\"colName\"],\" 升序排序\"],\"4AF7FO\":[\"管理数据库\"],\"4CK17g\":[\"确定要修改视图 \\\"\",[\"name\"],\"\\\" 吗?\"],\"4DDaw-\":[\"请至少选择一个数据库\"],\"4D_Nvt\":[\"创建分组失败\"],\"4RiR6c\":[\"导出为 HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个子进程\"],\"other\":[\"#\",\" 个子进程\"]}]],\"4VyuY3\":[\"确定要清除所有日志吗?\"],\"4WWqS3\":[\"展开/收起 JSON 树\"],\"4XAQdl\":[\"创建索引\"],\"4cEClj\":[\"会话\"],\"4cmfYp\":[\"复制行\"],\"4hsr6d\":[\"创建视图\"],\"4lIZTB\":[\"前端开发依赖\"],\"4oYjvJ\":[\"搜索查询…\"],\"4tMxW4\":[\"预览相关记录\"],\"4yJcjm\":[\"选择类型...\"],\"52O82A\":[\"非空\"],\"570t6W\":[\"关闭筛选面板 (ESC)\"],\"592-gw\":[\"自增\"],\"5FvuZv\":[\"分号 (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个事件\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"列表视图\"],\"5To6Z6\":[\"复制查询\"],\"5gqNQl\":[\"网格视图\"],\"5igIzr\":[\"导入已取消\"],\"5nTIup\":[\"正在编辑视图:\",[\"name\"]],\"5qIe8E\":[\"全部运行\"],\"66bEht\":[\"项目状态\"],\"6PIJVc\":[\"启动\"],\"6QvP0l\":[\"导出为 JSON\"],\"6W41Xq\":[\"任务管理器\"],\"6WngBH\":[\"设为 NULL\"],\"6YtxFj\":[\"名称\"],\"6_dCYd\":[\"概览\"],\"6dOBsk\":[\"创建视图\"],\"6gvoHP\":[\"复制错误信息\"],\"6oCVzX\":[\"Kubernetes 上下文为必填项\"],\"6wQO0f\":[\"显示数据\"],\"6z9W13\":[\"重启\"],\"71agNy\":[\"使用 AI 为未命名单元格生成名称\"],\"74J3FG\":[\"初始版本\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"知道了\"],\"77nSMU\":[\"删除全部 AI 活动历史?此操作不可撤销。\"],\"7ABmyQ\":[\"重试\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" / \",[\"0\"],\" 已激活\"],\"7E864M\":[\"数据库类型\"],\"7FqaG1\":[\"自定义 AI EXPLAIN 计划分析的指令。使用 \",[\"LANGUAGE\"],\" 作为输出语言的占位符。\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"检测到混合类型,默认为 TEXT\"],\"7RSQQd\":[\"在密钥链中保存密码\"],\"7VpPHA\":[\"确认\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"失败\"],\"7sMeHQ\":[\"键\"],\"7sNhEz\":[\"用户名\"],\"7tATh2\":[\"运行查询\"],\"7yb4gk\":[\"失败:\"],\"8-4V8D\":[\"表\"],\"82G-l5\":[\"模型上下文协议 (MCP) 允许 AI 助手(如 Claude)连接到您的本地工具。Tabularis 暴露了一个 MCP 服务器,让 AI 可以安全地读取数据库模式并执行查询。\"],\"83VjWE\":[\"新建笔记本\"],\"86IgoU\":[\"运行查询(编辑器中)\"],\"86fCgf\":[\"自定义 AI 查询结果标签页名称生成的指令。SQL 查询作为用户消息发送。\"],\"87a_t_\":[\"标签\"],\"87kWsr\":[\"导出连接\"],\"8CWirf\":[\"MCP 服务器\"],\"8S8aIX\":[\"Connection Health Check\"],\"8TMaZI\":[\"时间戳\"],\"8Tg_JR\":[\"自定义\"],\"8UFKYr\":[\"选择要执行的查询\"],\"8VKSGV\":[\"生成 SQL\"],\"8Wjy6z\":[\"关闭左侧标签\"],\"8ZsakT\":[\"密码\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL Editor\"],\"8bRgTe\":[\"未配置 AI 提供商。请前往 设置 > AI。\"],\"8c_W0h\":[\"旧版本\"],\"8guEQP\":[\"刷新视图\"],\"8lm5qE\":[\"SQLite 的 EXPLAIN QUERY PLAN 很轻量,主要用于展示结构。\"],\"8q_sOc\":[\"移除\"],\"8t-akp\":[\"前 \",[\"MAX_PREVIEW_ROWS\"],\" 行\"],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"连接名称\"],\"91gnWY\":[\"导出日志\"],\"91rtHL\":[\"创建新视图\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"新建分组\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"视图更新成功\"],\"9NzDFn\":[\"应用程序启动时显示欢迎屏幕。\"],\"9OoUS3\":[\"创建新的 SSH 连接\"],\"9QGRD5\":[\"目标列\"],\"9QTny9\":[\"查询失败。\"],\"9S-fyV\":[\"预先执行计划\"],\"9SJ_Sx\":[\"系统资源\"],\"9UQ730\":[\"克隆\"],\"9X6cky\":[\"否\"],\"9XUV5V\":[\"剪贴板中没有数据\"],\"9hGjL2\":[\"创建索引\"],\"9mMU1R\":[\"时间\"],\"9mvFo_\":[\"时间\"],\"9npOH9\":[\"打开文件\"],\"9uI_rE\":[\"撤销\"],\"9xUjzm\":[\"全选\"],\"9y_02p\":[\"与社区聊天、获取帮助、建议功能\"],\"A1pPcI\":[\"SSH 主机\"],\"A1taO8\":[\"搜索\"],\"A6C0pv\":[\"总成本\"],\"A7WG0p\":[\"插件已禁用\"],\"A7yRz3\":[\"视图定义是必需的\"],\"A9Uyp6\":[\"导入失败:\"],\"ABEd-z\":[\"使用您的包管理器更新 Tabularis。\"],\"AMdgKV\":[\"执行计划分析提示词\"],\"ANSTMe\":[\"当前执行计划摘要中未检测到明显问题。\"],\"ANzIr7\":[\"查询历史\"],\"AOnaU7\":[\"已跳过\"],\"AVlZoM\":[\"环境变量\"],\"AXTVsE\":[\"完全验证\"],\"AXdRYR\":[\"当前日志数\"],\"Aa-YkQ\":[\"导出笔记本\"],\"Ai2U7L\":[\"主机\"],\"AidayG\":[\"按级别筛选\"],\"AlPiMN\":[\"点击跳转到页面\"],\"An-1rA\":[\"返回的行数\"],\"AnV8j-\":[\"修改列\"],\"AvEr_L\":[\"新建控制台\"],\"AvYbUL\":[\"在 GitHub 上 Star\"],\"Aw_eOs\":[\"需要 Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No results found\"],\"B0mJGb\":[\"原始输出\"],\"B1c58n\":[\"修改列\"],\"B3toQF\":[\"对象\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"连接名称为必填项\"],\"BAVvWJ\":[\"ER 图\"],\"BBtVak\":[\"全部折叠\"],\"BEVzjL\":[\"导入失败\"],\"BHATjK\":[\"导出连接\"],\"BJe2lZ\":[\"切换侧边栏\"],\"BK3WCj\":[\"加载注册表失败\"],\"BKbO3i\":[\"编辑了笔记本\"],\"BMB51y\":[\"在控制台中运行\"],\"BNW_Z4\":[\"例如:active_users, order_summary\"],\"BPkXj7\":[\"创建外键\"],\"BUO_JN\":[\"复制查询\"],\"BYkhHY\":[\"启动时检查更新\"],\"BeSg6-\":[\"在内存中收集应用日志以进行调试\"],\"BgAyQH\":[\"清除排序\"],\"BinTJI\":[\"npm 生态\"],\"BkFson\":[\"自动分页\"],\"Bpglf1\":[\"上移\"],\"BrGo6h\":[\"搜索笔记本\"],\"BxiAN_\":[\"删除查询\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"前端依赖\"],\"CE-M2e\":[\"信息\"],\"CHIyL8\":[\"无筛选器 —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"下载中...\"],\"CUxwxn\":[\"显示所有表\"],\"CWMXbw\":[\"将强制停止其进程。使用此插件的任何活动数据库连接将停止工作,直到插件重新启动。\"],\"CZt6BX\":[\"手动配置\"],\"Ca8ixZ\":[\"删除\"],\"CbJBQS\":[\"更新失败:\"],\"Cdz-YU\":[\"Stacked view\"],\"CpeQf9\":[\"循环\"],\"D2wXBw\":[\"自增\"],\"D6Ql0c\":[\"选择用于生成和解释的模型。\"],\"DB8zMK\":[\"应用\"],\"DDXf5E\":[\"SQL 函数\"],\"DEwnwi\":[\"删除\"],\"DNTvdl\":[\"在编辑器中打开\"],\"DPc2P9\":[\"删除单元格\"],\"DUY8Ba\":[\"重大变更\"],\"DVnBSM\":[\"Line Height\"],\"Dd7YLj\":[\"稍后再说\"],\"Deej3j\":[\"JSON 格式错误\"],\"DfKhk_\":[\"更新\"],\"DiRiTz\":[\"打开包页面\"],\"DlRHAD\":[\"正在执行 EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个错误\"]}]],\"Dvdihe\":[\"在 \",[\"0\"],\" 上 — 请审核后再执行。\"],\"DzFLzw\":[\"是\"],\"E-JUtQ\":[\"审批门\"],\"E0kcnZ\":[\"基本信息\"],\"E2mje_\":[\"Select Query to Explain\"],\"EDieyg\":[\"确定要删除此 SSH 连接吗?\"],\"EHZxPj\":[\"展开\"],\"EL4oDO\":[\"有新版本可用\"],\"EPi4gT\":[\"按 \",[\"field\"],\" 排序\"],\"EWPtMO\":[\"代码\"],\"EWX0mQ\":[\"未分组\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"未知\"],\"EhADgB\":[\"删除列\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"已是最新版本\"],\"Em6JFd\":[\"统计行数\"],\"EnGiqG\":[[\"0\"],\" 个元素\"],\"Ew1n5z\":[\"搜索插件…\"],\"F18WP3\":[\"参数\"],\"F3uc1x\":[\"导出的文件将包含您的数据库和 SSH 明文密码。请妥善保管该文件。\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"F6pfE9\":[\"活动\"],\"F8tXg7\":[\"数据预览\"],\"F9-6yK\":[\"默认复制格式\"],\"F9lxfG\":[\"移除\"],\"F9nsa2\":[\"历史文件已损坏并被移至备份。新的查询将正常记录。备份文件:\"],\"FF_oap\":[\"默认值\"],\"FK8rlP\":[\"尚未配置 SSH 连接\"],\"FMRcH8\":[\"第一行作为标题\"],\"FNvDMc\":[\"本周\"],\"FQe1FI\":[\"预估行数\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"警告\"],\"FZg3wM\":[\"操作\"],\"Fa_cky\":[\"模式:\",[\"tableName\"]],\"FpEL5o\":[\"Choose an independent theme for the SQL editor, or keep it in sync with the app theme.\"],\"FsvZQL\":[\"编辑了单元格 \",[\"n\"]],\"FtwKL9\":[\"切换标签\"],\"FznI3z\":[\"删除外键 \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"预览失败:\"],\"G8Q5Zq\":[\"命名空间为必填项\"],\"GAohqx\":[\"删除列\"],\"GJR99u\":[\"删除列失败:\"],\"GKfzzM\":[\"选择连接...\"],\"GS-Mus\":[\"导出\"],\"GUaLUq\":[\"加载模式失败:\"],\"GXP-Iw\":[\"添加 SQL 单元格\"],\"Gj1mLb\":[\"重新排序单元格\"],\"GlbqG2\":[\"重置为驱动默认\"],\"Gq1YzP\":[\"事件数\"],\"Gs5AlY\":[\"打开\"],\"GtmO8_\":[\"从\"],\"GxkJXS\":[\"上传中...\"],\"H-o4D2\":[\"创建新列\"],\"H2B-KW\":[\"选择使用 Ctrl+C / Cmd+C 复制行时的默认格式。\"],\"H3oH0g\":[\"重做\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"收起\"],\"H9P8CD\":[\"添加第一个筛选器\"],\"HAQlGl\":[\"AI 活动\"],\"HKNZrs\":[\"索引条件\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"删除 \",\"#\",\" 行\"],\"other\":[\"删除 \",\"#\",\" 行\"]}]],\"HPuCiP\":[\"文件夹路径\"],\"HUs1R3\":[\"此连接无打开的标签。\"],\"HV4Isp\":[\"输入 SSH 密码\"],\"HVC8Hh\":[\"已复制到剪贴板\"],\"HWEpq8\":[\"磁盘写入/s\"],\"HY4nP5\":[\"内联\"],\"HcmoWv\":[\"保存视图失败:\"],\"He8v1Y\":[\"从全部应用中取消选择\"],\"HehHP1\":[\"默认布局\"],\"HilYn4\":[\"此笔记本为空。添加一个单元格以开始。\"],\"HjxVK_\":[\"快速连接测试\"],\"HmMnRx\":[\"WKT 模式\"],\"HoKCiI\":[\"安装后应用将自动重启\"],\"HpK_8d\":[\"重新加载\"],\"Hpi4Jm\":[\"立即加入\"],\"HuA3RU\":[\"制表符\"],\"I128p7\":[\"管道符 (|)\"],\"I3AgqA\":[\"配置内联 SSH\"],\"I5VBsr\":[\"Same as App\"],\"I8yrPb\":[\"替换表\"],\"I92BdB\":[\"从分组中移除\"],\"I92fr4\":[\"稍后提醒我\"],\"I99Miw\":[\"成本\"],\"IETZIR\":[\"编辑单元格名称\"],\"IG9wzA\":[\"插入行失败:\"],\"ILleOG\":[\"资源类型必须为 \\\"service\\\" 或 \\\"pod\\\"\"],\"IQ3gAw\":[\"上传文件\"],\"IUwGEM\":[\"保存更改\"],\"IUwmLq\":[\"直接依赖声明于 package.json 和 src-tauri/Cargo.toml。\"],\"IVrBTT\":[\"开源库\"],\"I_43p6\":[\"安全\"],\"Iaizf4\":[\"外观\"],\"Il3FBB\":[\"切换结构化筛选面板\"],\"IniZRK\":[\"下载不可用 - 仅加载了预览\"],\"Isaozb\":[\"查看并调整\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"通过此插件的活动查询和连接将被中断。\"],\"J6v1s_\":[\"默认模型\"],\"JE-DVk\":[\"解释器\"],\"JEGlfK\":[\"开始时间\"],\"JKDPqP\":[\"请先选择上下文\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"使用 SSH 隧道\"],\"JRz8tw\":[\"MySQL 和 MariaDB 仅在支持的 EXPLAIN ANALYZE 或 ANALYZE FORMAT 变体中提供实际指标。\"],\"JUICth\":[\"PNG、JPG、WebP 或 SVG · 最大 512 KB\"],\"JY5Oyv\":[\"数据库\"],\"JlFRIB\":[\"连接建立后发送给 MySQL 的会话时区。\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"已拒绝\"],\"K3H9p5\":[\"取消设置\"],\"K5Dgu_\":[\"数据库\"],\"K8IGKf\":[\"认证类型\"],\"KAYNSW\":[\"在内存中保留的日志数量(1-10000)\"],\"KHTGbr\":[\"预先 EXPLAIN\"],\"KHvda8\":[\"非空\"],\"KJKNaZ\":[\"复制为 `列`\"],\"KM5Kc8\":[\"必须选择至少一列\"],\"KSCnVQ\":[\"类型\"],\"KUjOb9\":[\"运行中\"],\"KXBdwy\":[\"刷新存储过程\"],\"KXNyX7\":[\"设为 DEFAULT\"],\"Kd70-v\":[\"从剪贴板导入...\"],\"KhI4oS\":[\"在 \",[\"0\"],\" 中打开引用的行\"],\"KhgrNu\":[\"MCP 服务器集成\"],\"KirERL\":[\"超时\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"删除索引失败:\"],\"KzeARD\":[\"删除表失败:\"],\"L-rMC9\":[\"重置为默认\"],\"L3HXkQ\":[\"错误修复\"],\"LCZ7Dy\":[\"复制名称\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"索引\"],\"LMeAoR\":[\"行\"],\"LPCdc-\":[\"查询标签页名称提示词\"],\"LPFmga\":[\"选择用于全部应用\"],\"LYzbQ2\":[\"工具\"],\"Lbis_V\":[\"快速导航\"],\"Lcpbe2\":[\"无法启动插件进程。请参阅下面的错误详细信息。\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN 仅支持 DML 语句(SELECT、INSERT、UPDATE、DELETE)。DDL 语句(如 CREATE、DROP、ALTER)无法进行分析。\"],\"LnT0hQ\":[\"添加列\"],\"LvutiO\":[\"AI 建议\"],\"M-rHQO\":[\"退出全屏\"],\"M0XJba\":[\"确定要清除此连接的所有查询历史吗?\"],\"M1co_O\":[\"已配置\"],\"M73whl\":[\"上下文\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"显示全部\"],\"MXdOwj\":[\"分离连接\"],\"MZ4T5z\":[\"主键\"],\"MZX6eL\":[\"选择 K8s 连接\"],\"Mc1tjS\":[\"启用 ANALYZE 后可查看实际行数、耗时、循环次数和缓冲区信息。\"],\"Mm4p0T\":[\"还有 \",[\"0\"],\" 行\"],\"Mp0jQ_\":[\"此驱动程序仅在表创建时支持主键\"],\"MqpZwN\":[\"Tabularis 进程\"],\"MxIx43\":[\"↑↓ 导航,Enter 打开\"],\"MygtgQ\":[\"添加 Markdown 单元格\"],\"N40H-G\":[\"全部\"],\"N5UQxq\":[\"未在端口 \",[\"0\"],\" 上检测到 Ollama。是否正在运行?\"],\"N6GBcC\":[\"确认删除\"],\"N6aqHp\":[\"执行查询数\"],\"N9_S15\":[\"将创建一个新表\"],\"NBdMa1\":[\"最慢步骤\"],\"NC2AI2\":[\"长度\"],\"NCzNnx\":[\"升序排列\"],\"NT4Ubs\":[\"删除自定义密钥并恢复到环境变量(如果有)\"],\"NUjrCO\":[\"没有匹配的收藏\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"树总计:\",[\"0\"]],\"Nc2VQn\":[\"追加到现有表\"],\"NgFERn\":[\"添加到收藏\"],\"NktMHG\":[\"数据库名称\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"测试\"],\"Nq5QTk\":[\"explain Nth\"],\"O2STgu\":[\"导出失败:\"],\"O8SV8O\":[\"下载中...\"],\"O9_WW6\":[\"连接\"],\"OGEsKj\":[\"运行所有单元格\"],\"OGWdBg\":[\"视图名称\"],\"OHqT6w\":[\"按下组合键...\"],\"OXJsaG\":[\"参数名称无效\"],\"OfhWJH\":[\"重置\"],\"OlAl5i\":[\"Expand all\"],\"Osn70z\":[\"调试\"],\"Ou8b_n\":[\"加入 Discord\"],\"P1YGsb\":[\"SQL 生成\"],\"P2m1xb\":[\"出错时停止\"],\"P3Qlys\":[\"无连接 ID\"],\"P6Y3Yf\":[\"在终端中运行此命令,然后重启 Claude Code。\"],\"PCdj-c\":[\"取消全选\"],\"PMnFt9\":[\"磁盘读取/s\"],\"PQU2Va\":[\"Accept Suggestion with Enter\"],\"PRnH8G\":[\"共 \",[\"0\"]],\"PY8UF3\":[\"切换了并行(单元格 \",[\"n\"],\")\"],\"PiH3UR\":[\"已复制!\"],\"Pia95d\":[\"列名称是必需的\"],\"PrElXQ\":[\"更新\"],\"PrixCC\":[\"行将追加到现有表\"],\"Pujgbb\":[\"配置目标\"],\"Pw_eQV\":[\"插件启动失败\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"无已保存查询\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"无子进程\"],\"QCxMC0\":[\"应用启动时自动检查新版本\"],\"QEazml\":[\"删除所选\"],\"QHcLEN\":[\"已连接\"],\"QLHHFO\":[\"只读模式\"],\"QOvAW3\":[\"新功能\"],\"QULGRi\":[\"未找到有效查询\"],\"QZwllF\":[\"浏览...\"],\"QbkSr_\":[\"此查询无法 EXPLAIN。\"],\"QeHFYZ\":[\"EXPLAIN 失败: \",[\"0\"]],\"Qll2Tb\":[\"降序\"],\"Qoq-GP\":[\"了解更多\"],\"Qu4Hog\":[\"笔记本导入成功\"],\"R-A2Vd\":[\"无数据显示\"],\"R0Hkb2\":[\"已选择 \",[\"0\"],\" 个数据库\"],\"R1nHhB\":[\"已存在\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"转换为控制台\"],\"R9Khdg\":[\"自动\"],\"RDjuBN\":[\"设置\"],\"RF-HyV\":[\"选择您的首选语言。自动\\\"将使用您的系统语言。\"],\"RGhYAo\":[\"内存\"],\"RGpZyz\":[\"复制名称\"],\"RI-HZc\":[\"输入 \",[\"0\"],\" 密钥\"],\"RJrE17\":[\"确定要删除视图 \\\"\",[\"0\"],\"\\\" 吗?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"一个 Star 可以帮助其他人发现这个项目\"],\"Rb3Tdm\":[\"笔记本名称\"],\"RcbKJ3\":[\"更新时\"],\"RkefFq\":[\"在显示审批模态之前运行 EXPLAIN,以便用户查看执行计划。\"],\"RnF_hl\":[\"加载插件注册表...\"],\"Rns7_C\":[\"此操作无法立即撤销\"],\"RoKRqW\":[\"可用插件\"],\"RphpKk\":[\"外观\"],\"Rt8sHM\":[\"检测到排序或临时操作\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"已启用\"],\"S1veKH\":[\"还原选中\"],\"S5zeZU\":[\"切换预览\"],\"S8Yqbl\":[\"插入\"],\"SDND4q\":[\"未配置\"],\"SJRy3D\":[\"(自动生成)\"],\"SSwIjo\":[\"设为空\"],\"SgvA_r\":[\"按运行(Ctrl/Command+F5)加载表数据\"],\"SlfejT\":[\"错误\"],\"SoATkx\":[\"复制单元格\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"端点 URL\"],\"T7w5CQ\":[\"创建新行失败:\"],\"T9947j\":[\"值(例如 'text' 或 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"切换到垂直布局\"],\"TK5oex\":[\"保存提示词\"],\"TKQ7K-\":[\"安装\"],\"TKZreP\":[\"要求\"],\"TMLAx2\":[\"必需\"],\"TO08JI\":[\"外键\"],\"TVKqvO\":[\"编辑行\"],\"TYSdQ3\":[\"执行 SELECT 查询\"],\"TfDFHS\":[\"Wrap long lines in the editor instead of scrolling horizontally.\"],\"Tibfjs\":[\"没有已保存的连接 — 在下方创建一个\"],\"Tj36Dr\":[\"重置为默认\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"锁定查询\"],\"TpwXyg\":[\"如果缺少耗时信息,服务器很可能返回的是仅估算的计划。\"],\"Tw2M1h\":[\"安装失败\"],\"Ty-rm9\":[\"SSH 连接\"],\"Tz0i8g\":[\"设置\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes 连接\"],\"U4uzyV\":[\"新功能\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"当单元格失败时停止执行\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" 在 \",[\"1\"],\" 上 — 请审核后再执行。\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[[\"clientName\"],\" 的配置安装成功!重启应用以应用更改。\"],\"URmyfc\":[\"详情\"],\"UWQBvp\":[\"生成 SQL 模板\"],\"UawTKZ\":[\"可选。指定用于运行此插件的可执行文件(例如 macOS/Linux 上的 python3,Windows 上的 python 或完整路径)。留空使用默认值。\"],\"Ub8sf5\":[\"SQLite 不支持通过 ALTER TABLE 删除外键。\"],\"UbbJ8j\":[\"未找到选项\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"这些连接将拒绝来自 MCP 的写入。其他连接行为不变。\"],\"UnQNah\":[\"确定要从表 \\\"\",[\"tableName\"],\"\\\" 中删除列 \\\"\",[\"0\"],\"\\\" 吗?\\n\\n警告:这将永久删除此列中的所有数据。此操作无法撤销。\"],\"UncTTh\":[\"整个进程树的 RSS 总和 — 可能重复计算共享内存\"],\"UpjgFm\":[\"更改了参数\"],\"UsAnu1\":[\"ANALYZE 会实际执行查询。对数据修改语句请谨慎使用。\"],\"UxKoFf\":[\"导航\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tab Size\"],\"UzWGWO\":[\"切换到 SQL WHERE 输入\"],\"V-chk5\":[\"How often to check if active connections are still alive. Set to 0 to disable.\"],\"V-pw1j\":[\"表名\"],\"V2T0Uw\":[\"暂无已保存的笔记本。\"],\"V3aNwx\":[\"数据编辑器\"],\"VGYp2r\":[\"应用到全部\"],\"VH8S7x\":[\"剪贴板列\"],\"VIAEcS\":[\"加载数据库失败。请检查您的凭据。\"],\"VKdztF\":[\"追加行\"],\"VLiHXI\":[\"分析数据\"],\"VMbmXc\":[\"确定要移除 \\\"\",[\"pluginName\"],\"\\\" 吗?这将删除插件文件。\"],\"VO3weF\":[\"未加载文件\"],\"VOZlKc\":[\"导入数据库\"],\"VPzsIz\":[\"正在生成名称...\"],\"VUul0v\":[\"终止\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"所有查询\"],\"Vi2Pqx\":[\"作者\"],\"Vl2zn2\":[\"已停止\"],\"Vo4uBA\":[\"安装插件时发生错误。请参阅下面的详细信息。\"],\"VqqyOs\":[\"执行查询以查看结果\"],\"VzhDFh\":[\"通过 MCP 阻止任何非 SELECT 语句,除非连接被显式允许。\"],\"W3uwpT\":[\"关闭所有标签\"],\"W4MKLh\":[\"例如:在生产环境中风险较大,请确认…\"],\"W60eXm\":[\"表\"],\"WA8RND\":[\"确定要删除表 \\\"\",[\"0\"],\"\\\" 吗?\"],\"WG8Qgt\":[\"删除表\"],\"WLnvCZ\":[\"输入用户名\"],\"WM-__8\":[\"搜索连接...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"已将 \",\"#\",\" 行导入到 \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"已将 \",\"#\",\" 行导入到 \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"确定要删除查询 \\\"\",[\"0\"],\"\\\" 吗?\"],\"WarTN_\":[\"成功\"],\"WcF1uL\":[\"分组名称\"],\"Weq9zb\":[\"通用\"],\"WmPpB1\":[\"正在加载执行计划…\"],\"Wu7cK0\":[\"未找到数据库\"],\"WvoUQF\":[\"删除了单元格 \",[\"n\"]],\"Ww3pDD\":[\"手动命令\"],\"X-20AU\":[\"输入查询标签页名称提示词...\"],\"X-U6_w\":[\"字体\"],\"X5fs0g\":[\"创建您的第一个连接以开始使用。\"],\"X7Ayjp\":[\"密码已保存到系统密钥链\"],\"X9kySA\":[\"收藏\"],\"XJOV1Y\":[\"活动\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"查询解释\"],\"XVF2Pf\":[\"编辑模式\"],\"XW6OYF\":[\"此插件可能需要解释器(如 Python)。使用插件设置配置解释器路径。\"],\"XZB6Xr\":[\"最大日志条目数\"],\"Xcffv2\":[\"在编辑器中显示 AI 辅助和解释按钮\"],\"XeqTSh\":[\"连接类型\"],\"XmJfZT\":[\"名称\"],\"XoQfG1\":[\"SSH 用户\"],\"XwI0Vw\":[\"自动(系统)\"],\"XyDlLX\":[\"索引名称\"],\"Y2P2aK\":[\"选择要加载的模式:\"],\"Y8HYw2\":[\"值\"],\"Y8zX3R\":[\"插入到编辑器\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"搜索...\"],\"YWlnMZ\":[\"Ollama 端口\"],\"YYdC3A\":[\"版本 \",[\"0\"]],\"YYn8b5\":[\"浏览并安装注册表中的插件。\"],\"Y_3yKT\":[\"在新标签中打开\"],\"YiAQ_Q\":[\"刷新表\"],\"Ysjr9Y\":[\"SQL 预览\"],\"YswNf7\":[\"所有级别\"],\"YtNwr6\":[\"每个连接存储的查询历史最大条目数。\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"加载中...\"],\"Z7ZXbT\":[\"批准\"],\"Z8JpBH\":[\"导出为 Notebook\"],\"Z8fBIc\":[\"实际行数高于估算\"],\"ZC2VJP\":[\"执行\"],\"ZCIS4k\":[\"无激活筛选器\"],\"ZF1_UT\":[\"SSL 模式\"],\"ZGjBPa\":[\"清除日志\"],\"ZHQTlM\":[\"从以下文件导入\"],\"ZIFDoJ\":[\"请至少选择结构或数据\"],\"ZIZA6o\":[\"批准前编辑\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 条解析警告\"],\"other\":[\"#\",\" 条解析警告\"]}]],\"ZVn8p2\":[\"Display line numbers in the editor gutter.\"],\"ZYnwzF\":[\"已断开\"],\"Za3_fO\":[\"错误\"],\"ZcOxO1\":[\"创建外键\"],\"Zf7LHg\":[\"未找到上下文(是否已安装 kubectl?)\"],\"Zfotp5\":[\"估算与实际差距过大通常意味着统计信息过旧,或存在规划器难以建模的谓词。\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"加载模式失败\"],\"ZqXGPF\":[\"删除视图失败:\"],\"ZuL73E\":[\"创建新的数据库视图\"],\"_-bi4r\":[\"引用表\"],\"_AEYGI\":[\"暂无执行历史\"],\"_FdpZc\":[\"加载视图定义失败:\"],\"_FxSdi\":[\"查看应用、后端和工具链直接使用的开源依赖。\"],\"_JyTG8\":[\"输入解释提示词...\"],\"_Ltc_k\":[\"其他\"],\"_Q2Wix\":[\"行\"],\"_TK1zF\":[\"已保存的连接\"],\"_bJFBE\":[\"连接超时\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"树形\"],\"_dqduX\":[\"下一页\"],\"_fwE6J\":[\"更早\"],\"_n04sB\":[\"终止\"],\"_otxbQ\":[\"密钥文件\"],\"_pezIT\":[\"连接到 \",[\"0\"],\" 失败。请检查您的设置或确保数据库正在运行。\"],\"_srfkj\":[\"自定义密钥删除成功\"],\"_t6aFo\":[\"MySQL 和 MariaDB 会根据服务器版本回退到 EXPLAIN FORMAT=JSON 或表格版 EXPLAIN。\"],\"_xTbaM\":[\"列\"],\"_yxaaL\":[\"唯一索引\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis 是一个免费的开源项目。如果您觉得有用,请考虑支持该项目并与社区联系。\"],\"a9CASo\":[\"SQLite 仅支持重命名列。其他修改需要手动重建表。\"],\"aAIQg2\":[\"外观\"],\"aAURrV\":[\"已安装\"],\"aC_vCa\":[\"使用 AI 生成名称\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"选择节点查看详情\"],\"aHKcKc\":[\"上一页\"],\"aI-5wG\":[\"验证 CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"默认值\"],\"aScJP1\":[\"执行此查询\"],\"aVNbN8\":[\"筛选条件\"],\"aWhdMQ\":[\"使用现有 SSH 连接\"],\"aXYd8V\":[\"超时\"],\"aX_S_r\":[\"第 \",[\"0\"],\" 页,共 \",[\"totalPages\"],\" 页\"],\"agZcf8\":[\"生成的 SQL:\",[\"tableName\"]],\"ajqPzi\":[\"SELECT [字段]\"],\"alplHn\":[\"正在使用 AI 分析执行计划...\"],\"anBcU3\":[\"如果您喜欢 Tabularis 并希望看到更多功能,请考虑通过贡献代码、报告错误或 Star 项目来支持该项目。\"],\"arHmj2\":[\"确定要从历史中删除此查询吗?\"],\"arKcqW\":[\"较旧的服务器可能会回退到仅估算、指标更少的执行计划。\"],\"arcpYe\":[\"需要审批\"],\"aurEkh\":[\"加载进程中...\"],\"avtdsd\":[\"SQL 模式\"],\"az8lvo\":[\"关闭\"],\"b1Ah3z\":[\"聚焦于\"],\"b392Dr\":[\"全部展开\"],\"b5S_PU\":[\"数据库名称\"],\"bAvovP\":[\"下移\"],\"bH3JqY\":[\"未找到表\"],\"bP5JOn\":[\"Word Wrap\"],\"bcOdok\":[\"删除分组\"],\"bcqeas\":[\"将所有 MCP 查询设为只读\"],\"bmca5u\":[\"仅写入\"],\"bpCiBU\":[\"允许 MCP 写入\"],\"bqnhqW\":[\"估算高于实际行数\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"报错\"],\"bw22Gk\":[\"列结构\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"关键问题\"],\"cFCKYZ\":[\"拒绝\"],\"cFGrCP\":[\"表\"],\"cGeFup\":[\"字体大小\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"聚焦于表\"],\"cM9NHc\":[\"降级到\"],\"cO9-2L\":[\"禁用\"],\"cSev-j\":[\"筛选器\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"导入 \",\"#\",\" 行\"],\"other\":[\"导入 \",\"#\",\" 行\"]}]],\"c_xoSn\":[\"重命名了单元格 \",[\"n\"]],\"cd0XEW\":[\"保存查询\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"分割组\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" 语句\"],\"d34vwG\":[\"加载数据库\"],\"d6ynQ7\":[\"降序排列\"],\"d8_6_v\":[\"cancel\"],\"d8wc1_\":[\"示例值\"],\"dBXoCS\":[\"检测到环境变量,但您可以通过在上方设置密钥来覆盖它。\"],\"dD7NPy\":[\"大纲\"],\"dEgA5A\":[\"取消\"],\"dMtLDE\":[\"到\"],\"dPJVhW\":[\"安装失败\"],\"dQvGiF\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个会话\"]}]],\"dTUzKm\":[\"执行选中 (\",[\"0\"],\")\"],\"dU_iQN\":[\"没有会话匹配当前筛选条件。\"],\"dUh9QW\":[\"规划时间\"],\"dVoir2\":[\"添加了 Markdown 单元格 \",[\"n\"]],\"dZ0d2O\":[\"请至少选择一个表\"],\"dhi13U\":[\"选择图片…\"],\"dli1JX\":[\"提交更改\"],\"dmYV6f\":[\"存储过程\"],\"dohZCo\":[\"AI SQL 生成的指令。使用 \",[\"SCHEMA\"],\" 作为数据库结构的占位符。\"],\"dtxpK2\":[\"分析\"],\"dwW9nJ\":[\"Show Line Numbers\"],\"dwWVw_\":[\"显示欢迎屏幕\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"如果存在\"],\"dyN4j9\":[\"点击\\\"运行预览\\\"查看结果\"],\"e07Iz5\":[\"打开任务管理器\"],\"e0NzXu\":[\"此项目是正在进行的工作 (WIP)。核心功能已稳定,但我们有更大的计划。\"],\"e1UKxf\":[\"保存此查询\"],\"e34gdU\":[\"MCP 子进程等待用户决定的时间。\"],\"e62LQd\":[\"强制终止\"],\"e6QZsM\":[\"Editor Theme\"],\"e8CirT\":[\"运行查询\"],\"eD2kUP\":[\"缓冲区读取\"],\"eE0JZ4\":[\"版本\"],\"eIDch7\":[\"输入执行计划分析提示词...\"],\"eIVolo\":[\"磁盘 R/W\"],\"eJOEBy\":[\"导出中...\"],\"eKHY3W\":[\"插件设置\"],\"eMb6Ub\":[\"选择资源...\"],\"ePK91l\":[\"编辑\"],\"eXweu6\":[\"展开单元格\"],\"ecNsTE\":[\"没有匹配的查询\"],\"ecUA8p\":[\"今天\"],\"ecpIZP\":[\"如果加密请输入密钥密码\"],\"ejmeDY\":[\"已安装\"],\"esl-Tv\":[\"资源类型\"],\"exyUec\":[\"连接\"],\"f2AJjl\":[\"删除行\"],\"f4pD-j\":[\"连接测试失败\"],\"f7sXvi\":[\"输入密码\"],\"fAsxc0\":[\"顺序扫描\"],\"fIeFs0\":[\"选择值...\"],\"fJm92A\":[\"选择一个包含 EXPLAIN 计划(PostgreSQL JSON 或文本格式)的文件以进行可视化。\"],\"fOuPPd\":[\"插件\"],\"fXVIZq\":[\"数值\"],\"f_b1TA\":[\"执行历史\"],\"fghnqP\":[\"切换到连接 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"逗号 (,)\"],\"fp711N\":[\"已阻止 (只读)\"],\"fpzyLj\":[\"第 \",[\"0\"],\" 页,共 \",[\"1\"],\" 页\"],\"fuA6oy\":[\"Socket 超时\"],\"fvImQM\":[\"已选 \",[\"0\"],\" 列\"],\"fwr_nh\":[\"安装扩展、管理插件驱动,并控制运行时设置。\"],\"g0ZzK4\":[\"JSON 格式正确\"],\"g11hAR\":[\"新建行\"],\"g8VcMm\":[\"我的 K8s 集群\"],\"gCFR_O\":[\"并行执行(全部运行)\"],\"gEjU98\":[\"打开连接\"],\"gPQ8z1\":[\"可为空\"],\"gShKPx\":[\"至少需要一列\"],\"gSuQrG\":[\"无匹配 \\\"\",[\"search\"],\"\\\" 的连接\"],\"gUypqb\":[\"重新执行查询\"],\"gZWMnn\":[\"AI 分析\"],\"ghYd73\":[\"选择目标...\"],\"giAqEC\":[\"创建新表\"],\"gnQS8X\":[\"MySQL 连接器使用的最大数据包大小。\"],\"gqV5VL\":[\"内置,不可自定义\"],\"gww_XE\":[\"引用列\"],\"gxXPJ9\":[\"配置解释器\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"最大化\"],\"h-XNc9\":[\"CSV 分隔符\"],\"h-kNAk\":[\"例如:销售数据\"],\"h3Z_aK\":[\"在此编写 Markdown...\"],\"h7MgpO\":[\"键盘快捷键\"],\"h7peZQ\":[\"允许\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个系统进程正在运行\"],\"other\":[\"#\",\" 个系统进程正在运行\"]}]],\"hEZrFh\":[\"运行 SQL 文件...\"],\"hEipgW\":[\"立即检查更新\"],\"hG89Ed\":[\"图片\"],\"hIHcBE\":[\"导出为 CSV\"],\"hItdtk\":[\"浏览文件夹\"],\"hXFVjo\":[\"表名称是必需的\"],\"hZ6znB\":[\"端口\"],\"h_huI6\":[\"重新运行\"],\"hbz1rh\":[\"键\"],\"hdsaJo\":[\"导入中...\"],\"he3ygx\":[\"复制\"],\"hfGimp\":[\"选择命名空间...\"],\"hjjSEi\":[\"只读连接\"],\"hjwN_s\":[\"资源名称\"],\"hlF1mD\":[\"复制选区\"],\"hnboBb\":[\"AI 执行计划分析\"],\"hnvu2p\":[\"错误详情\"],\"hq4-D2\":[\"API 密钥安全存储在您的系统密钥链中。在此设置密钥将覆盖环境变量。\"],\"hqjXdn\":[\"删除 SSH 连接失败\"],\"hqofAK\":[\"复制 SQL\"],\"hy6L14\":[\"在 GitHub 上查看\"],\"hyjACX\":[\"折叠/展开单元格\"],\"hz1b5W\":[\"未找到匹配的元素\"],\"i1vAVM\":[\"创建新表\"],\"i3S5T3\":[\"搜索收藏...\"],\"i4_LY_\":[\"写入\"],\"i5HBWh\":[\"查询历史已重置\"],\"i5zCt4\":[\"表格\"],\"iAVlge\":[\"自定义 AI Notebook 单元格名称生成的指令。单元格内容(SQL 或 Markdown)作为用户消息发送。\"],\"iE1yAB\":[\"筛选表...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"连接\"],\"iSryJ2\":[\"我的 SSH 服务器\"],\"iT7UeX\":[\"添加索引\"],\"iUWwuR\":[\"下载并安装\"],\"ia7i08\":[\"请先选择上下文/命名空间/类型\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"已保存\"],\"igcsfY\":[\"注册表中无可用插件。\"],\"ij-Elv\":[\"图片预览\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" explainable query found\"],\"other\":[\"#\",\" explainable queries found\"]}]],\"ioL38P\":[\"实时监控插件进程、CPU、RAM 和磁盘使用情况\"],\"ixlL_e\":[\"SSH 密钥文件(可选)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"选择一个模型\"],\"j3gyYH\":[\"全部应用\"],\"j5CWO4\":[\"已是最新\"],\"j9HPuI\":[\"行 #\",[\"0\"]],\"jBtpMP\":[\"所有状态\"],\"jEu4bB\":[\"列\"],\"jEyQIs\":[\"未找到存储过程\"],\"jHc1By\":[\"删除视图\"],\"jI6sj4\":[\"与 PostgreSQL 和 MySQL 相比,成本、耗时和行数估算通常不可用。\"],\"jIxQCZ\":[\"您的平台不可用\"],\"jKIncn\":[\"数据库名称是必需的\"],\"jPSk57\":[\"理由 (可选)\"],\"jUNY_d\":[\"视图\"],\"jVqjDo\":[\"无效的笔记本文件格式\"],\"jWSZ-A\":[\"仅预览 - 未加载完整数据\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket 超时时间,单位为毫秒。\"],\"jpeU_Z\":[\"笔记本\"],\"jpgB4Y\":[\"连接名称是必需的\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"子进程\"],\"jx0t66\":[\"折叠子进程\"],\"k-0mL-\":[\"添加列\"],\"k-XiMX\":[\"原始\"],\"k2UnVy\":[\"哈希条件\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"seconds\"],\"kBiBq7\":[\"删除索引 \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"显示/隐藏图表\"],\"kI1qVD\":[\"格式化\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行 · \",[\"1\"],\"毫秒\"],\"other\":[\"#\",\" 行 · \",[\"2\"],\"毫秒\"]}]],\"kJDmsI\":[\"事件详情\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"注册表\"],\"kY-q3P\":[[\"label\"],\" 是必需的\"],\"kexIdC\":[\"使用 Kubernetes 端口转发\"],\"krksx_\":[\"成功\"],\"ktYUe9\":[\"全部执行\"],\"kwY6nh\":[\"关闭\"],\"kx0s-n\":[\"Results\"],\"kxUEfE\":[\"获取存储过程定义失败:\"],\"l2Op2p\":[\"查询参数\"],\"l9Ivba\":[\"插件进程和系统资源\"],\"lBdPxu\":[\"强调色\"],\"lCF0wC\":[\"刷新\"],\"lEQRwq\":[\"数据 (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"新表已创建\"],\"lOekZ3\":[\"切换到水平布局\"],\"lUA1C1\":[\"SSH 密钥密码(可选)\"],\"lVeG20\":[\"Rust 依赖\"],\"lXAG6D\":[\"AI 查询解释的指令。使用 \",[\"LANGUAGE\"],\" 作为输出语言的占位符。\"],\"lbbYjy\":[\"Directly edit the raw configuration file. A restart is required to apply changes.\"],\"lhKW0m\":[\"添加了 SQL 单元格 \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"结果页面大小(限制)\"],\"lkz6PL\":[\"耗时\"],\"lmVGeo\":[\"添加外键\"],\"lnnx3E\":[\"将 Tabularis 连接到 Claude Desktop、Cursor 等\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"添加\"],\"m2Q_r8\":[\"在文本列中检测 JSON\"],\"m2tskz\":[\"成功\"],\"mA-qpe\":[\"全部运行完成\"],\"mBhhbA\":[\"日志已导出到剪贴板\"],\"mCNdzH\":[\"运行单元格\"],\"mO95sp\":[\"关闭面板\"],\"mP7dLi\":[\"在上方输入字体名称\"],\"mQCWzt\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个被阻止\"]}]],\"mS74ir\":[\"保存 SSH 连接失败\"],\"mSqtw8\":[\"运行预览\"],\"mURmfQ\":[\"视图定义 (SQL)\"],\"mX_isJ\":[\"垂直\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"结构 (DDL)\"],\"mrk4Cf\":[\"按 \",[\"colName\"],\" 降序排序\"],\"msJ8t1\":[\"我们为 Tabularis 用户开设了专属社区:获取帮助、分享技巧、共建路线图。\"],\"mtvVdV\":[\"已处理行数\"],\"mx4evv\":[\"创建表\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"下载\"],\"n7JDTx\":[\"安装并启用插件以在此处查看它们\"],\"nDDJir\":[\"搜索会话、客户端、连接…\"],\"nHP-Kr\":[\"无活动会话。请选择一个连接。\"],\"nKhCjW\":[\"选择表\"],\"nNwvm4\":[\"错误\"],\"nOVim5\":[\"保存连接失败\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"事件\"],\"nf14vn\":[\"Requires extension: \",[\"0\"]],\"ngO6Pv\":[\"Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.\"],\"nhmF3p\":[\"连接\"],\"noM5A_\":[\"创建您的第一个连接\"],\"nohy4m\":[\"暂无 MCP 活动。\"],\"nr-axf\":[\"移除插件\"],\"nsPFX9\":[\"在 Visual Explain 中打开\"],\"nuBbBr\":[\"图表\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"导出数据库\"],\"o-XJ9D\":[\"更改\"],\"o21Y-P\":[\"条目\"],\"o3tP_A\":[\"删除索引\"],\"o45L8r\":[\"输入您的连接名称\"],\"o53XGh\":[\"复制选中的行\"],\"o7J4JM\":[\"过滤条件\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"级别\"],\"oGiIL7\":[\"默认提供商\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connection Lost\"],\"oJlXF2\":[\"导入笔记本\"],\"oMFv82\":[\"垂直分割\"],\"oOFiQg\":[\"限制每次查询获取的行数,以防止性能问题。设置为 0 可禁用(不推荐)。\"],\"oT9ZD3\":[\"隐藏概览\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"更改了图表(单元格 \",[\"n\"],\")\"],\"oWfclW\":[\"当未带类型的文本单元格包含 JSON 对象或数组时显示 JSON 查看器入口。每单元格会增加少量解析开销。\"],\"obpbdz\":[\"未找到配置文件(请手动创建)\"],\"odZgfC\":[\"AI 客户端\"],\"ogZhXn\":[\"选择 ER 图的默认布局方向\"],\"ohUJJM\":[\"插件\"],\"olAdaI\":[\"实际行数\"],\"olWzar\":[\"强制终止插件进程\"],\"ovBPCi\":[\"默认\"],\"owzTWN\":[\"已从提供商刷新 AI 模型\"],\"oxYi6j\":[\"调整整个应用使用的基础字体大小(10-20px)。\"],\"p--hsQ\":[\"A database connection was lost\"],\"p6NueD\":[\"新建\"],\"pOYHox\":[\"操作\"],\"pR9bTR\":[\"无 BLOB 数据\"],\"pS8S5q\":[\"例如:users, orders, products\"],\"pSws_M\":[\"表名称\"],\"pVLbKZ\":[\"视图创建成功\"],\"pWT04I\":[\"检查中...\"],\"pZJ_6D\":[\"索引名称是必需的\"],\"pddYFG\":[\"输入单元格名称提示词...\"],\"pnpyuD\":[\"启用日志\"],\"pqKMPv\":[\"创建表失败:\"],\"pqaP1h\":[\"关闭\"],\"pqarBu\":[\"升序\"],\"ptuq35\":[\"例如:微软雅黑\"],\"pzu7v4\":[\"水平\"],\"q-ch8m\":[\"其余连接保持只读。仅勾选的连接可以执行写入。\"],\"qA5jLs\":[\"错误详情\"],\"qIrtcK\":[\"更新\"],\"qOqy8G\":[\"检查配置中...\"],\"qWaVNs\":[\"Save & Restart\"],\"qb3LPX\":[\"查看 ER 图\"],\"qkK0vq\":[\"视图名称是必需的\"],\"qki9tG\":[\"错误\"],\"qoIir-\":[\"您的 OpenAI 兼容 API 的基础 URL。例如:https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Collapse all\"],\"r6ncaO\":[\"关闭标签\"],\"rAJlpP\":[\"容器端口\"],\"rG3WVm\":[\"读取\"],\"rGRCeK\":[\"清除查询历史\"],\"rNIto7\":[\"资源名称为必填项\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"笔记本导出成功\"],\"rY4sEV\":[\"删除外键\"],\"rbu0nO\":[\"管理 SSH 连接\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个连接\"],\"other\":[\"#\",\" 个连接\"]}]],\"rn2_2V\":[\"移除筛选器\"],\"roABNH\":[\"暂无查询历史\"],\"rtir7c\":[\"未知\"],\"ru0-2W\":[\"无活动连接\"],\"rvDPWO\":[\"估算偏差\"],\"rwWjWg\":[\"发布说明\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"测试连接\"],\"sBOaim\":[\"The configuration file has been saved. Restart now to apply the changes?\"],\"sCyv9B\":[\"刷新模型\"],\"sSUqe4\":[\"删除\"],\"sUBkgN\":[\"生成 SQL 中...\"],\"sZZG3d\":[\"确定要导入 \\\"\",[\"0\"],\"\\\" 吗?\\n这可能会覆盖现有数据。\"],\"sbK5ck\":[\"搜索历史...\"],\"sq_bS6\":[\"删除时\"],\"suW7-E\":[\"连接超时时间,单位为毫秒。\"],\"suqtBX\":[\"Esc 关闭\"],\"t-R8-P\":[\"执行时间\"],\"t1OfVY\":[[\"totalLibraries\"],\" 个库\"],\"t2TMzs\":[\"关闭标签\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"选择一个表...\"],\"t7KRl1\":[\"MCP 工具调用的审计日志,以及等待批准的查询。仅本地存储。\"],\"t9NJIk\":[\"检测到高扫描操作\"],\"tB7xof\":[\"临时或排序操作\"],\"tBBXTO\":[\"Ping Interval\"],\"tFrT3w\":[\"如果自动安装失败,请将此添加到您的客户端配置文件中。\"],\"tJ7UbA\":[\"explain focused\"],\"tKlWWY\":[\"表情\"],\"tMFzq-\":[\"水平分割\"],\"tQhW-D\":[\"日志设置\"],\"tT-BQX\":[\"已安装\"],\"tXFGEx\":[\"没有已保存的 Kubernetes 连接。点击“添加”创建一个。\"],\"tXLz_8\":[\"删除\"],\"tXpRby\":[\"数据网格\"],\"tbysEk\":[\"操作\"],\"tdta9X\":[\"第 \",[\"0\"],\" 页\"],\"tfDRzk\":[\"保存\"],\"tfEioV\":[\"从上到下执行所有 SQL 单元格\"],\"tiAIaJ\":[\"SSH 密码缺失。请重新输入。\"],\"tk22BR\":[\"粘贴结构化数据,导入前预览模式\"],\"tst44n\":[\"事件\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL 文件执行成功\"],\"u6QeR6\":[\"Restart Now\"],\"uAQUqI\":[\"状态\"],\"uBAxNB\":[\"编辑器\"],\"uBI8D9\":[\"按 Esc 关闭\"],\"uFViPK\":[\"无 SSH 连接可用\"],\"uHUuhp\":[\"Explain this query\"],\"uHfFzS\":[\"Editor Font Size\"],\"uJ_3K5\":[\"删除笔记本“\",[\"0\"],\"”?此操作无法撤销。\"],\"uKaNJ3\":[\"在 JSON 编辑器中打开\"],\"uQBwTo\":[\"模式\"],\"ub54ff\":[\"插件中心\"],\"ufFyBs\":[\"数据库导出成功\"],\"upNmR2\":[\"打开侧边栏编辑器\"],\"upwIY4\":[\"视图定义\"],\"utMia3\":[\"取消全选\"],\"uyNaJg\":[\"1 个元素\"],\"v61dnS\":[\"输入您的 OpenAI 兼容提供商的确切模型名称。\"],\"v6oeyr\":[\"已安装\"],\"v75DGg\":[\"浏览文件\"],\"v99dO4\":[\"主键\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"找到 \",\"#\",\" 个查询\"],\"other\":[\"找到 \",\"#\",\" 个查询\"]}]],\"vCSBPD\":[\"添加筛选器\"],\"vH7uJj\":[\"排序方式…\"],\"vUOA1-\":[\"搜索模型...\"],\"vWcB0p\":[\"PostgreSQL 的 ANALYZE 会在可用时包含实际行数、耗时、循环次数和缓冲区计数。\"],\"vXIe7J\":[\"语言\"],\"vYf4Jm\":[\"输入完整的 SQL 函数(例如 ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"首选\"],\"vditm4\":[\"执行计划\"],\"vks_ls\":[\"关闭其他标签\"],\"vnAnIp\":[\"在 \",[\"1\"],\" 中未找到模型 \",[\"0\"],\"。它可能无法正常工作。\"],\"vqoN5u\":[\"结构\"],\"vrAvbP\":[\"确定要删除分组 \\\"\",[\"0\"],\"\\\" 吗?此分组中的连接将移至未分组。\"],\"vtJ2yO\":[\"浏览器\"],\"vujQJ5\":[\"本地化\"],\"vvJPVL\":[\"显示概览\"],\"vwI5S4\":[\"成功\"],\"vzH-7Z\":[\"解释\"],\"w7QmD_\":[\"输入系统提示词...\"],\"w9eMXw\":[\"触发器\"],\"wCJFlW\":[\"已用时间\"],\"wCfv2R\":[\"添加连接\"],\"wGfc86\":[\"清除所有历史\"],\"wGwNv4\":[\"当前数据库\"],\"wJJ-Wy\":[\"安装中...\"],\"wMe2Qp\":[\"命名空间\"],\"wQiel_\":[\"缓冲区命中\"],\"wQn-RM\":[\"添加列\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"已应用\"],\"wTmVhm\":[\"删除\"],\"wZeIWq\":[\"从剪贴板导入\"],\"w_bY7R\":[\"日志\"],\"wc_8bA\":[\"待审批\"],\"wckWOP\":[\"管理\"],\"wdYcKH\":[\"打开的标签\"],\"wja8aL\":[\"未命名\"],\"wkOAzk\":[\"没有匹配的笔记本。\"],\"wp49Ao\":[\"处理插入失败:\"],\"wqG2hQ\":[\"跳过(不导入)\"],\"wwrAsK\":[\"请填写所有必需字段\"],\"wwu18a\":[\"图标\"],\"x2fr_j\":[\"图形\"],\"xANKBj\":[\"函数\"],\"xBwjck\":[\"A restart is required to apply changes.\"],\"xDAtGP\":[\"消息\"],\"xECY01\":[\"存储过程\"],\"xGPNgZ\":[\"提示词自定义\"],\"xNgtS-\":[\"未找到视图\"],\"xOPa1b\":[\"端口必须介于 1 和 65535 之间\"],\"xY9s5E\":[\"超时\"],\"xaVUr1\":[\"The quick brown fox jumps over the lazy dog\"],\"xbvTzL\":[\"文件路径\"],\"xlew5F\":[\"清空\"],\"xmNyKz\":[\"测试中...\"],\"xtuh6D\":[\"展开浏览器\"],\"y-Zdqj\":[\"选择上下文...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"打开 JSON 查看器\"],\"yQXjG5\":[\"取消全选\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"昨天\"],\"ygCKqB\":[\"停止\"],\"ykCc6r\":[\"更改了数据库(单元格 \",[\"n\"],\")\"],\"ynVMSc\":[\"全选\"],\"ytdz1d\":[\"AI 请求执行数据库写入\"],\"yyhzur\":[\"创建表\"],\"yz7wBu\":[\"关闭\"],\"z0VdfR\":[\"例程\"],\"z407wX\":[\"SSH 密码\"],\"z4oF5T\":[\"导出数据库\"],\"z5kV0h\":[\"连接\"],\"zBTMzx\":[\"预览\"],\"zCaAKs\":[\"更新错误\"],\"zDAakK\":[\"无法在没有连接 ID 的情况下显示图表。\"],\"zGe21h\":[\"此密钥从环境变量加载\"],\"zGfL5t\":[\"值\"],\"zL6-4A\":[\"无插件进程在运行\"],\"zLZhCi\":[\"全新的 Discord 社区!\"],\"zLlCou\":[\"复制列名\"],\"zNEL34\":[\"加入社区\"],\"zNgTlV\":[\"关闭右侧标签\"],\"zQz55p\":[\"查看结构\"],\"zR0FfH\":[\"已导出到 \",[\"target\"]],\"zRZeOc\":[\"搜索表、视图、例程、触发器...\"],\"zUNMsr\":[\"SSH 密钥\"],\"zXMRzb\":[\"SSH 端口\"],\"zZgoXr\":[\"无匹配的表\"],\"zaWbms\":[\"回滚更改\"],\"zgClmU\":[\"安装配置\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"输入值...\"],\"zvzN4C\":[\"设为激活\"],\"zzDlyQ\":[\"成功\"],\"zzMxrp\":[\"Edit config.json\"],\"zz_Wd_\":[\"模式\"]}")as Messages; \ No newline at end of file diff --git a/src/pages/Connections.tsx b/src/pages/Connections.tsx index 33cfb18c..26a4ad27 100644 --- a/src/pages/Connections.tsx +++ b/src/pages/Connections.tsx @@ -164,7 +164,7 @@ export const Connections = () => { const handleExport = async () => { setConfirmModal({ - title: t({ message: "Export Connections", context: "connections" }), + title: t({ message: "Export Connections", context: "connections.exportTitle" }), message: t`The exported file will contain your database and SSH passwords in plaintext. Please store it securely.`, confirmLabel: t`Save`, variant: "warning", @@ -657,7 +657,7 @@ export const Connections = () => { From 6bdc0130a757244d2fc87985cf5f4ad9de20cede Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 13:11:19 +0200 Subject: [PATCH 18/22] chore(i18n): tolgee push format PO_ICU for source-text reimport Task 6 (Tolgee clear + reimport, project 32587): backed up the old project (~/tolgee-backup-32587-pre-reimport-2026-06-19.zip), deleted all 1343 old namespaced keys, imported the 1205 source-text PO catalogs. Per-language counts match the backfill (en 1205; fr/de 1129; ru 1152; ja 1154; zh 1088; es 1102; it 1122). CDN content-delivery switched to messageFormat ICU and republished at the same URL so served placeholders/plurals match Lingui. .tolgeerc format PO -> PO_ICU (the CLI's enum value for ICU PO). --- .tolgeerc.json | 46 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/.tolgeerc.json b/.tolgeerc.json index a4606f7b..35a3686e 100644 --- a/.tolgeerc.json +++ b/.tolgeerc.json @@ -1,18 +1,44 @@ { "$schema": "https://docs.tolgee.io/cli-schema.json", "apiUrl": "https://app.tolgee.io", - "format": "PO", - "patterns": ["./src/**/*.ts?(x)"], + "format": "PO_ICU", + "patterns": [ + "./src/**/*.ts?(x)" + ], "push": { "files": [ - { "path": "src/locales/en/messages.po", "language": "en" }, - { "path": "src/locales/de/messages.po", "language": "de" }, - { "path": "src/locales/es/messages.po", "language": "es" }, - { "path": "src/locales/fr/messages.po", "language": "fr" }, - { "path": "src/locales/it/messages.po", "language": "it" }, - { "path": "src/locales/ja/messages.po", "language": "ja" }, - { "path": "src/locales/ru/messages.po", "language": "ru" }, - { "path": "src/locales/zh/messages.po", "language": "zh" } + { + "path": "src/locales/en/messages.po", + "language": "en" + }, + { + "path": "src/locales/de/messages.po", + "language": "de" + }, + { + "path": "src/locales/es/messages.po", + "language": "es" + }, + { + "path": "src/locales/fr/messages.po", + "language": "fr" + }, + { + "path": "src/locales/it/messages.po", + "language": "it" + }, + { + "path": "src/locales/ja/messages.po", + "language": "ja" + }, + { + "path": "src/locales/ru/messages.po", + "language": "ru" + }, + { + "path": "src/locales/zh/messages.po", + "language": "zh" + } ], "forceMode": "OVERRIDE" } From 8d07bd1228729ab831ce8b893798e796a1b1ccc6 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Fri, 19 Jun 2026 18:58:20 +0200 Subject: [PATCH 19/22] =?UTF-8?q?feat(i18n):=20phase-2=20runtime=20OTA=20?= =?UTF-8?q?=E2=80=94=20overlay=20Tolgee=20CDN=20PO=20at=20runtime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/i18n/ota.ts: refreshFromCdn(locale) fetches the Tolgee CDN .po, maps each entry to its runtime id via generateMessageId(msgid, msgctxt) (bridge verified for plain + context + plural ids), and i18n.load()s the overlay on top of the bundled compiled catalog (Lingui load merges), then re-activates so consumers re-render. Offline / not-yet-published / untranslated entries are skipped (bundled value stays). Plurals are intentionally NOT overlaid: the CDN serializes them as gettext msgstr[n] whose per-locale CLDR reconstruction is brittle; the build-time bundled catalog already carries correct plurals, so plurals update with releases. main.tsx kicks an initial refresh after activate (non-blocking) and a self-rescheduling poll that re-reads the enabled flag + interval each tick. LocalizationTab gains a 'Translation updates' toggle (default on) + interval (default 15 min), persisted to localStorage. pofile promoted to a runtime dep. Unit tests cover overlay, context-split isolation, plural/untranslated skip, and offline/non-ok no-ops. Build + 2587 tests green. --- package.json | 2 +- pnpm-lock.yaml | 6 +- src/components/settings/LocalizationTab.tsx | 51 +++++++++++- src/i18n/ota.ts | 91 +++++++++++++++++++++ src/locales/de/messages.po | 36 ++++++-- src/locales/de/messages.ts | 2 +- src/locales/en/messages.po | 24 ++++++ src/locales/en/messages.ts | 2 +- src/locales/es/messages.po | 36 ++++++-- src/locales/es/messages.ts | 2 +- src/locales/fr/messages.po | 36 ++++++-- src/locales/fr/messages.ts | 2 +- src/locales/it/messages.po | 36 ++++++-- src/locales/it/messages.ts | 2 +- src/locales/ja/messages.po | 36 ++++++-- src/locales/ja/messages.ts | 2 +- src/locales/ru/messages.po | 36 ++++++-- src/locales/ru/messages.ts | 2 +- src/locales/zh/messages.po | 36 ++++++-- src/locales/zh/messages.ts | 2 +- src/main.tsx | 16 +++- tests/i18n/ota.test.ts | 74 +++++++++++++++++ 22 files changed, 461 insertions(+), 71 deletions(-) create mode 100644 src/i18n/ota.ts create mode 100644 tests/i18n/ota.test.ts diff --git a/package.json b/package.json index 94e21506..7e3dfeea 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "json-edit-react": "^1.29.1", "lucide-react": "^0.563.0", "monaco-editor": "^0.55.1", + "pofile": "^1.1.4", "process": "^0.11.10", "react": "^19.2.4", "react-colorful": "^5.7.0", @@ -86,7 +87,6 @@ "eslint-plugin-react-refresh": "^0.4.26", "globals": "^16.5.0", "jsdom": "^28.1.0", - "pofile": "^1.1.4", "postcss": "^8.5.8", "tailwindcss": "^4.2.2", "ts-morph": "^28.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2827ae2e..2ab2c094 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,6 +77,9 @@ importers: monaco-editor: specifier: ^0.55.1 version: 0.55.1 + pofile: + specifier: ^1.1.4 + version: 1.1.4 process: specifier: ^0.11.10 version: 0.11.10 @@ -168,9 +171,6 @@ importers: jsdom: specifier: ^28.1.0 version: 28.1.0 - pofile: - specifier: ^1.1.4 - version: 1.1.4 postcss: specifier: ^8.5.8 version: 8.5.8 diff --git a/src/components/settings/LocalizationTab.tsx b/src/components/settings/LocalizationTab.tsx index 92357e01..d90f8950 100644 --- a/src/components/settings/LocalizationTab.tsx +++ b/src/components/settings/LocalizationTab.tsx @@ -1,8 +1,20 @@ -import { useMemo } from "react"; +import { useMemo, useState } from "react"; import { useLingui } from "@lingui/react/macro"; import { useSettings } from "../../hooks/useSettings"; import { SUPPORTED_LANGUAGES, type AppLanguage } from "../../i18n/lingui"; -import { SettingSection, SettingRow, SettingButtonGroup } from "./SettingControls"; +import { + isOtaEnabled, + setOtaEnabled, + getOtaIntervalMinutes, + setOtaIntervalMinutes, +} from "../../i18n/ota"; +import { + SettingSection, + SettingRow, + SettingButtonGroup, + SettingToggle, + SettingNumberInput, +} from "./SettingControls"; import { Select } from "../ui/Select"; /** All IANA timezone names supported by the runtime, or [] if unavailable. */ @@ -33,6 +45,8 @@ function zoneOffset(zone: string, at: Date): string { export function LocalizationTab() { const { t } = useLingui(); const { settings, updateSetting } = useSettings(); + const [otaEnabled, setOtaEnabledState] = useState(() => isOtaEnabled()); + const [otaInterval, setOtaIntervalState] = useState(() => getOtaIntervalMinutes()); const options: Array<{ value: AppLanguage; label: string }> = [ { value: "auto", label: t`Auto (System)` }, @@ -88,6 +102,39 @@ export function LocalizationTab() { /> + + + { + setOtaEnabled(v); + setOtaEnabledState(v); + }} + /> + + {otaEnabled && ( + + { + const minutes = Math.max(1, v); + setOtaIntervalMinutes(minutes); + setOtaIntervalState(minutes); + }} + /> + + )} + ); } diff --git a/src/i18n/ota.ts b/src/i18n/ota.ts new file mode 100644 index 00000000..c64fad73 --- /dev/null +++ b/src/i18n/ota.ts @@ -0,0 +1,91 @@ +import PO from "pofile"; +import { generateMessageId } from "@lingui/message-utils/generateMessageId"; +import { i18n } from "./lingui"; + +// Tolgee Content Delivery (public CDN, no auth) — serves /.po (ICU). +const CDN = "https://cdn.tolg.ee/04ebb496deb39eaaf4703e8565ff6e62"; + +const OTA_ENABLED_KEY = "tabularis.i18n.otaEnabled"; +const OTA_INTERVAL_MIN_KEY = "tabularis.i18n.otaIntervalMinutes"; +const DEFAULT_INTERVAL_MIN = 15; + +/** OTA is opt-out: enabled unless the user explicitly turned it off ("0"). */ +export function isOtaEnabled(): boolean { + try { + return localStorage.getItem(OTA_ENABLED_KEY) !== "0"; + } catch { + return true; + } +} + +export function setOtaEnabled(enabled: boolean): void { + try { + localStorage.setItem(OTA_ENABLED_KEY, enabled ? "1" : "0"); + } catch { + // no-op — OTA just stays at its default if storage is unavailable. + } +} + +export function getOtaIntervalMinutes(): number { + try { + const raw = Number(localStorage.getItem(OTA_INTERVAL_MIN_KEY)); + if (Number.isFinite(raw) && raw >= 1) return raw; + } catch { + // fall through to default + } + return DEFAULT_INTERVAL_MIN; +} + +export function setOtaIntervalMinutes(minutes: number): void { + try { + localStorage.setItem(OTA_INTERVAL_MIN_KEY, String(minutes)); + } catch { + // no-op + } +} + +/** + * Overlay the latest Tolgee CDN translations onto the active Lingui catalog. + * + * The bundled compiled catalogs are the offline/instant base; this merges CDN + * updates on top (Lingui's `load` is a merge), so a translation edited in Tolgee + * shows up without a rebuild. Offline / not-yet-published / untranslated entries + * are skipped, leaving the bundled value in place. + * + * Plural entries are intentionally NOT overlaid: the CDN serializes them as + * gettext `msgstr[n]`, whose per-locale CLDR-category reconstruction is brittle, + * and the bundled (build-time) catalog already carries correct plurals. Plurals + * therefore update with releases, not OTA. + */ +export async function refreshFromCdn(locale: string): Promise { + let text: string; + try { + const res = await fetch(`${CDN}/${locale}.po`, { cache: "no-cache" }); + if (!res.ok) return; + text = await res.text(); + } catch { + return; // offline — keep the bundled catalog + } + + let parsed; + try { + parsed = PO.parse(text); + } catch { + return; // malformed payload — keep the bundled catalog + } + + const messages: Record = {}; + for (const item of parsed.items) { + if (!item.msgid || item.obsolete) continue; + if (item.msgid_plural || item.msgstr.length > 1) continue; // plural -> bundled + const value = item.msgstr[0]; + if (!value) continue; // untranslated -> keep bundled fallback + // The runtime id is the hash of (source msgid, context) — matches the + // compiled catalog, verified for plain + context entries in the spike. + messages[generateMessageId(item.msgid, item.msgctxt ?? "")] = value; + } + + if (Object.keys(messages).length === 0) return; + i18n.load(locale, messages); + i18n.activate(locale); // re-activate so /useLingui consumers re-render +} diff --git a/src/locales/de/messages.po b/src/locales/de/messages.po index 1dfb67ef..7b8f017d 100644 --- a/src/locales/de/messages.po +++ b/src/locales/de/messages.po @@ -500,12 +500,10 @@ msgstr "Möchtest du den gesamten Abfrageverlauf für diese Verbindung wirklich #. placeholder {0}: column.name #: src/components/layout/sidebar/SidebarColumnItem.tsx -msgid "" -"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +msgid "Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" "\n" "WARNING: This will permanently delete all data in this column. This action cannot be undone." -msgstr "" -"Möchtest du die Spalte \"{0}\" aus der Tabelle \"{tableName}\" wirklich löschen?\n" +msgstr "Möchtest du die Spalte \"{0}\" aus der Tabelle \"{tableName}\" wirklich löschen?\n" "\n" "WARNUNG: Dadurch werden alle Daten in dieser Spalte dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden." @@ -548,11 +546,9 @@ msgstr "Möchtest du die Ansicht \"{0}\" wirklich löschen?" #. placeholder {0}: file.split(/[\\/]/).pop() #: src/components/layout/ExplorerSidebar.tsx -msgid "" -"Are you sure you want to import \"{0}\"?\n" +msgid "Are you sure you want to import \"{0}\"?\n" "This may overwrite existing data." -msgstr "" -"Möchtest du \"{0}\" wirklich importieren?\n" +msgstr "Möchtest du \"{0}\" wirklich importieren?\n" "Dadurch können vorhandene Daten überschrieben werden." #: src/components/modals/ViewEditorModal.tsx @@ -601,6 +597,10 @@ msgstr "Auto Increment" msgid "Auto paginated" msgstr "Automatisch paginiert" +#: src/components/settings/LocalizationTab.tsx +msgid "Automatic updates" +msgstr "" + #: src/components/settings/InfoTab.tsx msgid "Automatically check for new versions when the app launches" msgstr "Automatisch nach neuen Versionen suchen, wenn die App gestartet wird" @@ -746,6 +746,10 @@ msgstr "Jetzt nach Updates suchen" msgid "Check for updates on startup" msgstr "Beim Start nach Updates suchen" +#: src/components/settings/LocalizationTab.tsx +msgid "Check interval" +msgstr "" + #: src/components/modals/McpModal.tsx #: src/pages/McpPage.tsx msgid "Checking configuration..." @@ -2297,6 +2301,10 @@ msgstr "Fehlgeschlagen: " msgid "Favorites" msgstr "Favoriten" +#: src/components/settings/LocalizationTab.tsx +msgid "Fetch the latest translations from the cloud without waiting for an app update." +msgstr "" + #: src/components/modals/NewConnectionModal.tsx msgid "File Path" msgstr "Dateipfad" @@ -2520,6 +2528,10 @@ msgstr "Wie lange gewartet wird, bevor abgebrochen wird." msgid "How many logs to keep in memory (1-10000)" msgstr "Wie viele Logs im Speicher behalten werden sollen (1-10000)" +#: src/components/settings/LocalizationTab.tsx +msgid "How often to check for new translations." +msgstr "" + #: src/components/settings/GeneralTab.tsx msgid "How often to check if active connections are still alive. Set to 0 to disable." msgstr "Wie oft geprüft werden soll, ob aktive Verbindungen noch erreichbar sind. Setze 0, um die Prüfung zu deaktivieren." @@ -2971,6 +2983,10 @@ msgstr "Nachricht" msgid "Minimize" msgstr "Minimieren" +#: src/components/settings/LocalizationTab.tsx +msgid "minutes" +msgstr "" + #: src/components/modals/ClipboardImport/SchemaEditor.tsx msgid "Mixed types detected, defaulted to TEXT" msgstr "Gemischte Typen erkannt, Standard TEXT" @@ -5022,6 +5038,10 @@ msgstr "Wichtigste Probleme" msgid "Total Cost" msgstr "Gesamtkosten" +#: src/components/settings/LocalizationTab.tsx +msgid "Translation updates" +msgstr "" + #: src/components/ui/JsonInput.tsx msgid "Tree" msgstr "Baum" diff --git a/src/locales/de/messages.ts b/src/locales/de/messages.ts index 0ae804ab..698b86af 100644 --- a/src/locales/de/messages.ts +++ b/src/locales/de/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Maximale Verlaufseinträge\"],\"-6AWa-\":[\"Verbindungen importieren\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Trennen\"],\"-PLZfh\":[\"Aktualisierung der Modelle fehlgeschlagen\"],\"-T5W2e\":[\"Treiberhinweise\"],\"-ZgeeE\":[\"Bearbeitungsverlauf\"],\"-aYrdc\":[\"Version \",[\"0\"],\" ist verfügbar\"],\"-fBGXl\":[\"Höchste Kosten\"],\"-jIQDz\":[\"Zelle einklappen\"],\"-u1eRo\":[\"Keine Datenbank\"],\"-yoeVU\":[\"Schema wird geladen...\"],\"-zy2Nq\":[\"Typ\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"Freigabe-ID\"],\"0E5-gF\":[\"Möchtest du diese Verbindung wirklich löschen?\"],\"0HCubq\":[\"Vergrößern\"],\"0Kmdvy\":[\"Benutzerdefinierte Schrift\"],\"0Nj13E\":[\"SQL generieren\"],\"0ROgz5\":[\"JSON eingeben...\"],\"0SY9sU\":[\"Trennen von der Datenbank fehlgeschlagen\"],\"0b3kL9\":[\"Datenbank auswählen\"],\"0caMy7\":[\"Verlauf\"],\"0mx5ow\":[\"Abfrage\"],\"0n9BtL\":[\"Vorschau\"],\"0pHB9N\":[\"Als table.column kopieren\"],\"0sQzZK\":[\"Datenbanken filtern...\"],\"0uPP9X\":[\"FK-Name (optional)\"],\"0wxuek\":[\"Aktuelle Version\"],\"0x09Aw\":[\"Bei Fehler stoppen umgeschaltet\"],\"0yBP6v\":[\"Entwicklung unterstützen\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen\"],\"other\":[\"#\",\" Zeilen\"]}]],\"0yVAoD\":[\"Zeilen zählen\"],\"0zxJ87\":[\"Keine Logs verfügbar\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Ansicht bearbeiten\"],\"11fGJ6\":[\"Abfragen\"],\"13hIUA\":[[\"0\"],\" API-Schlüssel\"],\"14qNWF\":[\"SSH-Verbindung auswählen\"],\"17qHRP\":[\"Neue Verbindung\"],\"1Dn6bg\":[\"Aus Zwischenablage importieren\"],\"1Dnd0I\":[\"Zeilenanzahl laden\"],\"1FjTLW\":[\"z. B. python3\"],\"1GOvbo\":[\"Ollama verbunden (\",[\"0\"],\" Modelle gefunden)\"],\"1I6UoR\":[\"Ansichten\"],\"1U7hS5\":[\"Länge\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Editor-Schriftfamilie\"],\"1ekzlY\":[\"Plugin-Prozesse\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Themaauswahl\"],\"1xVZkL\":[\"Keine Modelle gefunden\"],\"26Joci\":[[\"0\"],\" Zeilen abgerufen\"],\"2Bf-Qe\":[\"Neue Konsole\"],\"2CrSmP\":[\"Hilf tabularis zu wachsen\"],\"2D9F8_\":[\"Duplizieren der Verbindung fehlgeschlagen\"],\"2Eoi_a\":[\"Details anzeigen\"],\"2F4pE5\":[\"Rust-Build und Tests\"],\"2Fsd9r\":[\"Diesen Monat\"],\"2JzKXI\":[\"GENERATED setzen\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Alle auswählen\"],\"2SO5RM\":[\"Kubernetes ist für diesen Treiber nicht verfügbar.\"],\"2Uh5GA\":[\"Cargo-Ökosystem\"],\"2YylFp\":[\"Neue visuelle Abfrage\"],\"2luuSG\":[\"Erneut versuchen\"],\"2wxgft\":[\"Umbenennen\"],\"2yG2GC\":[\"Pausiert Schreibvorgänge (oder jede Abfrage) und fragt den Nutzer vor der Ausführung.\"],\"30-b5r\":[\"Löschen\"],\"31kwdN\":[\"Filter duplizieren\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Alle Tools\"],\"3Am5DS\":[\"Tab-Ansicht\"],\"3FVg9_\":[\"Lokale Spalte\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Ausführen\"],\"3L0HCz\":[\"Keine Plugins entsprechen der Suche.\"],\"3Nv3JV\":[\"Abfrage wird ausgeführt...\"],\"3TSz9S\":[\"Minimieren\"],\"3UW8fG\":[\"Updates werden von \",[\"0\"],\" verwaltet\"],\"3YvS-c\":[\"Neuer Tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook-Zellnamen-Prompt\"],\"3qkggm\":[\"Vollbild\"],\"3rBJ1T\":[\"Schema anzeigen\"],\"3xZ-xV\":[\"Aktuellen Zeitstempel einfügen\"],\"40Gx0U\":[\"Zeitzone\"],\"41GP4f\":[\"Wähle das Standard-Trennzeichen für das Kopieren oder Exportieren von Zeilen als CSV.\"],\"42iaEi\":[\"PostgreSQL ohne ANALYZE zeigt nur Schätzungen des Planners.\"],\"44cXI8\":[\"Nach \",[\"colName\"],\" ASC sortieren\"],\"4AF7FO\":[\"Datenbanken verwalten\"],\"4CK17g\":[\"Möchtest du die Ansicht \\\"\",[\"name\"],\"\\\" wirklich ändern?\"],\"4DDaw-\":[\"Wähle mindestens eine Datenbank aus\"],\"4D_Nvt\":[\"Erstellen der Gruppe fehlgeschlagen\"],\"4RiR6c\":[\"Als HTML exportieren\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Kindprozess\"],\"other\":[\"#\",\" Kindprozesse\"]}]],\"4VyuY3\":[\"Möchtest du wirklich alle Logs löschen?\"],\"4WWqS3\":[\"JSON-Baum ein-/ausklappen\"],\"4XAQdl\":[\"Index erstellen\"],\"4cEClj\":[\"Sitzungen\"],\"4cmfYp\":[\"Zeile duplizieren\"],\"4hsr6d\":[\"Ansicht erstellen\"],\"4lIZTB\":[\"Frontend-Entwicklungsabhängigkeiten\"],\"4oYjvJ\":[\"In Abfrage suchen…\"],\"4tMxW4\":[\"Verknüpften Datensatz anzeigen\"],\"4yJcjm\":[\"Typ auswählen...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Filterpanel schließen (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Semikolon (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Ereignis\"],\"other\":[\"#\",\" Ereignisse\"]}]],\"5I2fxu\":[\"/pfad/zu/id_rsa\"],\"5NZpX8\":[\"Listenansicht\"],\"5To6Z6\":[\"Abfrage kopieren\"],\"5gqNQl\":[\"Rasteransicht\"],\"5igIzr\":[\"Import abgebrochen\"],\"5nTIup\":[\"Ansicht wird bearbeitet: \",[\"name\"]],\"5qIe8E\":[\"Alle ausführen\"],\"66bEht\":[\"Projektstatus\"],\"6PIJVc\":[\"Start\"],\"6QvP0l\":[\"Als JSON exportieren\"],\"6W41Xq\":[\"Task-Manager\"],\"6WngBH\":[\"NULL setzen\"],\"6YtxFj\":[\"Name\"],\"6_dCYd\":[\"Übersicht\"],\"6dOBsk\":[\"Ansicht erstellen\"],\"6gvoHP\":[\"Fehlermeldung kopieren\"],\"6oCVzX\":[\"Der Kubernetes-Kontext ist erforderlich\"],\"6wQO0f\":[\"Daten anzeigen\"],\"6z9W13\":[\"Neu starten\"],\"71agNy\":[\"Namen für unbenannte Zellen mit KI generieren\"],\"74J3FG\":[\"Erste Version\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Verstanden\"],\"77nSMU\":[\"Den gesamten KI-Aktivitätsverlauf löschen? Unwiderruflich.\"],\"7ABmyQ\":[\"Erneut versuchen\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" von \",[\"0\"],\" aktiv\"],\"7E864M\":[\"Datenbanktyp\"],\"7FqaG1\":[\"Passe die Anweisungen für die KI-Analyse von EXPLAIN-Abfrageplänen an. Verwende \",[\"LANGUAGE\"],\" für die Ausgabesprache.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Gemischte Typen erkannt, Standard TEXT\"],\"7RSQQd\":[\"Passwörter im Keychain speichern\"],\"7VpPHA\":[\"Bestätigen\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fehlgeschlagen\"],\"7sMeHQ\":[\"Schlüssel\"],\"7sNhEz\":[\"Benutzername\"],\"7tATh2\":[\"Abfrage ausführen\"],\"7yb4gk\":[\"Fehlgeschlagen: \"],\"8-4V8D\":[\"Tabellen\"],\"82G-l5\":[\"Das Model Context Protocol (MCP) ermöglicht KI-Assistenten (wie Claude), sich mit deinen lokalen Tools zu verbinden. Tabularis stellt einen MCP-Server bereit, über den KI dein Datenbankschema lesen und Abfragen sicher ausführen kann.\"],\"83VjWE\":[\"Neues Notebook\"],\"86IgoU\":[\"Abfrage ausführen (im Editor)\"],\"86fCgf\":[\"Passe die Anweisungen für die KI-Namensgenerierung von Abfrage-Ergebnis-Tabs an. Die SQL-Abfrage wird als Benutzernachricht gesendet.\"],\"87a_t_\":[\"Beschriftung\"],\"87kWsr\":[\"Verbindungen exportieren\"],\"8CWirf\":[\"MCP-Server\"],\"8S8aIX\":[\"Verbindungszustandsprüfung\"],\"8TMaZI\":[\"Zeitstempel\"],\"8Tg_JR\":[\"Benutzerdefiniert\"],\"8UFKYr\":[\"Abfrage zum Ausführen auswählen\"],\"8VKSGV\":[\"SQL generieren\"],\"8Wjy6z\":[\"Tabs links schließen\"],\"8ZsakT\":[\"Passwort\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL-Editor\"],\"8bRgTe\":[\"KI-Anbieter nicht konfiguriert. Bitte gehe zu Einstellungen > KI.\"],\"8c_W0h\":[\"Ältere Versionen\"],\"8guEQP\":[\"Ansichten aktualisieren\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN ist leichtgewichtig und hauptsächlich strukturell.\"],\"8q_sOc\":[\"Entfernen\"],\"8t-akp\":[\"erste \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Verbindungsname\"],\"91gnWY\":[\"Logs exportieren\"],\"91rtHL\":[\"Neue Ansicht erstellen\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Neue Gruppe\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Ansicht erfolgreich aktualisiert\"],\"9NzDFn\":[\"Willkommensbildschirm beim Start der Anwendung anzeigen.\"],\"9OoUS3\":[\"Neue SSH-Verbindung erstellen\"],\"9QGRD5\":[\"Zielspalte\"],\"9QTny9\":[\"Abfrage fehlgeschlagen.\"],\"9S-fyV\":[\"Vorab-Ausführungsplan\"],\"9SJ_Sx\":[\"Systemressourcen\"],\"9UQ730\":[\"Klonen\"],\"9X6cky\":[\"NEIN\"],\"9XUV5V\":[\"Keine Daten in der Zwischenablage\"],\"9hGjL2\":[\"Index erstellen\"],\"9mMU1R\":[\"Zeit\"],\"9mvFo_\":[\"Zeit\"],\"9npOH9\":[\"Datei öffnen\"],\"9uI_rE\":[\"Rückgängig\"],\"9xUjzm\":[\"Alle auswählen\"],\"9y_02p\":[\"Mit der Community chatten, Hilfe bekommen, Features vorschlagen\"],\"A1pPcI\":[\"SSH-Host\"],\"A1taO8\":[\"Suchen\"],\"A6C0pv\":[\"Gesamtkosten\"],\"A7WG0p\":[\"Plugin deaktiviert\"],\"A7yRz3\":[\"Ansichtsdefinition ist erforderlich\"],\"A9Uyp6\":[\"Import fehlgeschlagen: \"],\"ABEd-z\":[\"Verwende deinen Paketmanager, um Tabularis zu aktualisieren.\"],\"AMdgKV\":[\"Prompt für Explain-Plan-Analyse\"],\"ANSTMe\":[\"In der aktuellen Planzusammenfassung wurden keine größeren Probleme erkannt.\"],\"ANzIr7\":[\"Abfrageverlauf\"],\"AOnaU7\":[\"übersprungen\"],\"AVlZoM\":[\"Umgebung\"],\"AXTVsE\":[\"Vollständig prüfen\"],\"AXdRYR\":[\"Aktuelle Logs\"],\"Aa-YkQ\":[\"Notebook exportieren\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Nach Level filtern\"],\"AlPiMN\":[\"Klicken, um zur Seite zu springen\"],\"An-1rA\":[\"Zeilen zurück\"],\"AnV8j-\":[\"Spalte ändern\"],\"AvEr_L\":[\"Neue Konsole\"],\"AvYbUL\":[\"Auf GitHub mit Stern markieren\"],\"Aw_eOs\":[\"Erfordert Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Keine Ergebnisse gefunden\"],\"B0mJGb\":[\"Rohausgabe\"],\"B1c58n\":[\"Spalte ändern\"],\"B3toQF\":[\"Objekte\"],\"B5nKny\":[\"/absoluter/pfad/zum/ordner\"],\"B5xevr\":[\"Der Verbindungsname ist erforderlich\"],\"BAVvWJ\":[\"ER-Diagramm\"],\"BBtVak\":[\"Alle einklappen\"],\"BEVzjL\":[\"Import fehlgeschlagen\"],\"BHATjK\":[\"Verbindungen exportieren\"],\"BJe2lZ\":[\"Seitenleiste umschalten\"],\"BK3WCj\":[\"Laden des Registry fehlgeschlagen\"],\"BKbO3i\":[\"Notebook bearbeitet\"],\"BMB51y\":[\"In Konsole ausführen\"],\"BNW_Z4\":[\"z. B. active_users, order_summary\"],\"BPkXj7\":[\"Fremdschlüssel erstellen\"],\"BUO_JN\":[\"Abfrage kopieren\"],\"BYkhHY\":[\"Beim Start nach Updates suchen\"],\"BeSg6-\":[\"Anwendungslogs zur Fehlersuche im Speicher sammeln\"],\"BgAyQH\":[\"Sortierung löschen\"],\"BinTJI\":[\"npm-Ökosystem\"],\"BkFson\":[\"Automatisch paginiert\"],\"Bpglf1\":[\"Nach oben\"],\"BrGo6h\":[\"Notebooks suchen\"],\"BxiAN_\":[\"Abfrage löschen\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Frontend-Abhängigkeiten\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Keine Filter —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Wird heruntergeladen...\"],\"CUxwxn\":[\"Alle Tabellen anzeigen\"],\"CWMXbw\":[\"stoppt den Prozess sofort. Alle aktiven Datenbankverbindungen über dieses Plugin funktionieren erst wieder, wenn das Plugin neu gestartet wird.\"],\"CZt6BX\":[\"MANUELLE KONFIGURATION\"],\"Ca8ixZ\":[\"Löschen\"],\"CbJBQS\":[\"Aktualisierung fehlgeschlagen: \"],\"Cdz-YU\":[\"Gestapelte Ansicht\"],\"CpeQf9\":[\"Schleifen\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Wähle das Modell, das für Generierung und Erklärung verwendet werden soll.\"],\"DB8zMK\":[\"Anwenden\"],\"DDXf5E\":[\"SQL-Funktionen\"],\"DEwnwi\":[\"Löschen\"],\"DNTvdl\":[\"Im Editor öffnen\"],\"DPc2P9\":[\"Zelle löschen\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Zeilenhöhe\"],\"Dd7YLj\":[\"Vielleicht später\"],\"Deej3j\":[\"Ungültiges JSON\"],\"DfKhk_\":[\"Aktualisieren\"],\"DiRiTz\":[\"Paketseite öffnen\"],\"DlRHAD\":[\"EXPLAIN wird ausgeführt...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Fehler\"],\"other\":[\"#\",\" Fehler\"]}]],\"Dvdihe\":[\"Auf \",[\"0\"],\" — vor Ausführung prüfen.\"],\"DzFLzw\":[\"JA\"],\"E-JUtQ\":[\"Freigabe\"],\"E0kcnZ\":[\"Allgemein\"],\"E2mje_\":[\"Abfrage zum Erklären auswählen\"],\"EDieyg\":[\"Möchtest du diese SSH-Verbindung wirklich löschen?\"],\"EHZxPj\":[\"Aufklappen\"],\"EL4oDO\":[\"Neue Version verfügbar\"],\"EPi4gT\":[\"Sortieren nach \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Ungruppiert\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Unbekannt\"],\"EhADgB\":[\"Spalte löschen\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Du bist auf dem neuesten Stand\"],\"Em6JFd\":[\"Zeilen zählen\"],\"EnGiqG\":[[\"0\"],\" Elemente\"],\"Ew1n5z\":[\"Plugins suchen…\"],\"F18WP3\":[\"Parameter\"],\"F3uc1x\":[\"Die exportierte Datei enthält deine Datenbank- und SSH-Passwörter im Klartext. Bewahre sie sicher auf.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" Zeilen\"],\"other\":[\"#\",\" Zeilen\"]}]],\"F6pfE9\":[\"Aktiv\"],\"F8tXg7\":[\"Datenvorschau\"],\"F9-6yK\":[\"Standard-Kopierformat\"],\"F9lxfG\":[\"Entfernen\"],\"F9nsa2\":[\"Die Verlaufsdatei war beschädigt und wurde beiseitegelegt. Neue Abfragen werden wie gewohnt aufgezeichnet. Sicherungsdatei:\"],\"FF_oap\":[\"Standardwert\"],\"FK8rlP\":[\"Noch keine SSH-Verbindungen konfiguriert\"],\"FMRcH8\":[\"Erste Zeile als Kopfzeile\"],\"FNvDMc\":[\"Diese Woche\"],\"FQe1FI\":[\"Geschätzte Zeilen\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warnung\"],\"FZg3wM\":[\"Operation\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Wähle ein unabhängiges Thema für den SQL-Editor oder halte es mit dem App-Thema synchron.\"],\"FsvZQL\":[\"Zelle \",[\"n\"],\" bearbeitet\"],\"FtwKL9\":[\"Tab wechseln\"],\"FznI3z\":[\"Fremdschlüssel \\\"\",[\"name\"],\"\\\" löschen?\"],\"G6W8j1\":[\"Vorschau fehlgeschlagen: \"],\"G8Q5Zq\":[\"Der Namespace ist erforderlich\"],\"GAohqx\":[\"Spalte löschen\"],\"GJR99u\":[\"Löschen der Spalte fehlgeschlagen: \"],\"GKfzzM\":[\"Verbindung auswählen...\"],\"GS-Mus\":[\"Exportieren\"],\"GUaLUq\":[\"Laden des Schemas fehlgeschlagen: \"],\"GXP-Iw\":[\"SQL-Zelle hinzufügen\"],\"Gj1mLb\":[\"Zellen neu angeordnet\"],\"GlbqG2\":[\"Auf Treiber-Standard zurücksetzen\"],\"Gq1YzP\":[\"Ereignisse\"],\"Gs5AlY\":[\"Öffnen\"],\"GtmO8_\":[\"von\"],\"GxkJXS\":[\"Wird hochgeladen...\"],\"H-o4D2\":[\"Neue Spalte erstellen\"],\"H2B-KW\":[\"Wähle das Standardformat beim Kopieren von Zeilen mit Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Wiederholen\"],\"H7mlCc\":[\"/absoluter/pfad/zu/db.sqlite\"],\"H86f9p\":[\"Verkleinern\"],\"H9P8CD\":[\"den ersten Filter hinzufügen\"],\"HAQlGl\":[\"KI-Aktivität\"],\"HKNZrs\":[\"Index-Bedingung\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"#\",\" Zeilen löschen\"],\"other\":[\"#\",\" Zeilen löschen\"]}]],\"HPuCiP\":[\"Ordnerpfad\"],\"HUs1R3\":[\"Keine geöffneten Tabs für diese Verbindung.\"],\"HV4Isp\":[\"SSH-Passwort eingeben\"],\"HVC8Hh\":[\"In Zwischenablage kopiert\"],\"HWEpq8\":[\"Datenträger schreiben/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Speichern der Ansicht fehlgeschlagen: \"],\"He8v1Y\":[\"Von \\\"Alle anwenden\\\" abwählen\"],\"HehHP1\":[\"Standard-Layout\"],\"HilYn4\":[\"Dieses Notebook ist leer. Füge eine Zelle hinzu, um zu beginnen.\"],\"HjxVK_\":[\"Schneller Verbindungstest\"],\"HmMnRx\":[\"WKT-Modus\"],\"HoKCiI\":[\"Die App wird nach der Installation automatisch neu gestartet\"],\"HpK_8d\":[\"Neu laden\"],\"Hpi4Jm\":[\"Jetzt beitreten\"],\"HuA3RU\":[\"Tabulator\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"SSH inline konfigurieren\"],\"I5VBsr\":[\"Wie App\"],\"I8yrPb\":[\"Tabelle ersetzen\"],\"I92BdB\":[\"Aus Gruppe entfernen\"],\"I92fr4\":[\"Später erinnern\"],\"I99Miw\":[\"Kosten\"],\"IETZIR\":[\"Zellnamen bearbeiten\"],\"IG9wzA\":[\"Einfügen der Zeile fehlgeschlagen: \"],\"ILleOG\":[\"Der Ressourcentyp muss \\\"service\\\" oder \\\"pod\\\" sein\"],\"IQ3gAw\":[\"Datei hochladen\"],\"IUwGEM\":[\"Änderungen speichern\"],\"IUwmLq\":[\"Direkte Abhängigkeiten, deklariert in package.json und src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Open-Source-Bibliotheken\"],\"I_43p6\":[\"Sicherheit\"],\"Iaizf4\":[\"Darstellung\"],\"Il3FBB\":[\"Strukturiertes Filterpanel ein-/ausblenden\"],\"IniZRK\":[\"Download nicht verfügbar - nur Vorschau geladen\"],\"Isaozb\":[\"Überprüfen & anpassen\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Aktive Abfragen und Verbindungen über dieses Plugin werden unterbrochen.\"],\"J6v1s_\":[\"Standard-Modell\"],\"JE-DVk\":[\"Interpreter\"],\"JEGlfK\":[\"Start\"],\"JKDPqP\":[\"Zuerst einen Kontext auswählen\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"SSH-Tunnel verwenden\"],\"JRz8tw\":[\"MySQL und MariaDB liefern echte Metriken nur bei unterstützten EXPLAIN ANALYZE- oder ANALYZE FORMAT-Varianten.\"],\"JUICth\":[\"PNG, JPG, WebP oder SVG · max. 512 KB\"],\"JY5Oyv\":[\"Datenbank\"],\"JlFRIB\":[\"Sitzungszeitzone, die nach dem Verbindungsaufbau an MySQL gesendet wird.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Abgelehnt\"],\"K3H9p5\":[\"Nicht gesetzt\"],\"K5Dgu_\":[\"Datenbanken\"],\"K8IGKf\":[\"Authentifizierungstyp\"],\"KAYNSW\":[\"Wie viele Logs im Speicher behalten werden sollen (1-10000)\"],\"KHTGbr\":[\"Vorab-EXPLAIN\"],\"KHvda8\":[\"Nicht Null\"],\"KJKNaZ\":[\"Als `column` kopieren\"],\"KM5Kc8\":[\"Mindestens eine Spalte muss ausgewählt werden\"],\"KSCnVQ\":[\"Typ\"],\"KUjOb9\":[\"läuft\"],\"KXBdwy\":[\"Routinen aktualisieren\"],\"KXNyX7\":[\"DEFAULT setzen\"],\"Kd70-v\":[\"Aus Zwischenablage importieren...\"],\"KhI4oS\":[\"Referenzierte Zeile in \",[\"0\"],\" öffnen\"],\"KhgrNu\":[\"MCP-Server-Integration\"],\"KirERL\":[\"Zeitüberschreitung\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Löschen des Index fehlgeschlagen: \"],\"KzeARD\":[\"Löschen der Tabelle fehlgeschlagen: \"],\"L-rMC9\":[\"Auf Standard zurücksetzen\"],\"L3HXkQ\":[\"Fehlerbehebungen\"],\"LCZ7Dy\":[\"Namen kopieren\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"Indizes\"],\"LMeAoR\":[\"Zeilen\"],\"LPCdc-\":[\"Prompt für Abfrage-Tabnamen\"],\"LPFmga\":[\"Für \\\"Alle anwenden\\\" auswählen\"],\"LYzbQ2\":[\"Tool\"],\"Lbis_V\":[\"Schnellnavigation\"],\"Lcpbe2\":[\"Der Plugin-Prozess konnte nicht gestartet werden. Prüfe die Fehlerdetails unten.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN wird nur für DML-Statements (SELECT, INSERT, UPDATE, DELETE) unterstützt. DDL-Statements wie CREATE, DROP oder ALTER können nicht erklärt werden.\"],\"LnT0hQ\":[\"Spalte hinzufügen\"],\"LvutiO\":[\"KI-Vorschlag\"],\"M-rHQO\":[\"Vollbild verlassen\"],\"M0XJba\":[\"Möchtest du den gesamten Abfrageverlauf für diese Verbindung wirklich löschen?\"],\"M1co_O\":[\"Konfiguriert\"],\"M73whl\":[\"Kontext\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Alle anzeigen\"],\"MXdOwj\":[\"Verbindungen trennen\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"K8s-Verbindung auswählen\"],\"Mc1tjS\":[\"Aktiviere ANALYZE, um tatsächliche Zeilen, Laufzeit, Schleifen und Buffer zu prüfen.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" weitere Zeilen\"],\"Mp0jQ_\":[\"Dieser Treiber unterstützt Primärschlüssel nur beim Erstellen einer Tabelle\"],\"MqpZwN\":[\"Tabularis-Prozess\"],\"MxIx43\":[\"↑↓ zum Navigieren, Enter zum Öffnen\"],\"MygtgQ\":[\"Markdown-Zelle hinzufügen\"],\"N40H-G\":[\"Alle\"],\"N5UQxq\":[\"Ollama wurde auf Port \",[\"0\"],\" nicht erkannt. Läuft es?\"],\"N6GBcC\":[\"Löschen bestätigen\"],\"N6aqHp\":[\"Ausgeführte Abfragen\"],\"N9_S15\":[\"Eine neue Tabelle wird erstellt\"],\"NBdMa1\":[\"Langsamster Schritt\"],\"NC2AI2\":[\"Länge\"],\"NCzNnx\":[\"Aufsteigend sortieren\"],\"NT4Ubs\":[\"Benutzerdefinierten Schlüssel löschen und auf Umgebungsvariable zurücksetzen (falls vorhanden)\"],\"NUjrCO\":[\"Keine Favoriten entsprechen deiner Suche\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Baum-Gesamt: \",[\"0\"]],\"Nc2VQn\":[\"An bestehende anhängen\"],\"NgFERn\":[\"Zu Favoriten hinzufügen\"],\"NktMHG\":[\"Datenbankname\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Testen\"],\"Nq5QTk\":[\"n-te erklären\"],\"O2STgu\":[\"Export fehlgeschlagen: \"],\"O8SV8O\":[\"Wird heruntergeladen...\"],\"O9_WW6\":[\"Verbindung\"],\"OGEsKj\":[\"Alle Zellen ausführen\"],\"OGWdBg\":[\"Ansichtsname\"],\"OHqT6w\":[\"Tastenkombination drücken...\"],\"OXJsaG\":[\"Ungültiger Parametername\"],\"OfhWJH\":[\"Zurücksetzen\"],\"OlAl5i\":[\"Alle ausklappen\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Discord beitreten\"],\"P1YGsb\":[\"SQL-Generierung\"],\"P2m1xb\":[\"Bei Fehler stoppen\"],\"P3Qlys\":[\"Keine Verbindungs-ID\"],\"P6Y3Yf\":[\"Führe diesen Befehl im Terminal aus und starte anschließend Claude Code neu.\"],\"PCdj-c\":[\"Alle abwählen\"],\"PMnFt9\":[\"Datenträger lesen/s\"],\"PQU2Va\":[\"Vorschlag mit Eingabetaste übernehmen\"],\"PRnH8G\":[\"von \",[\"0\"]],\"PY8UF3\":[\"Parallel umgeschaltet (Zelle \",[\"n\"],\")\"],\"PiH3UR\":[\"Kopiert!\"],\"Pia95d\":[\"Spaltenname ist erforderlich\"],\"PrElXQ\":[\"Aktualisieren\"],\"PrixCC\":[\"Zeilen werden an eine bestehende Tabelle angehängt\"],\"Pujgbb\":[\"Ziel konfigurieren\"],\"Pw_eQV\":[\"Plugin konnte nicht gestartet werden\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Keine gespeicherten Abfragen\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Keine Kindprozesse\"],\"QCxMC0\":[\"Automatisch nach neuen Versionen suchen, wenn die App gestartet wird\"],\"QEazml\":[\"Auswahl löschen\"],\"QHcLEN\":[\"Verbunden\"],\"QLHHFO\":[\"Nur-Lese-Modus\"],\"QOvAW3\":[\"Neue Funktionen\"],\"QULGRi\":[\"Keine gültigen Abfragen gefunden\"],\"QZwllF\":[\"Durchsuchen...\"],\"QbkSr_\":[\"EXPLAIN nicht verfügbar.\"],\"QeHFYZ\":[\"EXPLAIN fehlgeschlagen: \",[\"0\"]],\"Qll2Tb\":[\"Abst.\"],\"Qoq-GP\":[\"Mehr lesen\"],\"Qu4Hog\":[\"Notebook erfolgreich importiert\"],\"R-A2Vd\":[\"Keine Daten zum Anzeigen\"],\"R0Hkb2\":[[\"0\"],\" Datenbank(en) ausgewählt\"],\"R1nHhB\":[\"Bereits vorhanden\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"In Konsole umwandeln\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Einrichtung\"],\"RF-HyV\":[\"Wähle deine bevorzugte Sprache. \\\"Auto\\\" verwendet die Systemsprache.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Namen kopieren\"],\"RI-HZc\":[[\"0\"],\"-Schlüssel eingeben\"],\"RJrE17\":[\"Möchtest du die Ansicht \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Ein Stern hilft anderen, das Projekt zu entdecken\"],\"Rb3Tdm\":[\"Notebook-Name\"],\"RcbKJ3\":[\"Bei Aktualisierung\"],\"RkefFq\":[\"Führt vor dem Modal ein EXPLAIN aus, damit der Plan sichtbar ist.\"],\"RnF_hl\":[\"Plugin-Registry wird geladen...\"],\"Rns7_C\":[\"Diese Aktion kann nicht sofort rückgängig gemacht werden\"],\"RoKRqW\":[\"Verfügbare Plugins\"],\"RphpKk\":[\"Erscheinungsbild\"],\"Rt8sHM\":[\"Sortier- oder temporäre Arbeit erkannt\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Aktiviert\"],\"S1veKH\":[\"Auswahl zurücksetzen\"],\"S5zeZU\":[\"Vorschau umschalten\"],\"S8Yqbl\":[\"Einfügen\"],\"SDND4q\":[\"Nicht konfiguriert\"],\"SJRy3D\":[\"(Automatisch generiert)\"],\"SSwIjo\":[\"EMPTY setzen\"],\"SgvA_r\":[\"Drücke Ausführen (Ctrl/Command+F5), um Tabellendaten zu laden\"],\"SlfejT\":[\"Fehler\"],\"SoATkx\":[\"Zelle kopieren\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"Endpoint-URL\"],\"T7w5CQ\":[\"Erstellen einer neuen Zeile fehlgeschlagen: \"],\"T9947j\":[\"Wert (z. B. 'Text' oder 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Zum vertikalen Layout wechseln\"],\"TK5oex\":[\"Prompt speichern\"],\"TKQ7K-\":[\"Installieren\"],\"TKZreP\":[\"Erforderlich\"],\"TMLAx2\":[\"Erforderlich\"],\"TO08JI\":[\"Fremdschlüssel\"],\"TVKqvO\":[\"Zeile bearbeiten\"],\"TYSdQ3\":[\"SELECT-Abfrage ausführen\"],\"TfDFHS\":[\"Lange Zeilen im Editor umbrechen statt horizontal zu scrollen.\"],\"Tibfjs\":[\"Keine gespeicherten Verbindungen — erstelle unten eine\"],\"Tj36Dr\":[\"Auf Standard zurücksetzen\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Sperren\"],\"TpwXyg\":[\"Fehlen Zeitwerte, hat der Server wahrscheinlich nur einen geschätzten Plan geliefert.\"],\"Tw2M1h\":[\"Installation fehlgeschlagen\"],\"Ty-rm9\":[\"SSH-Verbindungen\"],\"Tz0i8g\":[\"Einstellungen\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes-Verbindungen\"],\"U4uzyV\":[\"Neuigkeiten\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Ausführung stoppen, wenn eine Zelle fehlschlägt\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" auf \",[\"1\"],\" — vor Ausführung prüfen.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Konfiguration für \",[\"clientName\"],\" erfolgreich installiert! Starte die App neu, um sie anzuwenden.\"],\"URmyfc\":[\"Details\"],\"UWQBvp\":[\"SQL-Vorlagen generieren\"],\"UawTKZ\":[\"Optional. Gib die ausführbare Datei an, die zum Starten dieses Plugins verwendet wird (z. B. python3 unter macOS/Linux, python oder ein vollständiger Pfad unter Windows). Leer lassen, um den Standard zu verwenden.\"],\"Ub8sf5\":[\"SQLite unterstützt das Löschen von Fremdschlüsseln via ALTER TABLE nicht.\"],\"UbbJ8j\":[\"Keine Optionen gefunden\"],\"Ubs68g\":[\"Allgemein\"],\"UftN8J\":[\"Diese Verbindungen lehnen Schreibvorgänge ab. Andere verhalten sich normal.\"],\"UnQNah\":[\"Möchtest du die Spalte \\\"\",[\"0\"],\"\\\" aus der Tabelle \\\"\",[\"tableName\"],\"\\\" wirklich löschen?\\n\\nWARNUNG: Dadurch werden alle Daten in dieser Spalte dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.\"],\"UncTTh\":[\"Summe des RSS über den Prozessbaum — gemeinsam genutzter Speicher kann doppelt gezählt werden\"],\"UpjgFm\":[\"Parameter geändert\"],\"UsAnu1\":[\"ANALYZE führt die Abfrage aus. Bei datenverändernden Statements mit Vorsicht verwenden.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tabgröße\"],\"UzWGWO\":[\"Zum SQL-WHERE-Eingabefeld wechseln\"],\"V-chk5\":[\"Wie oft geprüft werden soll, ob aktive Verbindungen noch erreichbar sind. Setze 0, um die Prüfung zu deaktivieren.\"],\"V-pw1j\":[\"Tabellenname\"],\"V2T0Uw\":[\"Noch keine gespeicherten Notebooks.\"],\"V3aNwx\":[\"Dateneditor\"],\"VGYp2r\":[\"Auf alle anwenden\"],\"VH8S7x\":[\"Zwischenablage-Spalte\"],\"VIAEcS\":[\"Laden der Datenbanken fehlgeschlagen. Prüfe deine Anmeldedaten.\"],\"VKdztF\":[\"Zeilen anhängen\"],\"VLiHXI\":[\"Daten analysieren\"],\"VMbmXc\":[\"Möchtest du \\\"\",[\"pluginName\"],\"\\\" wirklich entfernen? Dadurch werden die Plugin-Dateien gelöscht.\"],\"VO3weF\":[\"Keine Datei geladen\"],\"VOZlKc\":[\"Datenbank importieren\"],\"VPzsIz\":[\"Name wird generiert...\"],\"VUul0v\":[\"Das Beenden von\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Alle Abfragen\"],\"Vi2Pqx\":[\"von\"],\"Vl2zn2\":[\"gestoppt\"],\"Vo4uBA\":[\"Bei der Installation des Plugins ist ein Fehler aufgetreten. Siehe Details unten.\"],\"VqqyOs\":[\"Führe eine Abfrage aus, um Ergebnisse zu sehen\"],\"VzhDFh\":[\"Blockiere jede Nicht-SELECT-Anweisung über MCP, außer für die unten erlaubten Verbindungen.\"],\"W3uwpT\":[\"Alle Tabs schließen\"],\"W4MKLh\":[\"z.B. In Prod riskant, bestätigen…\"],\"W60eXm\":[\"Tabelle\"],\"WA8RND\":[\"Möchtest du die Tabelle \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"WG8Qgt\":[\"Tabelle löschen\"],\"WLnvCZ\":[\"Benutzername eingeben\"],\"WM-__8\":[\"Verbindungen suchen...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen in \\\"\",[\"tableName\"],\"\\\" importiert\"],\"other\":[\"#\",\" Zeilen in \\\"\",[\"tableName\"],\"\\\" importiert\"]}]],\"WTfntM\":[\"Möchtest du die Abfrage \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"WarTN_\":[\"erfolgreich\"],\"WcF1uL\":[\"Gruppenname\"],\"Weq9zb\":[\"Allgemein\"],\"WmPpB1\":[\"Ausführungsplan wird geladen…\"],\"Wu7cK0\":[\"Keine Datenbanken gefunden\"],\"WvoUQF\":[\"Zelle \",[\"n\"],\" gelöscht\"],\"Ww3pDD\":[\"MANUELLER BEFEHL\"],\"X-20AU\":[\"Prompt für Abfrage-Tabnamen eingeben...\"],\"X-U6_w\":[\"Schriftfamilie\"],\"X5fs0g\":[\"Erstelle deine erste Verbindung, um loszulegen.\"],\"X7Ayjp\":[\"Passwort im System-Keychain gespeichert\"],\"X9kySA\":[\"Favoriten\"],\"XJOV1Y\":[\"Aktivität\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Abfrageerklärung\"],\"XVF2Pf\":[\"Schemata bearbeiten\"],\"XW6OYF\":[\"Dieses Plugin benötigt möglicherweise einen Interpreter (z. B. Python). Verwende die Plugin-Einstellungen, um den Interpreter-Pfad zu konfigurieren.\"],\"XZB6Xr\":[\"Maximale Log-Einträge\"],\"Xcffv2\":[\"Zeigt die Schaltflächen AI Assist und Explain im Editor an\"],\"XeqTSh\":[\"Join-Typ\"],\"XmJfZT\":[\"name\"],\"XoQfG1\":[\"SSH-Benutzer\"],\"XwI0Vw\":[\"Auto (System)\"],\"XyDlLX\":[\"Indexname\"],\"Y2P2aK\":[\"Wähle die zu ladenden Schemata aus:\"],\"Y8HYw2\":[\"Wert\"],\"Y8zX3R\":[\"In Editor einfügen\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Suchen...\"],\"YWlnMZ\":[\"Ollama-Port\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Durchsuche und installiere Plugins aus dem Registry.\"],\"Y_3yKT\":[\"In neuem Tab öffnen\"],\"YiAQ_Q\":[\"Tabellen aktualisieren\"],\"Ysjr9Y\":[\"SQL-Vorschau\"],\"YswNf7\":[\"Alle Level\"],\"YtNwr6\":[\"Maximale Anzahl an Abfrageverlaufseinträgen pro Verbindung.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Wird geladen...\"],\"Z7ZXbT\":[\"Freigeben\"],\"Z8JpBH\":[\"Als Notebook exportieren\"],\"Z8fBIc\":[\"Tatsächliche Zeilen übersteigen die Schätzung\"],\"ZC2VJP\":[\"Ausführen\"],\"ZCIS4k\":[\"keine aktiven Filter\"],\"ZF1_UT\":[\"SSL-Modus\"],\"ZGjBPa\":[\"Logs löschen\"],\"ZHQTlM\":[\"Importiere aus\"],\"ZIFDoJ\":[\"Bitte wähle mindestens Struktur oder Daten\"],\"ZIZA6o\":[\"Vor Freigabe bearbeiten\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Parser-Warnungen\"],\"other\":[\"#\",\" Parser-Warnungen\"]}]],\"ZVn8p2\":[\"Zeigt Zeilennummern im Rand des Editors an.\"],\"ZYnwzF\":[\"Getrennt\"],\"Za3_fO\":[\"Fehler\"],\"ZcOxO1\":[\"Fremdschlüssel erstellen\"],\"Zf7LHg\":[\"Keine Kontexte gefunden (ist kubectl installiert?)\"],\"Zfotp5\":[\"Große Schätzabweichungen deuten meist auf veraltete Statistiken oder Prädikate hin, die der Planner schlecht modellieren kann.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Schemata konnten nicht geladen werden\"],\"ZqXGPF\":[\"Löschen der Ansicht fehlgeschlagen: \"],\"ZuL73E\":[\"Neue Datenbankansicht erstellen\"],\"_-bi4r\":[\"Referenzierte Tabelle\"],\"_AEYGI\":[\"Noch kein Ausführungsverlauf\"],\"_FdpZc\":[\"Laden der Ansichtsdefinition fehlgeschlagen: \"],\"_FxSdi\":[\"Durchsuche die direkten Open-Source-Abhängigkeiten, die in App, Backend und Tooling verwendet werden.\"],\"_JyTG8\":[\"Explain-Prompt eingeben...\"],\"_Ltc_k\":[\"Zusätzlich\"],\"_Q2Wix\":[\"Zeilen\"],\"_TK1zF\":[\"Gespeicherte Verbindung\"],\"_bJFBE\":[\"Verbindungs-Timeout\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Baum\"],\"_dqduX\":[\"Nächste Seite\"],\"_fwE6J\":[\"Älter\"],\"_n04sB\":[\"Beenden\"],\"_otxbQ\":[\"Schlüsseldatei\"],\"_pezIT\":[\"Verbindung zu \",[\"0\"],\" fehlgeschlagen. Bitte prüfe deine Einstellungen oder stelle sicher, dass die Datenbank läuft.\"],\"_srfkj\":[\"Benutzerdefinierter Schlüssel erfolgreich gelöscht\"],\"_t6aFo\":[\"MySQL und MariaDB können je nach Serverversion auf EXPLAIN FORMAT=JSON oder tabellarisches EXPLAIN zurückfallen.\"],\"_xTbaM\":[\"Spalten\"],\"_yxaaL\":[\"Eindeutiger Index\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis ist ein freies Open-Source-Projekt. Wenn du es nützlich findest, unterstütze das Projekt und vernetze dich mit der Community.\"],\"a9CASo\":[\"SQLite unterstützt nur das Umbenennen von Spalten. Andere Änderungen erfordern, dass die Tabelle manuell neu erstellt wird.\"],\"aAIQg2\":[\"Darstellung\"],\"aAURrV\":[\"Installiert\"],\"aC_vCa\":[\"Namen mit KI generieren\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Wähle einen Knoten aus, um Details zu sehen\"],\"aHKcKc\":[\"Vorherige Seite\"],\"aI-5wG\":[\"CA prüfen\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Standardwert\"],\"aScJP1\":[\"Diese Abfrage ausführen\"],\"aVNbN8\":[\"Filterbedingungen\"],\"aWhdMQ\":[\"Vorhandene SSH-Verbindung verwenden\"],\"aXYd8V\":[\"Zeitlimit\"],\"aX_S_r\":[\"Seite \",[\"0\"],\" von \",[\"totalPages\"]],\"agZcf8\":[\"Generiertes SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [Felder]\"],\"alplHn\":[\"Abfrageplan wird mit KI analysiert...\"],\"anBcU3\":[\"Wenn dir tabularis gefällt und du mehr Funktionen sehen möchtest, unterstütze das Projekt durch Code-Beiträge, Bug-Reports oder einen Stern auf GitHub.\"],\"arHmj2\":[\"Möchtest du diese Abfrage wirklich aus dem Verlauf löschen?\"],\"arKcqW\":[\"Ältere Server können auf geschätzte Pläne mit weniger Metriken zurückfallen.\"],\"arcpYe\":[\"Freigabe erforderlich\"],\"aurEkh\":[\"Prozesse werden geladen…\"],\"avtdsd\":[\"SQL-Modus\"],\"az8lvo\":[\"Aus\"],\"b1Ah3z\":[\"Fokussiert auf\"],\"b392Dr\":[\"Alle ausklappen\"],\"b5S_PU\":[\"Datenbankname\"],\"bAvovP\":[\"Nach unten\"],\"bH3JqY\":[\"Keine Tabellen gefunden\"],\"bP5JOn\":[\"Zeilenumbruch\"],\"bcOdok\":[\"Gruppe löschen\"],\"bcqeas\":[\"Alle MCP-Abfragen nur lesen\"],\"bmca5u\":[\"Nur Schreibvorgänge\"],\"bpCiBU\":[\"Schreibvorgänge erlauben\"],\"bqnhqW\":[\"Schätzung übersteigt tatsächliche Zeilen\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Fehler\"],\"bw22Gk\":[\"Spalten-Schema\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Wichtigste Probleme\"],\"cFCKYZ\":[\"Ablehnen\"],\"cFGrCP\":[\"Tabelle\"],\"cGeFup\":[\"Schriftgröße\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Auf Tabelle fokussieren\"],\"cM9NHc\":[\"Herabstufen auf\"],\"cO9-2L\":[\"Deaktivieren\"],\"cSev-j\":[\"Filter\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen importieren\"],\"other\":[\"#\",\" Zeilen importieren\"]}]],\"c_xoSn\":[\"Zelle \",[\"n\"],\" umbenannt\"],\"cd0XEW\":[\"Abfrage speichern\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Gruppe teilen\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" Statements\"],\"d34vwG\":[\"Datenbanken laden\"],\"d6ynQ7\":[\"Absteigend sortieren\"],\"d8_6_v\":[\"abbrechen\"],\"d8wc1_\":[\"Beispielwerte\"],\"dBXoCS\":[\"Eine Umgebungsvariable ist vorhanden, aber du kannst sie überschreiben, indem du oben einen Schlüssel setzt.\"],\"dD7NPy\":[\"Gliederung\"],\"dEgA5A\":[\"Abbrechen\"],\"dMtLDE\":[\"bis\"],\"dPJVhW\":[\"Installation fehlgeschlagen\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Sitzung\"],\"other\":[\"#\",\" Sitzungen\"]}]],\"dTUzKm\":[\"Ausgewählte ausführen (\",[\"0\"],\")\"],\"dU_iQN\":[\"Keine Sitzung entspricht den Filtern.\"],\"dUh9QW\":[\"Planung\"],\"dVoir2\":[\"Markdown-Zelle \",[\"n\"],\" hinzugefügt\"],\"dZ0d2O\":[\"Bitte wähle mindestens eine Tabelle\"],\"dhi13U\":[\"Bild auswählen…\"],\"dli1JX\":[\"Änderungen übernehmen\"],\"dmYV6f\":[\"Routinen\"],\"dohZCo\":[\"Anweisungen für KI-gestützte SQL-Generierung. Verwende \",[\"SCHEMA\"],\" als Platzhalter für die Datenbankstruktur.\"],\"dtxpK2\":[\"Analysieren\"],\"dwW9nJ\":[\"Zeilennummern anzeigen\"],\"dwWVw_\":[\"Willkommensbildschirm anzeigen\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Tab\"],\"other\":[\"#\",\" Tabs\"]}]],\"dxxY9r\":[\"Falls vorhanden\"],\"dyN4j9\":[\"Klicke auf 'Vorschau ausführen', um Ergebnisse zu sehen\"],\"e07Iz5\":[\"Task-Manager öffnen\"],\"e0NzXu\":[\"Dieses Projekt ist Work in Progress (WIP). Die Kernfunktionen sind stabil, aber wir haben große Pläne.\"],\"e1UKxf\":[\"Diese Abfrage speichern\"],\"e34gdU\":[\"Wie lange gewartet wird, bevor abgebrochen wird.\"],\"e62LQd\":[\"Zwangsweise beenden\"],\"e6QZsM\":[\"Editor-Thema\"],\"e8CirT\":[\"Abfrage ausführen\"],\"eD2kUP\":[\"Buffer gelesen\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Prompt für Explain-Plan-Analyse eingeben...\"],\"eIVolo\":[\"Datenträger L/S\"],\"eJOEBy\":[\"Wird exportiert...\"],\"eKHY3W\":[\"Plugin-Einstellungen\"],\"eMb6Ub\":[\"Ressource auswählen...\"],\"ePK91l\":[\"Bearbeiten\"],\"eXweu6\":[\"Zelle ausklappen\"],\"ecNsTE\":[\"Keine Abfragen entsprechen deiner Suche\"],\"ecUA8p\":[\"Heute\"],\"ecpIZP\":[\"Passphrase eingeben, falls der Schlüssel verschlüsselt ist\"],\"ejmeDY\":[\"Installiert\"],\"esl-Tv\":[\"Ressourcentyp\"],\"exyUec\":[\"Verbindung\"],\"f2AJjl\":[\"Zeile löschen\"],\"f4pD-j\":[\"Verbindungstest fehlgeschlagen\"],\"f7sXvi\":[\"Passwort eingeben\"],\"fAsxc0\":[\"Sequentielle Scans\"],\"fIeFs0\":[\"Wert auswählen...\"],\"fJm92A\":[\"Wählen Sie eine Datei mit einem EXPLAIN-Plan (PostgreSQL JSON- oder Textformat), um ihn zu visualisieren.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Werte\"],\"f_b1TA\":[\"Ausführungsverlauf\"],\"fghnqP\":[\"Zu Verbindung 1-9 wechseln\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Komma (,)\"],\"fp711N\":[\"Blockiert (nur lesen)\"],\"fpzyLj\":[\"Seite \",[\"0\"],\" von \",[\"1\"]],\"fuA6oy\":[\"Socket-Timeout\"],\"fvImQM\":[[\"0\"],\" ausgewählt\"],\"fwr_nh\":[\"Installiere Erweiterungen, verwalte Plugin-Treiber und behalte Laufzeiteinstellungen im Blick.\"],\"g0ZzK4\":[\"Gültiges JSON\"],\"g11hAR\":[\"Neue Zeile\"],\"g8VcMm\":[\"Mein K8s-Cluster\"],\"gCFR_O\":[\"Parallele Ausführung (Alle ausführen)\"],\"gEjU98\":[\"Verbindungen öffnen\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Mindestens eine Spalte ist erforderlich\"],\"gSuQrG\":[\"Keine Verbindung entspricht \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Abfrage erneut ausführen\"],\"gZWMnn\":[\"KI-Analyse\"],\"ghYd73\":[\"Ziel wählen...\"],\"giAqEC\":[\"Neue Tabelle erstellen\"],\"gnQS8X\":[\"Maximale Paketgröße, die vom MySQL-Connector verwendet wird.\"],\"gqV5VL\":[\"Integriert, nicht anpassbar\"],\"gww_XE\":[\"Referenzierte Spalte\"],\"gxXPJ9\":[\"Interpreter konfigurieren\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximieren\"],\"h-XNc9\":[\"CSV-Trennzeichen\"],\"h-kNAk\":[\"z.B. verkaufsdaten\"],\"h3Z_aK\":[\"Markdown hier schreiben...\"],\"h7MgpO\":[\"Tastenkürzel\"],\"h7peZQ\":[\"Erlauben\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Systemprozess läuft\"],\"other\":[\"#\",\" Systemprozesse laufen\"]}]],\"hEZrFh\":[\"SQL-Datei ausführen...\"],\"hEipgW\":[\"Jetzt nach Updates suchen\"],\"hG89Ed\":[\"Bild\"],\"hIHcBE\":[\"Als CSV exportieren\"],\"hItdtk\":[\"Ordner auswählen\"],\"hXFVjo\":[\"Tabellenname ist erforderlich\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Erneut ausführen\"],\"hbz1rh\":[\"Schlüssel\"],\"hdsaJo\":[\"Importiert...\"],\"he3ygx\":[\"Kopieren\"],\"hfGimp\":[\"Namespace auswählen...\"],\"hjjSEi\":[\"Nur-Lese-Verbindungen\"],\"hjwN_s\":[\"Ressourcenname\"],\"hlF1mD\":[\"Auswahl kopieren\"],\"hnboBb\":[\"KI-Analyse des Abfrageplans\"],\"hnvu2p\":[\"Fehlerdetails\"],\"hq4-D2\":[\"Der API-Schlüssel wird sicher im System-Keychain gespeichert. Ein hier gesetzter Schlüssel überschreibt die Umgebungsvariable.\"],\"hqjXdn\":[\"Löschen der SSH-Verbindung fehlgeschlagen\"],\"hqofAK\":[\"SQL kopieren\"],\"hy6L14\":[\"Auf GitHub ansehen\"],\"hyjACX\":[\"Zellen ein-/ausgeklappt\"],\"hz1b5W\":[\"Keine passenden Elemente gefunden\"],\"i1vAVM\":[\"Neue Tabelle erstellen\"],\"i3S5T3\":[\"Favoriten durchsuchen...\"],\"i4_LY_\":[\"Schreiben\"],\"i5HBWh\":[\"Abfrageverlauf zurückgesetzt\"],\"i5zCt4\":[\"Tabelle\"],\"iAVlge\":[\"Passe die Anweisungen für die KI-Namensgenerierung von Notebook-Zellen an. Der Zelleninhalt (SQL oder Markdown) wird als Benutzernachricht gesendet.\"],\"iE1yAB\":[\"Tabellen filtern...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Verbinden\"],\"iSryJ2\":[\"Mein SSH-Server\"],\"iT7UeX\":[\"Index hinzufügen\"],\"iUWwuR\":[\"Herunterladen und installieren\"],\"ia7i08\":[\"Zuerst Kontext/Namespace/Typ auswählen\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Gespeichert\"],\"igcsfY\":[\"Keine Plugins im Registry verfügbar.\"],\"ij-Elv\":[\"Bildvorschau\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" erklärbare Abfragen gefunden\"],\"other\":[\"#\",\" erklärbare Abfragen gefunden\"]}]],\"ioL38P\":[\"Überwache Plugin-Prozesse, CPU, RAM und Datenträgernutzung in Echtzeit\"],\"ixlL_e\":[\"SSH-Schlüsseldatei (optional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Modell auswählen\"],\"j3gyYH\":[\"Alle anwenden\"],\"j5CWO4\":[\"Aktuell\"],\"j9HPuI\":[\"Zeile #\",[\"0\"]],\"jBtpMP\":[\"Alle Status\"],\"jEu4bB\":[\"Spalten\"],\"jEyQIs\":[\"Keine Routinen gefunden\"],\"jHc1By\":[\"Ansicht löschen\"],\"jI6sj4\":[\"Kosten, Laufzeit und Zeilenschätzungen sind im Vergleich zu PostgreSQL und MySQL oft nicht verfügbar.\"],\"jIxQCZ\":[\"Für deine Plattform nicht verfügbar\"],\"jKIncn\":[\"Datenbankname ist erforderlich\"],\"jPSk57\":[\"Grund (optional)\"],\"jUNY_d\":[\"View\"],\"jVqjDo\":[\"Ungültiges Notebook-Dateiformat\"],\"jWSZ-A\":[\"Nur Vorschau - vollständige Daten nicht geladen\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket-Timeout in Millisekunden.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Verbindungsname ist erforderlich\"],\"jsQZMk\":[\"KI\"],\"juO8wz\":[\"Kindprozess\"],\"jx0t66\":[\"Kindprozesse einklappen\"],\"k-0mL-\":[\"Spalte hinzufügen\"],\"k-XiMX\":[\"Rohtext\"],\"k2UnVy\":[\"Hash-Bedingung\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"Sekunden\"],\"kBiBq7\":[\"Index \\\"\",[\"name\"],\"\\\" löschen?\"],\"kEYasw\":[\"Diagramm umschalten\"],\"kI1qVD\":[\"Formatieren\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen · \",[\"1\"],\" ms\"],\"other\":[\"#\",\" Zeilen · \",[\"2\"],\" ms\"]}]],\"kJDmsI\":[\"Ereignisdetails\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registry\"],\"kY-q3P\":[[\"label\"],\" ist erforderlich\"],\"kexIdC\":[\"Kubernetes-Port-Forward verwenden\"],\"krksx_\":[\"Erfolg\"],\"ktYUe9\":[\"Alle ausführen\"],\"kwY6nh\":[\"Schließen\"],\"kx0s-n\":[\"Ergebnisse\"],\"kxUEfE\":[\"Abrufen der Routinen-Definition fehlgeschlagen: \"],\"l2Op2p\":[\"Abfrageparameter\"],\"l9Ivba\":[\"Plugin-Prozesse und Systemressourcen\"],\"lBdPxu\":[\"Akzentfarbe\"],\"lCF0wC\":[\"Aktualisieren\"],\"lEQRwq\":[\"Daten (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Neue Tabelle erstellt\"],\"lOekZ3\":[\"Zum horizontalen Layout wechseln\"],\"lUA1C1\":[\"Passphrase für SSH-Schlüssel (optional)\"],\"lVeG20\":[\"Rust-Abhängigkeiten\"],\"lXAG6D\":[\"Anweisungen für KI-gestützte Abfrageerklärungen. Verwende \",[\"LANGUAGE\"],\" als Platzhalter für die Ausgabesprache.\"],\"lbbYjy\":[\"Bearbeite die rohe Konfigurationsdatei direkt. Ein Neustart ist erforderlich, um Änderungen anzuwenden.\"],\"lhKW0m\":[\"SQL-Zelle \",[\"n\"],\" hinzugefügt\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Ergebnisse pro Seite (Limit)\"],\"lkz6PL\":[\"Dauer\"],\"lmVGeo\":[\"Fremdschlüssel hinzufügen\"],\"lnnx3E\":[\"Verbinde Tabularis mit Claude Desktop, Cursor und mehr\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Hinzufügen\"],\"m2Q_r8\":[\"JSON in Text-Spalten erkennen\"],\"m2tskz\":[\"Erfolg\"],\"mA-qpe\":[\"Alle Ausführungen abgeschlossen\"],\"mBhhbA\":[\"Logs in die Zwischenablage exportiert\"],\"mCNdzH\":[\"Zelle ausführen\"],\"mO95sp\":[\"Panel schließen\"],\"mP7dLi\":[\"Schriftnamen oben eingeben\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" blockiert\"],\"other\":[\"#\",\" blockiert\"]}]],\"mS74ir\":[\"Speichern der SSH-Verbindung fehlgeschlagen\"],\"mSqtw8\":[\"Vorschau ausführen\"],\"mURmfQ\":[\"Ansichtsdefinition (SQL)\"],\"mX_isJ\":[\"Vertikal\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Struktur (DDL)\"],\"mrk4Cf\":[\"Nach \",[\"colName\"],\" DESC sortieren\"],\"msJ8t1\":[\"Wir haben einen eigenen Treffpunkt für Tabularis-Nutzer eröffnet: Hilfe, Tipps und Mitgestaltung der Roadmap.\"],\"mtvVdV\":[\"Verarbeitete Zeilen\"],\"mx4evv\":[\"Tabelle erstellen\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Herunterladen\"],\"n7JDTx\":[\"Installiere und aktiviere Plugins, um sie hier zu sehen\"],\"nDDJir\":[\"Suche Sitzung, Client, Verbindung…\"],\"nHP-Kr\":[\"Keine aktive Sitzung. Bitte wähle eine Verbindung aus.\"],\"nKhCjW\":[\"Tabellen auswählen\"],\"nNwvm4\":[\"Fehler\"],\"nOVim5\":[\"Speichern der Verbindung fehlgeschlagen\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Ereignisse\"],\"nf14vn\":[\"Erfordert Erweiterung: \",[\"0\"]],\"ngO6Pv\":[\"Erlaubt der Eingabetaste (zusätzlich zu Tab), den aktiven Autovervollständigungsvorschlag zu übernehmen. Bei deaktivierter Option fügt Enter immer einen Zeilenumbruch ein.\"],\"nhmF3p\":[\"Verbindungen\"],\"noM5A_\":[\"Erstelle deine erste Verbindung\"],\"nohy4m\":[\"Noch keine MCP-Aktivität.\"],\"nr-axf\":[\"Plugin entfernen\"],\"nsPFX9\":[\"In Visual Explain öffnen\"],\"nuBbBr\":[\"Diagramm\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Datenbank sichern\"],\"o-XJ9D\":[\"Ändern\"],\"o21Y-P\":[\"Einträge\"],\"o3tP_A\":[\"Index löschen\"],\"o45L8r\":[\"Gib deinen Verbindungsnamen an\"],\"o53XGh\":[\"Ausgewählte Zeile(n) kopieren\"],\"o7J4JM\":[\"Filter\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Level\"],\"oGiIL7\":[\"Standard-Anbieter\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Verbindung verloren\"],\"oJlXF2\":[\"Notebook importieren\"],\"oMFv82\":[\"Vertikal teilen\"],\"oOFiQg\":[\"Begrenzt die Anzahl der pro Abfrage geladenen Zeilen, um Performance-Probleme zu vermeiden. Setze den Wert auf 0, um die Begrenzung zu deaktivieren (nicht empfohlen).\"],\"oT9ZD3\":[\"Übersicht ausblenden\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Diagramm geändert (Zelle \",[\"n\"],\")\"],\"oWfclW\":[\"Zeigt JSON-Viewer-Bedienelemente, wenn eine nicht typisierte Text-Zelle ein JSON-Objekt oder -Array enthält. Verursacht kleine Parse-Kosten pro Zelle.\"],\"obpbdz\":[\"Konfigurationsdatei nicht gefunden (manuell erstellen)\"],\"odZgfC\":[\"KI-CLIENTS\"],\"ogZhXn\":[\"Wähle die Standard-Layout-Richtung für ER-Diagramme\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Tatsächliche Zeilen\"],\"olWzar\":[\"Plugin-Prozess zwangsweise beenden\"],\"ovBPCi\":[\"Standard\"],\"owzTWN\":[\"KI-Modelle von Anbietern aktualisiert\"],\"oxYi6j\":[\"Passt die in der gesamten Anwendung verwendete Grundschriftgröße an (10-20 px).\"],\"p--hsQ\":[\"Eine Datenbankverbindung wurde verloren\"],\"p6NueD\":[\"NEU\"],\"pOYHox\":[\"Aktionen\"],\"pR9bTR\":[\"Keine BLOB-Daten\"],\"pS8S5q\":[\"z. B. users, orders, products\"],\"pSws_M\":[\"Tabellenname\"],\"pVLbKZ\":[\"Ansicht erfolgreich erstellt\"],\"pWT04I\":[\"Prüfung läuft...\"],\"pZJ_6D\":[\"Indexname ist erforderlich\"],\"pddYFG\":[\"Prompt für Notebook-Zellnamen eingeben...\"],\"pnpyuD\":[\"Logging aktivieren\"],\"pqKMPv\":[\"Erstellen der Tabelle fehlgeschlagen: \"],\"pqaP1h\":[\"Schließen\"],\"pqarBu\":[\"Aufst.\"],\"ptuq35\":[\"z. B. Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"Andere bleiben nur lesbar. Nur markierte dürfen schreiben.\"],\"qA5jLs\":[\"Fehlerdetails\"],\"qIrtcK\":[\"Updates\"],\"qOqy8G\":[\"Konfiguration wird geprüft...\"],\"qWaVNs\":[\"Speichern und neu starten\"],\"qb3LPX\":[\"ER-Diagramm anzeigen\"],\"qkK0vq\":[\"Ansichtsname ist erforderlich\"],\"qki9tG\":[\"Fehler\"],\"qoIir-\":[\"Die Basis-URL deiner OpenAI-kompatiblen API. Beispiele: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Alle einklappen\"],\"r6ncaO\":[\"Tab schließen\"],\"rAJlpP\":[\"Container-Port\"],\"rG3WVm\":[\"Lesen\"],\"rGRCeK\":[\"Abfrageverlauf löschen\"],\"rNIto7\":[\"Der Ressourcenname ist erforderlich\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook erfolgreich exportiert\"],\"rY4sEV\":[\"FK löschen\"],\"rbu0nO\":[\"SSH-Verbindungen verwalten\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Verbindung(en)\"],\"other\":[\"#\",\" Verbindung(en)\"]}]],\"rn2_2V\":[\"Filter entfernen\"],\"roABNH\":[\"Kein Abfrageverlauf\"],\"rtir7c\":[\"unbekannt\"],\"ru0-2W\":[\"Keine aktiven Verbindungen\"],\"rvDPWO\":[\"Größte Schätzabweichung\"],\"rwWjWg\":[\"Release Notes\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Verbindung testen\"],\"sBOaim\":[\"Die Konfigurationsdatei wurde gespeichert. Jetzt neu starten, um die Änderungen anzuwenden?\"],\"sCyv9B\":[\"Modelle aktualisieren\"],\"sSUqe4\":[\"Löschen\"],\"sUBkgN\":[\"SQL wird generiert...\"],\"sZZG3d\":[\"Möchtest du \\\"\",[\"0\"],\"\\\" wirklich importieren?\\nDadurch können vorhandene Daten überschrieben werden.\"],\"sbK5ck\":[\"Verlauf durchsuchen...\"],\"sq_bS6\":[\"Bei Löschen\"],\"suW7-E\":[\"Verbindungs-Timeout in Millisekunden.\"],\"suqtBX\":[\"Esc zum Schließen\"],\"t-R8-P\":[\"Ausführung\"],\"t1OfVY\":[[\"totalLibraries\"],\" Bibliotheken\"],\"t2TMzs\":[\"Tab schließen\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Tabelle auswählen...\"],\"t7KRl1\":[\"Protokoll aller MCP-Aufrufe und ausstehender Freigaben. Lokal gespeichert.\"],\"t9NJIk\":[\"Scan-lastige Operationen erkannt\"],\"tB7xof\":[\"Temporäre oder Sortier-Operationen\"],\"tBBXTO\":[\"Ping-Intervall\"],\"tFrT3w\":[\"Füge dies manuell zur Konfigurationsdatei deines Clients hinzu, falls die automatische Installation fehlschlägt.\"],\"tJ7UbA\":[\"fokussierte erklären\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Horizontal teilen\"],\"tQhW-D\":[\"Log-Einstellungen\"],\"tT-BQX\":[\"Installiert\"],\"tXFGEx\":[\"Keine Kubernetes-Verbindungen gespeichert. Klicke auf „Hinzufügen“, um eine zu erstellen.\"],\"tXLz_8\":[\"Löschen\"],\"tXpRby\":[\"Datenraster\"],\"tbysEk\":[\"Aktionen\"],\"tdta9X\":[\"Seite \",[\"0\"]],\"tfDRzk\":[\"Speichern\"],\"tfEioV\":[\"Alle SQL-Zellen von oben nach unten ausführen\"],\"tiAIaJ\":[\"SSH-Passwort fehlt. Bitte erneut eingeben.\"],\"tk22BR\":[\"Strukturierte Daten einfügen und Schema vor dem Import prüfen\"],\"tst44n\":[\"Ereignisse\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL-Datei erfolgreich ausgeführt\"],\"u6QeR6\":[\"Jetzt neu starten\"],\"uAQUqI\":[\"Status\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc zum Schließen\"],\"uFViPK\":[\"Keine SSH-Verbindungen verfügbar\"],\"uHUuhp\":[\"Diese Abfrage erklären\"],\"uHfFzS\":[\"Editor-Schriftgröße\"],\"uJ_3K5\":[\"Notebook \\\"\",[\"0\"],\"\\\" löschen? Dies kann nicht rückgängig gemacht werden.\"],\"uKaNJ3\":[\"Im JSON-Editor öffnen\"],\"uQBwTo\":[\"Schemata\"],\"ub54ff\":[\"Plugin-Center\"],\"ufFyBs\":[\"Datenbank erfolgreich exportiert\"],\"upNmR2\":[\"Seitenleisten-Editor öffnen\"],\"upwIY4\":[\"Ansichtsdefinition\"],\"utMia3\":[\"Alle abwählen\"],\"uyNaJg\":[\"1 Element\"],\"v61dnS\":[\"Gib den exakten Modellnamen für deinen OpenAI-kompatiblen Anbieter ein.\"],\"v6oeyr\":[\"Installiert\"],\"v75DGg\":[\"Datei auswählen\"],\"v99dO4\":[\"Primärschlüssel\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Abfragen gefunden\"],\"other\":[\"#\",\" Abfragen gefunden\"]}]],\"vCSBPD\":[\"Filter hinzufügen\"],\"vH7uJj\":[\"Sortieren nach…\"],\"vUOA1-\":[\"Modelle suchen...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE enthält tatsächliche Zeilen, Laufzeit, Schleifen und Buffer-Zähler, sofern verfügbar.\"],\"vXIe7J\":[\"Sprache\"],\"vYf4Jm\":[\"Gib eine vollständige SQL-Funktion ein (z. B. ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Bevorzugen\"],\"vditm4\":[\"Plan erklären\"],\"vks_ls\":[\"Andere Tabs schließen\"],\"vnAnIp\":[\"Modell \",[\"0\"],\" wurde in \",[\"1\"],\" nicht gefunden. Es funktioniert möglicherweise nicht korrekt.\"],\"vqoN5u\":[\"Struktur\"],\"vrAvbP\":[\"Möchtest du die Gruppe \\\"\",[\"0\"],\"\\\" wirklich löschen? Verbindungen in dieser Gruppe werden in Ungruppiert verschoben.\"],\"vtJ2yO\":[\"Explorer\"],\"vujQJ5\":[\"Lokalisierung\"],\"vvJPVL\":[\"Übersicht anzeigen\"],\"vwI5S4\":[\"Erfolg\"],\"vzH-7Z\":[\"Erklären\"],\"w7QmD_\":[\"System-Prompt eingeben...\"],\"w9eMXw\":[\"Trigger\"],\"wCJFlW\":[\"Verstrichene Zeit\"],\"wCfv2R\":[\"Verbindung hinzufügen\"],\"wGfc86\":[\"Gesamten Verlauf löschen\"],\"wGwNv4\":[\"Aktive Datenbank\"],\"wJJ-Wy\":[\"Wird installiert...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffer-Treffer\"],\"wQn-RM\":[\"Spalte hinzufügen\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Angewendet\"],\"wTmVhm\":[\"Löschen\"],\"wZeIWq\":[\"Aus Zwischenablage importieren\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"Ausstehend\"],\"wckWOP\":[\"Verwalten\"],\"wdYcKH\":[\"Geöffnete Tabs\"],\"wja8aL\":[\"Ohne Titel\"],\"wkOAzk\":[\"Keine Notebooks entsprechen der Suche.\"],\"wp49Ao\":[\"Verarbeitung von Einfügungen fehlgeschlagen: \"],\"wqG2hQ\":[\"Überspringen (nicht importieren)\"],\"wwrAsK\":[\"Bitte fülle alle erforderlichen Felder aus\"],\"wwu18a\":[\"Symbol\"],\"x2fr_j\":[\"Graph\"],\"xANKBj\":[\"Funktionen\"],\"xBwjck\":[\"Ein Neustart ist erforderlich, um Änderungen anzuwenden.\"],\"xDAtGP\":[\"Nachricht\"],\"xECY01\":[\"Prozeduren\"],\"xGPNgZ\":[\"Prompt-Anpassung\"],\"xNgtS-\":[\"Keine Ansichten gefunden\"],\"xOPa1b\":[\"Der Port muss zwischen 1 und 65535 liegen\"],\"xY9s5E\":[\"Zeitüberschreitung\"],\"xaVUr1\":[\"Franz jagt im komplett verwahrlosten Taxi quer durch Bayern\"],\"xbvTzL\":[\"Dateipfad\"],\"xlew5F\":[\"Leeren\"],\"xmNyKz\":[\"Wird getestet...\"],\"xtuh6D\":[\"Explorer ausklappen\"],\"y-Zdqj\":[\"Kontext auswählen...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"JSON-Viewer öffnen\"],\"yQXjG5\":[\"Alle abwählen\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Gestern\"],\"ygCKqB\":[\"Stopp\"],\"ykCc6r\":[\"Datenbank geändert (Zelle \",[\"n\"],\")\"],\"ynVMSc\":[\"Alle auswählen\"],\"ytdz1d\":[\"KI möchte in die Datenbank schreiben\"],\"yyhzur\":[\"Tabelle erstellen\"],\"yz7wBu\":[\"Schließen\"],\"z0VdfR\":[\"Routine\"],\"z407wX\":[\"SSH-Passwort\"],\"z4oF5T\":[\"Datenbank sichern\"],\"z5kV0h\":[\"Verbindungen\"],\"zBTMzx\":[\"Vorschau\"],\"zCaAKs\":[\"Update-Fehler\"],\"zDAakK\":[\"Diagramm kann ohne Verbindungs-ID nicht angezeigt werden.\"],\"zGe21h\":[\"Dieser Schlüssel wird aus einer Umgebungsvariable geladen\"],\"zGfL5t\":[\"wert\"],\"zL6-4A\":[\"Es laufen keine Plugin-Prozesse\"],\"zLZhCi\":[\"Neue Discord-Community!\"],\"zLlCou\":[\"Spaltennamen kopieren\"],\"zNEL34\":[\"Der Community beitreten\"],\"zNgTlV\":[\"Tabs rechts schließen\"],\"zQz55p\":[\"Struktur anzeigen\"],\"zR0FfH\":[\"Exportiert nach \",[\"target\"]],\"zRZeOc\":[\"Tabellen, Views, Routinen, Trigger suchen...\"],\"zUNMsr\":[\"SSH-Schlüssel\"],\"zXMRzb\":[\"SSH-Port\"],\"zZgoXr\":[\"Keine passende Tabelle\"],\"zaWbms\":[\"Änderungen zurückrollen\"],\"zgClmU\":[\"Konfiguration installieren\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Wert eingeben...\"],\"zvzN4C\":[\"Als aktiv festlegen\"],\"zzDlyQ\":[\"Erfolg\"],\"zzMxrp\":[\"config.json bearbeiten\"],\"zz_Wd_\":[\"Modus\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Maximale Verlaufseinträge\"],\"-6AWa-\":[\"Verbindungen importieren\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Trennen\"],\"-PLZfh\":[\"Aktualisierung der Modelle fehlgeschlagen\"],\"-T5W2e\":[\"Treiberhinweise\"],\"-ZgeeE\":[\"Bearbeitungsverlauf\"],\"-aYrdc\":[\"Version \",[\"0\"],\" ist verfügbar\"],\"-fBGXl\":[\"Höchste Kosten\"],\"-jIQDz\":[\"Zelle einklappen\"],\"-u1eRo\":[\"Keine Datenbank\"],\"-yoeVU\":[\"Schema wird geladen...\"],\"-zy2Nq\":[\"Typ\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"Freigabe-ID\"],\"0E5-gF\":[\"Möchtest du diese Verbindung wirklich löschen?\"],\"0HCubq\":[\"Vergrößern\"],\"0Kmdvy\":[\"Benutzerdefinierte Schrift\"],\"0Nj13E\":[\"SQL generieren\"],\"0ROgz5\":[\"JSON eingeben...\"],\"0SY9sU\":[\"Trennen von der Datenbank fehlgeschlagen\"],\"0b3kL9\":[\"Datenbank auswählen\"],\"0caMy7\":[\"Verlauf\"],\"0mx5ow\":[\"Abfrage\"],\"0n9BtL\":[\"Vorschau\"],\"0pHB9N\":[\"Als table.column kopieren\"],\"0sQzZK\":[\"Datenbanken filtern...\"],\"0uPP9X\":[\"FK-Name (optional)\"],\"0wxuek\":[\"Aktuelle Version\"],\"0x09Aw\":[\"Bei Fehler stoppen umgeschaltet\"],\"0yBP6v\":[\"Entwicklung unterstützen\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen\"],\"other\":[\"#\",\" Zeilen\"]}]],\"0yVAoD\":[\"Zeilen zählen\"],\"0zxJ87\":[\"Keine Logs verfügbar\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Ansicht bearbeiten\"],\"11fGJ6\":[\"Abfragen\"],\"13hIUA\":[[\"0\"],\" API-Schlüssel\"],\"14qNWF\":[\"SSH-Verbindung auswählen\"],\"17qHRP\":[\"Neue Verbindung\"],\"1Dn6bg\":[\"Aus Zwischenablage importieren\"],\"1Dnd0I\":[\"Zeilenanzahl laden\"],\"1FjTLW\":[\"z. B. python3\"],\"1GOvbo\":[\"Ollama verbunden (\",[\"0\"],\" Modelle gefunden)\"],\"1I6UoR\":[\"Ansichten\"],\"1U7hS5\":[\"Länge\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Editor-Schriftfamilie\"],\"1ekzlY\":[\"Plugin-Prozesse\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Themaauswahl\"],\"1xVZkL\":[\"Keine Modelle gefunden\"],\"26Joci\":[[\"0\"],\" Zeilen abgerufen\"],\"2Bf-Qe\":[\"Neue Konsole\"],\"2CrSmP\":[\"Hilf tabularis zu wachsen\"],\"2D9F8_\":[\"Duplizieren der Verbindung fehlgeschlagen\"],\"2Eoi_a\":[\"Details anzeigen\"],\"2F4pE5\":[\"Rust-Build und Tests\"],\"2Fsd9r\":[\"Diesen Monat\"],\"2JzKXI\":[\"GENERATED setzen\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Alle auswählen\"],\"2SO5RM\":[\"Kubernetes ist für diesen Treiber nicht verfügbar.\"],\"2Uh5GA\":[\"Cargo-Ökosystem\"],\"2YylFp\":[\"Neue visuelle Abfrage\"],\"2luuSG\":[\"Erneut versuchen\"],\"2wxgft\":[\"Umbenennen\"],\"2yG2GC\":[\"Pausiert Schreibvorgänge (oder jede Abfrage) und fragt den Nutzer vor der Ausführung.\"],\"30-b5r\":[\"Löschen\"],\"31kwdN\":[\"Filter duplizieren\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Alle Tools\"],\"3Am5DS\":[\"Tab-Ansicht\"],\"3FVg9_\":[\"Lokale Spalte\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Ausführen\"],\"3L0HCz\":[\"Keine Plugins entsprechen der Suche.\"],\"3Nv3JV\":[\"Abfrage wird ausgeführt...\"],\"3TSz9S\":[\"Minimieren\"],\"3UW8fG\":[\"Updates werden von \",[\"0\"],\" verwaltet\"],\"3YvS-c\":[\"Neuer Tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook-Zellnamen-Prompt\"],\"3qkggm\":[\"Vollbild\"],\"3rBJ1T\":[\"Schema anzeigen\"],\"3xZ-xV\":[\"Aktuellen Zeitstempel einfügen\"],\"40Gx0U\":[\"Zeitzone\"],\"41GP4f\":[\"Wähle das Standard-Trennzeichen für das Kopieren oder Exportieren von Zeilen als CSV.\"],\"42iaEi\":[\"PostgreSQL ohne ANALYZE zeigt nur Schätzungen des Planners.\"],\"44cXI8\":[\"Nach \",[\"colName\"],\" ASC sortieren\"],\"4AF7FO\":[\"Datenbanken verwalten\"],\"4CK17g\":[\"Möchtest du die Ansicht \\\"\",[\"name\"],\"\\\" wirklich ändern?\"],\"4DDaw-\":[\"Wähle mindestens eine Datenbank aus\"],\"4D_Nvt\":[\"Erstellen der Gruppe fehlgeschlagen\"],\"4RiR6c\":[\"Als HTML exportieren\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Kindprozess\"],\"other\":[\"#\",\" Kindprozesse\"]}]],\"4TtbAT\":[\"Fetch the latest translations from the cloud without waiting for an app update.\"],\"4VyuY3\":[\"Möchtest du wirklich alle Logs löschen?\"],\"4WWqS3\":[\"JSON-Baum ein-/ausklappen\"],\"4XAQdl\":[\"Index erstellen\"],\"4cEClj\":[\"Sitzungen\"],\"4cmfYp\":[\"Zeile duplizieren\"],\"4hsr6d\":[\"Ansicht erstellen\"],\"4lIZTB\":[\"Frontend-Entwicklungsabhängigkeiten\"],\"4oYjvJ\":[\"In Abfrage suchen…\"],\"4tMxW4\":[\"Verknüpften Datensatz anzeigen\"],\"4yJcjm\":[\"Typ auswählen...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Filterpanel schließen (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Semikolon (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Ereignis\"],\"other\":[\"#\",\" Ereignisse\"]}]],\"5I2fxu\":[\"/pfad/zu/id_rsa\"],\"5NZpX8\":[\"Listenansicht\"],\"5To6Z6\":[\"Abfrage kopieren\"],\"5gqNQl\":[\"Rasteransicht\"],\"5igIzr\":[\"Import abgebrochen\"],\"5nTIup\":[\"Ansicht wird bearbeitet: \",[\"name\"]],\"5qIe8E\":[\"Alle ausführen\"],\"66bEht\":[\"Projektstatus\"],\"6PIJVc\":[\"Start\"],\"6QvP0l\":[\"Als JSON exportieren\"],\"6W41Xq\":[\"Task-Manager\"],\"6WngBH\":[\"NULL setzen\"],\"6YtxFj\":[\"Name\"],\"6_dCYd\":[\"Übersicht\"],\"6dOBsk\":[\"Ansicht erstellen\"],\"6gvoHP\":[\"Fehlermeldung kopieren\"],\"6oCVzX\":[\"Der Kubernetes-Kontext ist erforderlich\"],\"6wQO0f\":[\"Daten anzeigen\"],\"6z9W13\":[\"Neu starten\"],\"71agNy\":[\"Namen für unbenannte Zellen mit KI generieren\"],\"74J3FG\":[\"Erste Version\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Verstanden\"],\"77nSMU\":[\"Den gesamten KI-Aktivitätsverlauf löschen? Unwiderruflich.\"],\"7ABmyQ\":[\"Erneut versuchen\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" von \",[\"0\"],\" aktiv\"],\"7E864M\":[\"Datenbanktyp\"],\"7FqaG1\":[\"Passe die Anweisungen für die KI-Analyse von EXPLAIN-Abfrageplänen an. Verwende \",[\"LANGUAGE\"],\" für die Ausgabesprache.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Gemischte Typen erkannt, Standard TEXT\"],\"7RSQQd\":[\"Passwörter im Keychain speichern\"],\"7VpPHA\":[\"Bestätigen\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fehlgeschlagen\"],\"7sMeHQ\":[\"Schlüssel\"],\"7sNhEz\":[\"Benutzername\"],\"7tATh2\":[\"Abfrage ausführen\"],\"7yb4gk\":[\"Fehlgeschlagen: \"],\"8-4V8D\":[\"Tabellen\"],\"82G-l5\":[\"Das Model Context Protocol (MCP) ermöglicht KI-Assistenten (wie Claude), sich mit deinen lokalen Tools zu verbinden. Tabularis stellt einen MCP-Server bereit, über den KI dein Datenbankschema lesen und Abfragen sicher ausführen kann.\"],\"83VjWE\":[\"Neues Notebook\"],\"86IgoU\":[\"Abfrage ausführen (im Editor)\"],\"86fCgf\":[\"Passe die Anweisungen für die KI-Namensgenerierung von Abfrage-Ergebnis-Tabs an. Die SQL-Abfrage wird als Benutzernachricht gesendet.\"],\"87a_t_\":[\"Beschriftung\"],\"87kWsr\":[\"Verbindungen exportieren\"],\"8CWirf\":[\"MCP-Server\"],\"8S8aIX\":[\"Verbindungszustandsprüfung\"],\"8TMaZI\":[\"Zeitstempel\"],\"8Tg_JR\":[\"Benutzerdefiniert\"],\"8UFKYr\":[\"Abfrage zum Ausführen auswählen\"],\"8VKSGV\":[\"SQL generieren\"],\"8Wjy6z\":[\"Tabs links schließen\"],\"8ZsakT\":[\"Passwort\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL-Editor\"],\"8bRgTe\":[\"KI-Anbieter nicht konfiguriert. Bitte gehe zu Einstellungen > KI.\"],\"8c_W0h\":[\"Ältere Versionen\"],\"8guEQP\":[\"Ansichten aktualisieren\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN ist leichtgewichtig und hauptsächlich strukturell.\"],\"8q_sOc\":[\"Entfernen\"],\"8t-akp\":[\"erste \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Verbindungsname\"],\"91gnWY\":[\"Logs exportieren\"],\"91rtHL\":[\"Neue Ansicht erstellen\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Neue Gruppe\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Ansicht erfolgreich aktualisiert\"],\"9NzDFn\":[\"Willkommensbildschirm beim Start der Anwendung anzeigen.\"],\"9OoUS3\":[\"Neue SSH-Verbindung erstellen\"],\"9QGRD5\":[\"Zielspalte\"],\"9QTny9\":[\"Abfrage fehlgeschlagen.\"],\"9S-fyV\":[\"Vorab-Ausführungsplan\"],\"9SJ_Sx\":[\"Systemressourcen\"],\"9UQ730\":[\"Klonen\"],\"9X6cky\":[\"NEIN\"],\"9XUV5V\":[\"Keine Daten in der Zwischenablage\"],\"9hGjL2\":[\"Index erstellen\"],\"9mMU1R\":[\"Zeit\"],\"9mvFo_\":[\"Zeit\"],\"9npOH9\":[\"Datei öffnen\"],\"9uI_rE\":[\"Rückgängig\"],\"9xUjzm\":[\"Alle auswählen\"],\"9y_02p\":[\"Mit der Community chatten, Hilfe bekommen, Features vorschlagen\"],\"A1pPcI\":[\"SSH-Host\"],\"A1taO8\":[\"Suchen\"],\"A6C0pv\":[\"Gesamtkosten\"],\"A7WG0p\":[\"Plugin deaktiviert\"],\"A7yRz3\":[\"Ansichtsdefinition ist erforderlich\"],\"A9Uyp6\":[\"Import fehlgeschlagen: \"],\"ABEd-z\":[\"Verwende deinen Paketmanager, um Tabularis zu aktualisieren.\"],\"AMdgKV\":[\"Prompt für Explain-Plan-Analyse\"],\"ANSTMe\":[\"In der aktuellen Planzusammenfassung wurden keine größeren Probleme erkannt.\"],\"ANzIr7\":[\"Abfrageverlauf\"],\"AOnaU7\":[\"übersprungen\"],\"AVlZoM\":[\"Umgebung\"],\"AXTVsE\":[\"Vollständig prüfen\"],\"AXdRYR\":[\"Aktuelle Logs\"],\"Aa-YkQ\":[\"Notebook exportieren\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Nach Level filtern\"],\"AlPiMN\":[\"Klicken, um zur Seite zu springen\"],\"An-1rA\":[\"Zeilen zurück\"],\"AnV8j-\":[\"Spalte ändern\"],\"AvEr_L\":[\"Neue Konsole\"],\"AvYbUL\":[\"Auf GitHub mit Stern markieren\"],\"Aw_eOs\":[\"Erfordert Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Keine Ergebnisse gefunden\"],\"B0mJGb\":[\"Rohausgabe\"],\"B1c58n\":[\"Spalte ändern\"],\"B3toQF\":[\"Objekte\"],\"B5nKny\":[\"/absoluter/pfad/zum/ordner\"],\"B5xevr\":[\"Der Verbindungsname ist erforderlich\"],\"BAVvWJ\":[\"ER-Diagramm\"],\"BBtVak\":[\"Alle einklappen\"],\"BEVzjL\":[\"Import fehlgeschlagen\"],\"BHATjK\":[\"Verbindungen exportieren\"],\"BJe2lZ\":[\"Seitenleiste umschalten\"],\"BK3WCj\":[\"Laden des Registry fehlgeschlagen\"],\"BKbO3i\":[\"Notebook bearbeitet\"],\"BMB51y\":[\"In Konsole ausführen\"],\"BNW_Z4\":[\"z. B. active_users, order_summary\"],\"BPkXj7\":[\"Fremdschlüssel erstellen\"],\"BUO_JN\":[\"Abfrage kopieren\"],\"BYkhHY\":[\"Beim Start nach Updates suchen\"],\"BeSg6-\":[\"Anwendungslogs zur Fehlersuche im Speicher sammeln\"],\"BgAyQH\":[\"Sortierung löschen\"],\"BinTJI\":[\"npm-Ökosystem\"],\"BkFson\":[\"Automatisch paginiert\"],\"Bpglf1\":[\"Nach oben\"],\"BrGo6h\":[\"Notebooks suchen\"],\"BxiAN_\":[\"Abfrage löschen\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Frontend-Abhängigkeiten\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Keine Filter —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Wird heruntergeladen...\"],\"CUxwxn\":[\"Alle Tabellen anzeigen\"],\"CWMXbw\":[\"stoppt den Prozess sofort. Alle aktiven Datenbankverbindungen über dieses Plugin funktionieren erst wieder, wenn das Plugin neu gestartet wird.\"],\"CZt6BX\":[\"MANUELLE KONFIGURATION\"],\"Ca8ixZ\":[\"Löschen\"],\"CbJBQS\":[\"Aktualisierung fehlgeschlagen: \"],\"Cdz-YU\":[\"Gestapelte Ansicht\"],\"CpeQf9\":[\"Schleifen\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Wähle das Modell, das für Generierung und Erklärung verwendet werden soll.\"],\"DB8zMK\":[\"Anwenden\"],\"DDXf5E\":[\"SQL-Funktionen\"],\"DEwnwi\":[\"Löschen\"],\"DNTvdl\":[\"Im Editor öffnen\"],\"DPc2P9\":[\"Zelle löschen\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Zeilenhöhe\"],\"Dd7YLj\":[\"Vielleicht später\"],\"Deej3j\":[\"Ungültiges JSON\"],\"DfKhk_\":[\"Aktualisieren\"],\"DiRiTz\":[\"Paketseite öffnen\"],\"DlRHAD\":[\"EXPLAIN wird ausgeführt...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Fehler\"],\"other\":[\"#\",\" Fehler\"]}]],\"Dvdihe\":[\"Auf \",[\"0\"],\" — vor Ausführung prüfen.\"],\"DzFLzw\":[\"JA\"],\"E-JUtQ\":[\"Freigabe\"],\"E0kcnZ\":[\"Allgemein\"],\"E2mje_\":[\"Abfrage zum Erklären auswählen\"],\"EDieyg\":[\"Möchtest du diese SSH-Verbindung wirklich löschen?\"],\"EHZxPj\":[\"Aufklappen\"],\"EL4oDO\":[\"Neue Version verfügbar\"],\"EPi4gT\":[\"Sortieren nach \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Ungruppiert\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Unbekannt\"],\"EhADgB\":[\"Spalte löschen\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Du bist auf dem neuesten Stand\"],\"Em6JFd\":[\"Zeilen zählen\"],\"EnGiqG\":[[\"0\"],\" Elemente\"],\"Ew1n5z\":[\"Plugins suchen…\"],\"F18WP3\":[\"Parameter\"],\"F3uc1x\":[\"Die exportierte Datei enthält deine Datenbank- und SSH-Passwörter im Klartext. Bewahre sie sicher auf.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" Zeilen\"],\"other\":[\"#\",\" Zeilen\"]}]],\"F6pfE9\":[\"Aktiv\"],\"F8tXg7\":[\"Datenvorschau\"],\"F9-6yK\":[\"Standard-Kopierformat\"],\"F9lxfG\":[\"Entfernen\"],\"F9nsa2\":[\"Die Verlaufsdatei war beschädigt und wurde beiseitegelegt. Neue Abfragen werden wie gewohnt aufgezeichnet. Sicherungsdatei:\"],\"FF_oap\":[\"Standardwert\"],\"FK8rlP\":[\"Noch keine SSH-Verbindungen konfiguriert\"],\"FMRcH8\":[\"Erste Zeile als Kopfzeile\"],\"FNvDMc\":[\"Diese Woche\"],\"FQe1FI\":[\"Geschätzte Zeilen\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warnung\"],\"FZg3wM\":[\"Operation\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Wähle ein unabhängiges Thema für den SQL-Editor oder halte es mit dem App-Thema synchron.\"],\"FsvZQL\":[\"Zelle \",[\"n\"],\" bearbeitet\"],\"FtwKL9\":[\"Tab wechseln\"],\"FznI3z\":[\"Fremdschlüssel \\\"\",[\"name\"],\"\\\" löschen?\"],\"G6W8j1\":[\"Vorschau fehlgeschlagen: \"],\"G8Q5Zq\":[\"Der Namespace ist erforderlich\"],\"GAohqx\":[\"Spalte löschen\"],\"GJR99u\":[\"Löschen der Spalte fehlgeschlagen: \"],\"GKfzzM\":[\"Verbindung auswählen...\"],\"GS-Mus\":[\"Exportieren\"],\"GUaLUq\":[\"Laden des Schemas fehlgeschlagen: \"],\"GXP-Iw\":[\"SQL-Zelle hinzufügen\"],\"Gj1mLb\":[\"Zellen neu angeordnet\"],\"GlbqG2\":[\"Auf Treiber-Standard zurücksetzen\"],\"Gq1YzP\":[\"Ereignisse\"],\"Gs5AlY\":[\"Öffnen\"],\"GtmO8_\":[\"von\"],\"GxkJXS\":[\"Wird hochgeladen...\"],\"H-o4D2\":[\"Neue Spalte erstellen\"],\"H2B-KW\":[\"Wähle das Standardformat beim Kopieren von Zeilen mit Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Wiederholen\"],\"H7mlCc\":[\"/absoluter/pfad/zu/db.sqlite\"],\"H86f9p\":[\"Verkleinern\"],\"H9HlDe\":[\"minutes\"],\"H9P8CD\":[\"den ersten Filter hinzufügen\"],\"HAQlGl\":[\"KI-Aktivität\"],\"HKNZrs\":[\"Index-Bedingung\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"#\",\" Zeilen löschen\"],\"other\":[\"#\",\" Zeilen löschen\"]}]],\"HPuCiP\":[\"Ordnerpfad\"],\"HUs1R3\":[\"Keine geöffneten Tabs für diese Verbindung.\"],\"HV4Isp\":[\"SSH-Passwort eingeben\"],\"HVC8Hh\":[\"In Zwischenablage kopiert\"],\"HWEpq8\":[\"Datenträger schreiben/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Speichern der Ansicht fehlgeschlagen: \"],\"He8v1Y\":[\"Von \\\"Alle anwenden\\\" abwählen\"],\"HehHP1\":[\"Standard-Layout\"],\"HilYn4\":[\"Dieses Notebook ist leer. Füge eine Zelle hinzu, um zu beginnen.\"],\"HjxVK_\":[\"Schneller Verbindungstest\"],\"HmMnRx\":[\"WKT-Modus\"],\"HoKCiI\":[\"Die App wird nach der Installation automatisch neu gestartet\"],\"HpK_8d\":[\"Neu laden\"],\"Hpi4Jm\":[\"Jetzt beitreten\"],\"HuA3RU\":[\"Tabulator\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"SSH inline konfigurieren\"],\"I5VBsr\":[\"Wie App\"],\"I8yrPb\":[\"Tabelle ersetzen\"],\"I92BdB\":[\"Aus Gruppe entfernen\"],\"I92fr4\":[\"Später erinnern\"],\"I99Miw\":[\"Kosten\"],\"IETZIR\":[\"Zellnamen bearbeiten\"],\"IG9wzA\":[\"Einfügen der Zeile fehlgeschlagen: \"],\"ILleOG\":[\"Der Ressourcentyp muss \\\"service\\\" oder \\\"pod\\\" sein\"],\"IQ3gAw\":[\"Datei hochladen\"],\"IUwGEM\":[\"Änderungen speichern\"],\"IUwmLq\":[\"Direkte Abhängigkeiten, deklariert in package.json und src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Open-Source-Bibliotheken\"],\"I_43p6\":[\"Sicherheit\"],\"Iaizf4\":[\"Darstellung\"],\"Il3FBB\":[\"Strukturiertes Filterpanel ein-/ausblenden\"],\"IniZRK\":[\"Download nicht verfügbar - nur Vorschau geladen\"],\"Isaozb\":[\"Überprüfen & anpassen\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Aktive Abfragen und Verbindungen über dieses Plugin werden unterbrochen.\"],\"J6v1s_\":[\"Standard-Modell\"],\"JE-DVk\":[\"Interpreter\"],\"JEGlfK\":[\"Start\"],\"JKDPqP\":[\"Zuerst einen Kontext auswählen\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"SSH-Tunnel verwenden\"],\"JRz8tw\":[\"MySQL und MariaDB liefern echte Metriken nur bei unterstützten EXPLAIN ANALYZE- oder ANALYZE FORMAT-Varianten.\"],\"JUICth\":[\"PNG, JPG, WebP oder SVG · max. 512 KB\"],\"JY5Oyv\":[\"Datenbank\"],\"JlFRIB\":[\"Sitzungszeitzone, die nach dem Verbindungsaufbau an MySQL gesendet wird.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Abgelehnt\"],\"K3H9p5\":[\"Nicht gesetzt\"],\"K5Dgu_\":[\"Datenbanken\"],\"K8IGKf\":[\"Authentifizierungstyp\"],\"KAYNSW\":[\"Wie viele Logs im Speicher behalten werden sollen (1-10000)\"],\"KHTGbr\":[\"Vorab-EXPLAIN\"],\"KHvda8\":[\"Nicht Null\"],\"KJKNaZ\":[\"Als `column` kopieren\"],\"KM5Kc8\":[\"Mindestens eine Spalte muss ausgewählt werden\"],\"KSCnVQ\":[\"Typ\"],\"KUjOb9\":[\"läuft\"],\"KXBdwy\":[\"Routinen aktualisieren\"],\"KXNyX7\":[\"DEFAULT setzen\"],\"Kd70-v\":[\"Aus Zwischenablage importieren...\"],\"KhI4oS\":[\"Referenzierte Zeile in \",[\"0\"],\" öffnen\"],\"KhgrNu\":[\"MCP-Server-Integration\"],\"KirERL\":[\"Zeitüberschreitung\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Löschen des Index fehlgeschlagen: \"],\"KzeARD\":[\"Löschen der Tabelle fehlgeschlagen: \"],\"L-rMC9\":[\"Auf Standard zurücksetzen\"],\"L3HXkQ\":[\"Fehlerbehebungen\"],\"LCZ7Dy\":[\"Namen kopieren\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"Indizes\"],\"LMeAoR\":[\"Zeilen\"],\"LPCdc-\":[\"Prompt für Abfrage-Tabnamen\"],\"LPFmga\":[\"Für \\\"Alle anwenden\\\" auswählen\"],\"LYzbQ2\":[\"Tool\"],\"Lbis_V\":[\"Schnellnavigation\"],\"Lcpbe2\":[\"Der Plugin-Prozess konnte nicht gestartet werden. Prüfe die Fehlerdetails unten.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN wird nur für DML-Statements (SELECT, INSERT, UPDATE, DELETE) unterstützt. DDL-Statements wie CREATE, DROP oder ALTER können nicht erklärt werden.\"],\"LnT0hQ\":[\"Spalte hinzufügen\"],\"LvutiO\":[\"KI-Vorschlag\"],\"M-rHQO\":[\"Vollbild verlassen\"],\"M0XJba\":[\"Möchtest du den gesamten Abfrageverlauf für diese Verbindung wirklich löschen?\"],\"M1co_O\":[\"Konfiguriert\"],\"M73whl\":[\"Kontext\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Alle anzeigen\"],\"MXdOwj\":[\"Verbindungen trennen\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"K8s-Verbindung auswählen\"],\"Mc1tjS\":[\"Aktiviere ANALYZE, um tatsächliche Zeilen, Laufzeit, Schleifen und Buffer zu prüfen.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" weitere Zeilen\"],\"Mp0jQ_\":[\"Dieser Treiber unterstützt Primärschlüssel nur beim Erstellen einer Tabelle\"],\"MqpZwN\":[\"Tabularis-Prozess\"],\"MxIx43\":[\"↑↓ zum Navigieren, Enter zum Öffnen\"],\"MygtgQ\":[\"Markdown-Zelle hinzufügen\"],\"N40H-G\":[\"Alle\"],\"N5UQxq\":[\"Ollama wurde auf Port \",[\"0\"],\" nicht erkannt. Läuft es?\"],\"N6GBcC\":[\"Löschen bestätigen\"],\"N6aqHp\":[\"Ausgeführte Abfragen\"],\"N9_S15\":[\"Eine neue Tabelle wird erstellt\"],\"NBdMa1\":[\"Langsamster Schritt\"],\"NC2AI2\":[\"Länge\"],\"NCzNnx\":[\"Aufsteigend sortieren\"],\"NT4Ubs\":[\"Benutzerdefinierten Schlüssel löschen und auf Umgebungsvariable zurücksetzen (falls vorhanden)\"],\"NUjrCO\":[\"Keine Favoriten entsprechen deiner Suche\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Baum-Gesamt: \",[\"0\"]],\"Nc2VQn\":[\"An bestehende anhängen\"],\"NgFERn\":[\"Zu Favoriten hinzufügen\"],\"NktMHG\":[\"Datenbankname\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Testen\"],\"Nq5QTk\":[\"n-te erklären\"],\"O2STgu\":[\"Export fehlgeschlagen: \"],\"O8SV8O\":[\"Wird heruntergeladen...\"],\"O9_WW6\":[\"Verbindung\"],\"OGEsKj\":[\"Alle Zellen ausführen\"],\"OGWdBg\":[\"Ansichtsname\"],\"OHqT6w\":[\"Tastenkombination drücken...\"],\"OXJsaG\":[\"Ungültiger Parametername\"],\"OfhWJH\":[\"Zurücksetzen\"],\"OlAl5i\":[\"Alle ausklappen\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Discord beitreten\"],\"P1YGsb\":[\"SQL-Generierung\"],\"P2m1xb\":[\"Bei Fehler stoppen\"],\"P3Qlys\":[\"Keine Verbindungs-ID\"],\"P6Y3Yf\":[\"Führe diesen Befehl im Terminal aus und starte anschließend Claude Code neu.\"],\"PCdj-c\":[\"Alle abwählen\"],\"PMnFt9\":[\"Datenträger lesen/s\"],\"PQU2Va\":[\"Vorschlag mit Eingabetaste übernehmen\"],\"PRnH8G\":[\"von \",[\"0\"]],\"PY8UF3\":[\"Parallel umgeschaltet (Zelle \",[\"n\"],\")\"],\"PiH3UR\":[\"Kopiert!\"],\"Pia95d\":[\"Spaltenname ist erforderlich\"],\"PrElXQ\":[\"Aktualisieren\"],\"PrixCC\":[\"Zeilen werden an eine bestehende Tabelle angehängt\"],\"Pujgbb\":[\"Ziel konfigurieren\"],\"Pw_eQV\":[\"Plugin konnte nicht gestartet werden\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Keine gespeicherten Abfragen\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Keine Kindprozesse\"],\"QCxMC0\":[\"Automatisch nach neuen Versionen suchen, wenn die App gestartet wird\"],\"QEazml\":[\"Auswahl löschen\"],\"QHcLEN\":[\"Verbunden\"],\"QLHHFO\":[\"Nur-Lese-Modus\"],\"QOvAW3\":[\"Neue Funktionen\"],\"QULGRi\":[\"Keine gültigen Abfragen gefunden\"],\"QZwllF\":[\"Durchsuchen...\"],\"QbkSr_\":[\"EXPLAIN nicht verfügbar.\"],\"QeHFYZ\":[\"EXPLAIN fehlgeschlagen: \",[\"0\"]],\"Qll2Tb\":[\"Abst.\"],\"Qoq-GP\":[\"Mehr lesen\"],\"Qu4Hog\":[\"Notebook erfolgreich importiert\"],\"R-A2Vd\":[\"Keine Daten zum Anzeigen\"],\"R0Hkb2\":[[\"0\"],\" Datenbank(en) ausgewählt\"],\"R1nHhB\":[\"Bereits vorhanden\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"In Konsole umwandeln\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Einrichtung\"],\"RF-HyV\":[\"Wähle deine bevorzugte Sprache. \\\"Auto\\\" verwendet die Systemsprache.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Namen kopieren\"],\"RI-HZc\":[[\"0\"],\"-Schlüssel eingeben\"],\"RJrE17\":[\"Möchtest du die Ansicht \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Ein Stern hilft anderen, das Projekt zu entdecken\"],\"Rb3Tdm\":[\"Notebook-Name\"],\"RcbKJ3\":[\"Bei Aktualisierung\"],\"RkefFq\":[\"Führt vor dem Modal ein EXPLAIN aus, damit der Plan sichtbar ist.\"],\"RnF_hl\":[\"Plugin-Registry wird geladen...\"],\"Rns7_C\":[\"Diese Aktion kann nicht sofort rückgängig gemacht werden\"],\"RoKRqW\":[\"Verfügbare Plugins\"],\"RphpKk\":[\"Erscheinungsbild\"],\"Rt8sHM\":[\"Sortier- oder temporäre Arbeit erkannt\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Aktiviert\"],\"S1veKH\":[\"Auswahl zurücksetzen\"],\"S5zeZU\":[\"Vorschau umschalten\"],\"S8Yqbl\":[\"Einfügen\"],\"SDND4q\":[\"Nicht konfiguriert\"],\"SJRy3D\":[\"(Automatisch generiert)\"],\"SSwIjo\":[\"EMPTY setzen\"],\"SgvA_r\":[\"Drücke Ausführen (Ctrl/Command+F5), um Tabellendaten zu laden\"],\"SlfejT\":[\"Fehler\"],\"SoATkx\":[\"Zelle kopieren\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"Endpoint-URL\"],\"T7w5CQ\":[\"Erstellen einer neuen Zeile fehlgeschlagen: \"],\"T9947j\":[\"Wert (z. B. 'Text' oder 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Zum vertikalen Layout wechseln\"],\"TK5oex\":[\"Prompt speichern\"],\"TKQ7K-\":[\"Installieren\"],\"TKZreP\":[\"Erforderlich\"],\"TMLAx2\":[\"Erforderlich\"],\"TO08JI\":[\"Fremdschlüssel\"],\"TVKqvO\":[\"Zeile bearbeiten\"],\"TYSdQ3\":[\"SELECT-Abfrage ausführen\"],\"TfDFHS\":[\"Lange Zeilen im Editor umbrechen statt horizontal zu scrollen.\"],\"Tibfjs\":[\"Keine gespeicherten Verbindungen — erstelle unten eine\"],\"Tj36Dr\":[\"Auf Standard zurücksetzen\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Sperren\"],\"TpwXyg\":[\"Fehlen Zeitwerte, hat der Server wahrscheinlich nur einen geschätzten Plan geliefert.\"],\"Tw2M1h\":[\"Installation fehlgeschlagen\"],\"Ty-rm9\":[\"SSH-Verbindungen\"],\"Tz0i8g\":[\"Einstellungen\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes-Verbindungen\"],\"U4uzyV\":[\"Neuigkeiten\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Ausführung stoppen, wenn eine Zelle fehlschlägt\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" auf \",[\"1\"],\" — vor Ausführung prüfen.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Konfiguration für \",[\"clientName\"],\" erfolgreich installiert! Starte die App neu, um sie anzuwenden.\"],\"URmyfc\":[\"Details\"],\"UWQBvp\":[\"SQL-Vorlagen generieren\"],\"UawTKZ\":[\"Optional. Gib die ausführbare Datei an, die zum Starten dieses Plugins verwendet wird (z. B. python3 unter macOS/Linux, python oder ein vollständiger Pfad unter Windows). Leer lassen, um den Standard zu verwenden.\"],\"Ub8sf5\":[\"SQLite unterstützt das Löschen von Fremdschlüsseln via ALTER TABLE nicht.\"],\"UbbJ8j\":[\"Keine Optionen gefunden\"],\"Ubs68g\":[\"Allgemein\"],\"UftN8J\":[\"Diese Verbindungen lehnen Schreibvorgänge ab. Andere verhalten sich normal.\"],\"UnQNah\":[\"Möchtest du die Spalte \\\"\",[\"0\"],\"\\\" aus der Tabelle \\\"\",[\"tableName\"],\"\\\" wirklich löschen?\\n\\nWARNUNG: Dadurch werden alle Daten in dieser Spalte dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.\"],\"UncTTh\":[\"Summe des RSS über den Prozessbaum — gemeinsam genutzter Speicher kann doppelt gezählt werden\"],\"UpjgFm\":[\"Parameter geändert\"],\"UsAnu1\":[\"ANALYZE führt die Abfrage aus. Bei datenverändernden Statements mit Vorsicht verwenden.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tabgröße\"],\"UzWGWO\":[\"Zum SQL-WHERE-Eingabefeld wechseln\"],\"V-chk5\":[\"Wie oft geprüft werden soll, ob aktive Verbindungen noch erreichbar sind. Setze 0, um die Prüfung zu deaktivieren.\"],\"V-pw1j\":[\"Tabellenname\"],\"V2T0Uw\":[\"Noch keine gespeicherten Notebooks.\"],\"V3aNwx\":[\"Dateneditor\"],\"VGYp2r\":[\"Auf alle anwenden\"],\"VH8S7x\":[\"Zwischenablage-Spalte\"],\"VIAEcS\":[\"Laden der Datenbanken fehlgeschlagen. Prüfe deine Anmeldedaten.\"],\"VKdztF\":[\"Zeilen anhängen\"],\"VLiHXI\":[\"Daten analysieren\"],\"VMbmXc\":[\"Möchtest du \\\"\",[\"pluginName\"],\"\\\" wirklich entfernen? Dadurch werden die Plugin-Dateien gelöscht.\"],\"VO3weF\":[\"Keine Datei geladen\"],\"VOZlKc\":[\"Datenbank importieren\"],\"VPzsIz\":[\"Name wird generiert...\"],\"VUul0v\":[\"Das Beenden von\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Alle Abfragen\"],\"Vi2Pqx\":[\"von\"],\"Vl2zn2\":[\"gestoppt\"],\"Vo4uBA\":[\"Bei der Installation des Plugins ist ein Fehler aufgetreten. Siehe Details unten.\"],\"VqqyOs\":[\"Führe eine Abfrage aus, um Ergebnisse zu sehen\"],\"VzhDFh\":[\"Blockiere jede Nicht-SELECT-Anweisung über MCP, außer für die unten erlaubten Verbindungen.\"],\"W3uwpT\":[\"Alle Tabs schließen\"],\"W4MKLh\":[\"z.B. In Prod riskant, bestätigen…\"],\"W60eXm\":[\"Tabelle\"],\"WA8RND\":[\"Möchtest du die Tabelle \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"WG8Qgt\":[\"Tabelle löschen\"],\"WLnvCZ\":[\"Benutzername eingeben\"],\"WM-__8\":[\"Verbindungen suchen...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen in \\\"\",[\"tableName\"],\"\\\" importiert\"],\"other\":[\"#\",\" Zeilen in \\\"\",[\"tableName\"],\"\\\" importiert\"]}]],\"WTfntM\":[\"Möchtest du die Abfrage \\\"\",[\"0\"],\"\\\" wirklich löschen?\"],\"WarTN_\":[\"erfolgreich\"],\"WcF1uL\":[\"Gruppenname\"],\"Weq9zb\":[\"Allgemein\"],\"WmPpB1\":[\"Ausführungsplan wird geladen…\"],\"Wu7cK0\":[\"Keine Datenbanken gefunden\"],\"WvoUQF\":[\"Zelle \",[\"n\"],\" gelöscht\"],\"Ww3pDD\":[\"MANUELLER BEFEHL\"],\"X-20AU\":[\"Prompt für Abfrage-Tabnamen eingeben...\"],\"X-U6_w\":[\"Schriftfamilie\"],\"X5fs0g\":[\"Erstelle deine erste Verbindung, um loszulegen.\"],\"X7Ayjp\":[\"Passwort im System-Keychain gespeichert\"],\"X9kySA\":[\"Favoriten\"],\"XJOV1Y\":[\"Aktivität\"],\"XMCLEL\":[\"Create New Trigger\"],\"XN_sSd\":[\"Automatic updates\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Abfrageerklärung\"],\"XVF2Pf\":[\"Schemata bearbeiten\"],\"XW6OYF\":[\"Dieses Plugin benötigt möglicherweise einen Interpreter (z. B. Python). Verwende die Plugin-Einstellungen, um den Interpreter-Pfad zu konfigurieren.\"],\"XZB6Xr\":[\"Maximale Log-Einträge\"],\"Xcffv2\":[\"Zeigt die Schaltflächen AI Assist und Explain im Editor an\"],\"XeqTSh\":[\"Join-Typ\"],\"XmJfZT\":[\"name\"],\"XoQfG1\":[\"SSH-Benutzer\"],\"XwI0Vw\":[\"Auto (System)\"],\"XyDlLX\":[\"Indexname\"],\"Y2P2aK\":[\"Wähle die zu ladenden Schemata aus:\"],\"Y8HYw2\":[\"Wert\"],\"Y8zX3R\":[\"In Editor einfügen\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Suchen...\"],\"YWlnMZ\":[\"Ollama-Port\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Durchsuche und installiere Plugins aus dem Registry.\"],\"Y_3yKT\":[\"In neuem Tab öffnen\"],\"YiAQ_Q\":[\"Tabellen aktualisieren\"],\"Ysjr9Y\":[\"SQL-Vorschau\"],\"YswNf7\":[\"Alle Level\"],\"YtNwr6\":[\"Maximale Anzahl an Abfrageverlaufseinträgen pro Verbindung.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Wird geladen...\"],\"Z7ZXbT\":[\"Freigeben\"],\"Z8JpBH\":[\"Als Notebook exportieren\"],\"Z8fBIc\":[\"Tatsächliche Zeilen übersteigen die Schätzung\"],\"ZC2VJP\":[\"Ausführen\"],\"ZCIS4k\":[\"keine aktiven Filter\"],\"ZF1_UT\":[\"SSL-Modus\"],\"ZGjBPa\":[\"Logs löschen\"],\"ZHQTlM\":[\"Importiere aus\"],\"ZIFDoJ\":[\"Bitte wähle mindestens Struktur oder Daten\"],\"ZIZA6o\":[\"Vor Freigabe bearbeiten\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Parser-Warnungen\"],\"other\":[\"#\",\" Parser-Warnungen\"]}]],\"ZVn8p2\":[\"Zeigt Zeilennummern im Rand des Editors an.\"],\"ZYnwzF\":[\"Getrennt\"],\"Za3_fO\":[\"Fehler\"],\"ZcOxO1\":[\"Fremdschlüssel erstellen\"],\"Zf7LHg\":[\"Keine Kontexte gefunden (ist kubectl installiert?)\"],\"Zfotp5\":[\"Große Schätzabweichungen deuten meist auf veraltete Statistiken oder Prädikate hin, die der Planner schlecht modellieren kann.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Schemata konnten nicht geladen werden\"],\"ZqXGPF\":[\"Löschen der Ansicht fehlgeschlagen: \"],\"ZuL73E\":[\"Neue Datenbankansicht erstellen\"],\"_-bi4r\":[\"Referenzierte Tabelle\"],\"_AEYGI\":[\"Noch kein Ausführungsverlauf\"],\"_FdpZc\":[\"Laden der Ansichtsdefinition fehlgeschlagen: \"],\"_FxSdi\":[\"Durchsuche die direkten Open-Source-Abhängigkeiten, die in App, Backend und Tooling verwendet werden.\"],\"_JyTG8\":[\"Explain-Prompt eingeben...\"],\"_Ltc_k\":[\"Zusätzlich\"],\"_Q2Wix\":[\"Zeilen\"],\"_TK1zF\":[\"Gespeicherte Verbindung\"],\"_bJFBE\":[\"Verbindungs-Timeout\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Baum\"],\"_dqduX\":[\"Nächste Seite\"],\"_fwE6J\":[\"Älter\"],\"_n04sB\":[\"Beenden\"],\"_otxbQ\":[\"Schlüsseldatei\"],\"_pezIT\":[\"Verbindung zu \",[\"0\"],\" fehlgeschlagen. Bitte prüfe deine Einstellungen oder stelle sicher, dass die Datenbank läuft.\"],\"_srfkj\":[\"Benutzerdefinierter Schlüssel erfolgreich gelöscht\"],\"_t6aFo\":[\"MySQL und MariaDB können je nach Serverversion auf EXPLAIN FORMAT=JSON oder tabellarisches EXPLAIN zurückfallen.\"],\"_xTbaM\":[\"Spalten\"],\"_yxaaL\":[\"Eindeutiger Index\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis ist ein freies Open-Source-Projekt. Wenn du es nützlich findest, unterstütze das Projekt und vernetze dich mit der Community.\"],\"a9CASo\":[\"SQLite unterstützt nur das Umbenennen von Spalten. Andere Änderungen erfordern, dass die Tabelle manuell neu erstellt wird.\"],\"aAIQg2\":[\"Darstellung\"],\"aAURrV\":[\"Installiert\"],\"aC_vCa\":[\"Namen mit KI generieren\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Wähle einen Knoten aus, um Details zu sehen\"],\"aHKcKc\":[\"Vorherige Seite\"],\"aI-5wG\":[\"CA prüfen\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Standardwert\"],\"aScJP1\":[\"Diese Abfrage ausführen\"],\"aVNbN8\":[\"Filterbedingungen\"],\"aWhdMQ\":[\"Vorhandene SSH-Verbindung verwenden\"],\"aXYd8V\":[\"Zeitlimit\"],\"aX_S_r\":[\"Seite \",[\"0\"],\" von \",[\"totalPages\"]],\"agZcf8\":[\"Generiertes SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [Felder]\"],\"alplHn\":[\"Abfrageplan wird mit KI analysiert...\"],\"anBcU3\":[\"Wenn dir tabularis gefällt und du mehr Funktionen sehen möchtest, unterstütze das Projekt durch Code-Beiträge, Bug-Reports oder einen Stern auf GitHub.\"],\"arHmj2\":[\"Möchtest du diese Abfrage wirklich aus dem Verlauf löschen?\"],\"arKcqW\":[\"Ältere Server können auf geschätzte Pläne mit weniger Metriken zurückfallen.\"],\"arcpYe\":[\"Freigabe erforderlich\"],\"aurEkh\":[\"Prozesse werden geladen…\"],\"avtdsd\":[\"SQL-Modus\"],\"az8lvo\":[\"Aus\"],\"b1Ah3z\":[\"Fokussiert auf\"],\"b392Dr\":[\"Alle ausklappen\"],\"b5S_PU\":[\"Datenbankname\"],\"bAvovP\":[\"Nach unten\"],\"bH3JqY\":[\"Keine Tabellen gefunden\"],\"bP5JOn\":[\"Zeilenumbruch\"],\"bcOdok\":[\"Gruppe löschen\"],\"bcqeas\":[\"Alle MCP-Abfragen nur lesen\"],\"bmca5u\":[\"Nur Schreibvorgänge\"],\"bpCiBU\":[\"Schreibvorgänge erlauben\"],\"bqnhqW\":[\"Schätzung übersteigt tatsächliche Zeilen\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Fehler\"],\"bw22Gk\":[\"Spalten-Schema\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Wichtigste Probleme\"],\"cFCKYZ\":[\"Ablehnen\"],\"cFGrCP\":[\"Tabelle\"],\"cGeFup\":[\"Schriftgröße\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Auf Tabelle fokussieren\"],\"cM9NHc\":[\"Herabstufen auf\"],\"cO9-2L\":[\"Deaktivieren\"],\"cSev-j\":[\"Filter\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen importieren\"],\"other\":[\"#\",\" Zeilen importieren\"]}]],\"c_xoSn\":[\"Zelle \",[\"n\"],\" umbenannt\"],\"cd0XEW\":[\"Abfrage speichern\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Gruppe teilen\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" Statements\"],\"d34vwG\":[\"Datenbanken laden\"],\"d6ynQ7\":[\"Absteigend sortieren\"],\"d8_6_v\":[\"abbrechen\"],\"d8wc1_\":[\"Beispielwerte\"],\"dBXoCS\":[\"Eine Umgebungsvariable ist vorhanden, aber du kannst sie überschreiben, indem du oben einen Schlüssel setzt.\"],\"dD7NPy\":[\"Gliederung\"],\"dEgA5A\":[\"Abbrechen\"],\"dMtLDE\":[\"bis\"],\"dPJVhW\":[\"Installation fehlgeschlagen\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Sitzung\"],\"other\":[\"#\",\" Sitzungen\"]}]],\"dTUzKm\":[\"Ausgewählte ausführen (\",[\"0\"],\")\"],\"dU_iQN\":[\"Keine Sitzung entspricht den Filtern.\"],\"dUh9QW\":[\"Planung\"],\"dVoir2\":[\"Markdown-Zelle \",[\"n\"],\" hinzugefügt\"],\"dZ0d2O\":[\"Bitte wähle mindestens eine Tabelle\"],\"dhi13U\":[\"Bild auswählen…\"],\"dli1JX\":[\"Änderungen übernehmen\"],\"dmYV6f\":[\"Routinen\"],\"dohZCo\":[\"Anweisungen für KI-gestützte SQL-Generierung. Verwende \",[\"SCHEMA\"],\" als Platzhalter für die Datenbankstruktur.\"],\"dtxpK2\":[\"Analysieren\"],\"dwW9nJ\":[\"Zeilennummern anzeigen\"],\"dwWVw_\":[\"Willkommensbildschirm anzeigen\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Tab\"],\"other\":[\"#\",\" Tabs\"]}]],\"dxxY9r\":[\"Falls vorhanden\"],\"dyN4j9\":[\"Klicke auf 'Vorschau ausführen', um Ergebnisse zu sehen\"],\"e07Iz5\":[\"Task-Manager öffnen\"],\"e0NzXu\":[\"Dieses Projekt ist Work in Progress (WIP). Die Kernfunktionen sind stabil, aber wir haben große Pläne.\"],\"e1UKxf\":[\"Diese Abfrage speichern\"],\"e34gdU\":[\"Wie lange gewartet wird, bevor abgebrochen wird.\"],\"e62LQd\":[\"Zwangsweise beenden\"],\"e6QZsM\":[\"Editor-Thema\"],\"e8CirT\":[\"Abfrage ausführen\"],\"eD2kUP\":[\"Buffer gelesen\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Prompt für Explain-Plan-Analyse eingeben...\"],\"eIVolo\":[\"Datenträger L/S\"],\"eJOEBy\":[\"Wird exportiert...\"],\"eKHY3W\":[\"Plugin-Einstellungen\"],\"eMb6Ub\":[\"Ressource auswählen...\"],\"ePK91l\":[\"Bearbeiten\"],\"eXweu6\":[\"Zelle ausklappen\"],\"ecNsTE\":[\"Keine Abfragen entsprechen deiner Suche\"],\"ecUA8p\":[\"Heute\"],\"ecpIZP\":[\"Passphrase eingeben, falls der Schlüssel verschlüsselt ist\"],\"ejmeDY\":[\"Installiert\"],\"esl-Tv\":[\"Ressourcentyp\"],\"exyUec\":[\"Verbindung\"],\"f2AJjl\":[\"Zeile löschen\"],\"f4pD-j\":[\"Verbindungstest fehlgeschlagen\"],\"f7sXvi\":[\"Passwort eingeben\"],\"fAsxc0\":[\"Sequentielle Scans\"],\"fIeFs0\":[\"Wert auswählen...\"],\"fJm92A\":[\"Wählen Sie eine Datei mit einem EXPLAIN-Plan (PostgreSQL JSON- oder Textformat), um ihn zu visualisieren.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Werte\"],\"f_b1TA\":[\"Ausführungsverlauf\"],\"fghnqP\":[\"Zu Verbindung 1-9 wechseln\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Komma (,)\"],\"fp711N\":[\"Blockiert (nur lesen)\"],\"fpzyLj\":[\"Seite \",[\"0\"],\" von \",[\"1\"]],\"fuA6oy\":[\"Socket-Timeout\"],\"fvImQM\":[[\"0\"],\" ausgewählt\"],\"fwr_nh\":[\"Installiere Erweiterungen, verwalte Plugin-Treiber und behalte Laufzeiteinstellungen im Blick.\"],\"g0ZzK4\":[\"Gültiges JSON\"],\"g11hAR\":[\"Neue Zeile\"],\"g8VcMm\":[\"Mein K8s-Cluster\"],\"gCFR_O\":[\"Parallele Ausführung (Alle ausführen)\"],\"gEjU98\":[\"Verbindungen öffnen\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Mindestens eine Spalte ist erforderlich\"],\"gSuQrG\":[\"Keine Verbindung entspricht \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Abfrage erneut ausführen\"],\"gZWMnn\":[\"KI-Analyse\"],\"ghYd73\":[\"Ziel wählen...\"],\"giAqEC\":[\"Neue Tabelle erstellen\"],\"gnQS8X\":[\"Maximale Paketgröße, die vom MySQL-Connector verwendet wird.\"],\"gqV5VL\":[\"Integriert, nicht anpassbar\"],\"gww_XE\":[\"Referenzierte Spalte\"],\"gxXPJ9\":[\"Interpreter konfigurieren\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximieren\"],\"h-XNc9\":[\"CSV-Trennzeichen\"],\"h-kNAk\":[\"z.B. verkaufsdaten\"],\"h3Z_aK\":[\"Markdown hier schreiben...\"],\"h7MgpO\":[\"Tastenkürzel\"],\"h7peZQ\":[\"Erlauben\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Systemprozess läuft\"],\"other\":[\"#\",\" Systemprozesse laufen\"]}]],\"hEZrFh\":[\"SQL-Datei ausführen...\"],\"hEipgW\":[\"Jetzt nach Updates suchen\"],\"hG89Ed\":[\"Bild\"],\"hIHcBE\":[\"Als CSV exportieren\"],\"hItdtk\":[\"Ordner auswählen\"],\"hXFVjo\":[\"Tabellenname ist erforderlich\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Erneut ausführen\"],\"hbz1rh\":[\"Schlüssel\"],\"hdsaJo\":[\"Importiert...\"],\"he3ygx\":[\"Kopieren\"],\"hfGimp\":[\"Namespace auswählen...\"],\"hjjSEi\":[\"Nur-Lese-Verbindungen\"],\"hjwN_s\":[\"Ressourcenname\"],\"hlF1mD\":[\"Auswahl kopieren\"],\"hnboBb\":[\"KI-Analyse des Abfrageplans\"],\"hnvu2p\":[\"Fehlerdetails\"],\"hq4-D2\":[\"Der API-Schlüssel wird sicher im System-Keychain gespeichert. Ein hier gesetzter Schlüssel überschreibt die Umgebungsvariable.\"],\"hqjXdn\":[\"Löschen der SSH-Verbindung fehlgeschlagen\"],\"hqofAK\":[\"SQL kopieren\"],\"hy6L14\":[\"Auf GitHub ansehen\"],\"hyjACX\":[\"Zellen ein-/ausgeklappt\"],\"hz1b5W\":[\"Keine passenden Elemente gefunden\"],\"i1vAVM\":[\"Neue Tabelle erstellen\"],\"i3S5T3\":[\"Favoriten durchsuchen...\"],\"i4_LY_\":[\"Schreiben\"],\"i5HBWh\":[\"Abfrageverlauf zurückgesetzt\"],\"i5zCt4\":[\"Tabelle\"],\"iAVlge\":[\"Passe die Anweisungen für die KI-Namensgenerierung von Notebook-Zellen an. Der Zelleninhalt (SQL oder Markdown) wird als Benutzernachricht gesendet.\"],\"iE1yAB\":[\"Tabellen filtern...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Verbinden\"],\"iSryJ2\":[\"Mein SSH-Server\"],\"iT7UeX\":[\"Index hinzufügen\"],\"iUWwuR\":[\"Herunterladen und installieren\"],\"ia7i08\":[\"Zuerst Kontext/Namespace/Typ auswählen\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Gespeichert\"],\"igcsfY\":[\"Keine Plugins im Registry verfügbar.\"],\"ij-Elv\":[\"Bildvorschau\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" erklärbare Abfragen gefunden\"],\"other\":[\"#\",\" erklärbare Abfragen gefunden\"]}]],\"ioL38P\":[\"Überwache Plugin-Prozesse, CPU, RAM und Datenträgernutzung in Echtzeit\"],\"ixlL_e\":[\"SSH-Schlüsseldatei (optional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Modell auswählen\"],\"j3gyYH\":[\"Alle anwenden\"],\"j5CWO4\":[\"Aktuell\"],\"j9HPuI\":[\"Zeile #\",[\"0\"]],\"jBtpMP\":[\"Alle Status\"],\"jEu4bB\":[\"Spalten\"],\"jEyQIs\":[\"Keine Routinen gefunden\"],\"jHc1By\":[\"Ansicht löschen\"],\"jI6sj4\":[\"Kosten, Laufzeit und Zeilenschätzungen sind im Vergleich zu PostgreSQL und MySQL oft nicht verfügbar.\"],\"jIxQCZ\":[\"Für deine Plattform nicht verfügbar\"],\"jKIncn\":[\"Datenbankname ist erforderlich\"],\"jPSk57\":[\"Grund (optional)\"],\"jUNY_d\":[\"View\"],\"jVqjDo\":[\"Ungültiges Notebook-Dateiformat\"],\"jWSZ-A\":[\"Nur Vorschau - vollständige Daten nicht geladen\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket-Timeout in Millisekunden.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Verbindungsname ist erforderlich\"],\"jsQZMk\":[\"KI\"],\"juO8wz\":[\"Kindprozess\"],\"jx0t66\":[\"Kindprozesse einklappen\"],\"k-0mL-\":[\"Spalte hinzufügen\"],\"k-XiMX\":[\"Rohtext\"],\"k2UnVy\":[\"Hash-Bedingung\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"Sekunden\"],\"kBiBq7\":[\"Index \\\"\",[\"name\"],\"\\\" löschen?\"],\"kEYasw\":[\"Diagramm umschalten\"],\"kI1qVD\":[\"Formatieren\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Zeilen · \",[\"1\"],\" ms\"],\"other\":[\"#\",\" Zeilen · \",[\"2\"],\" ms\"]}]],\"kJDmsI\":[\"Ereignisdetails\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registry\"],\"kY-q3P\":[[\"label\"],\" ist erforderlich\"],\"kexIdC\":[\"Kubernetes-Port-Forward verwenden\"],\"krksx_\":[\"Erfolg\"],\"ktYUe9\":[\"Alle ausführen\"],\"kwY6nh\":[\"Schließen\"],\"kx0s-n\":[\"Ergebnisse\"],\"kxUEfE\":[\"Abrufen der Routinen-Definition fehlgeschlagen: \"],\"l2Op2p\":[\"Abfrageparameter\"],\"l9Ivba\":[\"Plugin-Prozesse und Systemressourcen\"],\"lBdPxu\":[\"Akzentfarbe\"],\"lCF0wC\":[\"Aktualisieren\"],\"lEQRwq\":[\"Daten (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Neue Tabelle erstellt\"],\"lOekZ3\":[\"Zum horizontalen Layout wechseln\"],\"lUA1C1\":[\"Passphrase für SSH-Schlüssel (optional)\"],\"lVeG20\":[\"Rust-Abhängigkeiten\"],\"lXAG6D\":[\"Anweisungen für KI-gestützte Abfrageerklärungen. Verwende \",[\"LANGUAGE\"],\" als Platzhalter für die Ausgabesprache.\"],\"lbbYjy\":[\"Bearbeite die rohe Konfigurationsdatei direkt. Ein Neustart ist erforderlich, um Änderungen anzuwenden.\"],\"lhKW0m\":[\"SQL-Zelle \",[\"n\"],\" hinzugefügt\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Ergebnisse pro Seite (Limit)\"],\"lkz6PL\":[\"Dauer\"],\"lmVGeo\":[\"Fremdschlüssel hinzufügen\"],\"lnnx3E\":[\"Verbinde Tabularis mit Claude Desktop, Cursor und mehr\"],\"lpGiOh\":[\"Check interval\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Hinzufügen\"],\"m2Q_r8\":[\"JSON in Text-Spalten erkennen\"],\"m2tskz\":[\"Erfolg\"],\"mA-qpe\":[\"Alle Ausführungen abgeschlossen\"],\"mBhhbA\":[\"Logs in die Zwischenablage exportiert\"],\"mCNdzH\":[\"Zelle ausführen\"],\"mO95sp\":[\"Panel schließen\"],\"mP7dLi\":[\"Schriftnamen oben eingeben\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" blockiert\"],\"other\":[\"#\",\" blockiert\"]}]],\"mS74ir\":[\"Speichern der SSH-Verbindung fehlgeschlagen\"],\"mSqtw8\":[\"Vorschau ausführen\"],\"mURmfQ\":[\"Ansichtsdefinition (SQL)\"],\"mX_isJ\":[\"Vertikal\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Struktur (DDL)\"],\"mrk4Cf\":[\"Nach \",[\"colName\"],\" DESC sortieren\"],\"msJ8t1\":[\"Wir haben einen eigenen Treffpunkt für Tabularis-Nutzer eröffnet: Hilfe, Tipps und Mitgestaltung der Roadmap.\"],\"mtvVdV\":[\"Verarbeitete Zeilen\"],\"mx4evv\":[\"Tabelle erstellen\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Herunterladen\"],\"n7JDTx\":[\"Installiere und aktiviere Plugins, um sie hier zu sehen\"],\"nDDJir\":[\"Suche Sitzung, Client, Verbindung…\"],\"nHP-Kr\":[\"Keine aktive Sitzung. Bitte wähle eine Verbindung aus.\"],\"nKhCjW\":[\"Tabellen auswählen\"],\"nNwvm4\":[\"Fehler\"],\"nOVim5\":[\"Speichern der Verbindung fehlgeschlagen\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Ereignisse\"],\"nf14vn\":[\"Erfordert Erweiterung: \",[\"0\"]],\"ngO6Pv\":[\"Erlaubt der Eingabetaste (zusätzlich zu Tab), den aktiven Autovervollständigungsvorschlag zu übernehmen. Bei deaktivierter Option fügt Enter immer einen Zeilenumbruch ein.\"],\"nhmF3p\":[\"Verbindungen\"],\"noM5A_\":[\"Erstelle deine erste Verbindung\"],\"nohy4m\":[\"Noch keine MCP-Aktivität.\"],\"nr-axf\":[\"Plugin entfernen\"],\"nsPFX9\":[\"In Visual Explain öffnen\"],\"nuBbBr\":[\"Diagramm\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Datenbank sichern\"],\"o-XJ9D\":[\"Ändern\"],\"o21Y-P\":[\"Einträge\"],\"o3tP_A\":[\"Index löschen\"],\"o45L8r\":[\"Gib deinen Verbindungsnamen an\"],\"o53XGh\":[\"Ausgewählte Zeile(n) kopieren\"],\"o7J4JM\":[\"Filter\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Level\"],\"oGiIL7\":[\"Standard-Anbieter\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Verbindung verloren\"],\"oJlXF2\":[\"Notebook importieren\"],\"oMFv82\":[\"Vertikal teilen\"],\"oOFiQg\":[\"Begrenzt die Anzahl der pro Abfrage geladenen Zeilen, um Performance-Probleme zu vermeiden. Setze den Wert auf 0, um die Begrenzung zu deaktivieren (nicht empfohlen).\"],\"oT9ZD3\":[\"Übersicht ausblenden\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Diagramm geändert (Zelle \",[\"n\"],\")\"],\"oWfclW\":[\"Zeigt JSON-Viewer-Bedienelemente, wenn eine nicht typisierte Text-Zelle ein JSON-Objekt oder -Array enthält. Verursacht kleine Parse-Kosten pro Zelle.\"],\"obpbdz\":[\"Konfigurationsdatei nicht gefunden (manuell erstellen)\"],\"odZgfC\":[\"KI-CLIENTS\"],\"ogZhXn\":[\"Wähle die Standard-Layout-Richtung für ER-Diagramme\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Tatsächliche Zeilen\"],\"olWzar\":[\"Plugin-Prozess zwangsweise beenden\"],\"ovBPCi\":[\"Standard\"],\"owzTWN\":[\"KI-Modelle von Anbietern aktualisiert\"],\"oxYi6j\":[\"Passt die in der gesamten Anwendung verwendete Grundschriftgröße an (10-20 px).\"],\"p--hsQ\":[\"Eine Datenbankverbindung wurde verloren\"],\"p6NueD\":[\"NEU\"],\"pOYHox\":[\"Aktionen\"],\"pR9bTR\":[\"Keine BLOB-Daten\"],\"pS8S5q\":[\"z. B. users, orders, products\"],\"pSws_M\":[\"Tabellenname\"],\"pVLbKZ\":[\"Ansicht erfolgreich erstellt\"],\"pWT04I\":[\"Prüfung läuft...\"],\"pZJ_6D\":[\"Indexname ist erforderlich\"],\"pddYFG\":[\"Prompt für Notebook-Zellnamen eingeben...\"],\"pm9Yb5\":[\"Translation updates\"],\"pnpyuD\":[\"Logging aktivieren\"],\"pqKMPv\":[\"Erstellen der Tabelle fehlgeschlagen: \"],\"pqaP1h\":[\"Schließen\"],\"pqarBu\":[\"Aufst.\"],\"ptuq35\":[\"z. B. Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"Andere bleiben nur lesbar. Nur markierte dürfen schreiben.\"],\"qA5jLs\":[\"Fehlerdetails\"],\"qIrtcK\":[\"Updates\"],\"qOqy8G\":[\"Konfiguration wird geprüft...\"],\"qWaVNs\":[\"Speichern und neu starten\"],\"qb3LPX\":[\"ER-Diagramm anzeigen\"],\"qkK0vq\":[\"Ansichtsname ist erforderlich\"],\"qki9tG\":[\"Fehler\"],\"qoIir-\":[\"Die Basis-URL deiner OpenAI-kompatiblen API. Beispiele: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Alle einklappen\"],\"r6ncaO\":[\"Tab schließen\"],\"rAJlpP\":[\"Container-Port\"],\"rG3WVm\":[\"Lesen\"],\"rGRCeK\":[\"Abfrageverlauf löschen\"],\"rNIto7\":[\"Der Ressourcenname ist erforderlich\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook erfolgreich exportiert\"],\"rY4sEV\":[\"FK löschen\"],\"rbu0nO\":[\"SSH-Verbindungen verwalten\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Verbindung(en)\"],\"other\":[\"#\",\" Verbindung(en)\"]}]],\"rn2_2V\":[\"Filter entfernen\"],\"roABNH\":[\"Kein Abfrageverlauf\"],\"rtir7c\":[\"unbekannt\"],\"ru0-2W\":[\"Keine aktiven Verbindungen\"],\"rvDPWO\":[\"Größte Schätzabweichung\"],\"rwWjWg\":[\"Release Notes\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Verbindung testen\"],\"sBOaim\":[\"Die Konfigurationsdatei wurde gespeichert. Jetzt neu starten, um die Änderungen anzuwenden?\"],\"sCyv9B\":[\"Modelle aktualisieren\"],\"sSUqe4\":[\"Löschen\"],\"sUBkgN\":[\"SQL wird generiert...\"],\"sZZG3d\":[\"Möchtest du \\\"\",[\"0\"],\"\\\" wirklich importieren?\\nDadurch können vorhandene Daten überschrieben werden.\"],\"sbK5ck\":[\"Verlauf durchsuchen...\"],\"sq_bS6\":[\"Bei Löschen\"],\"suW7-E\":[\"Verbindungs-Timeout in Millisekunden.\"],\"suqtBX\":[\"Esc zum Schließen\"],\"t-R8-P\":[\"Ausführung\"],\"t1OfVY\":[[\"totalLibraries\"],\" Bibliotheken\"],\"t2TMzs\":[\"Tab schließen\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Tabelle auswählen...\"],\"t7KRl1\":[\"Protokoll aller MCP-Aufrufe und ausstehender Freigaben. Lokal gespeichert.\"],\"t9NJIk\":[\"Scan-lastige Operationen erkannt\"],\"tB7xof\":[\"Temporäre oder Sortier-Operationen\"],\"tBBXTO\":[\"Ping-Intervall\"],\"tFrT3w\":[\"Füge dies manuell zur Konfigurationsdatei deines Clients hinzu, falls die automatische Installation fehlschlägt.\"],\"tJ7UbA\":[\"fokussierte erklären\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Horizontal teilen\"],\"tQhW-D\":[\"Log-Einstellungen\"],\"tT-BQX\":[\"Installiert\"],\"tXFGEx\":[\"Keine Kubernetes-Verbindungen gespeichert. Klicke auf „Hinzufügen“, um eine zu erstellen.\"],\"tXLz_8\":[\"Löschen\"],\"tXpRby\":[\"Datenraster\"],\"tbysEk\":[\"Aktionen\"],\"tdta9X\":[\"Seite \",[\"0\"]],\"tfDRzk\":[\"Speichern\"],\"tfEioV\":[\"Alle SQL-Zellen von oben nach unten ausführen\"],\"tiAIaJ\":[\"SSH-Passwort fehlt. Bitte erneut eingeben.\"],\"tk22BR\":[\"Strukturierte Daten einfügen und Schema vor dem Import prüfen\"],\"tst44n\":[\"Ereignisse\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL-Datei erfolgreich ausgeführt\"],\"u6QeR6\":[\"Jetzt neu starten\"],\"uAQUqI\":[\"Status\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc zum Schließen\"],\"uFViPK\":[\"Keine SSH-Verbindungen verfügbar\"],\"uHUuhp\":[\"Diese Abfrage erklären\"],\"uHfFzS\":[\"Editor-Schriftgröße\"],\"uJ_3K5\":[\"Notebook \\\"\",[\"0\"],\"\\\" löschen? Dies kann nicht rückgängig gemacht werden.\"],\"uKaNJ3\":[\"Im JSON-Editor öffnen\"],\"uQBwTo\":[\"Schemata\"],\"ub54ff\":[\"Plugin-Center\"],\"ufFyBs\":[\"Datenbank erfolgreich exportiert\"],\"upNmR2\":[\"Seitenleisten-Editor öffnen\"],\"upwIY4\":[\"Ansichtsdefinition\"],\"utMia3\":[\"Alle abwählen\"],\"uyNaJg\":[\"1 Element\"],\"v61dnS\":[\"Gib den exakten Modellnamen für deinen OpenAI-kompatiblen Anbieter ein.\"],\"v6oeyr\":[\"Installiert\"],\"v75DGg\":[\"Datei auswählen\"],\"v99dO4\":[\"Primärschlüssel\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Abfragen gefunden\"],\"other\":[\"#\",\" Abfragen gefunden\"]}]],\"vCSBPD\":[\"Filter hinzufügen\"],\"vH7uJj\":[\"Sortieren nach…\"],\"vUOA1-\":[\"Modelle suchen...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE enthält tatsächliche Zeilen, Laufzeit, Schleifen und Buffer-Zähler, sofern verfügbar.\"],\"vXIe7J\":[\"Sprache\"],\"vYf4Jm\":[\"Gib eine vollständige SQL-Funktion ein (z. B. ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Bevorzugen\"],\"vditm4\":[\"Plan erklären\"],\"vks_ls\":[\"Andere Tabs schließen\"],\"vnAnIp\":[\"Modell \",[\"0\"],\" wurde in \",[\"1\"],\" nicht gefunden. Es funktioniert möglicherweise nicht korrekt.\"],\"vqoN5u\":[\"Struktur\"],\"vrAvbP\":[\"Möchtest du die Gruppe \\\"\",[\"0\"],\"\\\" wirklich löschen? Verbindungen in dieser Gruppe werden in Ungruppiert verschoben.\"],\"vtJ2yO\":[\"Explorer\"],\"vujQJ5\":[\"Lokalisierung\"],\"vvJPVL\":[\"Übersicht anzeigen\"],\"vwI5S4\":[\"Erfolg\"],\"vzH-7Z\":[\"Erklären\"],\"w7QmD_\":[\"System-Prompt eingeben...\"],\"w9eMXw\":[\"Trigger\"],\"wCJFlW\":[\"Verstrichene Zeit\"],\"wCfv2R\":[\"Verbindung hinzufügen\"],\"wGfc86\":[\"Gesamten Verlauf löschen\"],\"wGwNv4\":[\"Aktive Datenbank\"],\"wJJ-Wy\":[\"Wird installiert...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffer-Treffer\"],\"wQn-RM\":[\"Spalte hinzufügen\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Angewendet\"],\"wTmVhm\":[\"Löschen\"],\"wXx7W4\":[\"How often to check for new translations.\"],\"wZeIWq\":[\"Aus Zwischenablage importieren\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"Ausstehend\"],\"wckWOP\":[\"Verwalten\"],\"wdYcKH\":[\"Geöffnete Tabs\"],\"wja8aL\":[\"Ohne Titel\"],\"wkOAzk\":[\"Keine Notebooks entsprechen der Suche.\"],\"wp49Ao\":[\"Verarbeitung von Einfügungen fehlgeschlagen: \"],\"wqG2hQ\":[\"Überspringen (nicht importieren)\"],\"wwrAsK\":[\"Bitte fülle alle erforderlichen Felder aus\"],\"wwu18a\":[\"Symbol\"],\"x2fr_j\":[\"Graph\"],\"xANKBj\":[\"Funktionen\"],\"xBwjck\":[\"Ein Neustart ist erforderlich, um Änderungen anzuwenden.\"],\"xDAtGP\":[\"Nachricht\"],\"xECY01\":[\"Prozeduren\"],\"xGPNgZ\":[\"Prompt-Anpassung\"],\"xNgtS-\":[\"Keine Ansichten gefunden\"],\"xOPa1b\":[\"Der Port muss zwischen 1 und 65535 liegen\"],\"xY9s5E\":[\"Zeitüberschreitung\"],\"xaVUr1\":[\"Franz jagt im komplett verwahrlosten Taxi quer durch Bayern\"],\"xbvTzL\":[\"Dateipfad\"],\"xlew5F\":[\"Leeren\"],\"xmNyKz\":[\"Wird getestet...\"],\"xtuh6D\":[\"Explorer ausklappen\"],\"y-Zdqj\":[\"Kontext auswählen...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"JSON-Viewer öffnen\"],\"yQXjG5\":[\"Alle abwählen\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Gestern\"],\"ygCKqB\":[\"Stopp\"],\"ykCc6r\":[\"Datenbank geändert (Zelle \",[\"n\"],\")\"],\"ynVMSc\":[\"Alle auswählen\"],\"ytdz1d\":[\"KI möchte in die Datenbank schreiben\"],\"yyhzur\":[\"Tabelle erstellen\"],\"yz7wBu\":[\"Schließen\"],\"z0VdfR\":[\"Routine\"],\"z407wX\":[\"SSH-Passwort\"],\"z4oF5T\":[\"Datenbank sichern\"],\"z5kV0h\":[\"Verbindungen\"],\"zBTMzx\":[\"Vorschau\"],\"zCaAKs\":[\"Update-Fehler\"],\"zDAakK\":[\"Diagramm kann ohne Verbindungs-ID nicht angezeigt werden.\"],\"zGe21h\":[\"Dieser Schlüssel wird aus einer Umgebungsvariable geladen\"],\"zGfL5t\":[\"wert\"],\"zL6-4A\":[\"Es laufen keine Plugin-Prozesse\"],\"zLZhCi\":[\"Neue Discord-Community!\"],\"zLlCou\":[\"Spaltennamen kopieren\"],\"zNEL34\":[\"Der Community beitreten\"],\"zNgTlV\":[\"Tabs rechts schließen\"],\"zQz55p\":[\"Struktur anzeigen\"],\"zR0FfH\":[\"Exportiert nach \",[\"target\"]],\"zRZeOc\":[\"Tabellen, Views, Routinen, Trigger suchen...\"],\"zUNMsr\":[\"SSH-Schlüssel\"],\"zXMRzb\":[\"SSH-Port\"],\"zZgoXr\":[\"Keine passende Tabelle\"],\"zaWbms\":[\"Änderungen zurückrollen\"],\"zgClmU\":[\"Konfiguration installieren\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Wert eingeben...\"],\"zvzN4C\":[\"Als aktiv festlegen\"],\"zzDlyQ\":[\"Erfolg\"],\"zzMxrp\":[\"config.json bearbeiten\"],\"zz_Wd_\":[\"Modus\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po index 81bc775b..228344a5 100644 --- a/src/locales/en/messages.po +++ b/src/locales/en/messages.po @@ -597,6 +597,10 @@ msgstr "Auto Increment" msgid "Auto paginated" msgstr "Auto paginated" +#: src/components/settings/LocalizationTab.tsx +msgid "Automatic updates" +msgstr "Automatic updates" + #: src/components/settings/InfoTab.tsx msgid "Automatically check for new versions when the app launches" msgstr "Automatically check for new versions when the app launches" @@ -742,6 +746,10 @@ msgstr "Check for Updates Now" msgid "Check for updates on startup" msgstr "Check for updates on startup" +#: src/components/settings/LocalizationTab.tsx +msgid "Check interval" +msgstr "Check interval" + #: src/components/modals/McpModal.tsx #: src/pages/McpPage.tsx msgid "Checking configuration..." @@ -2293,6 +2301,10 @@ msgstr "Failed: " msgid "Favorites" msgstr "Favorites" +#: src/components/settings/LocalizationTab.tsx +msgid "Fetch the latest translations from the cloud without waiting for an app update." +msgstr "Fetch the latest translations from the cloud without waiting for an app update." + #: src/components/modals/NewConnectionModal.tsx msgid "File Path" msgstr "File Path" @@ -2516,6 +2528,10 @@ msgstr "How long the MCP subprocess will wait for the user's decision before fai msgid "How many logs to keep in memory (1-10000)" msgstr "How many logs to keep in memory (1-10000)" +#: src/components/settings/LocalizationTab.tsx +msgid "How often to check for new translations." +msgstr "How often to check for new translations." + #: src/components/settings/GeneralTab.tsx msgid "How often to check if active connections are still alive. Set to 0 to disable." msgstr "How often to check if active connections are still alive. Set to 0 to disable." @@ -2967,6 +2983,10 @@ msgstr "Message" msgid "Minimize" msgstr "Minimize" +#: src/components/settings/LocalizationTab.tsx +msgid "minutes" +msgstr "minutes" + #: src/components/modals/ClipboardImport/SchemaEditor.tsx msgid "Mixed types detected, defaulted to TEXT" msgstr "Mixed types detected, defaulted to TEXT" @@ -5018,6 +5038,10 @@ msgstr "Top Issues" msgid "Total Cost" msgstr "Total Cost" +#: src/components/settings/LocalizationTab.tsx +msgid "Translation updates" +msgstr "Translation updates" + #: src/components/ui/JsonInput.tsx msgid "Tree" msgstr "Tree" diff --git a/src/locales/en/messages.ts b/src/locales/en/messages.ts index fe04cedd..d7104cb0 100644 --- a/src/locales/en/messages.ts +++ b/src/locales/en/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Max History Entries\"],\"-6AWa-\":[\"Import Connections\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Disconnect\"],\"-PLZfh\":[\"Failed to refresh models\"],\"-T5W2e\":[\"Driver Notes\"],\"-ZgeeE\":[\"Edit history\"],\"-aYrdc\":[\"Version \",[\"0\"],\" is available\"],\"-fBGXl\":[\"Highest Cost\"],\"-jIQDz\":[\"Collapse Cell\"],\"-u1eRo\":[\"No database\"],\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"Approval ID\"],\"0E5-gF\":[\"Are you sure you want to delete this connection?\"],\"0HCubq\":[\"Expand\"],\"0Kmdvy\":[\"Custom Font\"],\"0Nj13E\":[\"Generate SQL\"],\"0ROgz5\":[\"Enter JSON...\"],\"0SY9sU\":[\"Failed to disconnect from database\"],\"0b3kL9\":[\"Select a database\"],\"0caMy7\":[\"History\"],\"0mx5ow\":[\"Query\"],\"0n9BtL\":[\"Preview\"],\"0pHB9N\":[\"Copy as table.column\"],\"0sQzZK\":[\"Filter databases...\"],\"0uPP9X\":[\"FK Name (Optional)\"],\"0wxuek\":[\"Current Version\"],\"0x09Aw\":[\"Toggled stop on error\"],\"0yBP6v\":[\"Support the Development\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"0yVAoD\":[\"Count rows\"],\"0zxJ87\":[\"No logs available\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Edit View\"],\"11fGJ6\":[\"Queries\"],\"13hIUA\":[[\"0\"],\" API Key\"],\"14qNWF\":[\"Select SSH Connection\"],\"17qHRP\":[\"New connection\"],\"1Dn6bg\":[\"Import from Clipboard\"],\"1Dnd0I\":[\"Load row count\"],\"1FjTLW\":[\"e.g. python3\"],\"1GOvbo\":[\"Ollama connected (\",[\"0\"],\" models found)\"],\"1I6UoR\":[\"Views\"],\"1U7hS5\":[\"Len\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Editor Font Family\"],\"1ekzlY\":[\"Plugin Processes\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Theme Selection\"],\"1xVZkL\":[\"No models found\"],\"26Joci\":[[\"0\"],\" rows retrieved\"],\"2Bf-Qe\":[\"New console\"],\"2CrSmP\":[\"Help tabularis grow\"],\"2D9F8_\":[\"Failed to duplicate connection\"],\"2Eoi_a\":[\"View details\"],\"2F4pE5\":[\"Rust Build and Test\"],\"2Fsd9r\":[\"This Month\"],\"2JzKXI\":[\"Set GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Select All\"],\"2SO5RM\":[\"Kubernetes is not available for this driver.\"],\"2Uh5GA\":[\"Cargo ecosystem\"],\"2YylFp\":[\"New Visual Query\"],\"2luuSG\":[\"Try again\"],\"2wxgft\":[\"Rename\"],\"2yG2GC\":[\"Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database.\"],\"30-b5r\":[\"Delete\"],\"31kwdN\":[\"Duplicate filter\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"All tools\"],\"3Am5DS\":[\"Tab view\"],\"3FVg9_\":[\"Local Column\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Run\"],\"3L0HCz\":[\"No plugins match your search.\"],\"3Nv3JV\":[\"Executing query...\"],\"3TSz9S\":[\"Minimize\"],\"3UW8fG\":[\"Updates managed by \",[\"0\"]],\"3YvS-c\":[\"New tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook Cell Name Prompt\"],\"3qkggm\":[\"Fullscreen\"],\"3rBJ1T\":[\"View Schema\"],\"3xZ-xV\":[\"Insert Current Timestamp\"],\"40Gx0U\":[\"Timezone\"],\"41GP4f\":[\"Choose the default delimiter character used when copying or exporting rows as CSV.\"],\"42iaEi\":[\"PostgreSQL without ANALYZE shows planner estimates only.\"],\"44cXI8\":[\"Sort by \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Manage Databases\"],\"4CK17g\":[\"Are you sure you want to modify view \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Select at least one database\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Export as HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" child process\"],\"other\":[\"#\",\" child processes\"]}]],\"4VyuY3\":[\"Are you sure you want to clear all logs?\"],\"4WWqS3\":[\"Toggle inline JSON tree\"],\"4XAQdl\":[\"Create Index\"],\"4cEClj\":[\"Sessions\"],\"4cmfYp\":[\"Duplicate Row\"],\"4hsr6d\":[\"Create View\"],\"4lIZTB\":[\"Frontend Dev Dependencies\"],\"4oYjvJ\":[\"Search query…\"],\"4tMxW4\":[\"Preview related record\"],\"4yJcjm\":[\"Select type...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Close filter panel (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Semicolon (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" event\"],\"other\":[\"#\",\" events\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"List view\"],\"5To6Z6\":[\"Copy query\"],\"5gqNQl\":[\"Grid view\"],\"5igIzr\":[\"Import cancelled\"],\"5nTIup\":[\"Editing view: \",[\"name\"]],\"5qIe8E\":[\"Run All\"],\"66bEht\":[\"Project Status\"],\"6PIJVc\":[\"Startup\"],\"6QvP0l\":[\"Export as JSON\"],\"6W41Xq\":[\"Task Manager\"],\"6WngBH\":[\"Set NULL\"],\"6YtxFj\":[\"Name\"],\"6_dCYd\":[\"Overview\"],\"6dOBsk\":[\"Create View\"],\"6gvoHP\":[\"Copy error message\"],\"6oCVzX\":[\"Kubernetes context is required\"],\"6wQO0f\":[\"Show Data\"],\"6z9W13\":[\"Restart\"],\"71agNy\":[\"Generate names for unnamed cells with AI\"],\"74J3FG\":[\"Initial version\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Got it\"],\"77nSMU\":[\"Delete the entire AI activity history? This cannot be undone.\"],\"7ABmyQ\":[\"Try again\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" of \",[\"0\"],\" active\"],\"7E864M\":[\"Database Type\"],\"7FqaG1\":[\"Customize instructions for AI analysis of EXPLAIN query plans. Use {\",[\"LANGUAGE\"],\"} for the output language.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Mixed types detected, defaulted to TEXT\"],\"7RSQQd\":[\"Save passwords in Keychain\"],\"7VpPHA\":[\"Confirm\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"failed\"],\"7sMeHQ\":[\"Key\"],\"7sNhEz\":[\"Username\"],\"7tATh2\":[\"Run Query\"],\"7yb4gk\":[\"Failed: \"],\"8-4V8D\":[\"Tables\"],\"82G-l5\":[\"The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely.\"],\"83VjWE\":[\"New Notebook\"],\"86IgoU\":[\"Run query (in editor)\"],\"86fCgf\":[\"Customize instructions for AI query result tab name generation. The SQL query is sent as the user message.\"],\"87a_t_\":[\"Label\"],\"87kWsr\":[\"Export Connections\"],\"8CWirf\":[\"MCP Server\"],\"8S8aIX\":[\"Connection Health Check\"],\"8TMaZI\":[\"Timestamp\"],\"8Tg_JR\":[\"Custom\"],\"8UFKYr\":[\"Select Query to Execute\"],\"8VKSGV\":[\"Generate SQL\"],\"8Wjy6z\":[\"Close Tabs to Left\"],\"8ZsakT\":[\"Password\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL Editor\"],\"8bRgTe\":[\"AI Provider not configured. Please go to Settings > AI.\"],\"8c_W0h\":[\"Older versions\"],\"8guEQP\":[\"Refresh Views\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.\"],\"8q_sOc\":[\"Remove\"],\"8t-akp\":[\"showing first \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Connection Name\"],\"91gnWY\":[\"Export Logs\"],\"91rtHL\":[\"Create New View\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"View updated successfully\"],\"9NzDFn\":[\"Display the welcome screen when the application starts.\"],\"9OoUS3\":[\"Create New SSH Connection\"],\"9QGRD5\":[\"Target column\"],\"9QTny9\":[\"Query failed.\"],\"9S-fyV\":[\"Pre-flight execution plan\"],\"9SJ_Sx\":[\"System Resources\"],\"9UQ730\":[\"Clone\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"No data found in clipboard\"],\"9hGjL2\":[\"Create Index\"],\"9mMU1R\":[\"Time\"],\"9mvFo_\":[\"Time\"],\"9npOH9\":[\"Open file\"],\"9uI_rE\":[\"Undo\"],\"9xUjzm\":[\"Select All\"],\"9y_02p\":[\"Chat with the community, get help, suggest features\"],\"A1pPcI\":[\"SSH Host\"],\"A1taO8\":[\"Search\"],\"A6C0pv\":[\"Total Cost\"],\"A7WG0p\":[\"Plugin disabled\"],\"A7yRz3\":[\"View definition is required\"],\"A9Uyp6\":[\"Import failed: \"],\"ABEd-z\":[\"Use your package manager to update Tabularis.\"],\"AMdgKV\":[\"Explain Plan Analysis Prompt\"],\"ANSTMe\":[\"No major issues detected in the current plan summary.\"],\"ANzIr7\":[\"Query History\"],\"AOnaU7\":[\"skipped\"],\"AVlZoM\":[\"Environment\"],\"AXTVsE\":[\"Verify Full\"],\"AXdRYR\":[\"Current Logs\"],\"Aa-YkQ\":[\"Export Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filter by level\"],\"AlPiMN\":[\"Click to jump to page\"],\"An-1rA\":[\"Rows returned\"],\"AnV8j-\":[\"Modify Column\"],\"AvEr_L\":[\"New Console\"],\"AvYbUL\":[\"Star on GitHub\"],\"Aw_eOs\":[\"Requires Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No results found\"],\"B0mJGb\":[\"Raw Output\"],\"B1c58n\":[\"Modify Column\"],\"B3toQF\":[\"Objects\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"Connection name is required\"],\"BAVvWJ\":[\"ER Diagram\"],\"BBtVak\":[\"Collapse All\"],\"BEVzjL\":[\"Import failed\"],\"BHATjK\":[\"Export Connections\"],\"BJe2lZ\":[\"Toggle sidebar\"],\"BK3WCj\":[\"Failed to load registry\"],\"BKbO3i\":[\"Edited notebook\"],\"BMB51y\":[\"Run in console\"],\"BNW_Z4\":[\"e.g. active_users, order_summary\"],\"BPkXj7\":[\"Create Foreign Key\"],\"BUO_JN\":[\"Copy Query\"],\"BYkhHY\":[\"Check for updates on startup\"],\"BeSg6-\":[\"Collect application logs in memory for debugging\"],\"BgAyQH\":[\"Clear sort\"],\"BinTJI\":[\"npm ecosystem\"],\"BkFson\":[\"Auto paginated\"],\"Bpglf1\":[\"Move Up\"],\"BrGo6h\":[\"Search notebooks\"],\"BxiAN_\":[\"Delete Query\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Frontend Dependencies\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"No filters —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Downloading...\"],\"CUxwxn\":[\"Show All Tables\"],\"CWMXbw\":[\"will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted.\"],\"CZt6BX\":[\"MANUAL CONFIGURATION\"],\"Ca8ixZ\":[\"Delete\"],\"CbJBQS\":[\"Update failed: \"],\"Cdz-YU\":[\"Stacked view\"],\"CpeQf9\":[\"Loops\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Select the model to be used for generation and explanation.\"],\"DB8zMK\":[\"Apply\"],\"DDXf5E\":[\"SQL Functions\"],\"DEwnwi\":[\"Delete\"],\"DNTvdl\":[\"Open in Editor\"],\"DPc2P9\":[\"Delete Cell\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Line Height\"],\"Dd7YLj\":[\"Maybe later\"],\"Deej3j\":[\"Invalid JSON\"],\"DfKhk_\":[\"Update\"],\"DiRiTz\":[\"Open package page\"],\"DlRHAD\":[\"Running EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" error\"],\"other\":[\"#\",\" errors\"]}]],\"Dvdihe\":[\"On \",[\"0\"],\" — review and decide before it executes.\"],\"DzFLzw\":[\"YES\"],\"E-JUtQ\":[\"Approval gate\"],\"E0kcnZ\":[\"General\"],\"E2mje_\":[\"Select Query to Explain\"],\"EDieyg\":[\"Are you sure you want to delete this SSH connection?\"],\"EHZxPj\":[\"Expand\"],\"EL4oDO\":[\"New Version Available\"],\"EPi4gT\":[\"Sort by \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Unknown\"],\"EhADgB\":[\"Delete Column\"],\"EkH9pt\":[\"Update\"],\"Ekblrc\":[\"You're up to date\"],\"Em6JFd\":[\"Count Rows\"],\"EnGiqG\":[[\"0\"],\" elements\"],\"Ew1n5z\":[\"Search plugins…\"],\"F18WP3\":[\"Parameters\"],\"F3uc1x\":[\"The exported file will contain your database and SSH passwords in plaintext. Please store it securely.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"F6pfE9\":[\"Active\"],\"F8tXg7\":[\"Data Preview\"],\"F9-6yK\":[\"Default Copy Format\"],\"F9lxfG\":[\"Remove\"],\"F9nsa2\":[\"The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:\"],\"FF_oap\":[\"Default\"],\"FK8rlP\":[\"No SSH connections configured yet\"],\"FMRcH8\":[\"First row as header\"],\"FNvDMc\":[\"This Week\"],\"FQe1FI\":[\"Est. Rows\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operation\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Choose an independent theme for the SQL editor, or keep it in sync with the app theme.\"],\"FsvZQL\":[\"Edited cell \",[\"n\"]],\"FtwKL9\":[\"Switch tab\"],\"FznI3z\":[\"Delete foreign key \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Preview failed: \"],\"G8Q5Zq\":[\"Namespace is required\"],\"GAohqx\":[\"Delete column\"],\"GJR99u\":[\"Failed to delete column: \"],\"GKfzzM\":[\"Choose a connection...\"],\"GS-Mus\":[\"Export\"],\"GUaLUq\":[\"Failed to load schema: \"],\"GXP-Iw\":[\"Add SQL Cell\"],\"Gj1mLb\":[\"Reordered cells\"],\"GlbqG2\":[\"Reset to driver default\"],\"Gq1YzP\":[\"Events\"],\"Gs5AlY\":[\"Open\"],\"GtmO8_\":[\"from\"],\"GxkJXS\":[\"Uploading...\"],\"H-o4D2\":[\"Create new column\"],\"H2B-KW\":[\"Choose the default format when copying rows with Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Redo\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"Collapse\"],\"H9P8CD\":[\"add the first filter\"],\"HAQlGl\":[\"AI Activity\"],\"HKNZrs\":[\"Index Cond.\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Delete \",\"#\",\" row\"],\"other\":[\"Delete \",\"#\",\" rows\"]}]],\"HPuCiP\":[\"Folder Path\"],\"HUs1R3\":[\"No open tabs for this connection.\"],\"HV4Isp\":[\"Enter SSH password\"],\"HVC8Hh\":[\"Copied to clipboard\"],\"HWEpq8\":[\"Disk Write/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Failed to save view: \"],\"He8v1Y\":[\"Deselect from Apply All\"],\"HehHP1\":[\"Default Layout\"],\"HilYn4\":[\"This notebook is empty. Add a cell to get started.\"],\"HjxVK_\":[\"Quick connection test\"],\"HmMnRx\":[\"WKT Mode\"],\"HoKCiI\":[\"The app will restart automatically after installation\"],\"HpK_8d\":[\"Reload\"],\"Hpi4Jm\":[\"Join now\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configure SSH Inline\"],\"I5VBsr\":[\"Same as App\"],\"I8yrPb\":[\"Replace table\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Remind Me Later\"],\"I99Miw\":[\"Cost\"],\"IETZIR\":[\"Edit cell name\"],\"IG9wzA\":[\"Failed to insert row: \"],\"ILleOG\":[\"Resource type must be \\\"service\\\" or \\\"pod\\\"\"],\"IQ3gAw\":[\"Upload File\"],\"IUwGEM\":[\"Save Changes\"],\"IUwmLq\":[\"Direct dependencies declared in package.json and src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Open Source Libraries\"],\"I_43p6\":[\"Safety\"],\"Iaizf4\":[\"Appearance\"],\"Il3FBB\":[\"Toggle structured filter panel\"],\"IniZRK\":[\"Download unavailable - only preview loaded\"],\"Isaozb\":[\"Review & adjust\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Active queries and connections through this plugin will be interrupted.\"],\"J6v1s_\":[\"Default Model\"],\"JE-DVk\":[\"Interpreter\"],\"JEGlfK\":[\"Started\"],\"JKDPqP\":[\"Select a context first\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Use SSH Tunnel\"],\"JRz8tw\":[\"MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants.\"],\"JUICth\":[\"PNG, JPG, WebP or SVG · max 512 KB\"],\"JY5Oyv\":[\"Database\"],\"JlFRIB\":[\"Session timezone sent to MySQL after connect.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Denied\"],\"K3H9p5\":[\"Unset\"],\"K5Dgu_\":[\"Databases\"],\"K8IGKf\":[\"Authentication Type\"],\"KAYNSW\":[\"How many logs to keep in memory (1-10000)\"],\"KHTGbr\":[\"Pre-flight EXPLAIN\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copy as `column`\"],\"KM5Kc8\":[\"At least one column must be selected\"],\"KSCnVQ\":[\"Kind\"],\"KUjOb9\":[\"running\"],\"KXBdwy\":[\"Refresh Routines\"],\"KXNyX7\":[\"Set DEFAULT\"],\"Kd70-v\":[\"Import from Clipboard...\"],\"KhI4oS\":[\"Open referenced row in \",[\"0\"]],\"KhgrNu\":[\"MCP Server Integration\"],\"KirERL\":[\"Timeout\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Failed to delete index: \"],\"KzeARD\":[\"Failed to delete table: \"],\"L-rMC9\":[\"Reset to default\"],\"L3HXkQ\":[\"Bug Fixes\"],\"LCZ7Dy\":[\"Copy Name\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"indexes\"],\"LMeAoR\":[\"rows\"],\"LPCdc-\":[\"Query Tab Name Prompt\"],\"LPFmga\":[\"Select for Apply All\"],\"LYzbQ2\":[\"Tool\"],\"Lbis_V\":[\"Quick Navigator\"],\"Lcpbe2\":[\"The plugin process could not be launched. Check the error details below.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained.\"],\"LnT0hQ\":[\"Add Column\"],\"LvutiO\":[\"AI Suggest\"],\"M-rHQO\":[\"Exit Fullscreen\"],\"M0XJba\":[\"Are you sure you want to clear all query history for this connection?\"],\"M1co_O\":[\"Configured\"],\"M73whl\":[\"Context\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Show All\"],\"MXdOwj\":[\"Separate Connections\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Select K8s Connection\"],\"Mc1tjS\":[\"Enable ANALYZE to inspect actual rows, timing, loops, and buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" more rows\"],\"Mp0jQ_\":[\"This driver only supports primary keys at table creation time\"],\"MqpZwN\":[\"Tabularis Process\"],\"MxIx43\":[\"↑↓ to navigate, Enter to open\"],\"MygtgQ\":[\"Add Markdown Cell\"],\"N40H-G\":[\"All\"],\"N5UQxq\":[\"Ollama not detected on port \",[\"0\"],\". Is it running?\"],\"N6GBcC\":[\"Confirm Delete\"],\"N6aqHp\":[\"Run queries\"],\"N9_S15\":[\"A new table will be created\"],\"NBdMa1\":[\"Slowest Step\"],\"NC2AI2\":[\"Length\"],\"NCzNnx\":[\"Sort ascending\"],\"NT4Ubs\":[\"Delete custom key and revert to environment variable (if present)\"],\"NUjrCO\":[\"No favorites match your search\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Tree total: \",[\"0\"]],\"Nc2VQn\":[\"Append to existing\"],\"NgFERn\":[\"Add to Favorites\"],\"NktMHG\":[\"Database name\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Test\"],\"Nq5QTk\":[\"explain Nth\"],\"O2STgu\":[\"Export failed: \"],\"O8SV8O\":[\"Downloading...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Run All Cells\"],\"OGWdBg\":[\"View Name\"],\"OHqT6w\":[\"Press key combination...\"],\"OXJsaG\":[\"Invalid parameter name\"],\"OfhWJH\":[\"Reset\"],\"OlAl5i\":[\"Expand all\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Join Discord\"],\"P1YGsb\":[\"SQL Generation\"],\"P2m1xb\":[\"Stop on Error\"],\"P3Qlys\":[\"No Connection ID\"],\"P6Y3Yf\":[\"Run this command in your terminal, then restart Claude Code.\"],\"PCdj-c\":[\"Deselect All\"],\"PMnFt9\":[\"Disk Read/s\"],\"PQU2Va\":[\"Accept Suggestion with Enter\"],\"PRnH8G\":[\"of \",[\"0\"]],\"PY8UF3\":[\"Toggled parallel (cell \",[\"n\"],\")\"],\"PiH3UR\":[\"Copied!\"],\"Pia95d\":[\"Column name is required\"],\"PrElXQ\":[\"Update\"],\"PrixCC\":[\"Rows will be added to an existing table\"],\"Pujgbb\":[\"Configure destination\"],\"Pw_eQV\":[\"Plugin Failed to Start\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"No saved queries\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"No child processes\"],\"QCxMC0\":[\"Automatically check for new versions when the app launches\"],\"QEazml\":[\"Delete selected\"],\"QHcLEN\":[\"Connected\"],\"QLHHFO\":[\"Read-only mode\"],\"QOvAW3\":[\"New Features\"],\"QULGRi\":[\"No valid queries found\"],\"QZwllF\":[\"Browse...\"],\"QbkSr_\":[\"EXPLAIN unavailable for this query.\"],\"QeHFYZ\":[\"EXPLAIN failed: \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"Read more\"],\"Qu4Hog\":[\"Notebook imported successfully\"],\"R-A2Vd\":[\"No data to display\"],\"R0Hkb2\":[[\"0\"],\" database(s) selected\"],\"R1nHhB\":[\"Already exists\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convert to Console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Setup\"],\"RF-HyV\":[\"Choose your preferred language. 'Auto' will use your system language.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copy name\"],\"RI-HZc\":[\"Enter \",[\"0\"],\" Key\"],\"RJrE17\":[\"Are you sure you want to drop view \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"A star helps others discover the project\"],\"Rb3Tdm\":[\"Notebook name\"],\"RcbKJ3\":[\"On Update\"],\"RkefFq\":[\"Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan.\"],\"RnF_hl\":[\"Loading plugin registry...\"],\"Rns7_C\":[\"This action cannot be undone immediately\"],\"RoKRqW\":[\"Available Plugins\"],\"RphpKk\":[\"Appearance\"],\"Rt8sHM\":[\"Sort or temp work detected\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Enabled\"],\"S1veKH\":[\"Revert Selected\"],\"S5zeZU\":[\"Toggle Preview\"],\"S8Yqbl\":[\"Insert\"],\"SDND4q\":[\"Not configured\"],\"SJRy3D\":[\"(Auto-generated)\"],\"SSwIjo\":[\"Set EMPTY\"],\"SgvA_r\":[\"Press Run (Ctrl/Command+F5) to load table data\"],\"SlfejT\":[\"Error\"],\"SoATkx\":[\"Copy Cell\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"Endpoint URL\"],\"T7w5CQ\":[\"Failed to create new row: \"],\"T9947j\":[\"Value (e.g. 'text' or 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Switch to Vertical Layout\"],\"TK5oex\":[\"Save Prompt\"],\"TKQ7K-\":[\"Install\"],\"TKZreP\":[\"Require\"],\"TMLAx2\":[\"Required\"],\"TO08JI\":[\"foreign keys\"],\"TVKqvO\":[\"Edit Row\"],\"TYSdQ3\":[\"Run SELECT query\"],\"TfDFHS\":[\"Wrap long lines in the editor instead of scrolling horizontally.\"],\"Tibfjs\":[\"No saved connections — create one below\"],\"Tj36Dr\":[\"Reset to Default\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Lock query\"],\"TpwXyg\":[\"If timing is missing, the server likely returned an estimate-only plan.\"],\"Tw2M1h\":[\"Installation Failed\"],\"Ty-rm9\":[\"SSH Connections\"],\"Tz0i8g\":[\"Settings\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes Connections\"],\"U4uzyV\":[\"What's New\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Stop execution when a cell fails\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" on \",[\"1\"],\" — review and decide before it executes.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configuration installed successfully for \",[\"clientName\"],\"! Restart the app to apply.\"],\"URmyfc\":[\"Details\"],\"UWQBvp\":[\"Generate SQL templates\"],\"UawTKZ\":[\"Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default.\"],\"Ub8sf5\":[\"SQLite does not support dropping FKs via ALTER TABLE.\"],\"UbbJ8j\":[\"No options found\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"These connections will reject writes from MCP. Other connections behave normally.\"],\"UnQNah\":[\"Are you sure you want to delete column \\\"\",[\"0\"],\"\\\" from table \\\"\",[\"tableName\"],\"\\\"?\\n\\nWARNING: This will permanently delete all data in this column. This action cannot be undone.\"],\"UncTTh\":[\"Sum of RSS across the process tree — may overcount shared memory\"],\"UpjgFm\":[\"Changed parameters\"],\"UsAnu1\":[\"ANALYZE executes the query. Use with caution on data-modifying statements.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tab Size\"],\"UzWGWO\":[\"Switch to SQL WHERE input\"],\"V-chk5\":[\"How often to check if active connections are still alive. Set to 0 to disable.\"],\"V-pw1j\":[\"Table name\"],\"V2T0Uw\":[\"No saved notebooks yet.\"],\"V3aNwx\":[\"Data Editor\"],\"VGYp2r\":[\"Apply to all\"],\"VH8S7x\":[\"Clipboard column\"],\"VIAEcS\":[\"Failed to load databases. Check your credentials.\"],\"VKdztF\":[\"Append rows\"],\"VLiHXI\":[\"Analyze Data\"],\"VMbmXc\":[\"Are you sure you want to remove \\\"\",[\"pluginName\"],\"\\\"? This will delete the plugin files.\"],\"VO3weF\":[\"No file loaded\"],\"VOZlKc\":[\"Import Database\"],\"VPzsIz\":[\"Generating name...\"],\"VUul0v\":[\"Killing\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"All queries\"],\"Vi2Pqx\":[\"by\"],\"Vl2zn2\":[\"stopped\"],\"Vo4uBA\":[\"An error occurred while installing the plugin. See the details below.\"],\"VqqyOs\":[\"Execute a query to see results\"],\"VzhDFh\":[\"Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below.\"],\"W3uwpT\":[\"Close All Tabs\"],\"W4MKLh\":[\"e.g. Looks risky on prod, please confirm…\"],\"W60eXm\":[\"Table\"],\"WA8RND\":[\"Are you sure you want to delete table \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Delete Table\"],\"WLnvCZ\":[\"Enter username\"],\"WM-__8\":[\"Search connections...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row imported into \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" rows imported into \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Are you sure you want to delete query \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"succeeded\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"General\"],\"WmPpB1\":[\"Loading explain plan…\"],\"Wu7cK0\":[\"No databases found\"],\"WvoUQF\":[\"Deleted cell \",[\"n\"]],\"Ww3pDD\":[\"MANUAL COMMAND\"],\"X-20AU\":[\"Enter query tab name prompt...\"],\"X-U6_w\":[\"Font Family\"],\"X5fs0g\":[\"Create your first connection to get started.\"],\"X7Ayjp\":[\"Password saved in system keychain\"],\"X9kySA\":[\"Favorites\"],\"XJOV1Y\":[\"Activity\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Query Explanation\"],\"XVF2Pf\":[\"Edit Schemas\"],\"XW6OYF\":[\"This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path.\"],\"XZB6Xr\":[\"Max Log Entries\"],\"Xcffv2\":[\"Show AI Assist and Explain buttons in the editor\"],\"XeqTSh\":[\"Join Type\"],\"XmJfZT\":[\"name\"],\"XoQfG1\":[\"SSH User\"],\"XwI0Vw\":[\"Auto (System)\"],\"XyDlLX\":[\"Index Name\"],\"Y2P2aK\":[\"Select schemas to load:\"],\"Y8HYw2\":[\"value\"],\"Y8zX3R\":[\"Insert to Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Search...\"],\"YWlnMZ\":[\"Ollama Port\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Browse and install plugins from the registry.\"],\"Y_3yKT\":[\"Open in New Tab\"],\"YiAQ_Q\":[\"Refresh Tables\"],\"Ysjr9Y\":[\"SQL Preview\"],\"YswNf7\":[\"All levels\"],\"YtNwr6\":[\"Maximum number of query history entries stored per connection.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Loading...\"],\"Z7ZXbT\":[\"Approve\"],\"Z8JpBH\":[\"Export as Notebook\"],\"Z8fBIc\":[\"Actual rows exceed estimate\"],\"ZC2VJP\":[\"Execute\"],\"ZCIS4k\":[\"no active filters\"],\"ZF1_UT\":[\"SSL Mode\"],\"ZGjBPa\":[\"Clear Logs\"],\"ZHQTlM\":[\"Importing from\"],\"ZIFDoJ\":[\"Please select at least Structure or Data\"],\"ZIZA6o\":[\"Edit before approving\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" parsing warning\"],\"other\":[\"#\",\" parsing warnings\"]}]],\"ZVn8p2\":[\"Display line numbers in the editor gutter.\"],\"ZYnwzF\":[\"Disconnected\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Create Foreign Key\"],\"Zf7LHg\":[\"No contexts found (is kubectl installed?)\"],\"Zfotp5\":[\"Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well.\"],\"ZiFjhs\":[\"Select *\"],\"ZpzHz0\":[\"Failed to load schemas\"],\"ZqXGPF\":[\"Failed to drop view: \"],\"ZuL73E\":[\"Create a new database view\"],\"_-bi4r\":[\"Referenced Table\"],\"_AEYGI\":[\"No execution history yet\"],\"_FdpZc\":[\"Failed to load view definition: \"],\"_FxSdi\":[\"Browse the direct open source dependencies used across the app, backend, and tooling.\"],\"_JyTG8\":[\"Enter explain prompt...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"rows\"],\"_TK1zF\":[\"Saved Connection\"],\"_bJFBE\":[\"Connect Timeout\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Tree\"],\"_dqduX\":[\"Next page\"],\"_fwE6J\":[\"Older\"],\"_n04sB\":[\"Kill\"],\"_otxbQ\":[\"Key file\"],\"_pezIT\":[\"Failed to connect to \",[\"0\"],\". Please check your settings or ensuring the database is running.\"],\"_srfkj\":[\"Custom key deleted successfully\"],\"_t6aFo\":[\"MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version.\"],\"_xTbaM\":[\"columns\"],\"_yxaaL\":[\"Unique Index\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.\"],\"a9CASo\":[\"SQLite only supports renaming columns. Other modifications require recreating the table manually.\"],\"aAIQg2\":[\"Appearance\"],\"aAURrV\":[\"Installed\"],\"aC_vCa\":[\"Generate name with AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Select a node to view details\"],\"aHKcKc\":[\"Previous page\"],\"aI-5wG\":[\"Verify CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Default Value\"],\"aScJP1\":[\"Run this query\"],\"aVNbN8\":[\"Filter conditions\"],\"aWhdMQ\":[\"Use Existing SSH Connection\"],\"aXYd8V\":[\"Timeout\"],\"aX_S_r\":[\"Page \",[\"0\"],\" of \",[\"totalPages\"]],\"agZcf8\":[\"Generated SQL: \",[\"tableName\"]],\"ajqPzi\":[\"Select [fields]\"],\"alplHn\":[\"Analyzing query plan with AI...\"],\"anBcU3\":[\"If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo.\"],\"arHmj2\":[\"Are you sure you want to delete this query from history?\"],\"arKcqW\":[\"Older servers may fall back to estimated plans with fewer metrics.\"],\"arcpYe\":[\"Approval required\"],\"aurEkh\":[\"Loading processes…\"],\"avtdsd\":[\"SQL Mode\"],\"az8lvo\":[\"Off\"],\"b1Ah3z\":[\"Focused on\"],\"b392Dr\":[\"Expand All\"],\"b5S_PU\":[\"Database Name\"],\"bAvovP\":[\"Move Down\"],\"bH3JqY\":[\"No tables found\"],\"bP5JOn\":[\"Word Wrap\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Make all MCP queries read-only\"],\"bmca5u\":[\"Writes only\"],\"bpCiBU\":[\"Allow writes from MCP\"],\"bqnhqW\":[\"Estimate exceeds actual rows\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Fail with error\"],\"bw22Gk\":[\"Column Schema\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Top Issues\"],\"cFCKYZ\":[\"Deny\"],\"cFGrCP\":[\"table\"],\"cGeFup\":[\"Font Size\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focus on Table\"],\"cM9NHc\":[\"Downgrade to\"],\"cO9-2L\":[\"Disable\"],\"cSev-j\":[\"Filters\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Import \",\"#\",\" row\"],\"other\":[\"Import \",\"#\",\" rows\"]}]],\"c_xoSn\":[\"Renamed cell \",[\"n\"]],\"cd0XEW\":[\"Save Query\"],\"cnGeoo\":[\"Delete\"],\"cwfPLH\":[\"Split Group\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" statements\"],\"d34vwG\":[\"Load Databases\"],\"d6ynQ7\":[\"Sort descending\"],\"d8_6_v\":[\"cancel\"],\"d8wc1_\":[\"Sample values\"],\"dBXoCS\":[\"An environment variable is present, but you can override it by setting a key above.\"],\"dD7NPy\":[\"Outline\"],\"dEgA5A\":[\"Cancel\"],\"dMtLDE\":[\"to\"],\"dPJVhW\":[\"Installation Failed\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" session\"],\"other\":[\"#\",\" sessions\"]}]],\"dTUzKm\":[\"Run Selected (\",[\"0\"],\")\"],\"dU_iQN\":[\"No sessions match the current filters.\"],\"dUh9QW\":[\"Planning\"],\"dVoir2\":[\"Added Markdown cell \",[\"n\"]],\"dZ0d2O\":[\"Please select at least one table\"],\"dhi13U\":[\"Choose image…\"],\"dli1JX\":[\"Submit Changes\"],\"dmYV6f\":[\"Routines\"],\"dohZCo\":[\"Instructions for AI-powered SQL generation. Use {\",[\"SCHEMA\"],\"} as a placeholder for the database structure.\"],\"dtxpK2\":[\"Analyze\"],\"dwW9nJ\":[\"Show Line Numbers\"],\"dwWVw_\":[\"Show Welcome Screen\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"If exists\"],\"dyN4j9\":[\"Click 'Run Preview' to see results\"],\"e07Iz5\":[\"Open Task Manager\"],\"e0NzXu\":[\"This project is a Work In Progress (WIP). Core features are stable, but we have big plans.\"],\"e1UKxf\":[\"Save this query\"],\"e34gdU\":[\"How long the MCP subprocess will wait for the user's decision before failing the request.\"],\"e62LQd\":[\"Force Kill\"],\"e6QZsM\":[\"Editor Theme\"],\"e8CirT\":[\"Run query\"],\"eD2kUP\":[\"Buffers Read\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Enter explain plan analysis prompt...\"],\"eIVolo\":[\"Disk R/W\"],\"eJOEBy\":[\"Exporting...\"],\"eKHY3W\":[\"Plugin Settings\"],\"eMb6Ub\":[\"Choose a resource...\"],\"ePK91l\":[\"Edit\"],\"eXweu6\":[\"Expand Cell\"],\"ecNsTE\":[\"No queries match your search\"],\"ecUA8p\":[\"Today\"],\"ecpIZP\":[\"Enter key passphrase if encrypted\"],\"ejmeDY\":[\"Installed\"],\"esl-Tv\":[\"Resource Type\"],\"exyUec\":[\"Connection\"],\"f2AJjl\":[\"Delete Row\"],\"f4pD-j\":[\"Connection test failed\"],\"f7sXvi\":[\"Enter password\"],\"fAsxc0\":[\"Sequential Scans\"],\"fIeFs0\":[\"Select Value...\"],\"fJm92A\":[\"Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Values\"],\"f_b1TA\":[\"Execution History\"],\"fghnqP\":[\"Switch to connection 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Comma (,)\"],\"fp711N\":[\"Blocked (read-only)\"],\"fpzyLj\":[\"Page \",[\"0\"],\" of \",[\"1\"]],\"fuA6oy\":[\"Socket Timeout\"],\"fvImQM\":[[\"0\"],\" selected\"],\"fwr_nh\":[\"Install extensions, manage plugin drivers, and keep runtime settings under control.\"],\"g0ZzK4\":[\"Valid JSON\"],\"g11hAR\":[\"New Row\"],\"g8VcMm\":[\"My K8s cluster\"],\"gCFR_O\":[\"Parallel Execution (Run All)\"],\"gEjU98\":[\"Open connections\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"At least one column is required\"],\"gSuQrG\":[\"No connections match \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Re-run query\"],\"gZWMnn\":[\"AI Analysis\"],\"ghYd73\":[\"Choose target...\"],\"giAqEC\":[\"Create New Table\"],\"gnQS8X\":[\"Maximum packet size used by the MySQL connector.\"],\"gqV5VL\":[\"Built-in, not customizable\"],\"gww_XE\":[\"Referenced Column\"],\"gxXPJ9\":[\"Configure Interpreter\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximize\"],\"h-XNc9\":[\"CSV Delimiter\"],\"h-kNAk\":[\"e.g. sales_data\"],\"h3Z_aK\":[\"Write Markdown here...\"],\"h7MgpO\":[\"Keyboard Shortcuts\"],\"h7peZQ\":[\"Allow\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" system process running\"],\"other\":[\"#\",\" system processes running\"]}]],\"hEZrFh\":[\"Run SQL File...\"],\"hEipgW\":[\"Check for Updates Now\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Export as CSV\"],\"hItdtk\":[\"Browse folder\"],\"hXFVjo\":[\"Table name is required\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Re-run\"],\"hbz1rh\":[\"keys\"],\"hdsaJo\":[\"Importing...\"],\"he3ygx\":[\"Copy\"],\"hfGimp\":[\"Choose a namespace...\"],\"hjjSEi\":[\"Read-only connections\"],\"hjwN_s\":[\"Resource Name\"],\"hlF1mD\":[\"Copy selection\"],\"hnboBb\":[\"AI Query Plan Analysis\"],\"hnvu2p\":[\"Error Details\"],\"hq4-D2\":[\"API Key is stored securely in your system keychain. Setting a key here overrides the environment variable.\"],\"hqjXdn\":[\"Failed to delete SSH connection\"],\"hqofAK\":[\"Copy SQL\"],\"hy6L14\":[\"View on GitHub\"],\"hyjACX\":[\"Collapsed/expanded cells\"],\"hz1b5W\":[\"No matching elements found\"],\"i1vAVM\":[\"Create new table\"],\"i3S5T3\":[\"Search favorites...\"],\"i4_LY_\":[\"Write\"],\"i5HBWh\":[\"Query history was reset\"],\"i5zCt4\":[\"Table\"],\"iAVlge\":[\"Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message.\"],\"iE1yAB\":[\"Filter tables...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connect\"],\"iSryJ2\":[\"My SSH Server\"],\"iT7UeX\":[\"Add Index\"],\"iUWwuR\":[\"Download & Install\"],\"ia7i08\":[\"Select context/namespace/type first\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Saved\"],\"igcsfY\":[\"No plugins available in the registry.\"],\"ij-Elv\":[\"Image preview\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" explainable query found\"],\"other\":[\"#\",\" explainable queries found\"]}]],\"ioL38P\":[\"Monitor plugin processes, CPU, RAM and disk usage in real time\"],\"ixlL_e\":[\"SSH Key File (Optional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Select a model\"],\"j3gyYH\":[\"Apply All\"],\"j5CWO4\":[\"Up to date\"],\"j9HPuI\":[\"Row #\",[\"0\"]],\"jBtpMP\":[\"All statuses\"],\"jEu4bB\":[\"Columns\"],\"jEyQIs\":[\"No routines found\"],\"jHc1By\":[\"Drop View\"],\"jI6sj4\":[\"Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL.\"],\"jIxQCZ\":[\"Not available for your platform\"],\"jKIncn\":[\"Database name is required\"],\"jPSk57\":[\"Reason (optional)\"],\"jUNY_d\":[\"view\"],\"jVqjDo\":[\"Invalid notebook file format\"],\"jWSZ-A\":[\"Preview only - full data not loaded\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket timeout in milliseconds.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Connection name is required\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"child process\"],\"jx0t66\":[\"Collapse child processes\"],\"k-0mL-\":[\"Add Column\"],\"k-XiMX\":[\"Raw\"],\"k2UnVy\":[\"Hash Cond.\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"seconds\"],\"kBiBq7\":[\"Delete index \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Toggle Chart\"],\"kI1qVD\":[\"Format\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" rows · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Event details\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registry\"],\"kY-q3P\":[[\"label\"],\" is required\"],\"kexIdC\":[\"Use Kubernetes Port-Forward\"],\"krksx_\":[\"Success\"],\"ktYUe9\":[\"Run All\"],\"kwY6nh\":[\"Dismiss\"],\"kx0s-n\":[\"Results\"],\"kxUEfE\":[\"Failed to get routine definition: \"],\"l2Op2p\":[\"Query Parameters\"],\"l9Ivba\":[\"Plugin processes & system resources\"],\"lBdPxu\":[\"Accent color\"],\"lCF0wC\":[\"Refresh\"],\"lEQRwq\":[\"Data (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"New table created\"],\"lOekZ3\":[\"Switch to Horizontal Layout\"],\"lUA1C1\":[\"SSH Key Passphrase (Optional)\"],\"lVeG20\":[\"Rust Dependencies\"],\"lXAG6D\":[\"Instructions for AI-powered query explanation. Use {\",[\"LANGUAGE\"],\"} as a placeholder for the output language.\"],\"lbbYjy\":[\"Directly edit the raw configuration file. A restart is required to apply changes.\"],\"lhKW0m\":[\"Added SQL cell \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Result Page Size (Limit)\"],\"lkz6PL\":[\"Duration\"],\"lmVGeo\":[\"Add Foreign Key\"],\"lnnx3E\":[\"Connect Tabularis to Claude Desktop, Cursor, and more\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Add\"],\"m2Q_r8\":[\"Detect JSON in text columns\"],\"m2tskz\":[\"Success\"],\"mA-qpe\":[\"Run All Complete\"],\"mBhhbA\":[\"Logs exported to clipboard\"],\"mCNdzH\":[\"Run Cell\"],\"mO95sp\":[\"Close panel\"],\"mP7dLi\":[\"Enter font name above\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" blocked\"],\"other\":[\"#\",\" blocked\"]}]],\"mS74ir\":[\"Failed to save SSH connection\"],\"mSqtw8\":[\"Run Preview\"],\"mURmfQ\":[\"View Definition (SQL)\"],\"mX_isJ\":[\"Vertical\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Structure (DDL)\"],\"mrk4Cf\":[\"Sort by \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap.\"],\"mtvVdV\":[\"Rows Processed\"],\"mx4evv\":[\"Create Table\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Download\"],\"n7JDTx\":[\"Install and enable plugins to see them here\"],\"nDDJir\":[\"Search session, client, connection…\"],\"nHP-Kr\":[\"No active session. Please select a connection.\"],\"nKhCjW\":[\"Select Tables\"],\"nNwvm4\":[\"Error\"],\"nOVim5\":[\"Failed to save connection\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Events\"],\"nf14vn\":[\"Requires extension: \",[\"0\"]],\"ngO6Pv\":[\"Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Create your first connection\"],\"nohy4m\":[\"No MCP activity yet.\"],\"nr-axf\":[\"Remove Plugin\"],\"nsPFX9\":[\"Open in Visual Explain\"],\"nuBbBr\":[\"Chart\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Dump Database\"],\"o-XJ9D\":[\"Change\"],\"o21Y-P\":[\"entries\"],\"o3tP_A\":[\"Delete Index\"],\"o45L8r\":[\"Provide your connection name\"],\"o53XGh\":[\"Copy selected row(s)\"],\"o7J4JM\":[\"Filter\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Level\"],\"oGiIL7\":[\"Default Provider\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connection Lost\"],\"oJlXF2\":[\"Import Notebook\"],\"oMFv82\":[\"Split Vertical\"],\"oOFiQg\":[\"Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended).\"],\"oT9ZD3\":[\"Hide overview\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Changed chart (cell \",[\"n\"],\")\"],\"oWfclW\":[\"Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.\"],\"obpbdz\":[\"Config file not found (create manually)\"],\"odZgfC\":[\"AI CLIENTS\"],\"ogZhXn\":[\"Choose the default layout direction for ER diagrams\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Actual Rows\"],\"olWzar\":[\"Force Kill Plugin Process\"],\"ovBPCi\":[\"Default\"],\"owzTWN\":[\"AI models refreshed from providers\"],\"oxYi6j\":[\"Adjust the base font size used throughout the application (10-20px).\"],\"p--hsQ\":[\"A database connection was lost\"],\"p6NueD\":[\"NEW\"],\"pOYHox\":[\"Actions\"],\"pR9bTR\":[\"No BLOB data\"],\"pS8S5q\":[\"e.g. users, orders, products\"],\"pSws_M\":[\"Table Name\"],\"pVLbKZ\":[\"View created successfully\"],\"pWT04I\":[\"Checking...\"],\"pZJ_6D\":[\"Index name is required\"],\"pddYFG\":[\"Enter notebook cell name prompt...\"],\"pnpyuD\":[\"Enable Logging\"],\"pqKMPv\":[\"Failed to create table: \"],\"pqaP1h\":[\"Dismiss\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"e.g., Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"All other connections stay read-only. Only the connections checked here may execute writes.\"],\"qA5jLs\":[\"Error Details\"],\"qIrtcK\":[\"Updates\"],\"qOqy8G\":[\"Checking configuration...\"],\"qWaVNs\":[\"Save & Restart\"],\"qb3LPX\":[\"View ER Diagram\"],\"qkK0vq\":[\"View name is required\"],\"qki9tG\":[\"Error\"],\"qoIir-\":[\"The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Collapse all\"],\"r6ncaO\":[\"Close tab\"],\"rAJlpP\":[\"Container Port\"],\"rG3WVm\":[\"Select\"],\"rGRCeK\":[\"Clear Query History\"],\"rNIto7\":[\"Resource name is required\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exported successfully\"],\"rY4sEV\":[\"Delete FK\"],\"rbu0nO\":[\"Manage SSH Connections\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connection\"],\"other\":[\"#\",\" connections\"]}]],\"rn2_2V\":[\"Remove filter\"],\"roABNH\":[\"No query history\"],\"rtir7c\":[\"unknown\"],\"ru0-2W\":[\"No active connections\"],\"rvDPWO\":[\"Estimate Gap\"],\"rwWjWg\":[\"Release Notes\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Test Connection\"],\"sBOaim\":[\"The configuration file has been saved. Restart now to apply the changes?\"],\"sCyv9B\":[\"Refresh Models\"],\"sSUqe4\":[\"Delete\"],\"sUBkgN\":[\"Generating SQL...\"],\"sZZG3d\":[\"Are you sure you want to import \\\"\",[\"0\"],\"\\\"?\\nThis may overwrite existing data.\"],\"sbK5ck\":[\"Search history...\"],\"sq_bS6\":[\"On Delete\"],\"suW7-E\":[\"Connection timeout in milliseconds.\"],\"suqtBX\":[\"Esc to close\"],\"t-R8-P\":[\"Execution\"],\"t1OfVY\":[[\"totalLibraries\"],\" libraries\"],\"t2TMzs\":[\"Close Tab\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Select a table...\"],\"t7KRl1\":[\"Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere.\"],\"t9NJIk\":[\"Scan-heavy operations detected\"],\"tB7xof\":[\"Temp or Sort Ops\"],\"tBBXTO\":[\"Ping Interval\"],\"tFrT3w\":[\"Add this to your client config file manually if automatic install fails.\"],\"tJ7UbA\":[\"explain focused\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Split Horizontal\"],\"tQhW-D\":[\"Log Settings\"],\"tT-BQX\":[\"Installed\"],\"tXFGEx\":[\"No Kubernetes connections saved. Click \\\"Add\\\" to create one.\"],\"tXLz_8\":[\"Delete\"],\"tXpRby\":[\"Data Grid\"],\"tbysEk\":[\"Actions\"],\"tdta9X\":[\"Page \",[\"0\"]],\"tfDRzk\":[\"Save\"],\"tfEioV\":[\"Execute all SQL cells top to bottom\"],\"tiAIaJ\":[\"SSH Password missing. Please re-enter.\"],\"tk22BR\":[\"Paste structured data and preview the schema before importing\"],\"tst44n\":[\"Events\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL file executed successfully\"],\"u6QeR6\":[\"Restart Now\"],\"uAQUqI\":[\"Status\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc to close\"],\"uFViPK\":[\"No SSH connections available\"],\"uHUuhp\":[\"Explain this query\"],\"uHfFzS\":[\"Editor Font Size\"],\"uJ_3K5\":[\"Delete notebook \\\"\",[\"0\"],\"\\\"? This cannot be undone.\"],\"uKaNJ3\":[\"Open in JSON Editor\"],\"uQBwTo\":[\"Schemas\"],\"ub54ff\":[\"Plugin Center\"],\"ufFyBs\":[\"Database exported successfully\"],\"upNmR2\":[\"Open Sidebar Editor\"],\"upwIY4\":[\"View Definition\"],\"utMia3\":[\"Deselect All\"],\"uyNaJg\":[\"1 element\"],\"v61dnS\":[\"Enter the exact model name for your OpenAI-compatible provider.\"],\"v6oeyr\":[\"Installed\"],\"v75DGg\":[\"Browse file\"],\"v99dO4\":[\"Primary Key\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query found\"],\"other\":[\"#\",\" queries found\"]}]],\"vCSBPD\":[\"Add filter\"],\"vH7uJj\":[\"Sort by…\"],\"vUOA1-\":[\"Search models...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.\"],\"vXIe7J\":[\"Language\"],\"vYf4Jm\":[\"Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Prefer\"],\"vditm4\":[\"Explain Plan\"],\"vks_ls\":[\"Close Other Tabs\"],\"vnAnIp\":[\"Model <0>\",[\"0\"],\" not found in <1>\",[\"1\"],\". It may not work correctly.\"],\"vqoN5u\":[\"Structure\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Explorer\"],\"vujQJ5\":[\"Localization\"],\"vvJPVL\":[\"Show overview\"],\"vwI5S4\":[\"Success\"],\"vzH-7Z\":[\"Explain\"],\"w7QmD_\":[\"Enter system prompt...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Elapsed time\"],\"wCfv2R\":[\"Add Connection\"],\"wGfc86\":[\"Clear All History\"],\"wGwNv4\":[\"Active database\"],\"wJJ-Wy\":[\"Installing...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers Hit\"],\"wQn-RM\":[\"Add Column\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Applied\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Import from Clipboard\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"Pending approval\"],\"wckWOP\":[\"Manage\"],\"wdYcKH\":[\"Open Tabs\"],\"wja8aL\":[\"Untitled\"],\"wkOAzk\":[\"No notebooks match your search.\"],\"wp49Ao\":[\"Failed to process insertions: \"],\"wqG2hQ\":[\"Skip (do not import)\"],\"wwrAsK\":[\"Please fill in all required fields\"],\"wwu18a\":[\"Icon\"],\"x2fr_j\":[\"Graph\"],\"xANKBj\":[\"Functions\"],\"xBwjck\":[\"A restart is required to apply changes.\"],\"xDAtGP\":[\"Message\"],\"xECY01\":[\"Procedures\"],\"xGPNgZ\":[\"Prompt Customization\"],\"xNgtS-\":[\"No views found\"],\"xOPa1b\":[\"Port must be between 1 and 65535\"],\"xY9s5E\":[\"Timeout\"],\"xaVUr1\":[\"The quick brown fox jumps over the lazy dog\"],\"xbvTzL\":[\"File Path\"],\"xlew5F\":[\"Clear\"],\"xmNyKz\":[\"Testing...\"],\"xtuh6D\":[\"Expand Explorer\"],\"y-Zdqj\":[\"Choose a context...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Open JSON viewer\"],\"yQXjG5\":[\"Deselect All\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Yesterday\"],\"ygCKqB\":[\"Stop\"],\"ykCc6r\":[\"Changed database (cell \",[\"n\"],\")\"],\"ynVMSc\":[\"Select All\"],\"ytdz1d\":[\"AI requested a database write\"],\"yyhzur\":[\"Create Table\"],\"yz7wBu\":[\"Close\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"SSH Password\"],\"z4oF5T\":[\"Dump Database\"],\"z5kV0h\":[\"Connections\"],\"zBTMzx\":[\"Preview\"],\"zCaAKs\":[\"Update Error\"],\"zDAakK\":[\"Cannot display diagram without a connection ID.\"],\"zGe21h\":[\"This key is loaded from an environment variable\"],\"zGfL5t\":[\"value\"],\"zL6-4A\":[\"No plugin processes are running\"],\"zLZhCi\":[\"Brand-new Discord community!\"],\"zLlCou\":[\"Copy column name\"],\"zNEL34\":[\"Join the Community\"],\"zNgTlV\":[\"Close Tabs to Right\"],\"zQz55p\":[\"Inspect structure\"],\"zR0FfH\":[\"Exported to \",[\"target\"]],\"zRZeOc\":[\"Search tables, views, routines, triggers...\"],\"zUNMsr\":[\"SSH Key\"],\"zXMRzb\":[\"SSH Port\"],\"zZgoXr\":[\"No tables match\"],\"zaWbms\":[\"Rollback Changes\"],\"zgClmU\":[\"Install Config\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Enter value...\"],\"zvzN4C\":[\"Set as Active\"],\"zzDlyQ\":[\"Success\"],\"zzMxrp\":[\"Edit config.json\"],\"zz_Wd_\":[\"Mode\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Max History Entries\"],\"-6AWa-\":[\"Import Connections\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Disconnect\"],\"-PLZfh\":[\"Failed to refresh models\"],\"-T5W2e\":[\"Driver Notes\"],\"-ZgeeE\":[\"Edit history\"],\"-aYrdc\":[\"Version \",[\"0\"],\" is available\"],\"-fBGXl\":[\"Highest Cost\"],\"-jIQDz\":[\"Collapse Cell\"],\"-u1eRo\":[\"No database\"],\"-yoeVU\":[\"Loading schema...\"],\"-zy2Nq\":[\"Type\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"Approval ID\"],\"0E5-gF\":[\"Are you sure you want to delete this connection?\"],\"0HCubq\":[\"Expand\"],\"0Kmdvy\":[\"Custom Font\"],\"0Nj13E\":[\"Generate SQL\"],\"0ROgz5\":[\"Enter JSON...\"],\"0SY9sU\":[\"Failed to disconnect from database\"],\"0b3kL9\":[\"Select a database\"],\"0caMy7\":[\"History\"],\"0mx5ow\":[\"Query\"],\"0n9BtL\":[\"Preview\"],\"0pHB9N\":[\"Copy as table.column\"],\"0sQzZK\":[\"Filter databases...\"],\"0uPP9X\":[\"FK Name (Optional)\"],\"0wxuek\":[\"Current Version\"],\"0x09Aw\":[\"Toggled stop on error\"],\"0yBP6v\":[\"Support the Development\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"0yVAoD\":[\"Count rows\"],\"0zxJ87\":[\"No logs available\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Edit View\"],\"11fGJ6\":[\"Queries\"],\"13hIUA\":[[\"0\"],\" API Key\"],\"14qNWF\":[\"Select SSH Connection\"],\"17qHRP\":[\"New connection\"],\"1Dn6bg\":[\"Import from Clipboard\"],\"1Dnd0I\":[\"Load row count\"],\"1FjTLW\":[\"e.g. python3\"],\"1GOvbo\":[\"Ollama connected (\",[\"0\"],\" models found)\"],\"1I6UoR\":[\"Views\"],\"1U7hS5\":[\"Len\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Editor Font Family\"],\"1ekzlY\":[\"Plugin Processes\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Theme Selection\"],\"1xVZkL\":[\"No models found\"],\"26Joci\":[[\"0\"],\" rows retrieved\"],\"2Bf-Qe\":[\"New console\"],\"2CrSmP\":[\"Help tabularis grow\"],\"2D9F8_\":[\"Failed to duplicate connection\"],\"2Eoi_a\":[\"View details\"],\"2F4pE5\":[\"Rust Build and Test\"],\"2Fsd9r\":[\"This Month\"],\"2JzKXI\":[\"Set GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Select All\"],\"2SO5RM\":[\"Kubernetes is not available for this driver.\"],\"2Uh5GA\":[\"Cargo ecosystem\"],\"2YylFp\":[\"New Visual Query\"],\"2luuSG\":[\"Try again\"],\"2wxgft\":[\"Rename\"],\"2yG2GC\":[\"Pause writes (or every query) and ask the user to approve them inside Tabularis before they hit the database.\"],\"30-b5r\":[\"Delete\"],\"31kwdN\":[\"Duplicate filter\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"All tools\"],\"3Am5DS\":[\"Tab view\"],\"3FVg9_\":[\"Local Column\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Run\"],\"3L0HCz\":[\"No plugins match your search.\"],\"3Nv3JV\":[\"Executing query...\"],\"3TSz9S\":[\"Minimize\"],\"3UW8fG\":[\"Updates managed by \",[\"0\"]],\"3YvS-c\":[\"New tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook Cell Name Prompt\"],\"3qkggm\":[\"Fullscreen\"],\"3rBJ1T\":[\"View Schema\"],\"3xZ-xV\":[\"Insert Current Timestamp\"],\"40Gx0U\":[\"Timezone\"],\"41GP4f\":[\"Choose the default delimiter character used when copying or exporting rows as CSV.\"],\"42iaEi\":[\"PostgreSQL without ANALYZE shows planner estimates only.\"],\"44cXI8\":[\"Sort by \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Manage Databases\"],\"4CK17g\":[\"Are you sure you want to modify view \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Select at least one database\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Export as HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" child process\"],\"other\":[\"#\",\" child processes\"]}]],\"4TtbAT\":[\"Fetch the latest translations from the cloud without waiting for an app update.\"],\"4VyuY3\":[\"Are you sure you want to clear all logs?\"],\"4WWqS3\":[\"Toggle inline JSON tree\"],\"4XAQdl\":[\"Create Index\"],\"4cEClj\":[\"Sessions\"],\"4cmfYp\":[\"Duplicate Row\"],\"4hsr6d\":[\"Create View\"],\"4lIZTB\":[\"Frontend Dev Dependencies\"],\"4oYjvJ\":[\"Search query…\"],\"4tMxW4\":[\"Preview related record\"],\"4yJcjm\":[\"Select type...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Close filter panel (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Semicolon (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" event\"],\"other\":[\"#\",\" events\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"List view\"],\"5To6Z6\":[\"Copy query\"],\"5gqNQl\":[\"Grid view\"],\"5igIzr\":[\"Import cancelled\"],\"5nTIup\":[\"Editing view: \",[\"name\"]],\"5qIe8E\":[\"Run All\"],\"66bEht\":[\"Project Status\"],\"6PIJVc\":[\"Startup\"],\"6QvP0l\":[\"Export as JSON\"],\"6W41Xq\":[\"Task Manager\"],\"6WngBH\":[\"Set NULL\"],\"6YtxFj\":[\"Name\"],\"6_dCYd\":[\"Overview\"],\"6dOBsk\":[\"Create View\"],\"6gvoHP\":[\"Copy error message\"],\"6oCVzX\":[\"Kubernetes context is required\"],\"6wQO0f\":[\"Show Data\"],\"6z9W13\":[\"Restart\"],\"71agNy\":[\"Generate names for unnamed cells with AI\"],\"74J3FG\":[\"Initial version\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Got it\"],\"77nSMU\":[\"Delete the entire AI activity history? This cannot be undone.\"],\"7ABmyQ\":[\"Try again\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" of \",[\"0\"],\" active\"],\"7E864M\":[\"Database Type\"],\"7FqaG1\":[\"Customize instructions for AI analysis of EXPLAIN query plans. Use {\",[\"LANGUAGE\"],\"} for the output language.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Mixed types detected, defaulted to TEXT\"],\"7RSQQd\":[\"Save passwords in Keychain\"],\"7VpPHA\":[\"Confirm\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"failed\"],\"7sMeHQ\":[\"Key\"],\"7sNhEz\":[\"Username\"],\"7tATh2\":[\"Run Query\"],\"7yb4gk\":[\"Failed: \"],\"8-4V8D\":[\"Tables\"],\"82G-l5\":[\"The Model Context Protocol (MCP) allows AI assistants (like Claude) to connect to your local tools. Tabularis exposes an MCP server that lets AI read your database schema and execute queries safely.\"],\"83VjWE\":[\"New Notebook\"],\"86IgoU\":[\"Run query (in editor)\"],\"86fCgf\":[\"Customize instructions for AI query result tab name generation. The SQL query is sent as the user message.\"],\"87a_t_\":[\"Label\"],\"87kWsr\":[\"Export Connections\"],\"8CWirf\":[\"MCP Server\"],\"8S8aIX\":[\"Connection Health Check\"],\"8TMaZI\":[\"Timestamp\"],\"8Tg_JR\":[\"Custom\"],\"8UFKYr\":[\"Select Query to Execute\"],\"8VKSGV\":[\"Generate SQL\"],\"8Wjy6z\":[\"Close Tabs to Left\"],\"8ZsakT\":[\"Password\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL Editor\"],\"8bRgTe\":[\"AI Provider not configured. Please go to Settings > AI.\"],\"8c_W0h\":[\"Older versions\"],\"8guEQP\":[\"Refresh Views\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN is lightweight and mostly structural.\"],\"8q_sOc\":[\"Remove\"],\"8t-akp\":[\"showing first \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Connection Name\"],\"91gnWY\":[\"Export Logs\"],\"91rtHL\":[\"Create New View\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"View updated successfully\"],\"9NzDFn\":[\"Display the welcome screen when the application starts.\"],\"9OoUS3\":[\"Create New SSH Connection\"],\"9QGRD5\":[\"Target column\"],\"9QTny9\":[\"Query failed.\"],\"9S-fyV\":[\"Pre-flight execution plan\"],\"9SJ_Sx\":[\"System Resources\"],\"9UQ730\":[\"Clone\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"No data found in clipboard\"],\"9hGjL2\":[\"Create Index\"],\"9mMU1R\":[\"Time\"],\"9mvFo_\":[\"Time\"],\"9npOH9\":[\"Open file\"],\"9uI_rE\":[\"Undo\"],\"9xUjzm\":[\"Select All\"],\"9y_02p\":[\"Chat with the community, get help, suggest features\"],\"A1pPcI\":[\"SSH Host\"],\"A1taO8\":[\"Search\"],\"A6C0pv\":[\"Total Cost\"],\"A7WG0p\":[\"Plugin disabled\"],\"A7yRz3\":[\"View definition is required\"],\"A9Uyp6\":[\"Import failed: \"],\"ABEd-z\":[\"Use your package manager to update Tabularis.\"],\"AMdgKV\":[\"Explain Plan Analysis Prompt\"],\"ANSTMe\":[\"No major issues detected in the current plan summary.\"],\"ANzIr7\":[\"Query History\"],\"AOnaU7\":[\"skipped\"],\"AVlZoM\":[\"Environment\"],\"AXTVsE\":[\"Verify Full\"],\"AXdRYR\":[\"Current Logs\"],\"Aa-YkQ\":[\"Export Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filter by level\"],\"AlPiMN\":[\"Click to jump to page\"],\"An-1rA\":[\"Rows returned\"],\"AnV8j-\":[\"Modify Column\"],\"AvEr_L\":[\"New Console\"],\"AvYbUL\":[\"Star on GitHub\"],\"Aw_eOs\":[\"Requires Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No results found\"],\"B0mJGb\":[\"Raw Output\"],\"B1c58n\":[\"Modify Column\"],\"B3toQF\":[\"Objects\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"Connection name is required\"],\"BAVvWJ\":[\"ER Diagram\"],\"BBtVak\":[\"Collapse All\"],\"BEVzjL\":[\"Import failed\"],\"BHATjK\":[\"Export Connections\"],\"BJe2lZ\":[\"Toggle sidebar\"],\"BK3WCj\":[\"Failed to load registry\"],\"BKbO3i\":[\"Edited notebook\"],\"BMB51y\":[\"Run in console\"],\"BNW_Z4\":[\"e.g. active_users, order_summary\"],\"BPkXj7\":[\"Create Foreign Key\"],\"BUO_JN\":[\"Copy Query\"],\"BYkhHY\":[\"Check for updates on startup\"],\"BeSg6-\":[\"Collect application logs in memory for debugging\"],\"BgAyQH\":[\"Clear sort\"],\"BinTJI\":[\"npm ecosystem\"],\"BkFson\":[\"Auto paginated\"],\"Bpglf1\":[\"Move Up\"],\"BrGo6h\":[\"Search notebooks\"],\"BxiAN_\":[\"Delete Query\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Frontend Dependencies\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"No filters —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Downloading...\"],\"CUxwxn\":[\"Show All Tables\"],\"CWMXbw\":[\"will forcefully stop its process. Any active database connections using this plugin will stop working until the plugin is restarted.\"],\"CZt6BX\":[\"MANUAL CONFIGURATION\"],\"Ca8ixZ\":[\"Delete\"],\"CbJBQS\":[\"Update failed: \"],\"Cdz-YU\":[\"Stacked view\"],\"CpeQf9\":[\"Loops\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Select the model to be used for generation and explanation.\"],\"DB8zMK\":[\"Apply\"],\"DDXf5E\":[\"SQL Functions\"],\"DEwnwi\":[\"Delete\"],\"DNTvdl\":[\"Open in Editor\"],\"DPc2P9\":[\"Delete Cell\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Line Height\"],\"Dd7YLj\":[\"Maybe later\"],\"Deej3j\":[\"Invalid JSON\"],\"DfKhk_\":[\"Update\"],\"DiRiTz\":[\"Open package page\"],\"DlRHAD\":[\"Running EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" error\"],\"other\":[\"#\",\" errors\"]}]],\"Dvdihe\":[\"On \",[\"0\"],\" — review and decide before it executes.\"],\"DzFLzw\":[\"YES\"],\"E-JUtQ\":[\"Approval gate\"],\"E0kcnZ\":[\"General\"],\"E2mje_\":[\"Select Query to Explain\"],\"EDieyg\":[\"Are you sure you want to delete this SSH connection?\"],\"EHZxPj\":[\"Expand\"],\"EL4oDO\":[\"New Version Available\"],\"EPi4gT\":[\"Sort by \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Unknown\"],\"EhADgB\":[\"Delete Column\"],\"EkH9pt\":[\"Update\"],\"Ekblrc\":[\"You're up to date\"],\"Em6JFd\":[\"Count Rows\"],\"EnGiqG\":[[\"0\"],\" elements\"],\"Ew1n5z\":[\"Search plugins…\"],\"F18WP3\":[\"Parameters\"],\"F3uc1x\":[\"The exported file will contain your database and SSH passwords in plaintext. Please store it securely.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"F6pfE9\":[\"Active\"],\"F8tXg7\":[\"Data Preview\"],\"F9-6yK\":[\"Default Copy Format\"],\"F9lxfG\":[\"Remove\"],\"F9nsa2\":[\"The history file was corrupted and has been moved aside. New queries will be recorded as usual. Backup file:\"],\"FF_oap\":[\"Default\"],\"FK8rlP\":[\"No SSH connections configured yet\"],\"FMRcH8\":[\"First row as header\"],\"FNvDMc\":[\"This Week\"],\"FQe1FI\":[\"Est. Rows\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operation\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Choose an independent theme for the SQL editor, or keep it in sync with the app theme.\"],\"FsvZQL\":[\"Edited cell \",[\"n\"]],\"FtwKL9\":[\"Switch tab\"],\"FznI3z\":[\"Delete foreign key \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Preview failed: \"],\"G8Q5Zq\":[\"Namespace is required\"],\"GAohqx\":[\"Delete column\"],\"GJR99u\":[\"Failed to delete column: \"],\"GKfzzM\":[\"Choose a connection...\"],\"GS-Mus\":[\"Export\"],\"GUaLUq\":[\"Failed to load schema: \"],\"GXP-Iw\":[\"Add SQL Cell\"],\"Gj1mLb\":[\"Reordered cells\"],\"GlbqG2\":[\"Reset to driver default\"],\"Gq1YzP\":[\"Events\"],\"Gs5AlY\":[\"Open\"],\"GtmO8_\":[\"from\"],\"GxkJXS\":[\"Uploading...\"],\"H-o4D2\":[\"Create new column\"],\"H2B-KW\":[\"Choose the default format when copying rows with Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Redo\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"Collapse\"],\"H9HlDe\":[\"minutes\"],\"H9P8CD\":[\"add the first filter\"],\"HAQlGl\":[\"AI Activity\"],\"HKNZrs\":[\"Index Cond.\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Delete \",\"#\",\" row\"],\"other\":[\"Delete \",\"#\",\" rows\"]}]],\"HPuCiP\":[\"Folder Path\"],\"HUs1R3\":[\"No open tabs for this connection.\"],\"HV4Isp\":[\"Enter SSH password\"],\"HVC8Hh\":[\"Copied to clipboard\"],\"HWEpq8\":[\"Disk Write/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Failed to save view: \"],\"He8v1Y\":[\"Deselect from Apply All\"],\"HehHP1\":[\"Default Layout\"],\"HilYn4\":[\"This notebook is empty. Add a cell to get started.\"],\"HjxVK_\":[\"Quick connection test\"],\"HmMnRx\":[\"WKT Mode\"],\"HoKCiI\":[\"The app will restart automatically after installation\"],\"HpK_8d\":[\"Reload\"],\"Hpi4Jm\":[\"Join now\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configure SSH Inline\"],\"I5VBsr\":[\"Same as App\"],\"I8yrPb\":[\"Replace table\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Remind Me Later\"],\"I99Miw\":[\"Cost\"],\"IETZIR\":[\"Edit cell name\"],\"IG9wzA\":[\"Failed to insert row: \"],\"ILleOG\":[\"Resource type must be \\\"service\\\" or \\\"pod\\\"\"],\"IQ3gAw\":[\"Upload File\"],\"IUwGEM\":[\"Save Changes\"],\"IUwmLq\":[\"Direct dependencies declared in package.json and src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Open Source Libraries\"],\"I_43p6\":[\"Safety\"],\"Iaizf4\":[\"Appearance\"],\"Il3FBB\":[\"Toggle structured filter panel\"],\"IniZRK\":[\"Download unavailable - only preview loaded\"],\"Isaozb\":[\"Review & adjust\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Active queries and connections through this plugin will be interrupted.\"],\"J6v1s_\":[\"Default Model\"],\"JE-DVk\":[\"Interpreter\"],\"JEGlfK\":[\"Started\"],\"JKDPqP\":[\"Select a context first\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Use SSH Tunnel\"],\"JRz8tw\":[\"MySQL and MariaDB expose actual metrics only on supported EXPLAIN ANALYZE or ANALYZE FORMAT variants.\"],\"JUICth\":[\"PNG, JPG, WebP or SVG · max 512 KB\"],\"JY5Oyv\":[\"Database\"],\"JlFRIB\":[\"Session timezone sent to MySQL after connect.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Denied\"],\"K3H9p5\":[\"Unset\"],\"K5Dgu_\":[\"Databases\"],\"K8IGKf\":[\"Authentication Type\"],\"KAYNSW\":[\"How many logs to keep in memory (1-10000)\"],\"KHTGbr\":[\"Pre-flight EXPLAIN\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copy as `column`\"],\"KM5Kc8\":[\"At least one column must be selected\"],\"KSCnVQ\":[\"Kind\"],\"KUjOb9\":[\"running\"],\"KXBdwy\":[\"Refresh Routines\"],\"KXNyX7\":[\"Set DEFAULT\"],\"Kd70-v\":[\"Import from Clipboard...\"],\"KhI4oS\":[\"Open referenced row in \",[\"0\"]],\"KhgrNu\":[\"MCP Server Integration\"],\"KirERL\":[\"Timeout\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Failed to delete index: \"],\"KzeARD\":[\"Failed to delete table: \"],\"L-rMC9\":[\"Reset to default\"],\"L3HXkQ\":[\"Bug Fixes\"],\"LCZ7Dy\":[\"Copy Name\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"indexes\"],\"LMeAoR\":[\"rows\"],\"LPCdc-\":[\"Query Tab Name Prompt\"],\"LPFmga\":[\"Select for Apply All\"],\"LYzbQ2\":[\"Tool\"],\"Lbis_V\":[\"Quick Navigator\"],\"Lcpbe2\":[\"The plugin process could not be launched. Check the error details below.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN is only supported for DML statements (SELECT, INSERT, UPDATE, DELETE). DDL statements like CREATE, DROP, or ALTER cannot be explained.\"],\"LnT0hQ\":[\"Add Column\"],\"LvutiO\":[\"AI Suggest\"],\"M-rHQO\":[\"Exit Fullscreen\"],\"M0XJba\":[\"Are you sure you want to clear all query history for this connection?\"],\"M1co_O\":[\"Configured\"],\"M73whl\":[\"Context\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Show All\"],\"MXdOwj\":[\"Separate Connections\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Select K8s Connection\"],\"Mc1tjS\":[\"Enable ANALYZE to inspect actual rows, timing, loops, and buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" more rows\"],\"Mp0jQ_\":[\"This driver only supports primary keys at table creation time\"],\"MqpZwN\":[\"Tabularis Process\"],\"MxIx43\":[\"↑↓ to navigate, Enter to open\"],\"MygtgQ\":[\"Add Markdown Cell\"],\"N40H-G\":[\"All\"],\"N5UQxq\":[\"Ollama not detected on port \",[\"0\"],\". Is it running?\"],\"N6GBcC\":[\"Confirm Delete\"],\"N6aqHp\":[\"Run queries\"],\"N9_S15\":[\"A new table will be created\"],\"NBdMa1\":[\"Slowest Step\"],\"NC2AI2\":[\"Length\"],\"NCzNnx\":[\"Sort ascending\"],\"NT4Ubs\":[\"Delete custom key and revert to environment variable (if present)\"],\"NUjrCO\":[\"No favorites match your search\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Tree total: \",[\"0\"]],\"Nc2VQn\":[\"Append to existing\"],\"NgFERn\":[\"Add to Favorites\"],\"NktMHG\":[\"Database name\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Test\"],\"Nq5QTk\":[\"explain Nth\"],\"O2STgu\":[\"Export failed: \"],\"O8SV8O\":[\"Downloading...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Run All Cells\"],\"OGWdBg\":[\"View Name\"],\"OHqT6w\":[\"Press key combination...\"],\"OXJsaG\":[\"Invalid parameter name\"],\"OfhWJH\":[\"Reset\"],\"OlAl5i\":[\"Expand all\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Join Discord\"],\"P1YGsb\":[\"SQL Generation\"],\"P2m1xb\":[\"Stop on Error\"],\"P3Qlys\":[\"No Connection ID\"],\"P6Y3Yf\":[\"Run this command in your terminal, then restart Claude Code.\"],\"PCdj-c\":[\"Deselect All\"],\"PMnFt9\":[\"Disk Read/s\"],\"PQU2Va\":[\"Accept Suggestion with Enter\"],\"PRnH8G\":[\"of \",[\"0\"]],\"PY8UF3\":[\"Toggled parallel (cell \",[\"n\"],\")\"],\"PiH3UR\":[\"Copied!\"],\"Pia95d\":[\"Column name is required\"],\"PrElXQ\":[\"Update\"],\"PrixCC\":[\"Rows will be added to an existing table\"],\"Pujgbb\":[\"Configure destination\"],\"Pw_eQV\":[\"Plugin Failed to Start\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"No saved queries\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"No child processes\"],\"QCxMC0\":[\"Automatically check for new versions when the app launches\"],\"QEazml\":[\"Delete selected\"],\"QHcLEN\":[\"Connected\"],\"QLHHFO\":[\"Read-only mode\"],\"QOvAW3\":[\"New Features\"],\"QULGRi\":[\"No valid queries found\"],\"QZwllF\":[\"Browse...\"],\"QbkSr_\":[\"EXPLAIN unavailable for this query.\"],\"QeHFYZ\":[\"EXPLAIN failed: \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"Read more\"],\"Qu4Hog\":[\"Notebook imported successfully\"],\"R-A2Vd\":[\"No data to display\"],\"R0Hkb2\":[[\"0\"],\" database(s) selected\"],\"R1nHhB\":[\"Already exists\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convert to Console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Setup\"],\"RF-HyV\":[\"Choose your preferred language. 'Auto' will use your system language.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copy name\"],\"RI-HZc\":[\"Enter \",[\"0\"],\" Key\"],\"RJrE17\":[\"Are you sure you want to drop view \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"A star helps others discover the project\"],\"Rb3Tdm\":[\"Notebook name\"],\"RcbKJ3\":[\"On Update\"],\"RkefFq\":[\"Run an EXPLAIN against the query before showing the approval modal so the user sees the execution plan.\"],\"RnF_hl\":[\"Loading plugin registry...\"],\"Rns7_C\":[\"This action cannot be undone immediately\"],\"RoKRqW\":[\"Available Plugins\"],\"RphpKk\":[\"Appearance\"],\"Rt8sHM\":[\"Sort or temp work detected\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Enabled\"],\"S1veKH\":[\"Revert Selected\"],\"S5zeZU\":[\"Toggle Preview\"],\"S8Yqbl\":[\"Insert\"],\"SDND4q\":[\"Not configured\"],\"SJRy3D\":[\"(Auto-generated)\"],\"SSwIjo\":[\"Set EMPTY\"],\"SgvA_r\":[\"Press Run (Ctrl/Command+F5) to load table data\"],\"SlfejT\":[\"Error\"],\"SoATkx\":[\"Copy Cell\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"Endpoint URL\"],\"T7w5CQ\":[\"Failed to create new row: \"],\"T9947j\":[\"Value (e.g. 'text' or 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Switch to Vertical Layout\"],\"TK5oex\":[\"Save Prompt\"],\"TKQ7K-\":[\"Install\"],\"TKZreP\":[\"Require\"],\"TMLAx2\":[\"Required\"],\"TO08JI\":[\"foreign keys\"],\"TVKqvO\":[\"Edit Row\"],\"TYSdQ3\":[\"Run SELECT query\"],\"TfDFHS\":[\"Wrap long lines in the editor instead of scrolling horizontally.\"],\"Tibfjs\":[\"No saved connections — create one below\"],\"Tj36Dr\":[\"Reset to Default\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Lock query\"],\"TpwXyg\":[\"If timing is missing, the server likely returned an estimate-only plan.\"],\"Tw2M1h\":[\"Installation Failed\"],\"Ty-rm9\":[\"SSH Connections\"],\"Tz0i8g\":[\"Settings\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes Connections\"],\"U4uzyV\":[\"What's New\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Stop execution when a cell fails\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" on \",[\"1\"],\" — review and decide before it executes.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configuration installed successfully for \",[\"clientName\"],\"! Restart the app to apply.\"],\"URmyfc\":[\"Details\"],\"UWQBvp\":[\"Generate SQL templates\"],\"UawTKZ\":[\"Optional. Specify the executable used to run this plugin (e.g. python3 on macOS/Linux, python or a full path on Windows). Leave blank to use the default.\"],\"Ub8sf5\":[\"SQLite does not support dropping FKs via ALTER TABLE.\"],\"UbbJ8j\":[\"No options found\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"These connections will reject writes from MCP. Other connections behave normally.\"],\"UnQNah\":[\"Are you sure you want to delete column \\\"\",[\"0\"],\"\\\" from table \\\"\",[\"tableName\"],\"\\\"?\\n\\nWARNING: This will permanently delete all data in this column. This action cannot be undone.\"],\"UncTTh\":[\"Sum of RSS across the process tree — may overcount shared memory\"],\"UpjgFm\":[\"Changed parameters\"],\"UsAnu1\":[\"ANALYZE executes the query. Use with caution on data-modifying statements.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tab Size\"],\"UzWGWO\":[\"Switch to SQL WHERE input\"],\"V-chk5\":[\"How often to check if active connections are still alive. Set to 0 to disable.\"],\"V-pw1j\":[\"Table name\"],\"V2T0Uw\":[\"No saved notebooks yet.\"],\"V3aNwx\":[\"Data Editor\"],\"VGYp2r\":[\"Apply to all\"],\"VH8S7x\":[\"Clipboard column\"],\"VIAEcS\":[\"Failed to load databases. Check your credentials.\"],\"VKdztF\":[\"Append rows\"],\"VLiHXI\":[\"Analyze Data\"],\"VMbmXc\":[\"Are you sure you want to remove \\\"\",[\"pluginName\"],\"\\\"? This will delete the plugin files.\"],\"VO3weF\":[\"No file loaded\"],\"VOZlKc\":[\"Import Database\"],\"VPzsIz\":[\"Generating name...\"],\"VUul0v\":[\"Killing\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"All queries\"],\"Vi2Pqx\":[\"by\"],\"Vl2zn2\":[\"stopped\"],\"Vo4uBA\":[\"An error occurred while installing the plugin. See the details below.\"],\"VqqyOs\":[\"Execute a query to see results\"],\"VzhDFh\":[\"Block any non-SELECT statement coming through MCP unless the connection is explicitly allowed below.\"],\"W3uwpT\":[\"Close All Tabs\"],\"W4MKLh\":[\"e.g. Looks risky on prod, please confirm…\"],\"W60eXm\":[\"Table\"],\"WA8RND\":[\"Are you sure you want to delete table \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Delete Table\"],\"WLnvCZ\":[\"Enter username\"],\"WM-__8\":[\"Search connections...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row imported into \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" rows imported into \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Are you sure you want to delete query \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"succeeded\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"General\"],\"WmPpB1\":[\"Loading explain plan…\"],\"Wu7cK0\":[\"No databases found\"],\"WvoUQF\":[\"Deleted cell \",[\"n\"]],\"Ww3pDD\":[\"MANUAL COMMAND\"],\"X-20AU\":[\"Enter query tab name prompt...\"],\"X-U6_w\":[\"Font Family\"],\"X5fs0g\":[\"Create your first connection to get started.\"],\"X7Ayjp\":[\"Password saved in system keychain\"],\"X9kySA\":[\"Favorites\"],\"XJOV1Y\":[\"Activity\"],\"XMCLEL\":[\"Create New Trigger\"],\"XN_sSd\":[\"Automatic updates\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Query Explanation\"],\"XVF2Pf\":[\"Edit Schemas\"],\"XW6OYF\":[\"This plugin may require an interpreter (e.g. Python). Use Plugin Settings to configure the interpreter path.\"],\"XZB6Xr\":[\"Max Log Entries\"],\"Xcffv2\":[\"Show AI Assist and Explain buttons in the editor\"],\"XeqTSh\":[\"Join Type\"],\"XmJfZT\":[\"name\"],\"XoQfG1\":[\"SSH User\"],\"XwI0Vw\":[\"Auto (System)\"],\"XyDlLX\":[\"Index Name\"],\"Y2P2aK\":[\"Select schemas to load:\"],\"Y8HYw2\":[\"value\"],\"Y8zX3R\":[\"Insert to Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Search...\"],\"YWlnMZ\":[\"Ollama Port\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Browse and install plugins from the registry.\"],\"Y_3yKT\":[\"Open in New Tab\"],\"YiAQ_Q\":[\"Refresh Tables\"],\"Ysjr9Y\":[\"SQL Preview\"],\"YswNf7\":[\"All levels\"],\"YtNwr6\":[\"Maximum number of query history entries stored per connection.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Loading...\"],\"Z7ZXbT\":[\"Approve\"],\"Z8JpBH\":[\"Export as Notebook\"],\"Z8fBIc\":[\"Actual rows exceed estimate\"],\"ZC2VJP\":[\"Execute\"],\"ZCIS4k\":[\"no active filters\"],\"ZF1_UT\":[\"SSL Mode\"],\"ZGjBPa\":[\"Clear Logs\"],\"ZHQTlM\":[\"Importing from\"],\"ZIFDoJ\":[\"Please select at least Structure or Data\"],\"ZIZA6o\":[\"Edit before approving\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" parsing warning\"],\"other\":[\"#\",\" parsing warnings\"]}]],\"ZVn8p2\":[\"Display line numbers in the editor gutter.\"],\"ZYnwzF\":[\"Disconnected\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Create Foreign Key\"],\"Zf7LHg\":[\"No contexts found (is kubectl installed?)\"],\"Zfotp5\":[\"Large estimate gaps usually indicate stale statistics or predicates the planner cannot model well.\"],\"ZiFjhs\":[\"Select *\"],\"ZpzHz0\":[\"Failed to load schemas\"],\"ZqXGPF\":[\"Failed to drop view: \"],\"ZuL73E\":[\"Create a new database view\"],\"_-bi4r\":[\"Referenced Table\"],\"_AEYGI\":[\"No execution history yet\"],\"_FdpZc\":[\"Failed to load view definition: \"],\"_FxSdi\":[\"Browse the direct open source dependencies used across the app, backend, and tooling.\"],\"_JyTG8\":[\"Enter explain prompt...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"rows\"],\"_TK1zF\":[\"Saved Connection\"],\"_bJFBE\":[\"Connect Timeout\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Tree\"],\"_dqduX\":[\"Next page\"],\"_fwE6J\":[\"Older\"],\"_n04sB\":[\"Kill\"],\"_otxbQ\":[\"Key file\"],\"_pezIT\":[\"Failed to connect to \",[\"0\"],\". Please check your settings or ensuring the database is running.\"],\"_srfkj\":[\"Custom key deleted successfully\"],\"_t6aFo\":[\"MySQL and MariaDB may fall back to EXPLAIN FORMAT=JSON or tabular EXPLAIN depending on server version.\"],\"_xTbaM\":[\"columns\"],\"_yxaaL\":[\"Unique Index\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.\"],\"a9CASo\":[\"SQLite only supports renaming columns. Other modifications require recreating the table manually.\"],\"aAIQg2\":[\"Appearance\"],\"aAURrV\":[\"Installed\"],\"aC_vCa\":[\"Generate name with AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Select a node to view details\"],\"aHKcKc\":[\"Previous page\"],\"aI-5wG\":[\"Verify CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Default Value\"],\"aScJP1\":[\"Run this query\"],\"aVNbN8\":[\"Filter conditions\"],\"aWhdMQ\":[\"Use Existing SSH Connection\"],\"aXYd8V\":[\"Timeout\"],\"aX_S_r\":[\"Page \",[\"0\"],\" of \",[\"totalPages\"]],\"agZcf8\":[\"Generated SQL: \",[\"tableName\"]],\"ajqPzi\":[\"Select [fields]\"],\"alplHn\":[\"Analyzing query plan with AI...\"],\"anBcU3\":[\"If you like tabularis and want to see more features, consider supporting the project by contributing code, reporting bugs, or starring the repo.\"],\"arHmj2\":[\"Are you sure you want to delete this query from history?\"],\"arKcqW\":[\"Older servers may fall back to estimated plans with fewer metrics.\"],\"arcpYe\":[\"Approval required\"],\"aurEkh\":[\"Loading processes…\"],\"avtdsd\":[\"SQL Mode\"],\"az8lvo\":[\"Off\"],\"b1Ah3z\":[\"Focused on\"],\"b392Dr\":[\"Expand All\"],\"b5S_PU\":[\"Database Name\"],\"bAvovP\":[\"Move Down\"],\"bH3JqY\":[\"No tables found\"],\"bP5JOn\":[\"Word Wrap\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Make all MCP queries read-only\"],\"bmca5u\":[\"Writes only\"],\"bpCiBU\":[\"Allow writes from MCP\"],\"bqnhqW\":[\"Estimate exceeds actual rows\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Fail with error\"],\"bw22Gk\":[\"Column Schema\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Top Issues\"],\"cFCKYZ\":[\"Deny\"],\"cFGrCP\":[\"table\"],\"cGeFup\":[\"Font Size\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focus on Table\"],\"cM9NHc\":[\"Downgrade to\"],\"cO9-2L\":[\"Disable\"],\"cSev-j\":[\"Filters\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Import \",\"#\",\" row\"],\"other\":[\"Import \",\"#\",\" rows\"]}]],\"c_xoSn\":[\"Renamed cell \",[\"n\"]],\"cd0XEW\":[\"Save Query\"],\"cnGeoo\":[\"Delete\"],\"cwfPLH\":[\"Split Group\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" statements\"],\"d34vwG\":[\"Load Databases\"],\"d6ynQ7\":[\"Sort descending\"],\"d8_6_v\":[\"cancel\"],\"d8wc1_\":[\"Sample values\"],\"dBXoCS\":[\"An environment variable is present, but you can override it by setting a key above.\"],\"dD7NPy\":[\"Outline\"],\"dEgA5A\":[\"Cancel\"],\"dMtLDE\":[\"to\"],\"dPJVhW\":[\"Installation Failed\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" session\"],\"other\":[\"#\",\" sessions\"]}]],\"dTUzKm\":[\"Run Selected (\",[\"0\"],\")\"],\"dU_iQN\":[\"No sessions match the current filters.\"],\"dUh9QW\":[\"Planning\"],\"dVoir2\":[\"Added Markdown cell \",[\"n\"]],\"dZ0d2O\":[\"Please select at least one table\"],\"dhi13U\":[\"Choose image…\"],\"dli1JX\":[\"Submit Changes\"],\"dmYV6f\":[\"Routines\"],\"dohZCo\":[\"Instructions for AI-powered SQL generation. Use {\",[\"SCHEMA\"],\"} as a placeholder for the database structure.\"],\"dtxpK2\":[\"Analyze\"],\"dwW9nJ\":[\"Show Line Numbers\"],\"dwWVw_\":[\"Show Welcome Screen\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"If exists\"],\"dyN4j9\":[\"Click 'Run Preview' to see results\"],\"e07Iz5\":[\"Open Task Manager\"],\"e0NzXu\":[\"This project is a Work In Progress (WIP). Core features are stable, but we have big plans.\"],\"e1UKxf\":[\"Save this query\"],\"e34gdU\":[\"How long the MCP subprocess will wait for the user's decision before failing the request.\"],\"e62LQd\":[\"Force Kill\"],\"e6QZsM\":[\"Editor Theme\"],\"e8CirT\":[\"Run query\"],\"eD2kUP\":[\"Buffers Read\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Enter explain plan analysis prompt...\"],\"eIVolo\":[\"Disk R/W\"],\"eJOEBy\":[\"Exporting...\"],\"eKHY3W\":[\"Plugin Settings\"],\"eMb6Ub\":[\"Choose a resource...\"],\"ePK91l\":[\"Edit\"],\"eXweu6\":[\"Expand Cell\"],\"ecNsTE\":[\"No queries match your search\"],\"ecUA8p\":[\"Today\"],\"ecpIZP\":[\"Enter key passphrase if encrypted\"],\"ejmeDY\":[\"Installed\"],\"esl-Tv\":[\"Resource Type\"],\"exyUec\":[\"Connection\"],\"f2AJjl\":[\"Delete Row\"],\"f4pD-j\":[\"Connection test failed\"],\"f7sXvi\":[\"Enter password\"],\"fAsxc0\":[\"Sequential Scans\"],\"fIeFs0\":[\"Select Value...\"],\"fJm92A\":[\"Select a file containing an EXPLAIN plan (Postgres JSON or text format) to visualize it.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Values\"],\"f_b1TA\":[\"Execution History\"],\"fghnqP\":[\"Switch to connection 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Comma (,)\"],\"fp711N\":[\"Blocked (read-only)\"],\"fpzyLj\":[\"Page \",[\"0\"],\" of \",[\"1\"]],\"fuA6oy\":[\"Socket Timeout\"],\"fvImQM\":[[\"0\"],\" selected\"],\"fwr_nh\":[\"Install extensions, manage plugin drivers, and keep runtime settings under control.\"],\"g0ZzK4\":[\"Valid JSON\"],\"g11hAR\":[\"New Row\"],\"g8VcMm\":[\"My K8s cluster\"],\"gCFR_O\":[\"Parallel Execution (Run All)\"],\"gEjU98\":[\"Open connections\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"At least one column is required\"],\"gSuQrG\":[\"No connections match \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Re-run query\"],\"gZWMnn\":[\"AI Analysis\"],\"ghYd73\":[\"Choose target...\"],\"giAqEC\":[\"Create New Table\"],\"gnQS8X\":[\"Maximum packet size used by the MySQL connector.\"],\"gqV5VL\":[\"Built-in, not customizable\"],\"gww_XE\":[\"Referenced Column\"],\"gxXPJ9\":[\"Configure Interpreter\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximize\"],\"h-XNc9\":[\"CSV Delimiter\"],\"h-kNAk\":[\"e.g. sales_data\"],\"h3Z_aK\":[\"Write Markdown here...\"],\"h7MgpO\":[\"Keyboard Shortcuts\"],\"h7peZQ\":[\"Allow\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" system process running\"],\"other\":[\"#\",\" system processes running\"]}]],\"hEZrFh\":[\"Run SQL File...\"],\"hEipgW\":[\"Check for Updates Now\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Export as CSV\"],\"hItdtk\":[\"Browse folder\"],\"hXFVjo\":[\"Table name is required\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Re-run\"],\"hbz1rh\":[\"keys\"],\"hdsaJo\":[\"Importing...\"],\"he3ygx\":[\"Copy\"],\"hfGimp\":[\"Choose a namespace...\"],\"hjjSEi\":[\"Read-only connections\"],\"hjwN_s\":[\"Resource Name\"],\"hlF1mD\":[\"Copy selection\"],\"hnboBb\":[\"AI Query Plan Analysis\"],\"hnvu2p\":[\"Error Details\"],\"hq4-D2\":[\"API Key is stored securely in your system keychain. Setting a key here overrides the environment variable.\"],\"hqjXdn\":[\"Failed to delete SSH connection\"],\"hqofAK\":[\"Copy SQL\"],\"hy6L14\":[\"View on GitHub\"],\"hyjACX\":[\"Collapsed/expanded cells\"],\"hz1b5W\":[\"No matching elements found\"],\"i1vAVM\":[\"Create new table\"],\"i3S5T3\":[\"Search favorites...\"],\"i4_LY_\":[\"Write\"],\"i5HBWh\":[\"Query history was reset\"],\"i5zCt4\":[\"Table\"],\"iAVlge\":[\"Customize instructions for AI notebook cell name generation. The cell content (SQL or Markdown) is sent as the user message.\"],\"iE1yAB\":[\"Filter tables...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connect\"],\"iSryJ2\":[\"My SSH Server\"],\"iT7UeX\":[\"Add Index\"],\"iUWwuR\":[\"Download & Install\"],\"ia7i08\":[\"Select context/namespace/type first\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Saved\"],\"igcsfY\":[\"No plugins available in the registry.\"],\"ij-Elv\":[\"Image preview\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" explainable query found\"],\"other\":[\"#\",\" explainable queries found\"]}]],\"ioL38P\":[\"Monitor plugin processes, CPU, RAM and disk usage in real time\"],\"ixlL_e\":[\"SSH Key File (Optional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Select a model\"],\"j3gyYH\":[\"Apply All\"],\"j5CWO4\":[\"Up to date\"],\"j9HPuI\":[\"Row #\",[\"0\"]],\"jBtpMP\":[\"All statuses\"],\"jEu4bB\":[\"Columns\"],\"jEyQIs\":[\"No routines found\"],\"jHc1By\":[\"Drop View\"],\"jI6sj4\":[\"Cost, timing, and row estimates are often unavailable compared with PostgreSQL and MySQL.\"],\"jIxQCZ\":[\"Not available for your platform\"],\"jKIncn\":[\"Database name is required\"],\"jPSk57\":[\"Reason (optional)\"],\"jUNY_d\":[\"view\"],\"jVqjDo\":[\"Invalid notebook file format\"],\"jWSZ-A\":[\"Preview only - full data not loaded\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket timeout in milliseconds.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Connection name is required\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"child process\"],\"jx0t66\":[\"Collapse child processes\"],\"k-0mL-\":[\"Add Column\"],\"k-XiMX\":[\"Raw\"],\"k2UnVy\":[\"Hash Cond.\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"seconds\"],\"kBiBq7\":[\"Delete index \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Toggle Chart\"],\"kI1qVD\":[\"Format\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" row · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" rows · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Event details\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registry\"],\"kY-q3P\":[[\"label\"],\" is required\"],\"kexIdC\":[\"Use Kubernetes Port-Forward\"],\"krksx_\":[\"Success\"],\"ktYUe9\":[\"Run All\"],\"kwY6nh\":[\"Dismiss\"],\"kx0s-n\":[\"Results\"],\"kxUEfE\":[\"Failed to get routine definition: \"],\"l2Op2p\":[\"Query Parameters\"],\"l9Ivba\":[\"Plugin processes & system resources\"],\"lBdPxu\":[\"Accent color\"],\"lCF0wC\":[\"Refresh\"],\"lEQRwq\":[\"Data (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"New table created\"],\"lOekZ3\":[\"Switch to Horizontal Layout\"],\"lUA1C1\":[\"SSH Key Passphrase (Optional)\"],\"lVeG20\":[\"Rust Dependencies\"],\"lXAG6D\":[\"Instructions for AI-powered query explanation. Use {\",[\"LANGUAGE\"],\"} as a placeholder for the output language.\"],\"lbbYjy\":[\"Directly edit the raw configuration file. A restart is required to apply changes.\"],\"lhKW0m\":[\"Added SQL cell \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Result Page Size (Limit)\"],\"lkz6PL\":[\"Duration\"],\"lmVGeo\":[\"Add Foreign Key\"],\"lnnx3E\":[\"Connect Tabularis to Claude Desktop, Cursor, and more\"],\"lpGiOh\":[\"Check interval\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Add\"],\"m2Q_r8\":[\"Detect JSON in text columns\"],\"m2tskz\":[\"Success\"],\"mA-qpe\":[\"Run All Complete\"],\"mBhhbA\":[\"Logs exported to clipboard\"],\"mCNdzH\":[\"Run Cell\"],\"mO95sp\":[\"Close panel\"],\"mP7dLi\":[\"Enter font name above\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" blocked\"],\"other\":[\"#\",\" blocked\"]}]],\"mS74ir\":[\"Failed to save SSH connection\"],\"mSqtw8\":[\"Run Preview\"],\"mURmfQ\":[\"View Definition (SQL)\"],\"mX_isJ\":[\"Vertical\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Structure (DDL)\"],\"mrk4Cf\":[\"Sort by \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"We just launched a dedicated home for Tabularis users. Get help, share tips, shape the roadmap.\"],\"mtvVdV\":[\"Rows Processed\"],\"mx4evv\":[\"Create Table\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Download\"],\"n7JDTx\":[\"Install and enable plugins to see them here\"],\"nDDJir\":[\"Search session, client, connection…\"],\"nHP-Kr\":[\"No active session. Please select a connection.\"],\"nKhCjW\":[\"Select Tables\"],\"nNwvm4\":[\"Error\"],\"nOVim5\":[\"Failed to save connection\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Events\"],\"nf14vn\":[\"Requires extension: \",[\"0\"]],\"ngO6Pv\":[\"Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Create your first connection\"],\"nohy4m\":[\"No MCP activity yet.\"],\"nr-axf\":[\"Remove Plugin\"],\"nsPFX9\":[\"Open in Visual Explain\"],\"nuBbBr\":[\"Chart\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Dump Database\"],\"o-XJ9D\":[\"Change\"],\"o21Y-P\":[\"entries\"],\"o3tP_A\":[\"Delete Index\"],\"o45L8r\":[\"Provide your connection name\"],\"o53XGh\":[\"Copy selected row(s)\"],\"o7J4JM\":[\"Filter\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Level\"],\"oGiIL7\":[\"Default Provider\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connection Lost\"],\"oJlXF2\":[\"Import Notebook\"],\"oMFv82\":[\"Split Vertical\"],\"oOFiQg\":[\"Limits the number of rows fetched per query to prevent performance issues. Set to 0 to disable (not recommended).\"],\"oT9ZD3\":[\"Hide overview\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Changed chart (cell \",[\"n\"],\")\"],\"oWfclW\":[\"Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.\"],\"obpbdz\":[\"Config file not found (create manually)\"],\"odZgfC\":[\"AI CLIENTS\"],\"ogZhXn\":[\"Choose the default layout direction for ER diagrams\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Actual Rows\"],\"olWzar\":[\"Force Kill Plugin Process\"],\"ovBPCi\":[\"Default\"],\"owzTWN\":[\"AI models refreshed from providers\"],\"oxYi6j\":[\"Adjust the base font size used throughout the application (10-20px).\"],\"p--hsQ\":[\"A database connection was lost\"],\"p6NueD\":[\"NEW\"],\"pOYHox\":[\"Actions\"],\"pR9bTR\":[\"No BLOB data\"],\"pS8S5q\":[\"e.g. users, orders, products\"],\"pSws_M\":[\"Table Name\"],\"pVLbKZ\":[\"View created successfully\"],\"pWT04I\":[\"Checking...\"],\"pZJ_6D\":[\"Index name is required\"],\"pddYFG\":[\"Enter notebook cell name prompt...\"],\"pm9Yb5\":[\"Translation updates\"],\"pnpyuD\":[\"Enable Logging\"],\"pqKMPv\":[\"Failed to create table: \"],\"pqaP1h\":[\"Dismiss\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"e.g., Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"All other connections stay read-only. Only the connections checked here may execute writes.\"],\"qA5jLs\":[\"Error Details\"],\"qIrtcK\":[\"Updates\"],\"qOqy8G\":[\"Checking configuration...\"],\"qWaVNs\":[\"Save & Restart\"],\"qb3LPX\":[\"View ER Diagram\"],\"qkK0vq\":[\"View name is required\"],\"qki9tG\":[\"Error\"],\"qoIir-\":[\"The base URL of your OpenAI-compatible API. Examples: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Collapse all\"],\"r6ncaO\":[\"Close tab\"],\"rAJlpP\":[\"Container Port\"],\"rG3WVm\":[\"Select\"],\"rGRCeK\":[\"Clear Query History\"],\"rNIto7\":[\"Resource name is required\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exported successfully\"],\"rY4sEV\":[\"Delete FK\"],\"rbu0nO\":[\"Manage SSH Connections\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connection\"],\"other\":[\"#\",\" connections\"]}]],\"rn2_2V\":[\"Remove filter\"],\"roABNH\":[\"No query history\"],\"rtir7c\":[\"unknown\"],\"ru0-2W\":[\"No active connections\"],\"rvDPWO\":[\"Estimate Gap\"],\"rwWjWg\":[\"Release Notes\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Test Connection\"],\"sBOaim\":[\"The configuration file has been saved. Restart now to apply the changes?\"],\"sCyv9B\":[\"Refresh Models\"],\"sSUqe4\":[\"Delete\"],\"sUBkgN\":[\"Generating SQL...\"],\"sZZG3d\":[\"Are you sure you want to import \\\"\",[\"0\"],\"\\\"?\\nThis may overwrite existing data.\"],\"sbK5ck\":[\"Search history...\"],\"sq_bS6\":[\"On Delete\"],\"suW7-E\":[\"Connection timeout in milliseconds.\"],\"suqtBX\":[\"Esc to close\"],\"t-R8-P\":[\"Execution\"],\"t1OfVY\":[[\"totalLibraries\"],\" libraries\"],\"t2TMzs\":[\"Close Tab\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Select a table...\"],\"t7KRl1\":[\"Audit log of every MCP tool call, plus the queries waiting for your approval. Stored locally — never sent anywhere.\"],\"t9NJIk\":[\"Scan-heavy operations detected\"],\"tB7xof\":[\"Temp or Sort Ops\"],\"tBBXTO\":[\"Ping Interval\"],\"tFrT3w\":[\"Add this to your client config file manually if automatic install fails.\"],\"tJ7UbA\":[\"explain focused\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Split Horizontal\"],\"tQhW-D\":[\"Log Settings\"],\"tT-BQX\":[\"Installed\"],\"tXFGEx\":[\"No Kubernetes connections saved. Click \\\"Add\\\" to create one.\"],\"tXLz_8\":[\"Delete\"],\"tXpRby\":[\"Data Grid\"],\"tbysEk\":[\"Actions\"],\"tdta9X\":[\"Page \",[\"0\"]],\"tfDRzk\":[\"Save\"],\"tfEioV\":[\"Execute all SQL cells top to bottom\"],\"tiAIaJ\":[\"SSH Password missing. Please re-enter.\"],\"tk22BR\":[\"Paste structured data and preview the schema before importing\"],\"tst44n\":[\"Events\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL file executed successfully\"],\"u6QeR6\":[\"Restart Now\"],\"uAQUqI\":[\"Status\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc to close\"],\"uFViPK\":[\"No SSH connections available\"],\"uHUuhp\":[\"Explain this query\"],\"uHfFzS\":[\"Editor Font Size\"],\"uJ_3K5\":[\"Delete notebook \\\"\",[\"0\"],\"\\\"? This cannot be undone.\"],\"uKaNJ3\":[\"Open in JSON Editor\"],\"uQBwTo\":[\"Schemas\"],\"ub54ff\":[\"Plugin Center\"],\"ufFyBs\":[\"Database exported successfully\"],\"upNmR2\":[\"Open Sidebar Editor\"],\"upwIY4\":[\"View Definition\"],\"utMia3\":[\"Deselect All\"],\"uyNaJg\":[\"1 element\"],\"v61dnS\":[\"Enter the exact model name for your OpenAI-compatible provider.\"],\"v6oeyr\":[\"Installed\"],\"v75DGg\":[\"Browse file\"],\"v99dO4\":[\"Primary Key\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query found\"],\"other\":[\"#\",\" queries found\"]}]],\"vCSBPD\":[\"Add filter\"],\"vH7uJj\":[\"Sort by…\"],\"vUOA1-\":[\"Search models...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE includes actual rows, timing, loops, and buffer counters when available.\"],\"vXIe7J\":[\"Language\"],\"vYf4Jm\":[\"Enter a complete SQL function (e.g., ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Prefer\"],\"vditm4\":[\"Explain Plan\"],\"vks_ls\":[\"Close Other Tabs\"],\"vnAnIp\":[\"Model <0>\",[\"0\"],\" not found in <1>\",[\"1\"],\". It may not work correctly.\"],\"vqoN5u\":[\"Structure\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Explorer\"],\"vujQJ5\":[\"Localization\"],\"vvJPVL\":[\"Show overview\"],\"vwI5S4\":[\"Success\"],\"vzH-7Z\":[\"Explain\"],\"w7QmD_\":[\"Enter system prompt...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Elapsed time\"],\"wCfv2R\":[\"Add Connection\"],\"wGfc86\":[\"Clear All History\"],\"wGwNv4\":[\"Active database\"],\"wJJ-Wy\":[\"Installing...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers Hit\"],\"wQn-RM\":[\"Add Column\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Applied\"],\"wTmVhm\":[\"Delete\"],\"wXx7W4\":[\"How often to check for new translations.\"],\"wZeIWq\":[\"Import from Clipboard\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"Pending approval\"],\"wckWOP\":[\"Manage\"],\"wdYcKH\":[\"Open Tabs\"],\"wja8aL\":[\"Untitled\"],\"wkOAzk\":[\"No notebooks match your search.\"],\"wp49Ao\":[\"Failed to process insertions: \"],\"wqG2hQ\":[\"Skip (do not import)\"],\"wwrAsK\":[\"Please fill in all required fields\"],\"wwu18a\":[\"Icon\"],\"x2fr_j\":[\"Graph\"],\"xANKBj\":[\"Functions\"],\"xBwjck\":[\"A restart is required to apply changes.\"],\"xDAtGP\":[\"Message\"],\"xECY01\":[\"Procedures\"],\"xGPNgZ\":[\"Prompt Customization\"],\"xNgtS-\":[\"No views found\"],\"xOPa1b\":[\"Port must be between 1 and 65535\"],\"xY9s5E\":[\"Timeout\"],\"xaVUr1\":[\"The quick brown fox jumps over the lazy dog\"],\"xbvTzL\":[\"File Path\"],\"xlew5F\":[\"Clear\"],\"xmNyKz\":[\"Testing...\"],\"xtuh6D\":[\"Expand Explorer\"],\"y-Zdqj\":[\"Choose a context...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Open JSON viewer\"],\"yQXjG5\":[\"Deselect All\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Yesterday\"],\"ygCKqB\":[\"Stop\"],\"ykCc6r\":[\"Changed database (cell \",[\"n\"],\")\"],\"ynVMSc\":[\"Select All\"],\"ytdz1d\":[\"AI requested a database write\"],\"yyhzur\":[\"Create Table\"],\"yz7wBu\":[\"Close\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"SSH Password\"],\"z4oF5T\":[\"Dump Database\"],\"z5kV0h\":[\"Connections\"],\"zBTMzx\":[\"Preview\"],\"zCaAKs\":[\"Update Error\"],\"zDAakK\":[\"Cannot display diagram without a connection ID.\"],\"zGe21h\":[\"This key is loaded from an environment variable\"],\"zGfL5t\":[\"value\"],\"zL6-4A\":[\"No plugin processes are running\"],\"zLZhCi\":[\"Brand-new Discord community!\"],\"zLlCou\":[\"Copy column name\"],\"zNEL34\":[\"Join the Community\"],\"zNgTlV\":[\"Close Tabs to Right\"],\"zQz55p\":[\"Inspect structure\"],\"zR0FfH\":[\"Exported to \",[\"target\"]],\"zRZeOc\":[\"Search tables, views, routines, triggers...\"],\"zUNMsr\":[\"SSH Key\"],\"zXMRzb\":[\"SSH Port\"],\"zZgoXr\":[\"No tables match\"],\"zaWbms\":[\"Rollback Changes\"],\"zgClmU\":[\"Install Config\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Enter value...\"],\"zvzN4C\":[\"Set as Active\"],\"zzDlyQ\":[\"Success\"],\"zzMxrp\":[\"Edit config.json\"],\"zz_Wd_\":[\"Mode\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/es/messages.po b/src/locales/es/messages.po index 145795b3..e304c31a 100644 --- a/src/locales/es/messages.po +++ b/src/locales/es/messages.po @@ -500,12 +500,10 @@ msgstr "¿Estás seguro de que quieres borrar todo el historial de consultas par #. placeholder {0}: column.name #: src/components/layout/sidebar/SidebarColumnItem.tsx -msgid "" -"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +msgid "Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" "\n" "WARNING: This will permanently delete all data in this column. This action cannot be undone." -msgstr "" -"¿Estás seguro de que deseas eliminar la columna \"{0}\" de la tabla \"{tableName}\"?\n" +msgstr "¿Estás seguro de que deseas eliminar la columna \"{0}\" de la tabla \"{tableName}\"?\n" "\n" "ADVERTENCIA: Esto eliminará permanentemente todos los datos de esta columna. Esta acción no se puede deshacer." @@ -548,11 +546,9 @@ msgstr "¿Estás seguro de que deseas eliminar la vista \"{0}\"?" #. placeholder {0}: file.split(/[\\/]/).pop() #: src/components/layout/ExplorerSidebar.tsx -msgid "" -"Are you sure you want to import \"{0}\"?\n" +msgid "Are you sure you want to import \"{0}\"?\n" "This may overwrite existing data." -msgstr "" -"¿Estás seguro de que deseas importar \"{0}\"?\n" +msgstr "¿Estás seguro de que deseas importar \"{0}\"?\n" "Esto podría sobrescribir los datos existentes." #: src/components/modals/ViewEditorModal.tsx @@ -601,6 +597,10 @@ msgstr "Auto Incremento" msgid "Auto paginated" msgstr "Paginación automática" +#: src/components/settings/LocalizationTab.tsx +msgid "Automatic updates" +msgstr "" + #: src/components/settings/InfoTab.tsx msgid "Automatically check for new versions when the app launches" msgstr "Buscar automáticamente nuevas versiones al iniciar la aplicación" @@ -746,6 +746,10 @@ msgstr "Buscar Actualizaciones Ahora" msgid "Check for updates on startup" msgstr "Buscar actualizaciones al inicio" +#: src/components/settings/LocalizationTab.tsx +msgid "Check interval" +msgstr "" + #: src/components/modals/McpModal.tsx #: src/pages/McpPage.tsx msgid "Checking configuration..." @@ -2297,6 +2301,10 @@ msgstr "Error: " msgid "Favorites" msgstr "Favoritos" +#: src/components/settings/LocalizationTab.tsx +msgid "Fetch the latest translations from the cloud without waiting for an app update." +msgstr "" + #: src/components/modals/NewConnectionModal.tsx msgid "File Path" msgstr "Ruta del Archivo" @@ -2520,6 +2528,10 @@ msgstr "Cuánto espera el subproceso MCP la decisión del usuario antes de falla msgid "How many logs to keep in memory (1-10000)" msgstr "Cuántos registros mantener en memoria (1-10000)" +#: src/components/settings/LocalizationTab.tsx +msgid "How often to check for new translations." +msgstr "" + #: src/components/settings/GeneralTab.tsx msgid "How often to check if active connections are still alive. Set to 0 to disable." msgstr "Frecuencia con la que se verifica si las conexiones activas siguen disponibles. Establece 0 para desactivar." @@ -2971,6 +2983,10 @@ msgstr "Mensaje" msgid "Minimize" msgstr "Minimizar" +#: src/components/settings/LocalizationTab.tsx +msgid "minutes" +msgstr "" + #: src/components/modals/ClipboardImport/SchemaEditor.tsx msgid "Mixed types detected, defaulted to TEXT" msgstr "Tipos mixtos detectados, por defecto TEXT" @@ -5022,6 +5038,10 @@ msgstr "Puntos Criticos" msgid "Total Cost" msgstr "Costo Total" +#: src/components/settings/LocalizationTab.tsx +msgid "Translation updates" +msgstr "" + #: src/components/ui/JsonInput.tsx msgid "Tree" msgstr "Árbol" diff --git a/src/locales/es/messages.ts b/src/locales/es/messages.ts index 0c1da135..b5f1a6a3 100644 --- a/src/locales/es/messages.ts +++ b/src/locales/es/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Máx. Entradas de Historial\"],\"-6AWa-\":[\"Importar conexiones\"],\"-6NyRG\":[\"Cliente\"],\"-K0AvT\":[\"Desconectar\"],\"-PLZfh\":[\"Error al actualizar los modelos\"],\"-T5W2e\":[\"Notas del Driver\"],\"-ZgeeE\":[\"Historial de ediciones\"],\"-aYrdc\":[\"La versión \",[\"0\"],\" está disponible\"],\"-fBGXl\":[\"Costo Mas Alto\"],\"-jIQDz\":[\"Contraer Celda\"],\"-u1eRo\":[\"Sin base de datos\"],\"-yoeVU\":[\"Cargando esquema...\"],\"-zy2Nq\":[\"Tipo\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID aprobación\"],\"0E5-gF\":[\"¿Estás seguro de que deseas eliminar esta conexión?\"],\"0HCubq\":[\"Expandir\"],\"0Kmdvy\":[\"Fuente Personalizada\"],\"0Nj13E\":[\"Generar SQL\"],\"0ROgz5\":[\"Ingrese JSON...\"],\"0SY9sU\":[\"No se pudo desconectar de la base de datos\"],\"0b3kL9\":[\"Selecciona una base de datos\"],\"0caMy7\":[\"Historial\"],\"0mx5ow\":[\"Consulta\"],\"0n9BtL\":[\"Vista Previa\"],\"0pHB9N\":[\"Copiar como tabla.columna\"],\"0sQzZK\":[\"Filtrar bases de datos...\"],\"0uPP9X\":[\"Nombre FK (Opcional)\"],\"0wxuek\":[\"Versión Actual\"],\"0x09Aw\":[\"Detener en error alternado\"],\"0yBP6v\":[\"Apoya el Desarrollo\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas\"],\"other\":[\"#\",\" filas\"]}]],\"0yVAoD\":[\"Contar filas\"],\"0zxJ87\":[\"No hay registros disponibles\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Editar Vista\"],\"11fGJ6\":[\"Consultas\"],\"13hIUA\":[\"Clave API de \",[\"0\"]],\"14qNWF\":[\"Seleccionar Conexión SSH\"],\"17qHRP\":[\"Nueva conexión\"],\"1Dn6bg\":[\"Importar desde Portapapeles\"],\"1Dnd0I\":[\"Cargar conteo de filas\"],\"1FjTLW\":[\"p.ej. python3\"],\"1GOvbo\":[\"Ollama conectado (\",[\"0\"],\" modelos encontrados)\"],\"1I6UoR\":[\"Vistas\"],\"1U7hS5\":[\"Long\"],\"1UTmg5\":[\"Paquete Máximo Permitido\"],\"1b7aSU\":[\"Fuente del Editor\"],\"1ekzlY\":[\"Procesos de Complementos\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Selección de Tema\"],\"1xVZkL\":[\"No se encontraron modelos\"],\"26Joci\":[[\"0\"],\" filas obtenidas\"],\"2Bf-Qe\":[\"Nueva consola\"],\"2CrSmP\":[\"Help tabularis grow\"],\"2D9F8_\":[\"Error al duplicar la conexión\"],\"2Eoi_a\":[\"Ver detalles\"],\"2F4pE5\":[\"Build y Test Rust\"],\"2Fsd9r\":[\"Este Mes\"],\"2JzKXI\":[\"Set GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Seleccionar Todo\"],\"2SO5RM\":[\"Kubernetes no está disponible para este controlador.\"],\"2Uh5GA\":[\"ecosistema Cargo\"],\"2YylFp\":[\"Nueva Consulta Visual\"],\"2luuSG\":[\"Reintentar\"],\"2wxgft\":[\"Renombrar\"],\"2yG2GC\":[\"Pausa las escrituras (o todas las consultas) y pide al usuario que apruebe antes de ejecutar.\"],\"30-b5r\":[\"Eliminar\"],\"31kwdN\":[\"Duplicar filtro\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Todas las herramientas\"],\"3Am5DS\":[\"Vista en pestañas\"],\"3FVg9_\":[\"Columna Local\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Ejecutar\"],\"3L0HCz\":[\"Ningún plugin coincide con la búsqueda.\"],\"3Nv3JV\":[\"Ejecutando consulta...\"],\"3TSz9S\":[\"Minimizar\"],\"3UW8fG\":[\"Actualizaciones gestionadas por \",[\"0\"]],\"3YvS-c\":[\"Nueva pestaña\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt Nombre de Celda Notebook\"],\"3qkggm\":[\"Pantalla Completa\"],\"3rBJ1T\":[\"Ver Esquema\"],\"3xZ-xV\":[\"Insertar marca de tiempo actual\"],\"40Gx0U\":[\"Zona Horaria\"],\"41GP4f\":[\"Elige el delimitador predeterminado utilizado al copiar o exportar filas en formato CSV.\"],\"42iaEi\":[\"PostgreSQL sin ANALYZE muestra solo estimaciones del planner.\"],\"44cXI8\":[\"Ordenar por \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gestionar Bases de Datos\"],\"4CK17g\":[\"¿Estás seguro de que deseas modificar la vista \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Selecciona al menos una base de datos\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Exportar como HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" proceso hijo\"],\"other\":[\"#\",\" procesos hijos\"]}]],\"4VyuY3\":[\"¿Estás seguro de que deseas borrar todos los registros?\"],\"4WWqS3\":[\"Expandir/contraer árbol JSON\"],\"4XAQdl\":[\"Crear Índice\"],\"4cEClj\":[\"Sesiones\"],\"4cmfYp\":[\"Duplicar Fila\"],\"4hsr6d\":[\"Crear Vista\"],\"4lIZTB\":[\"Dependencias Dev Frontend\"],\"4oYjvJ\":[\"Buscar en la consulta…\"],\"4tMxW4\":[\"Vista previa del registro relacionado\"],\"4yJcjm\":[\"Selecciona tipo...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Cerrar panel de filtros (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Punto y coma (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" evento\"],\"other\":[\"#\",\" eventos\"]}]],\"5I2fxu\":[\"/ruta/a/id_rsa\"],\"5NZpX8\":[\"Vista de lista\"],\"5To6Z6\":[\"Copiar consulta\"],\"5gqNQl\":[\"Vista de cuadrícula\"],\"5igIzr\":[\"Importación cancelada\"],\"5nTIup\":[\"Editando vista: \",[\"name\"]],\"5qIe8E\":[\"Ejecutar Todo\"],\"66bEht\":[\"Estado del Proyecto\"],\"6PIJVc\":[\"Inicio\"],\"6QvP0l\":[\"Exportar como JSON\"],\"6W41Xq\":[\"Administrador de Tareas\"],\"6WngBH\":[\"Set NULL\"],\"6YtxFj\":[\"Nombre\"],\"6_dCYd\":[\"Resumen\"],\"6dOBsk\":[\"Crear Vista\"],\"6gvoHP\":[\"Copiar mensaje de error\"],\"6oCVzX\":[\"El contexto de Kubernetes es obligatorio\"],\"6wQO0f\":[\"Mostrar Datos\"],\"6z9W13\":[\"Reiniciar\"],\"71agNy\":[\"Generar nombres para celdas sin nombre con IA\"],\"74J3FG\":[\"Versión inicial\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Got it\"],\"77nSMU\":[\"¿Borrar todo el historial de actividad IA? Esta acción es irreversible.\"],\"7ABmyQ\":[\"Reintentar\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" de \",[\"0\"],\" activos\"],\"7E864M\":[\"Tipo de Base de Datos\"],\"7FqaG1\":[\"Personaliza las instrucciones para el analisis IA de los planes EXPLAIN. Usa \",[\"LANGUAGE\"],\" para el idioma de salida.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Tipos mixtos detectados, por defecto TEXT\"],\"7RSQQd\":[\"Guardar contraseñas en el Llavero\"],\"7VpPHA\":[\"Confirmar\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fallidas\"],\"7sMeHQ\":[\"Clave\"],\"7sNhEz\":[\"Usuario\"],\"7tATh2\":[\"Ejecutar Consulta\"],\"7yb4gk\":[\"Error: \"],\"8-4V8D\":[\"Tablas\"],\"82G-l5\":[\"El Model Context Protocol (MCP) permite a los asistentes de IA (como Claude) conectarse a tus herramientas locales. Tabularis expone un servidor MCP que permite a la IA leer el esquema de tu base de datos y ejecutar consultas de forma segura.\"],\"83VjWE\":[\"Nuevo Notebook\"],\"86IgoU\":[\"Ejecutar consulta (en el editor)\"],\"86fCgf\":[\"Personaliza las instrucciones para la generación de nombres de pestañas de resultados de consulta con IA. La consulta SQL se envía como mensaje del usuario.\"],\"87a_t_\":[\"Etiqueta\"],\"87kWsr\":[\"Exportar conexiones\"],\"8CWirf\":[\"Servidor MCP\"],\"8S8aIX\":[\"Verificación de Conexión\"],\"8TMaZI\":[\"Marca de Tiempo\"],\"8Tg_JR\":[\"Personalizado\"],\"8UFKYr\":[\"Seleccionar consulta a ejecutar\"],\"8VKSGV\":[\"Generar SQL\"],\"8Wjy6z\":[\"Cerrar Pestañas a la Izquierda\"],\"8ZsakT\":[\"Contraseña\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Editor SQL\"],\"8bRgTe\":[\"Proveedor de IA no configurado. Ve a Configuracion > IA.\"],\"8c_W0h\":[\"Versiones anteriores\"],\"8guEQP\":[\"Actualizar Vistas\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN es ligero y principalmente estructural.\"],\"8q_sOc\":[\"Quitar\"],\"8t-akp\":[\"primeras \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nombre de Conexión\"],\"91gnWY\":[\"Exportar Registros\"],\"91rtHL\":[\"Crear Nueva Vista\"],\"92hf9a\":[\"Quitar\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vista actualizada correctamente\"],\"9NzDFn\":[\"Mostrar la pantalla de bienvenida al iniciar la aplicación.\"],\"9OoUS3\":[\"Crear Nueva Conexión SSH\"],\"9QGRD5\":[\"Columna destino\"],\"9QTny9\":[\"La consulta falló.\"],\"9S-fyV\":[\"Plan de ejecución previo\"],\"9SJ_Sx\":[\"Recursos del Sistema\"],\"9UQ730\":[\"Clonar\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"No hay datos en el portapapeles\"],\"9hGjL2\":[\"Crear Índice\"],\"9mMU1R\":[\"Tiempo\"],\"9mvFo_\":[\"Hora\"],\"9npOH9\":[\"Abrir archivo\"],\"9uI_rE\":[\"Deshacer\"],\"9xUjzm\":[\"Seleccionar Todo\"],\"9y_02p\":[\"Chat with the community, get help, suggest features\"],\"A1pPcI\":[\"Host SSH\"],\"A1taO8\":[\"Buscar\"],\"A6C0pv\":[\"Costo Total\"],\"A7WG0p\":[\"Plugin desactivado\"],\"A7yRz3\":[\"La definición de la vista es requerida\"],\"A9Uyp6\":[\"Error en la importación: \"],\"ABEd-z\":[\"Usa tu gestor de paquetes para actualizar Tabularis.\"],\"AMdgKV\":[\"Prompt Analisis del Plan de Ejecucion\"],\"ANSTMe\":[\"No se detectaron problemas importantes en el resumen actual del plan.\"],\"ANzIr7\":[\"Historial de Consultas\"],\"AOnaU7\":[\"omitidas\"],\"AVlZoM\":[\"Variable de Entorno\"],\"AXTVsE\":[\"Verificación completa\"],\"AXdRYR\":[\"Registros Actuales\"],\"Aa-YkQ\":[\"Exportar Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filtrar por nivel\"],\"AlPiMN\":[\"Clic para ir a la página\"],\"An-1rA\":[\"Filas devueltas\"],\"AnV8j-\":[\"Modificar Columna\"],\"AvEr_L\":[\"Nueva Consola\"],\"AvYbUL\":[\"Estrella en GitHub\"],\"Aw_eOs\":[\"Requiere Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No se encontraron resultados\"],\"B0mJGb\":[\"Salida Sin Procesar\"],\"B1c58n\":[\"Modificar Columna\"],\"B3toQF\":[\"Objetos\"],\"B5nKny\":[\"/ruta/absoluta/carpeta\"],\"B5xevr\":[\"El nombre de la conexión es obligatorio\"],\"BAVvWJ\":[\"Diagrama ER\"],\"BBtVak\":[\"Contraer Todo\"],\"BEVzjL\":[\"Importación fallida\"],\"BHATjK\":[\"Exportar conexiones\"],\"BJe2lZ\":[\"Mostrar/ocultar barra lateral\"],\"BK3WCj\":[\"Error al cargar el registro\"],\"BKbO3i\":[\"Notebook editado\"],\"BMB51y\":[\"Ejecutar en consola\"],\"BNW_Z4\":[\"ej. usuarios_activos, resumen_pedidos\"],\"BPkXj7\":[\"Crear Clave Foránea\"],\"BUO_JN\":[\"Copiar Consulta\"],\"BYkhHY\":[\"Buscar actualizaciones al inicio\"],\"BeSg6-\":[\"Recopilar registros de la aplicación en memoria para depuración\"],\"BgAyQH\":[\"Quitar ordenamiento\"],\"BinTJI\":[\"ecosistema npm\"],\"BkFson\":[\"Paginación automática\"],\"Bpglf1\":[\"Mover Arriba\"],\"BrGo6h\":[\"Buscar notebooks\"],\"BxiAN_\":[\"Eliminar Consulta\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dependencias Frontend\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Sin filtros —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Descargando...\"],\"CUxwxn\":[\"Mostrar Todas las Tablas\"],\"CWMXbw\":[\"detendrá forzosamente su proceso. Todas las conexiones de base de datos activas que usen este complemento dejarán de funcionar hasta que se reinicie el complemento.\"],\"CZt6BX\":[\"CONFIGURACIÓN MANUAL\"],\"Ca8ixZ\":[\"Eliminar\"],\"CbJBQS\":[\"Error en la actualización: \"],\"Cdz-YU\":[\"Vista apilada\"],\"CpeQf9\":[\"Ciclos\"],\"D2wXBw\":[\"Auto Incremento\"],\"D6Ql0c\":[\"Selecciona el modelo a utilizar para la generación y explicación.\"],\"DB8zMK\":[\"Aplicar\"],\"DDXf5E\":[\"Funciones SQL\"],\"DEwnwi\":[\"Eliminar\"],\"DNTvdl\":[\"Abrir en el Editor\"],\"DPc2P9\":[\"Eliminar Celda\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Altura de Línea\"],\"Dd7YLj\":[\"Maybe later\"],\"Deej3j\":[\"JSON no válido\"],\"DfKhk_\":[\"Actualizar\"],\"DiRiTz\":[\"Abrir página del paquete\"],\"DlRHAD\":[\"Ejecutando EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" error\"],\"other\":[\"#\",\" errores\"]}]],\"Dvdihe\":[\"En \",[\"0\"],\" — revisa y decide antes de ejecutar.\"],\"DzFLzw\":[\"SÍ\"],\"E-JUtQ\":[\"Puerta de aprobación\"],\"E0kcnZ\":[\"General\"],\"E2mje_\":[\"Seleccionar consulta a analizar\"],\"EDieyg\":[\"¿Estás seguro de que deseas eliminar esta conexión SSH?\"],\"EHZxPj\":[\"Expandir\"],\"EL4oDO\":[\"Nueva Versión Disponible\"],\"EPi4gT\":[\"Ordenar por \",[\"field\"]],\"EWPtMO\":[\"Código\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Desconocido\"],\"EhADgB\":[\"Eliminar Columna\"],\"EkH9pt\":[\"Update\"],\"Ekblrc\":[\"Estás actualizado\"],\"Em6JFd\":[\"Contar Filas\"],\"EnGiqG\":[[\"0\"],\" elementos\"],\"Ew1n5z\":[\"Buscar plugins…\"],\"F18WP3\":[\"Parámetros\"],\"F3uc1x\":[\"El archivo exportado contendrá tus contraseñas de base de datos y SSH en texto plano. Guárdalo de forma segura.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" filas\"],\"other\":[\"#\",\" filas\"]}]],\"F6pfE9\":[\"Activa\"],\"F8tXg7\":[\"Vista Previa de Datos\"],\"F9-6yK\":[\"Formato de copia predeterminado\"],\"F9lxfG\":[\"Eliminar\"],\"F9nsa2\":[\"El archivo de historial estaba corrupto y se ha movido a un respaldo. Las nuevas consultas se registrarán con normalidad. Archivo de respaldo:\"],\"FF_oap\":[\"Predeterminado\"],\"FK8rlP\":[\"No hay conexiones SSH configuradas\"],\"FMRcH8\":[\"Primera fila como encabezado\"],\"FNvDMc\":[\"Esta Semana\"],\"FQe1FI\":[\"Filas Est.\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operacion\"],\"Fa_cky\":[\"Esquema: \",[\"tableName\"]],\"FpEL5o\":[\"Elige un tema independiente para el editor SQL, o mantenlo sincronizado con el tema de la app.\"],\"FsvZQL\":[\"Celda \",[\"n\"],\" editada\"],\"FtwKL9\":[\"Cambiar pestaña\"],\"FznI3z\":[\"¿Eliminar la clave foránea \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Error en la vista previa: \"],\"G8Q5Zq\":[\"El namespace es obligatorio\"],\"GAohqx\":[\"Eliminar columna\"],\"GJR99u\":[\"Error al eliminar la columna: \"],\"GKfzzM\":[\"Elige una conexión...\"],\"GS-Mus\":[\"Exportar\"],\"GUaLUq\":[\"Error al cargar el esquema: \"],\"GXP-Iw\":[\"Agregar Celda SQL\"],\"Gj1mLb\":[\"Celdas reordenadas\"],\"GlbqG2\":[\"Restablecer al valor predeterminado\"],\"Gq1YzP\":[\"Eventos\"],\"Gs5AlY\":[\"Abierta\"],\"GtmO8_\":[\"desde\"],\"GxkJXS\":[\"Subiendo...\"],\"H-o4D2\":[\"Crear nueva columna\"],\"H2B-KW\":[\"Elige el formato predeterminado al copiar filas con Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Rehacer\"],\"H7mlCc\":[\"/ruta/absoluta/db.sqlite\"],\"H86f9p\":[\"Contraer\"],\"H9P8CD\":[\"agregar el primer filtro\"],\"HAQlGl\":[\"Actividad IA\"],\"HKNZrs\":[\"Cond. Indice\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Eliminar \",\"#\",\" filas\"],\"other\":[\"Eliminar \",\"#\",\" filas\"]}]],\"HPuCiP\":[\"Ruta de la Carpeta\"],\"HUs1R3\":[\"No hay pestañas abiertas para esta conexión.\"],\"HV4Isp\":[\"Ingresa la contraseña SSH\"],\"HVC8Hh\":[\"Copiado al portapapeles\"],\"HWEpq8\":[\"Escritura Disco/s\"],\"HY4nP5\":[\"En línea\"],\"HcmoWv\":[\"Error al guardar la vista: \"],\"He8v1Y\":[\"Deseleccionar de Aplicar todos\"],\"HehHP1\":[\"Diseño Predeterminado\"],\"HilYn4\":[\"Este notebook está vacío. Agrega una celda para comenzar.\"],\"HjxVK_\":[\"Prueba rápida de conexión\"],\"HmMnRx\":[\"Modo WKT\"],\"HoKCiI\":[\"La aplicación se reiniciará automáticamente después de la instalación\"],\"HpK_8d\":[\"Recargar\"],\"Hpi4Jm\":[\"Únete ahora\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configurar SSH en Línea\"],\"I5VBsr\":[\"Igual que la app\"],\"I8yrPb\":[\"Reemplazar tabla\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Recordar Después\"],\"I99Miw\":[\"Costo\"],\"IETZIR\":[\"Editar nombre de celda\"],\"IG9wzA\":[\"Error al insertar la fila: \"],\"ILleOG\":[\"El tipo de recurso debe ser \\\"service\\\" o \\\"pod\\\"\"],\"IQ3gAw\":[\"Subir Archivo\"],\"IUwGEM\":[\"Guardar Cambios\"],\"IUwmLq\":[\"Dependencias directas declaradas en package.json y src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Librerías Open Source\"],\"I_43p6\":[\"Seguridad\"],\"Iaizf4\":[\"Apariencia\"],\"Il3FBB\":[\"Panel de filtros estructurados\"],\"IniZRK\":[\"Descarga no disponible - solo vista previa cargada\"],\"Isaozb\":[\"Revisar y ajustar\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Las consultas activas y las conexiones a través de este complemento serán interrumpidas.\"],\"J6v1s_\":[\"Modelo Predeterminado\"],\"JE-DVk\":[\"Intérprete\"],\"JEGlfK\":[\"Inicio\"],\"JKDPqP\":[\"Selecciona primero un contexto\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Usar Túnel SSH\"],\"JRz8tw\":[\"MySQL y MariaDB exponen metricas reales solo en variantes compatibles de EXPLAIN ANALYZE o ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP o SVG · máx. 512 KB\"],\"JY5Oyv\":[\"Base de datos\"],\"JlFRIB\":[\"Zona horaria de sesión enviada a MySQL después de conectar.\"],\"JrOEip\":[\"Vista previa\"],\"JsY1p5\":[\"Denegada\"],\"K3H9p5\":[\"Limpiar\"],\"K5Dgu_\":[\"Bases de Datos\"],\"K8IGKf\":[\"Tipo de Autenticación\"],\"KAYNSW\":[\"Cuántos registros mantener en memoria (1-10000)\"],\"KHTGbr\":[\"EXPLAIN previo\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copiar como `columna`\"],\"KM5Kc8\":[\"Se debe seleccionar al menos una columna\"],\"KSCnVQ\":[\"Tipo\"],\"KUjOb9\":[\"en ejecución\"],\"KXBdwy\":[\"Actualizar Rutinas\"],\"KXNyX7\":[\"Set DEFAULT\"],\"Kd70-v\":[\"Importar desde Portapapeles...\"],\"KhI4oS\":[\"Abrir fila referenciada en \",[\"0\"]],\"KhgrNu\":[\"Integración del Servidor MCP\"],\"KirERL\":[\"Tiempo agotado\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Error al eliminar el índice: \"],\"KzeARD\":[\"Error al eliminar la tabla: \"],\"L-rMC9\":[\"Restablecer predeterminado\"],\"L3HXkQ\":[\"Bug Fixes\"],\"LCZ7Dy\":[\"Copiar Nombre\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"índices\"],\"LMeAoR\":[\"filas\"],\"LPCdc-\":[\"Prompt Nombre de Pestaña de Consulta\"],\"LPFmga\":[\"Seleccionar para Aplicar todos\"],\"LYzbQ2\":[\"Herramienta\"],\"Lbis_V\":[\"Navegador rápido\"],\"Lcpbe2\":[\"No se pudo lanzar el proceso del plugin. Revisa los detalles del error.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN solo es compatible con instrucciones DML (SELECT, INSERT, UPDATE, DELETE). Las instrucciones DDL como CREATE, DROP o ALTER no se pueden analizar.\"],\"LnT0hQ\":[\"Agregar Columna\"],\"LvutiO\":[\"Sugerir con IA\"],\"M-rHQO\":[\"Salir de Pantalla Completa\"],\"M0XJba\":[\"¿Estás seguro de que quieres borrar todo el historial de consultas para esta conexión?\"],\"M1co_O\":[\"Configurado\"],\"M73whl\":[\"Contexto\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Emoji seleccionado\"],\"MWB7fV\":[\"Mostrar Todo\"],\"MXdOwj\":[\"Separar Conexiones\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Selecciona conexión de K8s\"],\"Mc1tjS\":[\"Activa ANALYZE para inspeccionar filas reales, tiempos, bucles y buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" filas más\"],\"Mp0jQ_\":[\"Este driver solo soporta claves primarias en la creación de la tabla\"],\"MqpZwN\":[\"Proceso Tabularis\"],\"MxIx43\":[\"↑↓ para navegar, Enter para abrir\"],\"MygtgQ\":[\"Agregar Celda Markdown\"],\"N40H-G\":[\"Todos\"],\"N5UQxq\":[\"Ollama no detectado en el puerto \",[\"0\"],\". ¿Está en ejecución?\"],\"N6GBcC\":[\"Confirmar eliminación\"],\"N6aqHp\":[\"Consultas ejecutadas\"],\"N9_S15\":[\"Se creará una nueva tabla\"],\"NBdMa1\":[\"Paso Mas Lento\"],\"NC2AI2\":[\"Longitud\"],\"NCzNnx\":[\"Orden ascendente\"],\"NT4Ubs\":[\"Eliminar clave personalizada y volver a la variable de entorno (si existe)\"],\"NUjrCO\":[\"Ningun favorito coincide con la busqueda\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Total árbol: \",[\"0\"]],\"Nc2VQn\":[\"Agregar a existente\"],\"NgFERn\":[\"Agregar a Favoritos\"],\"NktMHG\":[\"Nombre de la base de datos\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Probar\"],\"Nq5QTk\":[\"analizar N-esima\"],\"O2STgu\":[\"Error en la exportación: \"],\"O8SV8O\":[\"Descargando...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Ejecutar Todas las Celdas\"],\"OGWdBg\":[\"Nombre de Vista\"],\"OHqT6w\":[\"Pulsa la combinación de teclas...\"],\"OXJsaG\":[\"Nombre de parámetro no válido\"],\"OfhWJH\":[\"Restablecer\"],\"OlAl5i\":[\"Expandir todo\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Join Discord\"],\"P1YGsb\":[\"Generación SQL\"],\"P2m1xb\":[\"Detener en Error\"],\"P3Qlys\":[\"Sin ID de Conexión\"],\"P6Y3Yf\":[\"Ejecuta este comando en tu terminal y reinicia Claude Code.\"],\"PCdj-c\":[\"Deseleccionar todas\"],\"PMnFt9\":[\"Lectura Disco/s\"],\"PQU2Va\":[\"Aceptar Sugerencia con Intro\"],\"PRnH8G\":[\"de \",[\"0\"]],\"PY8UF3\":[\"Paralelo alternado (celda \",[\"n\"],\")\"],\"PiH3UR\":[\"¡Copiado!\"],\"Pia95d\":[\"El nombre de la columna es requerido\"],\"PrElXQ\":[\"Actualizar\"],\"PrixCC\":[\"Las filas se añadirán a una tabla existente\"],\"Pujgbb\":[\"Configurar destino\"],\"Pw_eQV\":[\"El Plugin no se pudo iniciar\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"No hay consultas guardadas\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Sin procesos hijos\"],\"QCxMC0\":[\"Buscar automáticamente nuevas versiones al iniciar la aplicación\"],\"QEazml\":[\"Eliminar seleccionadas\"],\"QHcLEN\":[\"Conectado\"],\"QLHHFO\":[\"Modo solo lectura\"],\"QOvAW3\":[\"New Features\"],\"QULGRi\":[\"No se encontraron consultas válidas\"],\"QZwllF\":[\"Explorar...\"],\"QbkSr_\":[\"EXPLAIN no disponible para esta consulta.\"],\"QeHFYZ\":[\"EXPLAIN falló: \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"Read more\"],\"Qu4Hog\":[\"Notebook importado exitosamente\"],\"R-A2Vd\":[\"No hay datos para mostrar\"],\"R0Hkb2\":[[\"0\"],\" base(s) de datos seleccionada(s)\"],\"R1nHhB\":[\"Ya existe\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convertir a Consola\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configuración\"],\"RF-HyV\":[\"Elige tu idioma preferido. 'Auto' usará el idioma del sistema.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copiar nombre\"],\"RI-HZc\":[\"Ingresa la Clave de \",[\"0\"]],\"RJrE17\":[\"¿Estás seguro de que deseas eliminar la vista \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"A star helps others discover the project\"],\"Rb3Tdm\":[\"Nombre del notebook\"],\"RcbKJ3\":[\"Al Actualizar\"],\"RkefFq\":[\"Ejecuta un EXPLAIN antes de mostrar el modal para que el usuario vea el plan.\"],\"RnF_hl\":[\"Cargando registro de plugins...\"],\"Rns7_C\":[\"Esta acción no se puede deshacer inmediatamente\"],\"RoKRqW\":[\"Plugins Disponibles\"],\"RphpKk\":[\"Apariencia\"],\"Rt8sHM\":[\"Se detecto trabajo temporal o de ordenacion\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Habilitados\"],\"S1veKH\":[\"Revert Selected\"],\"S5zeZU\":[\"Vista Previa\"],\"S8Yqbl\":[\"Insertar\"],\"SDND4q\":[\"No configurado\"],\"SJRy3D\":[\"(Auto-generado)\"],\"SSwIjo\":[\"Set EMPTY\"],\"SgvA_r\":[\"Press Run (Ctrl/Command+F5) to load table data\"],\"SlfejT\":[\"Error\"],\"SoATkx\":[\"Copiar Celda\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL del Endpoint\"],\"T7w5CQ\":[\"Failed to create new row: \"],\"T9947j\":[\"Valor (ej. 'texto' o 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Cambiar a Diseño Vertical\"],\"TK5oex\":[\"Guardar Prompt\"],\"TKQ7K-\":[\"Instalar\"],\"TKZreP\":[\"Requerido\"],\"TMLAx2\":[\"Requerido\"],\"TO08JI\":[\"claves foráneas\"],\"TVKqvO\":[\"Editar Fila\"],\"TYSdQ3\":[\"Ejecutar consulta SELECT\"],\"TfDFHS\":[\"Ajusta las líneas largas en el editor en vez de desplazarse horizontalmente.\"],\"Tibfjs\":[\"No hay conexiones guardadas — crea una abajo\"],\"Tj36Dr\":[\"Restablecer Predeterminado\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Bloquear consulta\"],\"TpwXyg\":[\"Si falta el tiempo, es probable que el servidor devolviera un plan solo estimado.\"],\"Tw2M1h\":[\"Instalación fallida\"],\"Ty-rm9\":[\"Conexiones SSH\"],\"Tz0i8g\":[\"Configuración\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Conexiones de Kubernetes\"],\"U4uzyV\":[\"What's New\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Detener la ejecución cuando una celda falla\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" en \",[\"1\"],\" — revisa y decide antes de ejecutar.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"¡Configuración instalada correctamente para \",[\"clientName\"],\"! Reinicia la app para aplicar.\"],\"URmyfc\":[\"Detalles\"],\"UWQBvp\":[\"Generar plantillas SQL\"],\"UawTKZ\":[\"Opcional. Especifica el ejecutable para iniciar este plugin (p.ej. python3 en macOS/Linux, python o ruta completa en Windows). Deja en blanco para usar el valor predeterminado.\"],\"Ub8sf5\":[\"SQLite no soporta la eliminación de FKs mediante ALTER TABLE.\"],\"UbbJ8j\":[\"No se encontraron opciones\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"Estas conexiones rechazarán escrituras desde MCP. Las otras se comportan normalmente.\"],\"UnQNah\":[\"¿Estás seguro de que deseas eliminar la columna \\\"\",[\"0\"],\"\\\" de la tabla \\\"\",[\"tableName\"],\"\\\"?\\n\\nADVERTENCIA: Esto eliminará permanentemente todos los datos de esta columna. Esta acción no se puede deshacer.\"],\"UncTTh\":[\"Suma de RSS del árbol de procesos — puede sobreestimar la memoria compartida\"],\"UpjgFm\":[\"Parámetros cambiados\"],\"UsAnu1\":[\"ANALYZE ejecuta la consulta. Usar con precaucion en instrucciones que modifican datos.\"],\"UxKoFf\":[\"Navegación\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tamaño de Tab\"],\"UzWGWO\":[\"Cambiar a entrada SQL WHERE\"],\"V-chk5\":[\"Frecuencia con la que se verifica si las conexiones activas siguen disponibles. Establece 0 para desactivar.\"],\"V-pw1j\":[\"Nombre de tabla\"],\"V2T0Uw\":[\"Aún no hay notebooks guardados.\"],\"V3aNwx\":[\"Editor de Datos\"],\"VGYp2r\":[\"Aplicar a todo\"],\"VH8S7x\":[\"Columna del portapapeles\"],\"VIAEcS\":[\"Error al cargar las bases de datos. Verifica tus credenciales.\"],\"VKdztF\":[\"Agregar filas\"],\"VLiHXI\":[\"Datos Analyze\"],\"VMbmXc\":[\"¿Estás seguro de que deseas eliminar \\\"\",[\"pluginName\"],\"\\\"? Los archivos del plugin serán eliminados.\"],\"VO3weF\":[\"Ningún archivo cargado\"],\"VOZlKc\":[\"Importar Base de Datos\"],\"VPzsIz\":[\"Generando nombre...\"],\"VUul0v\":[\"Cerrar\"],\"VW0GVQ\":[\"Haz clic en otro emoji abajo para cambiarlo.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Todas las consultas\"],\"Vi2Pqx\":[\"por\"],\"Vl2zn2\":[\"detenido\"],\"Vo4uBA\":[\"Ocurrió un error al instalar el plugin. Consulta los detalles a continuación.\"],\"VqqyOs\":[\"Ejecuta una consulta para ver resultados\"],\"VzhDFh\":[\"Bloquea cualquier sentencia que no sea SELECT vía MCP, salvo las conexiones autorizadas abajo.\"],\"W3uwpT\":[\"Cerrar Todas las Pestañas\"],\"W4MKLh\":[\"ej. Parece arriesgada en prod, confirma…\"],\"W60eXm\":[\"Tabla\"],\"WA8RND\":[\"¿Estás seguro de que deseas eliminar la tabla \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Eliminar Tabla\"],\"WLnvCZ\":[\"Ingresa el nombre de usuario\"],\"WM-__8\":[\"Buscar conexiones...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas importadas en \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" filas importadas en \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"¿Estás seguro de que quieres eliminar la consulta \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"exitosas\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"General\"],\"WmPpB1\":[\"Cargando el plan de ejecución…\"],\"Wu7cK0\":[\"No se encontraron bases de datos\"],\"WvoUQF\":[\"Celda \",[\"n\"],\" eliminada\"],\"Ww3pDD\":[\"COMANDO MANUAL\"],\"X-20AU\":[\"Ingresa el prompt de nombre de pestaña...\"],\"X-U6_w\":[\"Familia de Fuente\"],\"X5fs0g\":[\"Crea tu primera conexión para empezar.\"],\"X7Ayjp\":[\"Contraseña guardada en el llavero del sistema\"],\"X9kySA\":[\"Favoritos\"],\"XJOV1Y\":[\"Actividad\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Explicación de Consultas\"],\"XVF2Pf\":[\"Editar Esquemas\"],\"XW6OYF\":[\"Este plugin puede requerir un intérprete (p.ej. Python). Usa Configuración del Plugin para establecer la ruta del intérprete.\"],\"XZB6Xr\":[\"Máximo de Entradas de Registro\"],\"Xcffv2\":[\"Mostrar los botones de Asistente IA y Explicar en el editor\"],\"XeqTSh\":[\"Tipo Join\"],\"XmJfZT\":[\"nombre\"],\"XoQfG1\":[\"Usuario SSH\"],\"XwI0Vw\":[\"Auto (Sistema)\"],\"XyDlLX\":[\"Nombre del Índice\"],\"Y2P2aK\":[\"Selecciona los esquemas a cargar:\"],\"Y8HYw2\":[\"valor\"],\"Y8zX3R\":[\"Insertar en el Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Buscar...\"],\"YWlnMZ\":[\"Puerto de Ollama\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Explora e instala plugins del registro.\"],\"Y_3yKT\":[\"Abrir en Nueva Pestaña\"],\"YiAQ_Q\":[\"Actualizar Tablas\"],\"Ysjr9Y\":[\"Vista Previa SQL\"],\"YswNf7\":[\"Todos los niveles\"],\"YtNwr6\":[\"Número máximo de entradas del historial de consultas almacenadas por conexión.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Cargando...\"],\"Z7ZXbT\":[\"Aprobar\"],\"Z8JpBH\":[\"Exportar como Notebook\"],\"Z8fBIc\":[\"Las filas reales superan la estimacion\"],\"ZC2VJP\":[\"Ejecutar\"],\"ZCIS4k\":[\"sin filtros activos\"],\"ZF1_UT\":[\"Modo SSL\"],\"ZGjBPa\":[\"Limpiar Registros\"],\"ZHQTlM\":[\"Importando desde\"],\"ZIFDoJ\":[\"Selecciona al menos Estructura o Datos\"],\"ZIZA6o\":[\"Editar antes de aprobar\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avisos de análisis\"],\"other\":[\"#\",\" avisos de análisis\"]}]],\"ZVn8p2\":[\"Muestra los números de línea en el margen del editor.\"],\"ZYnwzF\":[\"Desconectado\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Crear Clave Foránea\"],\"Zf7LHg\":[\"No se encontraron contextos (¿está kubectl instalado?)\"],\"Zfotp5\":[\"Las grandes diferencias entre estimacion y realidad suelen indicar estadisticas desactualizadas o predicados dificiles de modelar.\"],\"ZiFjhs\":[\"Select *\"],\"ZpzHz0\":[\"No se pudieron cargar los esquemas\"],\"ZqXGPF\":[\"Error al eliminar la vista: \"],\"ZuL73E\":[\"Crear una nueva vista de base de datos\"],\"_-bi4r\":[\"Tabla Referenciada\"],\"_AEYGI\":[\"Sin historial de ejecución\"],\"_FdpZc\":[\"Error al cargar la definición de la vista: \"],\"_FxSdi\":[\"Consulta las dependencias open source directas usadas por la app, el backend y la toolchain.\"],\"_JyTG8\":[\"Ingresa el prompt de explicación...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"filas\"],\"_TK1zF\":[\"Conexión guardada\"],\"_bJFBE\":[\"Tiempo de Espera de Conexión\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Árbol\"],\"_dqduX\":[\"Página siguiente\"],\"_fwE6J\":[\"Anteriores\"],\"_n04sB\":[\"Terminar\"],\"_otxbQ\":[\"Archivo de clave\"],\"_pezIT\":[\"Error al conectar a \",[\"0\"],\". Verifica tu configuración o asegúrate de que la base de datos esté en ejecución.\"],\"_srfkj\":[\"Clave personalizada eliminada correctamente\"],\"_t6aFo\":[\"MySQL y MariaDB pueden volver a EXPLAIN FORMAT=JSON o al EXPLAIN tabular segun la version del servidor.\"],\"_xTbaM\":[\"columnas\"],\"_yxaaL\":[\"Índice Único\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.\"],\"a9CASo\":[\"SQLite solo soporta renombrar columnas. Otras modificaciones requieren recrear la tabla manualmente.\"],\"aAIQg2\":[\"Apariencia\"],\"aAURrV\":[\"Instalado\"],\"aC_vCa\":[\"Generar nombre con IA\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Selecciona un nodo para ver detalles\"],\"aHKcKc\":[\"Página anterior\"],\"aI-5wG\":[\"Verificar CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valor Predeterminado\"],\"aScJP1\":[\"Ejecutar esta consulta\"],\"aVNbN8\":[\"Condiciones de filtro\"],\"aWhdMQ\":[\"Usar Conexión SSH Existente\"],\"aXYd8V\":[\"Tiempo de espera\"],\"aX_S_r\":[\"Página \",[\"0\"],\" de \",[\"totalPages\"]],\"agZcf8\":[\"SQL Generado: \",[\"tableName\"]],\"ajqPzi\":[\"Select [campos]\"],\"alplHn\":[\"Analizando plan de ejecucion con IA...\"],\"anBcU3\":[\"Si te gusta tabularis y quieres ver más funcionalidades, considera apoyar el proyecto contribuyendo código, reportando errores o dando una estrella en GitHub.\"],\"arHmj2\":[\"¿Estás seguro de que quieres eliminar esta consulta del historial?\"],\"arKcqW\":[\"Los servidores mas antiguos pueden volver a planes estimados con menos metricas.\"],\"arcpYe\":[\"Aprobación requerida\"],\"aurEkh\":[\"Cargando procesos…\"],\"avtdsd\":[\"Modo SQL\"],\"az8lvo\":[\"Desactivada\"],\"b1Ah3z\":[\"Enfocado en\"],\"b392Dr\":[\"Expandir Todo\"],\"b5S_PU\":[\"Nombre de la Base de Datos\"],\"bAvovP\":[\"Mover Abajo\"],\"bH3JqY\":[\"No se encontraron tablas\"],\"bP5JOn\":[\"Ajuste de Línea\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Hacer todas las consultas MCP de solo lectura\"],\"bmca5u\":[\"Solo escrituras\"],\"bpCiBU\":[\"Permitir escrituras desde MCP\"],\"bqnhqW\":[\"La estimacion supera las filas reales\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Error\"],\"bw22Gk\":[\"Esquema de Columnas\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Puntos Criticos\"],\"cFCKYZ\":[\"Denegar\"],\"cFGrCP\":[\"tabla\"],\"cGeFup\":[\"Tamaño de Fuente\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Enfocar en Tabla\"],\"cM9NHc\":[\"Degradar a\"],\"cO9-2L\":[\"Desactivado\"],\"cSev-j\":[\"Filtros\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importar \",\"#\",\" filas\"],\"other\":[\"Importar \",\"#\",\" filas\"]}]],\"c_xoSn\":[\"Celda \",[\"n\"],\" renombrada\"],\"cd0XEW\":[\"Guardar Consulta\"],\"cnGeoo\":[\"Delete\"],\"cwfPLH\":[\"Grupo Dividido\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" sentencias\"],\"d34vwG\":[\"Cargar Bases de Datos\"],\"d6ynQ7\":[\"Orden descendente\"],\"d8_6_v\":[\"cancelar\"],\"d8wc1_\":[\"Valores de muestra\"],\"dBXoCS\":[\"Se detectó una variable de entorno, pero puedes sobrescribirla estableciendo una clave arriba.\"],\"dD7NPy\":[\"Esquema\"],\"dEgA5A\":[\"Cancelar\"],\"dMtLDE\":[\"hasta\"],\"dPJVhW\":[\"Instalación Fallida\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" sesión\"],\"other\":[\"#\",\" sesiones\"]}]],\"dTUzKm\":[\"Ejecutar seleccionadas (\",[\"0\"],\")\"],\"dU_iQN\":[\"Ninguna sesión coincide con los filtros.\"],\"dUh9QW\":[\"Planificacion\"],\"dVoir2\":[\"Celda Markdown \",[\"n\"],\" añadida\"],\"dZ0d2O\":[\"Selecciona al menos una tabla\"],\"dhi13U\":[\"Elegir imagen…\"],\"dli1JX\":[\"Enviar Cambios\"],\"dmYV6f\":[\"Rutinas\"],\"dohZCo\":[\"Instrucciones para la generación de SQL con IA. Usa \",[\"SCHEMA\"],\" como marcador para la estructura de la base de datos.\"],\"dtxpK2\":[\"Analizar\"],\"dwW9nJ\":[\"Mostrar Números de Línea\"],\"dwWVw_\":[\"Mostrar pantalla de bienvenida\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" pestaña\"],\"other\":[\"#\",\" pestañas\"]}]],\"dxxY9r\":[\"Si existe\"],\"dyN4j9\":[\"Haz clic en 'Ejecutar Vista Previa' para ver resultados\"],\"e07Iz5\":[\"Abrir Administrador de Tareas\"],\"e0NzXu\":[\"Este proyecto es un Work In Progress (WIP). Las funciones principales son estables, pero tenemos grandes planes.\"],\"e1UKxf\":[\"Guardar esta consulta\"],\"e34gdU\":[\"Cuánto espera el subproceso MCP la decisión del usuario antes de fallar.\"],\"e62LQd\":[\"Forzar Cierre\"],\"e6QZsM\":[\"Tema del Editor\"],\"e8CirT\":[\"Ejecutar consulta\"],\"eD2kUP\":[\"Buffers Leidos\"],\"eE0JZ4\":[\"Versión\"],\"eIDch7\":[\"Ingresa el prompt de analisis del plan de ejecucion...\"],\"eIVolo\":[\"Disco L/E\"],\"eJOEBy\":[\"Exportando...\"],\"eKHY3W\":[\"Configuración del Plugin\"],\"eMb6Ub\":[\"Elige un recurso...\"],\"ePK91l\":[\"Editar\"],\"eXweu6\":[\"Expandir Celda\"],\"ecNsTE\":[\"Ninguna consulta coincide con la busqueda\"],\"ecUA8p\":[\"Hoy\"],\"ecpIZP\":[\"Ingresa la frase de paso si la clave está cifrada\"],\"ejmeDY\":[\"Instalados\"],\"esl-Tv\":[\"Tipo de recurso\"],\"exyUec\":[\"Conexión\"],\"f2AJjl\":[\"Eliminar Fila\"],\"f4pD-j\":[\"La prueba de conexión falló\"],\"f7sXvi\":[\"Ingresa la contraseña\"],\"fAsxc0\":[\"Escaneos Secuenciales\"],\"fIeFs0\":[\"Seleccionar Valor...\"],\"fJm92A\":[\"Selecciona un archivo con un plan EXPLAIN (formato JSON o texto de PostgreSQL) para visualizarlo.\"],\"fOuPPd\":[\"Complemento\"],\"fXVIZq\":[\"Valores\"],\"f_b1TA\":[\"Historial de Ejecución\"],\"fghnqP\":[\"Cambiar a conexión 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Coma (,)\"],\"fp711N\":[\"Bloqueada (solo lectura)\"],\"fpzyLj\":[\"Página \",[\"0\"],\" de \",[\"1\"]],\"fuA6oy\":[\"Tiempo de Espera del Socket\"],\"fvImQM\":[[\"0\"],\" seleccionadas\"],\"fwr_nh\":[\"Instala extensiones, gestiona drivers de plugins y mantén bajo control los ajustes de ejecución.\"],\"g0ZzK4\":[\"JSON válido\"],\"g11hAR\":[\"Nueva Fila\"],\"g8VcMm\":[\"Mi clúster de K8s\"],\"gCFR_O\":[\"Ejecución Paralela (Ejecutar Todo)\"],\"gEjU98\":[\"Abrir conexiones\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Se requiere al menos una columna\"],\"gSuQrG\":[\"Ninguna conexión coincide con \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Reejecutar consulta\"],\"gZWMnn\":[\"Analisis IA\"],\"ghYd73\":[\"Elegir destino...\"],\"giAqEC\":[\"Crear Nueva Tabla\"],\"gnQS8X\":[\"Tamaño máximo de paquete usado por el conector MySQL.\"],\"gqV5VL\":[\"Integrado, no personalizable\"],\"gww_XE\":[\"Columna Referenciada\"],\"gxXPJ9\":[\"Configurar Intérprete\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximizar\"],\"h-XNc9\":[\"Delimitador CSV\"],\"h-kNAk\":[\"ej. datos_ventas\"],\"h3Z_aK\":[\"Escribe Markdown aquí...\"],\"h7MgpO\":[\"Atajos de teclado\"],\"h7peZQ\":[\"Permitir\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" proceso del sistema en ejecución\"],\"other\":[\"#\",\" procesos del sistema en ejecución\"]}]],\"hEZrFh\":[\"Ejecutar Archivo SQL...\"],\"hEipgW\":[\"Buscar Actualizaciones Ahora\"],\"hG89Ed\":[\"Imagen\"],\"hIHcBE\":[\"Exportar como CSV\"],\"hItdtk\":[\"Explorar carpeta\"],\"hXFVjo\":[\"El nombre de la tabla es requerido\"],\"hZ6znB\":[\"Puerto\"],\"h_huI6\":[\"Reejecutar\"],\"hbz1rh\":[\"claves\"],\"hdsaJo\":[\"Importando...\"],\"he3ygx\":[\"Copiar\"],\"hfGimp\":[\"Elige un namespace...\"],\"hjjSEi\":[\"Conexiones de solo lectura\"],\"hjwN_s\":[\"Nombre del recurso\"],\"hlF1mD\":[\"Copiar selección\"],\"hnboBb\":[\"Analisis IA del Plan de Ejecucion\"],\"hnvu2p\":[\"Detalles del Error\"],\"hq4-D2\":[\"La clave API se almacena de forma segura en el llavero del sistema. Establecer una clave aquí sobrescribe la variable de entorno.\"],\"hqjXdn\":[\"Error al eliminar la conexión SSH\"],\"hqofAK\":[\"Copiar SQL\"],\"hy6L14\":[\"Ver en GitHub\"],\"hyjACX\":[\"Celdas contraídas/expandidas\"],\"hz1b5W\":[\"No se encontraron elementos coincidentes\"],\"i1vAVM\":[\"Crear nueva tabla\"],\"i3S5T3\":[\"Buscar en favoritos...\"],\"i4_LY_\":[\"Escritura\"],\"i5HBWh\":[\"Historial de consultas restablecido\"],\"i5zCt4\":[\"Tabla\"],\"iAVlge\":[\"Personaliza las instrucciones para la generación de nombres de celda en notebooks con IA. El contenido de la celda (SQL o Markdown) se envía como mensaje del usuario.\"],\"iE1yAB\":[\"Filtrar tablas...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Conectar\"],\"iSryJ2\":[\"Mi Servidor SSH\"],\"iT7UeX\":[\"Agregar Índice\"],\"iUWwuR\":[\"Descargar e Instalar\"],\"ia7i08\":[\"Selecciona primero contexto/namespace/tipo\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Guardado\"],\"igcsfY\":[\"No hay plugins disponibles en el registro.\"],\"ij-Elv\":[\"Vista previa de imagen\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" consultas analizables encontradas\"],\"other\":[\"#\",\" consultas analizables encontradas\"]}]],\"ioL38P\":[\"Monitoriza los procesos de complementos, CPU, RAM y uso de disco en tiempo real\"],\"ixlL_e\":[\"Archivo de Clave SSH (Opcional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Selecciona un modelo\"],\"j3gyYH\":[\"Aplicar todos\"],\"j5CWO4\":[\"Actualizado\"],\"j9HPuI\":[\"Fila #\",[\"0\"]],\"jBtpMP\":[\"Todos los estados\"],\"jEu4bB\":[\"Columnas\"],\"jEyQIs\":[\"No se encontraron rutinas\"],\"jHc1By\":[\"Eliminar Vista\"],\"jI6sj4\":[\"Costo, tiempo y estimaciones de filas suelen no estar disponibles como en PostgreSQL y MySQL.\"],\"jIxQCZ\":[\"No disponible para tu plataforma\"],\"jKIncn\":[\"El nombre de la base de datos es requerido\"],\"jPSk57\":[\"Razón (opcional)\"],\"jUNY_d\":[\"vista\"],\"jVqjDo\":[\"Formato de archivo notebook no válido\"],\"jWSZ-A\":[\"Solo vista previa - datos completos no cargados\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Tiempo de espera del socket en milisegundos.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"El nombre de la conexión es requerido\"],\"jsQZMk\":[\"IA\"],\"juO8wz\":[\"proceso hijo\"],\"jx0t66\":[\"Contraer procesos hijos\"],\"k-0mL-\":[\"Agregar Columna\"],\"k-XiMX\":[\"Sin formato\"],\"k2UnVy\":[\"Cond. Hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"segundos\"],\"kBiBq7\":[\"¿Eliminar el índice \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Mostrar/Ocultar Gráfico\"],\"kI1qVD\":[\"Formatear\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" filas · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Detalles del evento\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registro\"],\"kY-q3P\":[[\"label\"],\" es obligatorio\"],\"kexIdC\":[\"Usar Port-Forward de Kubernetes\"],\"krksx_\":[\"Éxito\"],\"ktYUe9\":[\"Ejecutar todas\"],\"kwY6nh\":[\"Cerrar\"],\"kx0s-n\":[\"Resultados\"],\"kxUEfE\":[\"Error al obtener la definición de la rutina: \"],\"l2Op2p\":[\"Parámetros de Consulta\"],\"l9Ivba\":[\"Procesos de complementos y recursos del sistema\"],\"lBdPxu\":[\"Color de acento\"],\"lCF0wC\":[\"Actualizar\"],\"lEQRwq\":[\"Datos (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nueva tabla creada\"],\"lOekZ3\":[\"Cambiar a Diseño Horizontal\"],\"lUA1C1\":[\"Frase de Paso de Clave SSH (Opcional)\"],\"lVeG20\":[\"Dependencias Rust\"],\"lXAG6D\":[\"Instrucciones para la explicación de consultas con IA. Usa \",[\"LANGUAGE\"],\" como marcador para el idioma de salida.\"],\"lbbYjy\":[\"Edita directamente el archivo de configuración en bruto. Se requiere reinicio para aplicar los cambios.\"],\"lhKW0m\":[\"Celda SQL \",[\"n\"],\" añadida\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Tamaño de Página de Resultados (Límite)\"],\"lkz6PL\":[\"Duración\"],\"lmVGeo\":[\"Agregar Clave Foránea\"],\"lnnx3E\":[\"Conecta Tabularis a Claude Desktop, Cursor y más\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Añadir\"],\"m2Q_r8\":[\"Detectar JSON en columnas de texto\"],\"m2tskz\":[\"Éxito\"],\"mA-qpe\":[\"Ejecución Completada\"],\"mBhhbA\":[\"Registros exportados al portapapeles\"],\"mCNdzH\":[\"Ejecutar Celda\"],\"mO95sp\":[\"Cerrar panel\"],\"mP7dLi\":[\"Ingresa el nombre de la fuente arriba\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloqueado\"],\"other\":[\"#\",\" bloqueados\"]}]],\"mS74ir\":[\"Error al guardar la conexión SSH\"],\"mSqtw8\":[\"Ejecutar Vista Previa\"],\"mURmfQ\":[\"Definición de Vista (SQL)\"],\"mX_isJ\":[\"Vertical\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Estructura (DDL)\"],\"mrk4Cf\":[\"Ordenar por \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Acabamos de abrir una comunidad dedicada a Tabularis: pide ayuda, comparte trucos y da forma al roadmap.\"],\"mtvVdV\":[\"Filas Procesadas\"],\"mx4evv\":[\"Crear Tabla\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Descargar\"],\"n7JDTx\":[\"Instala y activa complementos para verlos aquí\"],\"nDDJir\":[\"Buscar sesión, cliente, conexión…\"],\"nHP-Kr\":[\"No hay sesión activa. Selecciona una conexión.\"],\"nKhCjW\":[\"Seleccionar Tablas\"],\"nNwvm4\":[\"Error\"],\"nOVim5\":[\"Error al guardar la conexión\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Eventos\"],\"nf14vn\":[\"Requiere extensión: \",[\"0\"]],\"ngO6Pv\":[\"Permite que Intro (además de Tab) acepte la sugerencia de autocompletado activa. Cuando está desactivado, Intro siempre inserta una nueva línea.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Crea tu primera conexión\"],\"nohy4m\":[\"Sin actividad MCP registrada.\"],\"nr-axf\":[\"Eliminar Plugin\"],\"nsPFX9\":[\"Abrir en Visual Explain\"],\"nuBbBr\":[\"Gráfico\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Exportar Base de Datos\"],\"o-XJ9D\":[\"Cambiar\"],\"o21Y-P\":[\"entradas\"],\"o3tP_A\":[\"Eliminar Índice\"],\"o45L8r\":[\"Ingresa el nombre de tu conexión\"],\"o53XGh\":[\"Copiar fila(s) seleccionada(s)\"],\"o7J4JM\":[\"Filtro\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Nivel\"],\"oGiIL7\":[\"Proveedor Predeterminado\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Conexión Perdida\"],\"oJlXF2\":[\"Importar Notebook\"],\"oMFv82\":[\"Dividir Vertical\"],\"oOFiQg\":[\"Limita el número de filas obtenidas por consulta para prevenir problemas de rendimiento. Establece en 0 para desactivar (no recomendado).\"],\"oT9ZD3\":[\"Ocultar resumen\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Gráfico cambiado (celda \",[\"n\"],\")\"],\"oWfclW\":[\"Muestra el visor de JSON cuando una celda de texto sin tipar contiene un objeto o array JSON. Añade un pequeño coste de análisis por celda.\"],\"obpbdz\":[\"Archivo de configuración no encontrado (crear manualmente)\"],\"odZgfC\":[\"CLIENTES IA\"],\"ogZhXn\":[\"Elige la dirección de diseño predeterminada para los diagramas ER\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Filas Reales\"],\"olWzar\":[\"Forzar Cierre del Proceso\"],\"ovBPCi\":[\"Predeterminado\"],\"owzTWN\":[\"Modelos de IA actualizados desde los proveedores\"],\"oxYi6j\":[\"Ajusta el tamaño base de fuente usado en la aplicación (10-20px).\"],\"p--hsQ\":[\"Se ha perdido una conexión a la base de datos\"],\"p6NueD\":[\"NUEVA\"],\"pOYHox\":[\"Acciones\"],\"pR9bTR\":[\"Sin datos BLOB\"],\"pS8S5q\":[\"ej. usuarios, pedidos, productos\"],\"pSws_M\":[\"Nombre de Tabla\"],\"pVLbKZ\":[\"Vista creada correctamente\"],\"pWT04I\":[\"Verificando...\"],\"pZJ_6D\":[\"El nombre del índice es requerido\"],\"pddYFG\":[\"Ingresa el prompt de nombre de celda...\"],\"pnpyuD\":[\"Habilitar Registros\"],\"pqKMPv\":[\"Error al crear la tabla: \"],\"pqaP1h\":[\"Descartar\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"ej. Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"El resto sigue en solo lectura. Solo las marcadas pueden ejecutar escrituras.\"],\"qA5jLs\":[\"Detalles del error\"],\"qIrtcK\":[\"Actualizaciones\"],\"qOqy8G\":[\"Verificando configuración...\"],\"qWaVNs\":[\"Guardar y Reiniciar\"],\"qb3LPX\":[\"Ver Diagrama ER\"],\"qkK0vq\":[\"El nombre de la vista es requerido\"],\"qki9tG\":[\"Error\"],\"qoIir-\":[\"La URL base de tu API compatible con OpenAI. Ejemplos: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Contraer todo\"],\"r6ncaO\":[\"Cerrar pestaña\"],\"rAJlpP\":[\"Puerto del contenedor\"],\"rG3WVm\":[\"Lectura\"],\"rGRCeK\":[\"Borrar Historial de Consultas\"],\"rNIto7\":[\"El nombre del recurso es obligatorio\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exportado exitosamente\"],\"rY4sEV\":[\"Eliminar FK\"],\"rbu0nO\":[\"Gestionar Conexiones SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" conexión/es\"],\"other\":[\"#\",\" conexión/es\"]}]],\"rn2_2V\":[\"Eliminar filtro\"],\"roABNH\":[\"Sin historial de consultas\"],\"rtir7c\":[\"desconocido\"],\"ru0-2W\":[\"No hay conexiones activas\"],\"rvDPWO\":[\"Desviacion de Estimacion\"],\"rwWjWg\":[\"Notas de la Versión\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Probar Conexión\"],\"sBOaim\":[\"El archivo de configuración ha sido guardado. ¿Reiniciar ahora para aplicar los cambios?\"],\"sCyv9B\":[\"Actualizar Modelos\"],\"sSUqe4\":[\"Eliminar\"],\"sUBkgN\":[\"Generando SQL...\"],\"sZZG3d\":[\"¿Estás seguro de que deseas importar \\\"\",[\"0\"],\"\\\"?\\nEsto podría sobrescribir los datos existentes.\"],\"sbK5ck\":[\"Buscar en el historial...\"],\"sq_bS6\":[\"Al Eliminar\"],\"suW7-E\":[\"Tiempo de espera de conexión en milisegundos.\"],\"suqtBX\":[\"Esc para cerrar\"],\"t-R8-P\":[\"Ejecucion\"],\"t1OfVY\":[[\"totalLibraries\"],\" librerías\"],\"t2TMzs\":[\"Cerrar Pestaña\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Seleccionar una tabla...\"],\"t7KRl1\":[\"Registro de cada llamada MCP y de las consultas pendientes de aprobación. Almacenado localmente.\"],\"t9NJIk\":[\"Se detectaron operaciones con mucho escaneo\"],\"tB7xof\":[\"Operaciones Temp o Sort\"],\"tBBXTO\":[\"Intervalo de Ping\"],\"tFrT3w\":[\"Agrega esto al archivo de configuración del cliente manualmente si la instalación automática falla.\"],\"tJ7UbA\":[\"analizar seleccionada\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Dividir Horizontal\"],\"tQhW-D\":[\"Configuración de Registros\"],\"tT-BQX\":[\"Instalados\"],\"tXFGEx\":[\"No hay conexiones de Kubernetes guardadas. Haz clic en \\\"Añadir\\\" para crear una.\"],\"tXLz_8\":[\"Eliminar\"],\"tXpRby\":[\"Cuadrícula de datos\"],\"tbysEk\":[\"Acciones\"],\"tdta9X\":[\"Página \",[\"0\"]],\"tfDRzk\":[\"Guardar\"],\"tfEioV\":[\"Ejecutar todas las celdas SQL de arriba a abajo\"],\"tiAIaJ\":[\"Contraseña SSH faltante. Por favor, ingrésala de nuevo.\"],\"tk22BR\":[\"Pega datos estructurados y revisa el esquema antes de importar\"],\"tst44n\":[\"Eventos\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"Archivo SQL ejecutado correctamente\"],\"u6QeR6\":[\"Reiniciar Ahora\"],\"uAQUqI\":[\"Estado\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc para cerrar\"],\"uFViPK\":[\"No hay conexiones SSH disponibles\"],\"uHUuhp\":[\"Analizar esta consulta\"],\"uHfFzS\":[\"Tamaño de Fuente del Editor\"],\"uJ_3K5\":[\"¿Eliminar el notebook \\\"\",[\"0\"],\"\\\"? Esta acción no se puede deshacer.\"],\"uKaNJ3\":[\"Abrir en el editor JSON\"],\"uQBwTo\":[\"Esquemas\"],\"ub54ff\":[\"Centro de plugins\"],\"ufFyBs\":[\"Base de datos exportada correctamente\"],\"upNmR2\":[\"Abrir Barra Lateral\"],\"upwIY4\":[\"Definición de Vista\"],\"utMia3\":[\"Deseleccionar Todo\"],\"uyNaJg\":[\"1 elemento\"],\"v61dnS\":[\"Ingresa el nombre exacto del modelo para tu proveedor compatible con OpenAI.\"],\"v6oeyr\":[\"Instalado\"],\"v75DGg\":[\"Explorar archivo\"],\"v99dO4\":[\"Clave Primaria\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" consultas encontradas\"],\"other\":[\"#\",\" consultas encontradas\"]}]],\"vCSBPD\":[\"Agregar filtro\"],\"vH7uJj\":[\"Ordenar por…\"],\"vUOA1-\":[\"Buscar modelos...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE incluye filas reales, tiempos, bucles y contadores de buffer cuando estan disponibles.\"],\"vXIe7J\":[\"Idioma\"],\"vYf4Jm\":[\"Ingrese una función SQL completa (ej: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Preferido\"],\"vditm4\":[\"Plan de Query\"],\"vks_ls\":[\"Cerrar Otras Pestañas\"],\"vnAnIp\":[\"Modelo \",[\"0\"],\" no encontrado en \",[\"1\"],\". Puede que no funcione correctamente.\"],\"vqoN5u\":[\"Estructura\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Explorador\"],\"vujQJ5\":[\"Localización\"],\"vvJPVL\":[\"Mostrar resumen\"],\"vwI5S4\":[\"Éxito\"],\"vzH-7Z\":[\"Explicar\"],\"w7QmD_\":[\"Ingresa el prompt del sistema...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Tiempo transcurrido\"],\"wCfv2R\":[\"Agregar Conexión\"],\"wGfc86\":[\"Borrar Todo el Historial\"],\"wGwNv4\":[\"Base de datos activa\"],\"wJJ-Wy\":[\"Instalando...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers Hit\"],\"wQn-RM\":[\"Agregar Columna\"],\"wRXcR2\":[\"Usando el icono predeterminado del driver.\"],\"wTOwz-\":[\"Aplicado\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Importar desde Portapapeles\"],\"w_bY7R\":[\"Registros\"],\"wc_8bA\":[\"Pendiente\"],\"wckWOP\":[\"Gestionar\"],\"wdYcKH\":[\"Pestañas Abiertas\"],\"wja8aL\":[\"Sin nombre\"],\"wkOAzk\":[\"Ningún notebook coincide con tu búsqueda.\"],\"wp49Ao\":[\"Failed to process insertions: \"],\"wqG2hQ\":[\"Omitir (no importar)\"],\"wwrAsK\":[\"Por favor, completa todos los campos requeridos\"],\"wwu18a\":[\"Icono\"],\"x2fr_j\":[\"Grafo\"],\"xANKBj\":[\"Funciones\"],\"xBwjck\":[\"Se requiere reinicio para aplicar los cambios.\"],\"xDAtGP\":[\"Mensaje\"],\"xECY01\":[\"Procedimientos\"],\"xGPNgZ\":[\"Personalización de Prompts\"],\"xNgtS-\":[\"No se encontraron vistas\"],\"xOPa1b\":[\"El puerto debe estar entre 1 y 65535\"],\"xY9s5E\":[\"Tiempo agotado\"],\"xaVUr1\":[\"El veloz zorro marrón salta sobre el perro perezoso\"],\"xbvTzL\":[\"Ruta del Archivo\"],\"xlew5F\":[\"Limpiar\"],\"xmNyKz\":[\"Probando...\"],\"xtuh6D\":[\"Expandir Explorador\"],\"y-Zdqj\":[\"Elige un contexto...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Abrir visor JSON\"],\"yQXjG5\":[\"Deseleccionar Todo\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Ayer\"],\"ygCKqB\":[\"Detener\"],\"ykCc6r\":[\"Base de datos cambiada (celda \",[\"n\"],\")\"],\"ynVMSc\":[\"Seleccionar todas\"],\"ytdz1d\":[\"La IA quiere ejecutar una escritura en la base de datos\"],\"yyhzur\":[\"Crear Tabla\"],\"yz7wBu\":[\"Cerrar\"],\"z0VdfR\":[\"rutina\"],\"z407wX\":[\"Contraseña SSH\"],\"z4oF5T\":[\"Exportar Base de Datos\"],\"z5kV0h\":[\"Conexiones\"],\"zBTMzx\":[\"Vista Previa\"],\"zCaAKs\":[\"Error de Actualización\"],\"zDAakK\":[\"No se puede mostrar el diagrama sin un ID de conexión.\"],\"zGe21h\":[\"Esta clave se carga desde una variable de entorno\"],\"zGfL5t\":[\"valor\"],\"zL6-4A\":[\"No hay procesos de complementos en ejecución\"],\"zLZhCi\":[\"¡Nueva comunidad Discord!\"],\"zLlCou\":[\"Copiar nombre de columna\"],\"zNEL34\":[\"Join the Community\"],\"zNgTlV\":[\"Cerrar Pestañas a la Derecha\"],\"zQz55p\":[\"Inspeccionar estructura\"],\"zR0FfH\":[\"Exportado a \",[\"target\"]],\"zRZeOc\":[\"Buscar tablas, vistas, rutinas, triggers...\"],\"zUNMsr\":[\"Clave SSH\"],\"zXMRzb\":[\"Puerto SSH\"],\"zZgoXr\":[\"No hay tablas que coincidan\"],\"zaWbms\":[\"Revertir Cambios\"],\"zgClmU\":[\"Instalar Configuración\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Ingresar valor...\"],\"zvzN4C\":[\"Establecer como Activa\"],\"zzDlyQ\":[\"Éxito\"],\"zzMxrp\":[\"Editar config.json\"],\"zz_Wd_\":[\"Modo\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Máx. Entradas de Historial\"],\"-6AWa-\":[\"Importar conexiones\"],\"-6NyRG\":[\"Cliente\"],\"-K0AvT\":[\"Desconectar\"],\"-PLZfh\":[\"Error al actualizar los modelos\"],\"-T5W2e\":[\"Notas del Driver\"],\"-ZgeeE\":[\"Historial de ediciones\"],\"-aYrdc\":[\"La versión \",[\"0\"],\" está disponible\"],\"-fBGXl\":[\"Costo Mas Alto\"],\"-jIQDz\":[\"Contraer Celda\"],\"-u1eRo\":[\"Sin base de datos\"],\"-yoeVU\":[\"Cargando esquema...\"],\"-zy2Nq\":[\"Tipo\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID aprobación\"],\"0E5-gF\":[\"¿Estás seguro de que deseas eliminar esta conexión?\"],\"0HCubq\":[\"Expandir\"],\"0Kmdvy\":[\"Fuente Personalizada\"],\"0Nj13E\":[\"Generar SQL\"],\"0ROgz5\":[\"Ingrese JSON...\"],\"0SY9sU\":[\"No se pudo desconectar de la base de datos\"],\"0b3kL9\":[\"Selecciona una base de datos\"],\"0caMy7\":[\"Historial\"],\"0mx5ow\":[\"Consulta\"],\"0n9BtL\":[\"Vista Previa\"],\"0pHB9N\":[\"Copiar como tabla.columna\"],\"0sQzZK\":[\"Filtrar bases de datos...\"],\"0uPP9X\":[\"Nombre FK (Opcional)\"],\"0wxuek\":[\"Versión Actual\"],\"0x09Aw\":[\"Detener en error alternado\"],\"0yBP6v\":[\"Apoya el Desarrollo\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas\"],\"other\":[\"#\",\" filas\"]}]],\"0yVAoD\":[\"Contar filas\"],\"0zxJ87\":[\"No hay registros disponibles\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Editar Vista\"],\"11fGJ6\":[\"Consultas\"],\"13hIUA\":[\"Clave API de \",[\"0\"]],\"14qNWF\":[\"Seleccionar Conexión SSH\"],\"17qHRP\":[\"Nueva conexión\"],\"1Dn6bg\":[\"Importar desde Portapapeles\"],\"1Dnd0I\":[\"Cargar conteo de filas\"],\"1FjTLW\":[\"p.ej. python3\"],\"1GOvbo\":[\"Ollama conectado (\",[\"0\"],\" modelos encontrados)\"],\"1I6UoR\":[\"Vistas\"],\"1U7hS5\":[\"Long\"],\"1UTmg5\":[\"Paquete Máximo Permitido\"],\"1b7aSU\":[\"Fuente del Editor\"],\"1ekzlY\":[\"Procesos de Complementos\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Selección de Tema\"],\"1xVZkL\":[\"No se encontraron modelos\"],\"26Joci\":[[\"0\"],\" filas obtenidas\"],\"2Bf-Qe\":[\"Nueva consola\"],\"2CrSmP\":[\"Help tabularis grow\"],\"2D9F8_\":[\"Error al duplicar la conexión\"],\"2Eoi_a\":[\"Ver detalles\"],\"2F4pE5\":[\"Build y Test Rust\"],\"2Fsd9r\":[\"Este Mes\"],\"2JzKXI\":[\"Set GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Seleccionar Todo\"],\"2SO5RM\":[\"Kubernetes no está disponible para este controlador.\"],\"2Uh5GA\":[\"ecosistema Cargo\"],\"2YylFp\":[\"Nueva Consulta Visual\"],\"2luuSG\":[\"Reintentar\"],\"2wxgft\":[\"Renombrar\"],\"2yG2GC\":[\"Pausa las escrituras (o todas las consultas) y pide al usuario que apruebe antes de ejecutar.\"],\"30-b5r\":[\"Eliminar\"],\"31kwdN\":[\"Duplicar filtro\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Todas las herramientas\"],\"3Am5DS\":[\"Vista en pestañas\"],\"3FVg9_\":[\"Columna Local\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Ejecutar\"],\"3L0HCz\":[\"Ningún plugin coincide con la búsqueda.\"],\"3Nv3JV\":[\"Ejecutando consulta...\"],\"3TSz9S\":[\"Minimizar\"],\"3UW8fG\":[\"Actualizaciones gestionadas por \",[\"0\"]],\"3YvS-c\":[\"Nueva pestaña\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt Nombre de Celda Notebook\"],\"3qkggm\":[\"Pantalla Completa\"],\"3rBJ1T\":[\"Ver Esquema\"],\"3xZ-xV\":[\"Insertar marca de tiempo actual\"],\"40Gx0U\":[\"Zona Horaria\"],\"41GP4f\":[\"Elige el delimitador predeterminado utilizado al copiar o exportar filas en formato CSV.\"],\"42iaEi\":[\"PostgreSQL sin ANALYZE muestra solo estimaciones del planner.\"],\"44cXI8\":[\"Ordenar por \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gestionar Bases de Datos\"],\"4CK17g\":[\"¿Estás seguro de que deseas modificar la vista \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Selecciona al menos una base de datos\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Exportar como HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" proceso hijo\"],\"other\":[\"#\",\" procesos hijos\"]}]],\"4TtbAT\":[\"Fetch the latest translations from the cloud without waiting for an app update.\"],\"4VyuY3\":[\"¿Estás seguro de que deseas borrar todos los registros?\"],\"4WWqS3\":[\"Expandir/contraer árbol JSON\"],\"4XAQdl\":[\"Crear Índice\"],\"4cEClj\":[\"Sesiones\"],\"4cmfYp\":[\"Duplicar Fila\"],\"4hsr6d\":[\"Crear Vista\"],\"4lIZTB\":[\"Dependencias Dev Frontend\"],\"4oYjvJ\":[\"Buscar en la consulta…\"],\"4tMxW4\":[\"Vista previa del registro relacionado\"],\"4yJcjm\":[\"Selecciona tipo...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Cerrar panel de filtros (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Punto y coma (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" evento\"],\"other\":[\"#\",\" eventos\"]}]],\"5I2fxu\":[\"/ruta/a/id_rsa\"],\"5NZpX8\":[\"Vista de lista\"],\"5To6Z6\":[\"Copiar consulta\"],\"5gqNQl\":[\"Vista de cuadrícula\"],\"5igIzr\":[\"Importación cancelada\"],\"5nTIup\":[\"Editando vista: \",[\"name\"]],\"5qIe8E\":[\"Ejecutar Todo\"],\"66bEht\":[\"Estado del Proyecto\"],\"6PIJVc\":[\"Inicio\"],\"6QvP0l\":[\"Exportar como JSON\"],\"6W41Xq\":[\"Administrador de Tareas\"],\"6WngBH\":[\"Set NULL\"],\"6YtxFj\":[\"Nombre\"],\"6_dCYd\":[\"Resumen\"],\"6dOBsk\":[\"Crear Vista\"],\"6gvoHP\":[\"Copiar mensaje de error\"],\"6oCVzX\":[\"El contexto de Kubernetes es obligatorio\"],\"6wQO0f\":[\"Mostrar Datos\"],\"6z9W13\":[\"Reiniciar\"],\"71agNy\":[\"Generar nombres para celdas sin nombre con IA\"],\"74J3FG\":[\"Versión inicial\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Got it\"],\"77nSMU\":[\"¿Borrar todo el historial de actividad IA? Esta acción es irreversible.\"],\"7ABmyQ\":[\"Reintentar\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" de \",[\"0\"],\" activos\"],\"7E864M\":[\"Tipo de Base de Datos\"],\"7FqaG1\":[\"Personaliza las instrucciones para el analisis IA de los planes EXPLAIN. Usa \",[\"LANGUAGE\"],\" para el idioma de salida.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Tipos mixtos detectados, por defecto TEXT\"],\"7RSQQd\":[\"Guardar contraseñas en el Llavero\"],\"7VpPHA\":[\"Confirmar\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fallidas\"],\"7sMeHQ\":[\"Clave\"],\"7sNhEz\":[\"Usuario\"],\"7tATh2\":[\"Ejecutar Consulta\"],\"7yb4gk\":[\"Error: \"],\"8-4V8D\":[\"Tablas\"],\"82G-l5\":[\"El Model Context Protocol (MCP) permite a los asistentes de IA (como Claude) conectarse a tus herramientas locales. Tabularis expone un servidor MCP que permite a la IA leer el esquema de tu base de datos y ejecutar consultas de forma segura.\"],\"83VjWE\":[\"Nuevo Notebook\"],\"86IgoU\":[\"Ejecutar consulta (en el editor)\"],\"86fCgf\":[\"Personaliza las instrucciones para la generación de nombres de pestañas de resultados de consulta con IA. La consulta SQL se envía como mensaje del usuario.\"],\"87a_t_\":[\"Etiqueta\"],\"87kWsr\":[\"Exportar conexiones\"],\"8CWirf\":[\"Servidor MCP\"],\"8S8aIX\":[\"Verificación de Conexión\"],\"8TMaZI\":[\"Marca de Tiempo\"],\"8Tg_JR\":[\"Personalizado\"],\"8UFKYr\":[\"Seleccionar consulta a ejecutar\"],\"8VKSGV\":[\"Generar SQL\"],\"8Wjy6z\":[\"Cerrar Pestañas a la Izquierda\"],\"8ZsakT\":[\"Contraseña\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Editor SQL\"],\"8bRgTe\":[\"Proveedor de IA no configurado. Ve a Configuracion > IA.\"],\"8c_W0h\":[\"Versiones anteriores\"],\"8guEQP\":[\"Actualizar Vistas\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN es ligero y principalmente estructural.\"],\"8q_sOc\":[\"Quitar\"],\"8t-akp\":[\"primeras \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nombre de Conexión\"],\"91gnWY\":[\"Exportar Registros\"],\"91rtHL\":[\"Crear Nueva Vista\"],\"92hf9a\":[\"Quitar\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vista actualizada correctamente\"],\"9NzDFn\":[\"Mostrar la pantalla de bienvenida al iniciar la aplicación.\"],\"9OoUS3\":[\"Crear Nueva Conexión SSH\"],\"9QGRD5\":[\"Columna destino\"],\"9QTny9\":[\"La consulta falló.\"],\"9S-fyV\":[\"Plan de ejecución previo\"],\"9SJ_Sx\":[\"Recursos del Sistema\"],\"9UQ730\":[\"Clonar\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"No hay datos en el portapapeles\"],\"9hGjL2\":[\"Crear Índice\"],\"9mMU1R\":[\"Tiempo\"],\"9mvFo_\":[\"Hora\"],\"9npOH9\":[\"Abrir archivo\"],\"9uI_rE\":[\"Deshacer\"],\"9xUjzm\":[\"Seleccionar Todo\"],\"9y_02p\":[\"Chat with the community, get help, suggest features\"],\"A1pPcI\":[\"Host SSH\"],\"A1taO8\":[\"Buscar\"],\"A6C0pv\":[\"Costo Total\"],\"A7WG0p\":[\"Plugin desactivado\"],\"A7yRz3\":[\"La definición de la vista es requerida\"],\"A9Uyp6\":[\"Error en la importación: \"],\"ABEd-z\":[\"Usa tu gestor de paquetes para actualizar Tabularis.\"],\"AMdgKV\":[\"Prompt Analisis del Plan de Ejecucion\"],\"ANSTMe\":[\"No se detectaron problemas importantes en el resumen actual del plan.\"],\"ANzIr7\":[\"Historial de Consultas\"],\"AOnaU7\":[\"omitidas\"],\"AVlZoM\":[\"Variable de Entorno\"],\"AXTVsE\":[\"Verificación completa\"],\"AXdRYR\":[\"Registros Actuales\"],\"Aa-YkQ\":[\"Exportar Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filtrar por nivel\"],\"AlPiMN\":[\"Clic para ir a la página\"],\"An-1rA\":[\"Filas devueltas\"],\"AnV8j-\":[\"Modificar Columna\"],\"AvEr_L\":[\"Nueva Consola\"],\"AvYbUL\":[\"Estrella en GitHub\"],\"Aw_eOs\":[\"Requiere Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No se encontraron resultados\"],\"B0mJGb\":[\"Salida Sin Procesar\"],\"B1c58n\":[\"Modificar Columna\"],\"B3toQF\":[\"Objetos\"],\"B5nKny\":[\"/ruta/absoluta/carpeta\"],\"B5xevr\":[\"El nombre de la conexión es obligatorio\"],\"BAVvWJ\":[\"Diagrama ER\"],\"BBtVak\":[\"Contraer Todo\"],\"BEVzjL\":[\"Importación fallida\"],\"BHATjK\":[\"Exportar conexiones\"],\"BJe2lZ\":[\"Mostrar/ocultar barra lateral\"],\"BK3WCj\":[\"Error al cargar el registro\"],\"BKbO3i\":[\"Notebook editado\"],\"BMB51y\":[\"Ejecutar en consola\"],\"BNW_Z4\":[\"ej. usuarios_activos, resumen_pedidos\"],\"BPkXj7\":[\"Crear Clave Foránea\"],\"BUO_JN\":[\"Copiar Consulta\"],\"BYkhHY\":[\"Buscar actualizaciones al inicio\"],\"BeSg6-\":[\"Recopilar registros de la aplicación en memoria para depuración\"],\"BgAyQH\":[\"Quitar ordenamiento\"],\"BinTJI\":[\"ecosistema npm\"],\"BkFson\":[\"Paginación automática\"],\"Bpglf1\":[\"Mover Arriba\"],\"BrGo6h\":[\"Buscar notebooks\"],\"BxiAN_\":[\"Eliminar Consulta\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dependencias Frontend\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Sin filtros —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Descargando...\"],\"CUxwxn\":[\"Mostrar Todas las Tablas\"],\"CWMXbw\":[\"detendrá forzosamente su proceso. Todas las conexiones de base de datos activas que usen este complemento dejarán de funcionar hasta que se reinicie el complemento.\"],\"CZt6BX\":[\"CONFIGURACIÓN MANUAL\"],\"Ca8ixZ\":[\"Eliminar\"],\"CbJBQS\":[\"Error en la actualización: \"],\"Cdz-YU\":[\"Vista apilada\"],\"CpeQf9\":[\"Ciclos\"],\"D2wXBw\":[\"Auto Incremento\"],\"D6Ql0c\":[\"Selecciona el modelo a utilizar para la generación y explicación.\"],\"DB8zMK\":[\"Aplicar\"],\"DDXf5E\":[\"Funciones SQL\"],\"DEwnwi\":[\"Eliminar\"],\"DNTvdl\":[\"Abrir en el Editor\"],\"DPc2P9\":[\"Eliminar Celda\"],\"DUY8Ba\":[\"Breaking Changes\"],\"DVnBSM\":[\"Altura de Línea\"],\"Dd7YLj\":[\"Maybe later\"],\"Deej3j\":[\"JSON no válido\"],\"DfKhk_\":[\"Actualizar\"],\"DiRiTz\":[\"Abrir página del paquete\"],\"DlRHAD\":[\"Ejecutando EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" error\"],\"other\":[\"#\",\" errores\"]}]],\"Dvdihe\":[\"En \",[\"0\"],\" — revisa y decide antes de ejecutar.\"],\"DzFLzw\":[\"SÍ\"],\"E-JUtQ\":[\"Puerta de aprobación\"],\"E0kcnZ\":[\"General\"],\"E2mje_\":[\"Seleccionar consulta a analizar\"],\"EDieyg\":[\"¿Estás seguro de que deseas eliminar esta conexión SSH?\"],\"EHZxPj\":[\"Expandir\"],\"EL4oDO\":[\"Nueva Versión Disponible\"],\"EPi4gT\":[\"Ordenar por \",[\"field\"]],\"EWPtMO\":[\"Código\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Desconocido\"],\"EhADgB\":[\"Eliminar Columna\"],\"EkH9pt\":[\"Update\"],\"Ekblrc\":[\"Estás actualizado\"],\"Em6JFd\":[\"Contar Filas\"],\"EnGiqG\":[[\"0\"],\" elementos\"],\"Ew1n5z\":[\"Buscar plugins…\"],\"F18WP3\":[\"Parámetros\"],\"F3uc1x\":[\"El archivo exportado contendrá tus contraseñas de base de datos y SSH en texto plano. Guárdalo de forma segura.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" filas\"],\"other\":[\"#\",\" filas\"]}]],\"F6pfE9\":[\"Activa\"],\"F8tXg7\":[\"Vista Previa de Datos\"],\"F9-6yK\":[\"Formato de copia predeterminado\"],\"F9lxfG\":[\"Eliminar\"],\"F9nsa2\":[\"El archivo de historial estaba corrupto y se ha movido a un respaldo. Las nuevas consultas se registrarán con normalidad. Archivo de respaldo:\"],\"FF_oap\":[\"Predeterminado\"],\"FK8rlP\":[\"No hay conexiones SSH configuradas\"],\"FMRcH8\":[\"Primera fila como encabezado\"],\"FNvDMc\":[\"Esta Semana\"],\"FQe1FI\":[\"Filas Est.\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operacion\"],\"Fa_cky\":[\"Esquema: \",[\"tableName\"]],\"FpEL5o\":[\"Elige un tema independiente para el editor SQL, o mantenlo sincronizado con el tema de la app.\"],\"FsvZQL\":[\"Celda \",[\"n\"],\" editada\"],\"FtwKL9\":[\"Cambiar pestaña\"],\"FznI3z\":[\"¿Eliminar la clave foránea \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Error en la vista previa: \"],\"G8Q5Zq\":[\"El namespace es obligatorio\"],\"GAohqx\":[\"Eliminar columna\"],\"GJR99u\":[\"Error al eliminar la columna: \"],\"GKfzzM\":[\"Elige una conexión...\"],\"GS-Mus\":[\"Exportar\"],\"GUaLUq\":[\"Error al cargar el esquema: \"],\"GXP-Iw\":[\"Agregar Celda SQL\"],\"Gj1mLb\":[\"Celdas reordenadas\"],\"GlbqG2\":[\"Restablecer al valor predeterminado\"],\"Gq1YzP\":[\"Eventos\"],\"Gs5AlY\":[\"Abierta\"],\"GtmO8_\":[\"desde\"],\"GxkJXS\":[\"Subiendo...\"],\"H-o4D2\":[\"Crear nueva columna\"],\"H2B-KW\":[\"Elige el formato predeterminado al copiar filas con Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Rehacer\"],\"H7mlCc\":[\"/ruta/absoluta/db.sqlite\"],\"H86f9p\":[\"Contraer\"],\"H9HlDe\":[\"minutes\"],\"H9P8CD\":[\"agregar el primer filtro\"],\"HAQlGl\":[\"Actividad IA\"],\"HKNZrs\":[\"Cond. Indice\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Eliminar \",\"#\",\" filas\"],\"other\":[\"Eliminar \",\"#\",\" filas\"]}]],\"HPuCiP\":[\"Ruta de la Carpeta\"],\"HUs1R3\":[\"No hay pestañas abiertas para esta conexión.\"],\"HV4Isp\":[\"Ingresa la contraseña SSH\"],\"HVC8Hh\":[\"Copiado al portapapeles\"],\"HWEpq8\":[\"Escritura Disco/s\"],\"HY4nP5\":[\"En línea\"],\"HcmoWv\":[\"Error al guardar la vista: \"],\"He8v1Y\":[\"Deseleccionar de Aplicar todos\"],\"HehHP1\":[\"Diseño Predeterminado\"],\"HilYn4\":[\"Este notebook está vacío. Agrega una celda para comenzar.\"],\"HjxVK_\":[\"Prueba rápida de conexión\"],\"HmMnRx\":[\"Modo WKT\"],\"HoKCiI\":[\"La aplicación se reiniciará automáticamente después de la instalación\"],\"HpK_8d\":[\"Recargar\"],\"Hpi4Jm\":[\"Únete ahora\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configurar SSH en Línea\"],\"I5VBsr\":[\"Igual que la app\"],\"I8yrPb\":[\"Reemplazar tabla\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Recordar Después\"],\"I99Miw\":[\"Costo\"],\"IETZIR\":[\"Editar nombre de celda\"],\"IG9wzA\":[\"Error al insertar la fila: \"],\"ILleOG\":[\"El tipo de recurso debe ser \\\"service\\\" o \\\"pod\\\"\"],\"IQ3gAw\":[\"Subir Archivo\"],\"IUwGEM\":[\"Guardar Cambios\"],\"IUwmLq\":[\"Dependencias directas declaradas en package.json y src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Librerías Open Source\"],\"I_43p6\":[\"Seguridad\"],\"Iaizf4\":[\"Apariencia\"],\"Il3FBB\":[\"Panel de filtros estructurados\"],\"IniZRK\":[\"Descarga no disponible - solo vista previa cargada\"],\"Isaozb\":[\"Revisar y ajustar\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Las consultas activas y las conexiones a través de este complemento serán interrumpidas.\"],\"J6v1s_\":[\"Modelo Predeterminado\"],\"JE-DVk\":[\"Intérprete\"],\"JEGlfK\":[\"Inicio\"],\"JKDPqP\":[\"Selecciona primero un contexto\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Usar Túnel SSH\"],\"JRz8tw\":[\"MySQL y MariaDB exponen metricas reales solo en variantes compatibles de EXPLAIN ANALYZE o ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP o SVG · máx. 512 KB\"],\"JY5Oyv\":[\"Base de datos\"],\"JlFRIB\":[\"Zona horaria de sesión enviada a MySQL después de conectar.\"],\"JrOEip\":[\"Vista previa\"],\"JsY1p5\":[\"Denegada\"],\"K3H9p5\":[\"Limpiar\"],\"K5Dgu_\":[\"Bases de Datos\"],\"K8IGKf\":[\"Tipo de Autenticación\"],\"KAYNSW\":[\"Cuántos registros mantener en memoria (1-10000)\"],\"KHTGbr\":[\"EXPLAIN previo\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copiar como `columna`\"],\"KM5Kc8\":[\"Se debe seleccionar al menos una columna\"],\"KSCnVQ\":[\"Tipo\"],\"KUjOb9\":[\"en ejecución\"],\"KXBdwy\":[\"Actualizar Rutinas\"],\"KXNyX7\":[\"Set DEFAULT\"],\"Kd70-v\":[\"Importar desde Portapapeles...\"],\"KhI4oS\":[\"Abrir fila referenciada en \",[\"0\"]],\"KhgrNu\":[\"Integración del Servidor MCP\"],\"KirERL\":[\"Tiempo agotado\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Error al eliminar el índice: \"],\"KzeARD\":[\"Error al eliminar la tabla: \"],\"L-rMC9\":[\"Restablecer predeterminado\"],\"L3HXkQ\":[\"Bug Fixes\"],\"LCZ7Dy\":[\"Copiar Nombre\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"índices\"],\"LMeAoR\":[\"filas\"],\"LPCdc-\":[\"Prompt Nombre de Pestaña de Consulta\"],\"LPFmga\":[\"Seleccionar para Aplicar todos\"],\"LYzbQ2\":[\"Herramienta\"],\"Lbis_V\":[\"Navegador rápido\"],\"Lcpbe2\":[\"No se pudo lanzar el proceso del plugin. Revisa los detalles del error.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN solo es compatible con instrucciones DML (SELECT, INSERT, UPDATE, DELETE). Las instrucciones DDL como CREATE, DROP o ALTER no se pueden analizar.\"],\"LnT0hQ\":[\"Agregar Columna\"],\"LvutiO\":[\"Sugerir con IA\"],\"M-rHQO\":[\"Salir de Pantalla Completa\"],\"M0XJba\":[\"¿Estás seguro de que quieres borrar todo el historial de consultas para esta conexión?\"],\"M1co_O\":[\"Configurado\"],\"M73whl\":[\"Contexto\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Emoji seleccionado\"],\"MWB7fV\":[\"Mostrar Todo\"],\"MXdOwj\":[\"Separar Conexiones\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Selecciona conexión de K8s\"],\"Mc1tjS\":[\"Activa ANALYZE para inspeccionar filas reales, tiempos, bucles y buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" filas más\"],\"Mp0jQ_\":[\"Este driver solo soporta claves primarias en la creación de la tabla\"],\"MqpZwN\":[\"Proceso Tabularis\"],\"MxIx43\":[\"↑↓ para navegar, Enter para abrir\"],\"MygtgQ\":[\"Agregar Celda Markdown\"],\"N40H-G\":[\"Todos\"],\"N5UQxq\":[\"Ollama no detectado en el puerto \",[\"0\"],\". ¿Está en ejecución?\"],\"N6GBcC\":[\"Confirmar eliminación\"],\"N6aqHp\":[\"Consultas ejecutadas\"],\"N9_S15\":[\"Se creará una nueva tabla\"],\"NBdMa1\":[\"Paso Mas Lento\"],\"NC2AI2\":[\"Longitud\"],\"NCzNnx\":[\"Orden ascendente\"],\"NT4Ubs\":[\"Eliminar clave personalizada y volver a la variable de entorno (si existe)\"],\"NUjrCO\":[\"Ningun favorito coincide con la busqueda\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Total árbol: \",[\"0\"]],\"Nc2VQn\":[\"Agregar a existente\"],\"NgFERn\":[\"Agregar a Favoritos\"],\"NktMHG\":[\"Nombre de la base de datos\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Probar\"],\"Nq5QTk\":[\"analizar N-esima\"],\"O2STgu\":[\"Error en la exportación: \"],\"O8SV8O\":[\"Descargando...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Ejecutar Todas las Celdas\"],\"OGWdBg\":[\"Nombre de Vista\"],\"OHqT6w\":[\"Pulsa la combinación de teclas...\"],\"OXJsaG\":[\"Nombre de parámetro no válido\"],\"OfhWJH\":[\"Restablecer\"],\"OlAl5i\":[\"Expandir todo\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Join Discord\"],\"P1YGsb\":[\"Generación SQL\"],\"P2m1xb\":[\"Detener en Error\"],\"P3Qlys\":[\"Sin ID de Conexión\"],\"P6Y3Yf\":[\"Ejecuta este comando en tu terminal y reinicia Claude Code.\"],\"PCdj-c\":[\"Deseleccionar todas\"],\"PMnFt9\":[\"Lectura Disco/s\"],\"PQU2Va\":[\"Aceptar Sugerencia con Intro\"],\"PRnH8G\":[\"de \",[\"0\"]],\"PY8UF3\":[\"Paralelo alternado (celda \",[\"n\"],\")\"],\"PiH3UR\":[\"¡Copiado!\"],\"Pia95d\":[\"El nombre de la columna es requerido\"],\"PrElXQ\":[\"Actualizar\"],\"PrixCC\":[\"Las filas se añadirán a una tabla existente\"],\"Pujgbb\":[\"Configurar destino\"],\"Pw_eQV\":[\"El Plugin no se pudo iniciar\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"No hay consultas guardadas\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Sin procesos hijos\"],\"QCxMC0\":[\"Buscar automáticamente nuevas versiones al iniciar la aplicación\"],\"QEazml\":[\"Eliminar seleccionadas\"],\"QHcLEN\":[\"Conectado\"],\"QLHHFO\":[\"Modo solo lectura\"],\"QOvAW3\":[\"New Features\"],\"QULGRi\":[\"No se encontraron consultas válidas\"],\"QZwllF\":[\"Explorar...\"],\"QbkSr_\":[\"EXPLAIN no disponible para esta consulta.\"],\"QeHFYZ\":[\"EXPLAIN falló: \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"Read more\"],\"Qu4Hog\":[\"Notebook importado exitosamente\"],\"R-A2Vd\":[\"No hay datos para mostrar\"],\"R0Hkb2\":[[\"0\"],\" base(s) de datos seleccionada(s)\"],\"R1nHhB\":[\"Ya existe\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convertir a Consola\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configuración\"],\"RF-HyV\":[\"Elige tu idioma preferido. 'Auto' usará el idioma del sistema.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copiar nombre\"],\"RI-HZc\":[\"Ingresa la Clave de \",[\"0\"]],\"RJrE17\":[\"¿Estás seguro de que deseas eliminar la vista \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"A star helps others discover the project\"],\"Rb3Tdm\":[\"Nombre del notebook\"],\"RcbKJ3\":[\"Al Actualizar\"],\"RkefFq\":[\"Ejecuta un EXPLAIN antes de mostrar el modal para que el usuario vea el plan.\"],\"RnF_hl\":[\"Cargando registro de plugins...\"],\"Rns7_C\":[\"Esta acción no se puede deshacer inmediatamente\"],\"RoKRqW\":[\"Plugins Disponibles\"],\"RphpKk\":[\"Apariencia\"],\"Rt8sHM\":[\"Se detecto trabajo temporal o de ordenacion\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Habilitados\"],\"S1veKH\":[\"Revert Selected\"],\"S5zeZU\":[\"Vista Previa\"],\"S8Yqbl\":[\"Insertar\"],\"SDND4q\":[\"No configurado\"],\"SJRy3D\":[\"(Auto-generado)\"],\"SSwIjo\":[\"Set EMPTY\"],\"SgvA_r\":[\"Press Run (Ctrl/Command+F5) to load table data\"],\"SlfejT\":[\"Error\"],\"SoATkx\":[\"Copiar Celda\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL del Endpoint\"],\"T7w5CQ\":[\"Failed to create new row: \"],\"T9947j\":[\"Valor (ej. 'texto' o 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Cambiar a Diseño Vertical\"],\"TK5oex\":[\"Guardar Prompt\"],\"TKQ7K-\":[\"Instalar\"],\"TKZreP\":[\"Requerido\"],\"TMLAx2\":[\"Requerido\"],\"TO08JI\":[\"claves foráneas\"],\"TVKqvO\":[\"Editar Fila\"],\"TYSdQ3\":[\"Ejecutar consulta SELECT\"],\"TfDFHS\":[\"Ajusta las líneas largas en el editor en vez de desplazarse horizontalmente.\"],\"Tibfjs\":[\"No hay conexiones guardadas — crea una abajo\"],\"Tj36Dr\":[\"Restablecer Predeterminado\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Bloquear consulta\"],\"TpwXyg\":[\"Si falta el tiempo, es probable que el servidor devolviera un plan solo estimado.\"],\"Tw2M1h\":[\"Instalación fallida\"],\"Ty-rm9\":[\"Conexiones SSH\"],\"Tz0i8g\":[\"Configuración\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Conexiones de Kubernetes\"],\"U4uzyV\":[\"What's New\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Detener la ejecución cuando una celda falla\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" en \",[\"1\"],\" — revisa y decide antes de ejecutar.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"¡Configuración instalada correctamente para \",[\"clientName\"],\"! Reinicia la app para aplicar.\"],\"URmyfc\":[\"Detalles\"],\"UWQBvp\":[\"Generar plantillas SQL\"],\"UawTKZ\":[\"Opcional. Especifica el ejecutable para iniciar este plugin (p.ej. python3 en macOS/Linux, python o ruta completa en Windows). Deja en blanco para usar el valor predeterminado.\"],\"Ub8sf5\":[\"SQLite no soporta la eliminación de FKs mediante ALTER TABLE.\"],\"UbbJ8j\":[\"No se encontraron opciones\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"Estas conexiones rechazarán escrituras desde MCP. Las otras se comportan normalmente.\"],\"UnQNah\":[\"¿Estás seguro de que deseas eliminar la columna \\\"\",[\"0\"],\"\\\" de la tabla \\\"\",[\"tableName\"],\"\\\"?\\n\\nADVERTENCIA: Esto eliminará permanentemente todos los datos de esta columna. Esta acción no se puede deshacer.\"],\"UncTTh\":[\"Suma de RSS del árbol de procesos — puede sobreestimar la memoria compartida\"],\"UpjgFm\":[\"Parámetros cambiados\"],\"UsAnu1\":[\"ANALYZE ejecuta la consulta. Usar con precaucion en instrucciones que modifican datos.\"],\"UxKoFf\":[\"Navegación\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tamaño de Tab\"],\"UzWGWO\":[\"Cambiar a entrada SQL WHERE\"],\"V-chk5\":[\"Frecuencia con la que se verifica si las conexiones activas siguen disponibles. Establece 0 para desactivar.\"],\"V-pw1j\":[\"Nombre de tabla\"],\"V2T0Uw\":[\"Aún no hay notebooks guardados.\"],\"V3aNwx\":[\"Editor de Datos\"],\"VGYp2r\":[\"Aplicar a todo\"],\"VH8S7x\":[\"Columna del portapapeles\"],\"VIAEcS\":[\"Error al cargar las bases de datos. Verifica tus credenciales.\"],\"VKdztF\":[\"Agregar filas\"],\"VLiHXI\":[\"Datos Analyze\"],\"VMbmXc\":[\"¿Estás seguro de que deseas eliminar \\\"\",[\"pluginName\"],\"\\\"? Los archivos del plugin serán eliminados.\"],\"VO3weF\":[\"Ningún archivo cargado\"],\"VOZlKc\":[\"Importar Base de Datos\"],\"VPzsIz\":[\"Generando nombre...\"],\"VUul0v\":[\"Cerrar\"],\"VW0GVQ\":[\"Haz clic en otro emoji abajo para cambiarlo.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Todas las consultas\"],\"Vi2Pqx\":[\"por\"],\"Vl2zn2\":[\"detenido\"],\"Vo4uBA\":[\"Ocurrió un error al instalar el plugin. Consulta los detalles a continuación.\"],\"VqqyOs\":[\"Ejecuta una consulta para ver resultados\"],\"VzhDFh\":[\"Bloquea cualquier sentencia que no sea SELECT vía MCP, salvo las conexiones autorizadas abajo.\"],\"W3uwpT\":[\"Cerrar Todas las Pestañas\"],\"W4MKLh\":[\"ej. Parece arriesgada en prod, confirma…\"],\"W60eXm\":[\"Tabla\"],\"WA8RND\":[\"¿Estás seguro de que deseas eliminar la tabla \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Eliminar Tabla\"],\"WLnvCZ\":[\"Ingresa el nombre de usuario\"],\"WM-__8\":[\"Buscar conexiones...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas importadas en \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" filas importadas en \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"¿Estás seguro de que quieres eliminar la consulta \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"exitosas\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"General\"],\"WmPpB1\":[\"Cargando el plan de ejecución…\"],\"Wu7cK0\":[\"No se encontraron bases de datos\"],\"WvoUQF\":[\"Celda \",[\"n\"],\" eliminada\"],\"Ww3pDD\":[\"COMANDO MANUAL\"],\"X-20AU\":[\"Ingresa el prompt de nombre de pestaña...\"],\"X-U6_w\":[\"Familia de Fuente\"],\"X5fs0g\":[\"Crea tu primera conexión para empezar.\"],\"X7Ayjp\":[\"Contraseña guardada en el llavero del sistema\"],\"X9kySA\":[\"Favoritos\"],\"XJOV1Y\":[\"Actividad\"],\"XMCLEL\":[\"Create New Trigger\"],\"XN_sSd\":[\"Automatic updates\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Explicación de Consultas\"],\"XVF2Pf\":[\"Editar Esquemas\"],\"XW6OYF\":[\"Este plugin puede requerir un intérprete (p.ej. Python). Usa Configuración del Plugin para establecer la ruta del intérprete.\"],\"XZB6Xr\":[\"Máximo de Entradas de Registro\"],\"Xcffv2\":[\"Mostrar los botones de Asistente IA y Explicar en el editor\"],\"XeqTSh\":[\"Tipo Join\"],\"XmJfZT\":[\"nombre\"],\"XoQfG1\":[\"Usuario SSH\"],\"XwI0Vw\":[\"Auto (Sistema)\"],\"XyDlLX\":[\"Nombre del Índice\"],\"Y2P2aK\":[\"Selecciona los esquemas a cargar:\"],\"Y8HYw2\":[\"valor\"],\"Y8zX3R\":[\"Insertar en el Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Buscar...\"],\"YWlnMZ\":[\"Puerto de Ollama\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Explora e instala plugins del registro.\"],\"Y_3yKT\":[\"Abrir en Nueva Pestaña\"],\"YiAQ_Q\":[\"Actualizar Tablas\"],\"Ysjr9Y\":[\"Vista Previa SQL\"],\"YswNf7\":[\"Todos los niveles\"],\"YtNwr6\":[\"Número máximo de entradas del historial de consultas almacenadas por conexión.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Cargando...\"],\"Z7ZXbT\":[\"Aprobar\"],\"Z8JpBH\":[\"Exportar como Notebook\"],\"Z8fBIc\":[\"Las filas reales superan la estimacion\"],\"ZC2VJP\":[\"Ejecutar\"],\"ZCIS4k\":[\"sin filtros activos\"],\"ZF1_UT\":[\"Modo SSL\"],\"ZGjBPa\":[\"Limpiar Registros\"],\"ZHQTlM\":[\"Importando desde\"],\"ZIFDoJ\":[\"Selecciona al menos Estructura o Datos\"],\"ZIZA6o\":[\"Editar antes de aprobar\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avisos de análisis\"],\"other\":[\"#\",\" avisos de análisis\"]}]],\"ZVn8p2\":[\"Muestra los números de línea en el margen del editor.\"],\"ZYnwzF\":[\"Desconectado\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Crear Clave Foránea\"],\"Zf7LHg\":[\"No se encontraron contextos (¿está kubectl instalado?)\"],\"Zfotp5\":[\"Las grandes diferencias entre estimacion y realidad suelen indicar estadisticas desactualizadas o predicados dificiles de modelar.\"],\"ZiFjhs\":[\"Select *\"],\"ZpzHz0\":[\"No se pudieron cargar los esquemas\"],\"ZqXGPF\":[\"Error al eliminar la vista: \"],\"ZuL73E\":[\"Crear una nueva vista de base de datos\"],\"_-bi4r\":[\"Tabla Referenciada\"],\"_AEYGI\":[\"Sin historial de ejecución\"],\"_FdpZc\":[\"Error al cargar la definición de la vista: \"],\"_FxSdi\":[\"Consulta las dependencias open source directas usadas por la app, el backend y la toolchain.\"],\"_JyTG8\":[\"Ingresa el prompt de explicación...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"filas\"],\"_TK1zF\":[\"Conexión guardada\"],\"_bJFBE\":[\"Tiempo de Espera de Conexión\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Árbol\"],\"_dqduX\":[\"Página siguiente\"],\"_fwE6J\":[\"Anteriores\"],\"_n04sB\":[\"Terminar\"],\"_otxbQ\":[\"Archivo de clave\"],\"_pezIT\":[\"Error al conectar a \",[\"0\"],\". Verifica tu configuración o asegúrate de que la base de datos esté en ejecución.\"],\"_srfkj\":[\"Clave personalizada eliminada correctamente\"],\"_t6aFo\":[\"MySQL y MariaDB pueden volver a EXPLAIN FORMAT=JSON o al EXPLAIN tabular segun la version del servidor.\"],\"_xTbaM\":[\"columnas\"],\"_yxaaL\":[\"Índice Único\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis is a free, open-source project. If you find it useful, consider supporting the project and connecting with the community.\"],\"a9CASo\":[\"SQLite solo soporta renombrar columnas. Otras modificaciones requieren recrear la tabla manualmente.\"],\"aAIQg2\":[\"Apariencia\"],\"aAURrV\":[\"Instalado\"],\"aC_vCa\":[\"Generar nombre con IA\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Selecciona un nodo para ver detalles\"],\"aHKcKc\":[\"Página anterior\"],\"aI-5wG\":[\"Verificar CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valor Predeterminado\"],\"aScJP1\":[\"Ejecutar esta consulta\"],\"aVNbN8\":[\"Condiciones de filtro\"],\"aWhdMQ\":[\"Usar Conexión SSH Existente\"],\"aXYd8V\":[\"Tiempo de espera\"],\"aX_S_r\":[\"Página \",[\"0\"],\" de \",[\"totalPages\"]],\"agZcf8\":[\"SQL Generado: \",[\"tableName\"]],\"ajqPzi\":[\"Select [campos]\"],\"alplHn\":[\"Analizando plan de ejecucion con IA...\"],\"anBcU3\":[\"Si te gusta tabularis y quieres ver más funcionalidades, considera apoyar el proyecto contribuyendo código, reportando errores o dando una estrella en GitHub.\"],\"arHmj2\":[\"¿Estás seguro de que quieres eliminar esta consulta del historial?\"],\"arKcqW\":[\"Los servidores mas antiguos pueden volver a planes estimados con menos metricas.\"],\"arcpYe\":[\"Aprobación requerida\"],\"aurEkh\":[\"Cargando procesos…\"],\"avtdsd\":[\"Modo SQL\"],\"az8lvo\":[\"Desactivada\"],\"b1Ah3z\":[\"Enfocado en\"],\"b392Dr\":[\"Expandir Todo\"],\"b5S_PU\":[\"Nombre de la Base de Datos\"],\"bAvovP\":[\"Mover Abajo\"],\"bH3JqY\":[\"No se encontraron tablas\"],\"bP5JOn\":[\"Ajuste de Línea\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Hacer todas las consultas MCP de solo lectura\"],\"bmca5u\":[\"Solo escrituras\"],\"bpCiBU\":[\"Permitir escrituras desde MCP\"],\"bqnhqW\":[\"La estimacion supera las filas reales\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Error\"],\"bw22Gk\":[\"Esquema de Columnas\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Puntos Criticos\"],\"cFCKYZ\":[\"Denegar\"],\"cFGrCP\":[\"tabla\"],\"cGeFup\":[\"Tamaño de Fuente\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Enfocar en Tabla\"],\"cM9NHc\":[\"Degradar a\"],\"cO9-2L\":[\"Desactivado\"],\"cSev-j\":[\"Filtros\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importar \",\"#\",\" filas\"],\"other\":[\"Importar \",\"#\",\" filas\"]}]],\"c_xoSn\":[\"Celda \",[\"n\"],\" renombrada\"],\"cd0XEW\":[\"Guardar Consulta\"],\"cnGeoo\":[\"Delete\"],\"cwfPLH\":[\"Grupo Dividido\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" sentencias\"],\"d34vwG\":[\"Cargar Bases de Datos\"],\"d6ynQ7\":[\"Orden descendente\"],\"d8_6_v\":[\"cancelar\"],\"d8wc1_\":[\"Valores de muestra\"],\"dBXoCS\":[\"Se detectó una variable de entorno, pero puedes sobrescribirla estableciendo una clave arriba.\"],\"dD7NPy\":[\"Esquema\"],\"dEgA5A\":[\"Cancelar\"],\"dMtLDE\":[\"hasta\"],\"dPJVhW\":[\"Instalación Fallida\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" sesión\"],\"other\":[\"#\",\" sesiones\"]}]],\"dTUzKm\":[\"Ejecutar seleccionadas (\",[\"0\"],\")\"],\"dU_iQN\":[\"Ninguna sesión coincide con los filtros.\"],\"dUh9QW\":[\"Planificacion\"],\"dVoir2\":[\"Celda Markdown \",[\"n\"],\" añadida\"],\"dZ0d2O\":[\"Selecciona al menos una tabla\"],\"dhi13U\":[\"Elegir imagen…\"],\"dli1JX\":[\"Enviar Cambios\"],\"dmYV6f\":[\"Rutinas\"],\"dohZCo\":[\"Instrucciones para la generación de SQL con IA. Usa \",[\"SCHEMA\"],\" como marcador para la estructura de la base de datos.\"],\"dtxpK2\":[\"Analizar\"],\"dwW9nJ\":[\"Mostrar Números de Línea\"],\"dwWVw_\":[\"Mostrar pantalla de bienvenida\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" pestaña\"],\"other\":[\"#\",\" pestañas\"]}]],\"dxxY9r\":[\"Si existe\"],\"dyN4j9\":[\"Haz clic en 'Ejecutar Vista Previa' para ver resultados\"],\"e07Iz5\":[\"Abrir Administrador de Tareas\"],\"e0NzXu\":[\"Este proyecto es un Work In Progress (WIP). Las funciones principales son estables, pero tenemos grandes planes.\"],\"e1UKxf\":[\"Guardar esta consulta\"],\"e34gdU\":[\"Cuánto espera el subproceso MCP la decisión del usuario antes de fallar.\"],\"e62LQd\":[\"Forzar Cierre\"],\"e6QZsM\":[\"Tema del Editor\"],\"e8CirT\":[\"Ejecutar consulta\"],\"eD2kUP\":[\"Buffers Leidos\"],\"eE0JZ4\":[\"Versión\"],\"eIDch7\":[\"Ingresa el prompt de analisis del plan de ejecucion...\"],\"eIVolo\":[\"Disco L/E\"],\"eJOEBy\":[\"Exportando...\"],\"eKHY3W\":[\"Configuración del Plugin\"],\"eMb6Ub\":[\"Elige un recurso...\"],\"ePK91l\":[\"Editar\"],\"eXweu6\":[\"Expandir Celda\"],\"ecNsTE\":[\"Ninguna consulta coincide con la busqueda\"],\"ecUA8p\":[\"Hoy\"],\"ecpIZP\":[\"Ingresa la frase de paso si la clave está cifrada\"],\"ejmeDY\":[\"Instalados\"],\"esl-Tv\":[\"Tipo de recurso\"],\"exyUec\":[\"Conexión\"],\"f2AJjl\":[\"Eliminar Fila\"],\"f4pD-j\":[\"La prueba de conexión falló\"],\"f7sXvi\":[\"Ingresa la contraseña\"],\"fAsxc0\":[\"Escaneos Secuenciales\"],\"fIeFs0\":[\"Seleccionar Valor...\"],\"fJm92A\":[\"Selecciona un archivo con un plan EXPLAIN (formato JSON o texto de PostgreSQL) para visualizarlo.\"],\"fOuPPd\":[\"Complemento\"],\"fXVIZq\":[\"Valores\"],\"f_b1TA\":[\"Historial de Ejecución\"],\"fghnqP\":[\"Cambiar a conexión 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Coma (,)\"],\"fp711N\":[\"Bloqueada (solo lectura)\"],\"fpzyLj\":[\"Página \",[\"0\"],\" de \",[\"1\"]],\"fuA6oy\":[\"Tiempo de Espera del Socket\"],\"fvImQM\":[[\"0\"],\" seleccionadas\"],\"fwr_nh\":[\"Instala extensiones, gestiona drivers de plugins y mantén bajo control los ajustes de ejecución.\"],\"g0ZzK4\":[\"JSON válido\"],\"g11hAR\":[\"Nueva Fila\"],\"g8VcMm\":[\"Mi clúster de K8s\"],\"gCFR_O\":[\"Ejecución Paralela (Ejecutar Todo)\"],\"gEjU98\":[\"Abrir conexiones\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Se requiere al menos una columna\"],\"gSuQrG\":[\"Ninguna conexión coincide con \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Reejecutar consulta\"],\"gZWMnn\":[\"Analisis IA\"],\"ghYd73\":[\"Elegir destino...\"],\"giAqEC\":[\"Crear Nueva Tabla\"],\"gnQS8X\":[\"Tamaño máximo de paquete usado por el conector MySQL.\"],\"gqV5VL\":[\"Integrado, no personalizable\"],\"gww_XE\":[\"Columna Referenciada\"],\"gxXPJ9\":[\"Configurar Intérprete\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Maximizar\"],\"h-XNc9\":[\"Delimitador CSV\"],\"h-kNAk\":[\"ej. datos_ventas\"],\"h3Z_aK\":[\"Escribe Markdown aquí...\"],\"h7MgpO\":[\"Atajos de teclado\"],\"h7peZQ\":[\"Permitir\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" proceso del sistema en ejecución\"],\"other\":[\"#\",\" procesos del sistema en ejecución\"]}]],\"hEZrFh\":[\"Ejecutar Archivo SQL...\"],\"hEipgW\":[\"Buscar Actualizaciones Ahora\"],\"hG89Ed\":[\"Imagen\"],\"hIHcBE\":[\"Exportar como CSV\"],\"hItdtk\":[\"Explorar carpeta\"],\"hXFVjo\":[\"El nombre de la tabla es requerido\"],\"hZ6znB\":[\"Puerto\"],\"h_huI6\":[\"Reejecutar\"],\"hbz1rh\":[\"claves\"],\"hdsaJo\":[\"Importando...\"],\"he3ygx\":[\"Copiar\"],\"hfGimp\":[\"Elige un namespace...\"],\"hjjSEi\":[\"Conexiones de solo lectura\"],\"hjwN_s\":[\"Nombre del recurso\"],\"hlF1mD\":[\"Copiar selección\"],\"hnboBb\":[\"Analisis IA del Plan de Ejecucion\"],\"hnvu2p\":[\"Detalles del Error\"],\"hq4-D2\":[\"La clave API se almacena de forma segura en el llavero del sistema. Establecer una clave aquí sobrescribe la variable de entorno.\"],\"hqjXdn\":[\"Error al eliminar la conexión SSH\"],\"hqofAK\":[\"Copiar SQL\"],\"hy6L14\":[\"Ver en GitHub\"],\"hyjACX\":[\"Celdas contraídas/expandidas\"],\"hz1b5W\":[\"No se encontraron elementos coincidentes\"],\"i1vAVM\":[\"Crear nueva tabla\"],\"i3S5T3\":[\"Buscar en favoritos...\"],\"i4_LY_\":[\"Escritura\"],\"i5HBWh\":[\"Historial de consultas restablecido\"],\"i5zCt4\":[\"Tabla\"],\"iAVlge\":[\"Personaliza las instrucciones para la generación de nombres de celda en notebooks con IA. El contenido de la celda (SQL o Markdown) se envía como mensaje del usuario.\"],\"iE1yAB\":[\"Filtrar tablas...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Conectar\"],\"iSryJ2\":[\"Mi Servidor SSH\"],\"iT7UeX\":[\"Agregar Índice\"],\"iUWwuR\":[\"Descargar e Instalar\"],\"ia7i08\":[\"Selecciona primero contexto/namespace/tipo\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Guardado\"],\"igcsfY\":[\"No hay plugins disponibles en el registro.\"],\"ij-Elv\":[\"Vista previa de imagen\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" consultas analizables encontradas\"],\"other\":[\"#\",\" consultas analizables encontradas\"]}]],\"ioL38P\":[\"Monitoriza los procesos de complementos, CPU, RAM y uso de disco en tiempo real\"],\"ixlL_e\":[\"Archivo de Clave SSH (Opcional)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Selecciona un modelo\"],\"j3gyYH\":[\"Aplicar todos\"],\"j5CWO4\":[\"Actualizado\"],\"j9HPuI\":[\"Fila #\",[\"0\"]],\"jBtpMP\":[\"Todos los estados\"],\"jEu4bB\":[\"Columnas\"],\"jEyQIs\":[\"No se encontraron rutinas\"],\"jHc1By\":[\"Eliminar Vista\"],\"jI6sj4\":[\"Costo, tiempo y estimaciones de filas suelen no estar disponibles como en PostgreSQL y MySQL.\"],\"jIxQCZ\":[\"No disponible para tu plataforma\"],\"jKIncn\":[\"El nombre de la base de datos es requerido\"],\"jPSk57\":[\"Razón (opcional)\"],\"jUNY_d\":[\"vista\"],\"jVqjDo\":[\"Formato de archivo notebook no válido\"],\"jWSZ-A\":[\"Solo vista previa - datos completos no cargados\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Tiempo de espera del socket en milisegundos.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"El nombre de la conexión es requerido\"],\"jsQZMk\":[\"IA\"],\"juO8wz\":[\"proceso hijo\"],\"jx0t66\":[\"Contraer procesos hijos\"],\"k-0mL-\":[\"Agregar Columna\"],\"k-XiMX\":[\"Sin formato\"],\"k2UnVy\":[\"Cond. Hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"segundos\"],\"kBiBq7\":[\"¿Eliminar el índice \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Mostrar/Ocultar Gráfico\"],\"kI1qVD\":[\"Formatear\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" filas · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" filas · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Detalles del evento\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registro\"],\"kY-q3P\":[[\"label\"],\" es obligatorio\"],\"kexIdC\":[\"Usar Port-Forward de Kubernetes\"],\"krksx_\":[\"Éxito\"],\"ktYUe9\":[\"Ejecutar todas\"],\"kwY6nh\":[\"Cerrar\"],\"kx0s-n\":[\"Resultados\"],\"kxUEfE\":[\"Error al obtener la definición de la rutina: \"],\"l2Op2p\":[\"Parámetros de Consulta\"],\"l9Ivba\":[\"Procesos de complementos y recursos del sistema\"],\"lBdPxu\":[\"Color de acento\"],\"lCF0wC\":[\"Actualizar\"],\"lEQRwq\":[\"Datos (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nueva tabla creada\"],\"lOekZ3\":[\"Cambiar a Diseño Horizontal\"],\"lUA1C1\":[\"Frase de Paso de Clave SSH (Opcional)\"],\"lVeG20\":[\"Dependencias Rust\"],\"lXAG6D\":[\"Instrucciones para la explicación de consultas con IA. Usa \",[\"LANGUAGE\"],\" como marcador para el idioma de salida.\"],\"lbbYjy\":[\"Edita directamente el archivo de configuración en bruto. Se requiere reinicio para aplicar los cambios.\"],\"lhKW0m\":[\"Celda SQL \",[\"n\"],\" añadida\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Tamaño de Página de Resultados (Límite)\"],\"lkz6PL\":[\"Duración\"],\"lmVGeo\":[\"Agregar Clave Foránea\"],\"lnnx3E\":[\"Conecta Tabularis a Claude Desktop, Cursor y más\"],\"lpGiOh\":[\"Check interval\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Añadir\"],\"m2Q_r8\":[\"Detectar JSON en columnas de texto\"],\"m2tskz\":[\"Éxito\"],\"mA-qpe\":[\"Ejecución Completada\"],\"mBhhbA\":[\"Registros exportados al portapapeles\"],\"mCNdzH\":[\"Ejecutar Celda\"],\"mO95sp\":[\"Cerrar panel\"],\"mP7dLi\":[\"Ingresa el nombre de la fuente arriba\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloqueado\"],\"other\":[\"#\",\" bloqueados\"]}]],\"mS74ir\":[\"Error al guardar la conexión SSH\"],\"mSqtw8\":[\"Ejecutar Vista Previa\"],\"mURmfQ\":[\"Definición de Vista (SQL)\"],\"mX_isJ\":[\"Vertical\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Estructura (DDL)\"],\"mrk4Cf\":[\"Ordenar por \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Acabamos de abrir una comunidad dedicada a Tabularis: pide ayuda, comparte trucos y da forma al roadmap.\"],\"mtvVdV\":[\"Filas Procesadas\"],\"mx4evv\":[\"Crear Tabla\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Descargar\"],\"n7JDTx\":[\"Instala y activa complementos para verlos aquí\"],\"nDDJir\":[\"Buscar sesión, cliente, conexión…\"],\"nHP-Kr\":[\"No hay sesión activa. Selecciona una conexión.\"],\"nKhCjW\":[\"Seleccionar Tablas\"],\"nNwvm4\":[\"Error\"],\"nOVim5\":[\"Error al guardar la conexión\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Eventos\"],\"nf14vn\":[\"Requiere extensión: \",[\"0\"]],\"ngO6Pv\":[\"Permite que Intro (además de Tab) acepte la sugerencia de autocompletado activa. Cuando está desactivado, Intro siempre inserta una nueva línea.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Crea tu primera conexión\"],\"nohy4m\":[\"Sin actividad MCP registrada.\"],\"nr-axf\":[\"Eliminar Plugin\"],\"nsPFX9\":[\"Abrir en Visual Explain\"],\"nuBbBr\":[\"Gráfico\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Exportar Base de Datos\"],\"o-XJ9D\":[\"Cambiar\"],\"o21Y-P\":[\"entradas\"],\"o3tP_A\":[\"Eliminar Índice\"],\"o45L8r\":[\"Ingresa el nombre de tu conexión\"],\"o53XGh\":[\"Copiar fila(s) seleccionada(s)\"],\"o7J4JM\":[\"Filtro\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Nivel\"],\"oGiIL7\":[\"Proveedor Predeterminado\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Conexión Perdida\"],\"oJlXF2\":[\"Importar Notebook\"],\"oMFv82\":[\"Dividir Vertical\"],\"oOFiQg\":[\"Limita el número de filas obtenidas por consulta para prevenir problemas de rendimiento. Establece en 0 para desactivar (no recomendado).\"],\"oT9ZD3\":[\"Ocultar resumen\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Gráfico cambiado (celda \",[\"n\"],\")\"],\"oWfclW\":[\"Muestra el visor de JSON cuando una celda de texto sin tipar contiene un objeto o array JSON. Añade un pequeño coste de análisis por celda.\"],\"obpbdz\":[\"Archivo de configuración no encontrado (crear manualmente)\"],\"odZgfC\":[\"CLIENTES IA\"],\"ogZhXn\":[\"Elige la dirección de diseño predeterminada para los diagramas ER\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Filas Reales\"],\"olWzar\":[\"Forzar Cierre del Proceso\"],\"ovBPCi\":[\"Predeterminado\"],\"owzTWN\":[\"Modelos de IA actualizados desde los proveedores\"],\"oxYi6j\":[\"Ajusta el tamaño base de fuente usado en la aplicación (10-20px).\"],\"p--hsQ\":[\"Se ha perdido una conexión a la base de datos\"],\"p6NueD\":[\"NUEVA\"],\"pOYHox\":[\"Acciones\"],\"pR9bTR\":[\"Sin datos BLOB\"],\"pS8S5q\":[\"ej. usuarios, pedidos, productos\"],\"pSws_M\":[\"Nombre de Tabla\"],\"pVLbKZ\":[\"Vista creada correctamente\"],\"pWT04I\":[\"Verificando...\"],\"pZJ_6D\":[\"El nombre del índice es requerido\"],\"pddYFG\":[\"Ingresa el prompt de nombre de celda...\"],\"pm9Yb5\":[\"Translation updates\"],\"pnpyuD\":[\"Habilitar Registros\"],\"pqKMPv\":[\"Error al crear la tabla: \"],\"pqaP1h\":[\"Descartar\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"ej. Comic Sans MS\"],\"pzu7v4\":[\"Horizontal\"],\"q-ch8m\":[\"El resto sigue en solo lectura. Solo las marcadas pueden ejecutar escrituras.\"],\"qA5jLs\":[\"Detalles del error\"],\"qIrtcK\":[\"Actualizaciones\"],\"qOqy8G\":[\"Verificando configuración...\"],\"qWaVNs\":[\"Guardar y Reiniciar\"],\"qb3LPX\":[\"Ver Diagrama ER\"],\"qkK0vq\":[\"El nombre de la vista es requerido\"],\"qki9tG\":[\"Error\"],\"qoIir-\":[\"La URL base de tu API compatible con OpenAI. Ejemplos: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Contraer todo\"],\"r6ncaO\":[\"Cerrar pestaña\"],\"rAJlpP\":[\"Puerto del contenedor\"],\"rG3WVm\":[\"Lectura\"],\"rGRCeK\":[\"Borrar Historial de Consultas\"],\"rNIto7\":[\"El nombre del recurso es obligatorio\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exportado exitosamente\"],\"rY4sEV\":[\"Eliminar FK\"],\"rbu0nO\":[\"Gestionar Conexiones SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" conexión/es\"],\"other\":[\"#\",\" conexión/es\"]}]],\"rn2_2V\":[\"Eliminar filtro\"],\"roABNH\":[\"Sin historial de consultas\"],\"rtir7c\":[\"desconocido\"],\"ru0-2W\":[\"No hay conexiones activas\"],\"rvDPWO\":[\"Desviacion de Estimacion\"],\"rwWjWg\":[\"Notas de la Versión\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Probar Conexión\"],\"sBOaim\":[\"El archivo de configuración ha sido guardado. ¿Reiniciar ahora para aplicar los cambios?\"],\"sCyv9B\":[\"Actualizar Modelos\"],\"sSUqe4\":[\"Eliminar\"],\"sUBkgN\":[\"Generando SQL...\"],\"sZZG3d\":[\"¿Estás seguro de que deseas importar \\\"\",[\"0\"],\"\\\"?\\nEsto podría sobrescribir los datos existentes.\"],\"sbK5ck\":[\"Buscar en el historial...\"],\"sq_bS6\":[\"Al Eliminar\"],\"suW7-E\":[\"Tiempo de espera de conexión en milisegundos.\"],\"suqtBX\":[\"Esc para cerrar\"],\"t-R8-P\":[\"Ejecucion\"],\"t1OfVY\":[[\"totalLibraries\"],\" librerías\"],\"t2TMzs\":[\"Cerrar Pestaña\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Seleccionar una tabla...\"],\"t7KRl1\":[\"Registro de cada llamada MCP y de las consultas pendientes de aprobación. Almacenado localmente.\"],\"t9NJIk\":[\"Se detectaron operaciones con mucho escaneo\"],\"tB7xof\":[\"Operaciones Temp o Sort\"],\"tBBXTO\":[\"Intervalo de Ping\"],\"tFrT3w\":[\"Agrega esto al archivo de configuración del cliente manualmente si la instalación automática falla.\"],\"tJ7UbA\":[\"analizar seleccionada\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Dividir Horizontal\"],\"tQhW-D\":[\"Configuración de Registros\"],\"tT-BQX\":[\"Instalados\"],\"tXFGEx\":[\"No hay conexiones de Kubernetes guardadas. Haz clic en \\\"Añadir\\\" para crear una.\"],\"tXLz_8\":[\"Eliminar\"],\"tXpRby\":[\"Cuadrícula de datos\"],\"tbysEk\":[\"Acciones\"],\"tdta9X\":[\"Página \",[\"0\"]],\"tfDRzk\":[\"Guardar\"],\"tfEioV\":[\"Ejecutar todas las celdas SQL de arriba a abajo\"],\"tiAIaJ\":[\"Contraseña SSH faltante. Por favor, ingrésala de nuevo.\"],\"tk22BR\":[\"Pega datos estructurados y revisa el esquema antes de importar\"],\"tst44n\":[\"Eventos\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"Archivo SQL ejecutado correctamente\"],\"u6QeR6\":[\"Reiniciar Ahora\"],\"uAQUqI\":[\"Estado\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc para cerrar\"],\"uFViPK\":[\"No hay conexiones SSH disponibles\"],\"uHUuhp\":[\"Analizar esta consulta\"],\"uHfFzS\":[\"Tamaño de Fuente del Editor\"],\"uJ_3K5\":[\"¿Eliminar el notebook \\\"\",[\"0\"],\"\\\"? Esta acción no se puede deshacer.\"],\"uKaNJ3\":[\"Abrir en el editor JSON\"],\"uQBwTo\":[\"Esquemas\"],\"ub54ff\":[\"Centro de plugins\"],\"ufFyBs\":[\"Base de datos exportada correctamente\"],\"upNmR2\":[\"Abrir Barra Lateral\"],\"upwIY4\":[\"Definición de Vista\"],\"utMia3\":[\"Deseleccionar Todo\"],\"uyNaJg\":[\"1 elemento\"],\"v61dnS\":[\"Ingresa el nombre exacto del modelo para tu proveedor compatible con OpenAI.\"],\"v6oeyr\":[\"Instalado\"],\"v75DGg\":[\"Explorar archivo\"],\"v99dO4\":[\"Clave Primaria\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" consultas encontradas\"],\"other\":[\"#\",\" consultas encontradas\"]}]],\"vCSBPD\":[\"Agregar filtro\"],\"vH7uJj\":[\"Ordenar por…\"],\"vUOA1-\":[\"Buscar modelos...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE incluye filas reales, tiempos, bucles y contadores de buffer cuando estan disponibles.\"],\"vXIe7J\":[\"Idioma\"],\"vYf4Jm\":[\"Ingrese una función SQL completa (ej: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Preferido\"],\"vditm4\":[\"Plan de Query\"],\"vks_ls\":[\"Cerrar Otras Pestañas\"],\"vnAnIp\":[\"Modelo \",[\"0\"],\" no encontrado en \",[\"1\"],\". Puede que no funcione correctamente.\"],\"vqoN5u\":[\"Estructura\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Explorador\"],\"vujQJ5\":[\"Localización\"],\"vvJPVL\":[\"Mostrar resumen\"],\"vwI5S4\":[\"Éxito\"],\"vzH-7Z\":[\"Explicar\"],\"w7QmD_\":[\"Ingresa el prompt del sistema...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Tiempo transcurrido\"],\"wCfv2R\":[\"Agregar Conexión\"],\"wGfc86\":[\"Borrar Todo el Historial\"],\"wGwNv4\":[\"Base de datos activa\"],\"wJJ-Wy\":[\"Instalando...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers Hit\"],\"wQn-RM\":[\"Agregar Columna\"],\"wRXcR2\":[\"Usando el icono predeterminado del driver.\"],\"wTOwz-\":[\"Aplicado\"],\"wTmVhm\":[\"Delete\"],\"wXx7W4\":[\"How often to check for new translations.\"],\"wZeIWq\":[\"Importar desde Portapapeles\"],\"w_bY7R\":[\"Registros\"],\"wc_8bA\":[\"Pendiente\"],\"wckWOP\":[\"Gestionar\"],\"wdYcKH\":[\"Pestañas Abiertas\"],\"wja8aL\":[\"Sin nombre\"],\"wkOAzk\":[\"Ningún notebook coincide con tu búsqueda.\"],\"wp49Ao\":[\"Failed to process insertions: \"],\"wqG2hQ\":[\"Omitir (no importar)\"],\"wwrAsK\":[\"Por favor, completa todos los campos requeridos\"],\"wwu18a\":[\"Icono\"],\"x2fr_j\":[\"Grafo\"],\"xANKBj\":[\"Funciones\"],\"xBwjck\":[\"Se requiere reinicio para aplicar los cambios.\"],\"xDAtGP\":[\"Mensaje\"],\"xECY01\":[\"Procedimientos\"],\"xGPNgZ\":[\"Personalización de Prompts\"],\"xNgtS-\":[\"No se encontraron vistas\"],\"xOPa1b\":[\"El puerto debe estar entre 1 y 65535\"],\"xY9s5E\":[\"Tiempo agotado\"],\"xaVUr1\":[\"El veloz zorro marrón salta sobre el perro perezoso\"],\"xbvTzL\":[\"Ruta del Archivo\"],\"xlew5F\":[\"Limpiar\"],\"xmNyKz\":[\"Probando...\"],\"xtuh6D\":[\"Expandir Explorador\"],\"y-Zdqj\":[\"Elige un contexto...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Abrir visor JSON\"],\"yQXjG5\":[\"Deseleccionar Todo\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Ayer\"],\"ygCKqB\":[\"Detener\"],\"ykCc6r\":[\"Base de datos cambiada (celda \",[\"n\"],\")\"],\"ynVMSc\":[\"Seleccionar todas\"],\"ytdz1d\":[\"La IA quiere ejecutar una escritura en la base de datos\"],\"yyhzur\":[\"Crear Tabla\"],\"yz7wBu\":[\"Cerrar\"],\"z0VdfR\":[\"rutina\"],\"z407wX\":[\"Contraseña SSH\"],\"z4oF5T\":[\"Exportar Base de Datos\"],\"z5kV0h\":[\"Conexiones\"],\"zBTMzx\":[\"Vista Previa\"],\"zCaAKs\":[\"Error de Actualización\"],\"zDAakK\":[\"No se puede mostrar el diagrama sin un ID de conexión.\"],\"zGe21h\":[\"Esta clave se carga desde una variable de entorno\"],\"zGfL5t\":[\"valor\"],\"zL6-4A\":[\"No hay procesos de complementos en ejecución\"],\"zLZhCi\":[\"¡Nueva comunidad Discord!\"],\"zLlCou\":[\"Copiar nombre de columna\"],\"zNEL34\":[\"Join the Community\"],\"zNgTlV\":[\"Cerrar Pestañas a la Derecha\"],\"zQz55p\":[\"Inspeccionar estructura\"],\"zR0FfH\":[\"Exportado a \",[\"target\"]],\"zRZeOc\":[\"Buscar tablas, vistas, rutinas, triggers...\"],\"zUNMsr\":[\"Clave SSH\"],\"zXMRzb\":[\"Puerto SSH\"],\"zZgoXr\":[\"No hay tablas que coincidan\"],\"zaWbms\":[\"Revertir Cambios\"],\"zgClmU\":[\"Instalar Configuración\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Ingresar valor...\"],\"zvzN4C\":[\"Establecer como Activa\"],\"zzDlyQ\":[\"Éxito\"],\"zzMxrp\":[\"Editar config.json\"],\"zz_Wd_\":[\"Modo\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/fr/messages.po b/src/locales/fr/messages.po index 16c45477..59a0779b 100644 --- a/src/locales/fr/messages.po +++ b/src/locales/fr/messages.po @@ -500,12 +500,10 @@ msgstr "Voulez-vous vraiment effacer tout l’historique des requêtes pour cett #. placeholder {0}: column.name #: src/components/layout/sidebar/SidebarColumnItem.tsx -msgid "" -"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +msgid "Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" "\n" "WARNING: This will permanently delete all data in this column. This action cannot be undone." -msgstr "" -"Voulez-vous vraiment supprimer la colonne \"{0}\" de la table \"{tableName}\" ?\n" +msgstr "Voulez-vous vraiment supprimer la colonne \"{0}\" de la table \"{tableName}\" ?\n" "\n" "ATTENTION : toutes les données de cette colonne seront définitivement supprimées. Cette action est irréversible." @@ -548,11 +546,9 @@ msgstr "Voulez-vous vraiment supprimer la vue \"{0}\" ?" #. placeholder {0}: file.split(/[\\/]/).pop() #: src/components/layout/ExplorerSidebar.tsx -msgid "" -"Are you sure you want to import \"{0}\"?\n" +msgid "Are you sure you want to import \"{0}\"?\n" "This may overwrite existing data." -msgstr "" -"Voulez-vous vraiment importer \"{0}\" ?\n" +msgstr "Voulez-vous vraiment importer \"{0}\" ?\n" "Cela peut écraser des données existantes." #: src/components/modals/ViewEditorModal.tsx @@ -601,6 +597,10 @@ msgstr "Auto Increment" msgid "Auto paginated" msgstr "Pagination automatique" +#: src/components/settings/LocalizationTab.tsx +msgid "Automatic updates" +msgstr "" + #: src/components/settings/InfoTab.tsx msgid "Automatically check for new versions when the app launches" msgstr "Vérifier automatiquement les nouvelles versions au lancement de l’application" @@ -746,6 +746,10 @@ msgstr "Vérifier les mises à jour maintenant" msgid "Check for updates on startup" msgstr "Vérifier les mises à jour au démarrage" +#: src/components/settings/LocalizationTab.tsx +msgid "Check interval" +msgstr "" + #: src/components/modals/McpModal.tsx #: src/pages/McpPage.tsx msgid "Checking configuration..." @@ -2297,6 +2301,10 @@ msgstr "Échec : " msgid "Favorites" msgstr "Favoris" +#: src/components/settings/LocalizationTab.tsx +msgid "Fetch the latest translations from the cloud without waiting for an app update." +msgstr "" + #: src/components/modals/NewConnectionModal.tsx msgid "File Path" msgstr "Chemin du fichier" @@ -2520,6 +2528,10 @@ msgstr "Temps d'attente avant échec." msgid "How many logs to keep in memory (1-10000)" msgstr "Combien de logs conserver en mémoire (1-10000)" +#: src/components/settings/LocalizationTab.tsx +msgid "How often to check for new translations." +msgstr "" + #: src/components/settings/GeneralTab.tsx msgid "How often to check if active connections are still alive. Set to 0 to disable." msgstr "À quelle fréquence vérifier si les connexions actives sont toujours vivantes. Définissez 0 pour désactiver." @@ -2971,6 +2983,10 @@ msgstr "Message" msgid "Minimize" msgstr "Réduire" +#: src/components/settings/LocalizationTab.tsx +msgid "minutes" +msgstr "" + #: src/components/modals/ClipboardImport/SchemaEditor.tsx msgid "Mixed types detected, defaulted to TEXT" msgstr "Types mixtes détectés, défaut TEXT" @@ -5022,6 +5038,10 @@ msgstr "Principaux problèmes" msgid "Total Cost" msgstr "Coût total" +#: src/components/settings/LocalizationTab.tsx +msgid "Translation updates" +msgstr "" + #: src/components/ui/JsonInput.tsx msgid "Tree" msgstr "Arborescence" diff --git a/src/locales/fr/messages.ts b/src/locales/fr/messages.ts index dfe29c21..0777c6fc 100644 --- a/src/locales/fr/messages.ts +++ b/src/locales/fr/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Nombre max d’entrées d’historique\"],\"-6AWa-\":[\"Importer les connexions\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Déconnecter\"],\"-PLZfh\":[\"Échec de l’actualisation des modèles\"],\"-T5W2e\":[\"Notes du pilote\"],\"-ZgeeE\":[\"Historique des modifications\"],\"-aYrdc\":[\"La version \",[\"0\"],\" est disponible\"],\"-fBGXl\":[\"Coût le plus élevé\"],\"-jIQDz\":[\"Réduire la cellule\"],\"-u1eRo\":[\"Aucune base de données\"],\"-yoeVU\":[\"Chargement du schéma...\"],\"-zy2Nq\":[\"Type\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID validation\"],\"0E5-gF\":[\"Voulez-vous vraiment supprimer cette connexion ?\"],\"0HCubq\":[\"Agrandir\"],\"0Kmdvy\":[\"Police personnalisée\"],\"0Nj13E\":[\"Générer du SQL\"],\"0ROgz5\":[\"Saisir du JSON...\"],\"0SY9sU\":[\"Échec de la déconnexion de la base de données\"],\"0b3kL9\":[\"Sélectionner une base de données\"],\"0caMy7\":[\"Historique\"],\"0mx5ow\":[\"Requête\"],\"0n9BtL\":[\"Aperçu\"],\"0pHB9N\":[\"Copier comme table.column\"],\"0sQzZK\":[\"Filtrer les bases de données...\"],\"0uPP9X\":[\"Nom de la clé étrangère (optionnel)\"],\"0wxuek\":[\"Version actuelle\"],\"0x09Aw\":[\"Arrêt en cas d'erreur basculé\"],\"0yBP6v\":[\"Soutenir le développement\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes\"],\"other\":[\"#\",\" lignes\"]}]],\"0yVAoD\":[\"Compter les lignes\"],\"0zxJ87\":[\"Aucun log disponible\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Modifier la vue\"],\"11fGJ6\":[\"Requêtes\"],\"13hIUA\":[\"Clé API \",[\"0\"]],\"14qNWF\":[\"Sélectionner une connexion SSH\"],\"17qHRP\":[\"Nouvelle connexion\"],\"1Dn6bg\":[\"Importer depuis le Presse-papiers\"],\"1Dnd0I\":[\"Charger le nombre de lignes\"],\"1FjTLW\":[\"ex. python3\"],\"1GOvbo\":[\"Ollama connecté (\",[\"0\"],\" modèles trouvés)\"],\"1I6UoR\":[\"Vues\"],\"1U7hS5\":[\"Longueur\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Police de l’éditeur\"],\"1ekzlY\":[\"Processus des plugins\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Choix du thème\"],\"1xVZkL\":[\"Aucun modèle trouvé\"],\"26Joci\":[[\"0\"],\" lignes récupérées\"],\"2Bf-Qe\":[\"Nouvelle console\"],\"2CrSmP\":[\"Aidez tabularis à grandir\"],\"2D9F8_\":[\"Échec de duplication de la connexion\"],\"2Eoi_a\":[\"Voir les détails\"],\"2F4pE5\":[\"Build et tests Rust\"],\"2Fsd9r\":[\"Ce mois-ci\"],\"2JzKXI\":[\"Définir GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Tout sélectionner\"],\"2SO5RM\":[\"Kubernetes n'est pas disponible pour ce pilote.\"],\"2Uh5GA\":[\"écosystème Cargo\"],\"2YylFp\":[\"Nouvelle requête visuelle\"],\"2luuSG\":[\"Réessayer\"],\"2wxgft\":[\"Renommer\"],\"2yG2GC\":[\"Mettre en pause les écritures (ou toutes les requêtes) et demander la validation utilisateur avant exécution.\"],\"30-b5r\":[\"Supprimer\"],\"31kwdN\":[\"Dupliquer le filtre\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Tous les outils\"],\"3Am5DS\":[\"Vue onglets\"],\"3FVg9_\":[\"Colonne locale\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Exécuter\"],\"3L0HCz\":[\"Aucun plugin ne correspond à la recherche.\"],\"3Nv3JV\":[\"Exécution de la requête...\"],\"3TSz9S\":[\"Réduire\"],\"3UW8fG\":[\"Mises à jour gérées par \",[\"0\"]],\"3YvS-c\":[\"Nouvel onglet\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt de nom de cellule de notebook\"],\"3qkggm\":[\"Plein écran\"],\"3rBJ1T\":[\"Afficher le schéma\"],\"3xZ-xV\":[\"Insérer l'horodatage actuel\"],\"40Gx0U\":[\"Fuseau horaire\"],\"41GP4f\":[\"Choisissez le caractère séparateur par défaut utilisé lors de la copie ou de l’export des lignes en CSV.\"],\"42iaEi\":[\"PostgreSQL sans ANALYZE n’affiche que les estimations du planificateur.\"],\"44cXI8\":[\"Trier par \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gérer les bases de données\"],\"4CK17g\":[\"Voulez-vous vraiment modifier la vue \\\"\",[\"name\"],\"\\\" ?\"],\"4DDaw-\":[\"Sélectionnez au moins une base de données\"],\"4D_Nvt\":[\"Échec de création du groupe\"],\"4RiR6c\":[\"Exporter en HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processus enfant\"],\"other\":[\"#\",\" processus enfants\"]}]],\"4VyuY3\":[\"Voulez-vous vraiment effacer tous les logs ?\"],\"4WWqS3\":[\"Afficher/masquer l'arbre JSON\"],\"4XAQdl\":[\"Créer l’index\"],\"4cEClj\":[\"Sessions\"],\"4cmfYp\":[\"Dupliquer la ligne\"],\"4hsr6d\":[\"Créer une vue\"],\"4lIZTB\":[\"Dépendances de développement frontend\"],\"4oYjvJ\":[\"Rechercher…\"],\"4tMxW4\":[\"Aperçu de l'enregistrement lié\"],\"4yJcjm\":[\"Sélectionner le type...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Fermer le panneau de filtres (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Point-virgule (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" événement\"],\"other\":[\"#\",\" événements\"]}]],\"5I2fxu\":[\"/chemin/vers/id_rsa\"],\"5NZpX8\":[\"Vue liste\"],\"5To6Z6\":[\"Copier la requête\"],\"5gqNQl\":[\"Vue grille\"],\"5igIzr\":[\"Import annulé\"],\"5nTIup\":[\"Modification de la vue : \",[\"name\"]],\"5qIe8E\":[\"Tout exécuter\"],\"66bEht\":[\"État du projet\"],\"6PIJVc\":[\"Démarrage\"],\"6QvP0l\":[\"Exporter en JSON\"],\"6W41Xq\":[\"Gestionnaire des tâches\"],\"6WngBH\":[\"Définir NULL\"],\"6YtxFj\":[\"Nom\"],\"6_dCYd\":[\"Vue d’ensemble\"],\"6dOBsk\":[\"Créer la vue\"],\"6gvoHP\":[\"Copier le message d’erreur\"],\"6oCVzX\":[\"Le contexte Kubernetes est requis\"],\"6wQO0f\":[\"Afficher les données\"],\"6z9W13\":[\"Redémarrer\"],\"71agNy\":[\"Générer des noms IA pour les cellules sans nom\"],\"74J3FG\":[\"Version initiale\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Compris\"],\"77nSMU\":[\"Supprimer tout l'historique d'activité IA ? Action irréversible.\"],\"7ABmyQ\":[\"Réessayer\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" sur \",[\"0\"],\" actifs\"],\"7E864M\":[\"Type de base de données\"],\"7FqaG1\":[\"Personnalisez les instructions pour l’analyse IA des plans EXPLAIN. Utilisez \",[\"LANGUAGE\"],\" pour la langue de sortie.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Types mixtes détectés, défaut TEXT\"],\"7RSQQd\":[\"Enregistrer les mots de passe dans le trousseau\"],\"7VpPHA\":[\"Confirmer\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"échouées\"],\"7sMeHQ\":[\"Clé\"],\"7sNhEz\":[\"Nom d’utilisateur\"],\"7tATh2\":[\"Exécuter la requête\"],\"7yb4gk\":[\"Échec : \"],\"8-4V8D\":[\"Tables\"],\"82G-l5\":[\"Le Model Context Protocol (MCP) permet aux assistants IA (comme Claude) de se connecter à vos outils locaux. Tabularis expose un serveur MCP permettant à l’IA de lire le schéma de votre base de données et d’exécuter des requêtes en toute sécurité.\"],\"83VjWE\":[\"Nouveau notebook\"],\"86IgoU\":[\"Exécuter la requête (dans l’éditeur)\"],\"86fCgf\":[\"Personnalisez les instructions pour la génération IA du nom des onglets de résultats. La requête SQL est envoyée comme message utilisateur.\"],\"87a_t_\":[\"Étiquette\"],\"87kWsr\":[\"Exporter les connexions\"],\"8CWirf\":[\"Serveur MCP\"],\"8S8aIX\":[\"Vérification de l’état des connexions\"],\"8TMaZI\":[\"Horodatage\"],\"8Tg_JR\":[\"Personnalisé\"],\"8UFKYr\":[\"Sélectionner la requête à exécuter\"],\"8VKSGV\":[\"Générer le SQL\"],\"8Wjy6z\":[\"Fermer les onglets à gauche\"],\"8ZsakT\":[\"Mot de passe\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Éditeur SQL\"],\"8bRgTe\":[\"Fournisseur IA non configuré. Veuillez aller dans Paramètres > IA.\"],\"8c_W0h\":[\"Anciennes versions\"],\"8guEQP\":[\"Actualiser les vues\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN est léger et principalement structurel.\"],\"8q_sOc\":[\"Supprimer\"],\"8t-akp\":[\"premières \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nom de la connexion\"],\"91gnWY\":[\"Exporter les logs\"],\"91rtHL\":[\"Créer une nouvelle vue\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Nouveau groupe\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vue mise à jour avec succès\"],\"9NzDFn\":[\"Afficher l’écran d’accueil au démarrage de l’application.\"],\"9OoUS3\":[\"Créer une nouvelle connexion SSH\"],\"9QGRD5\":[\"Colonne cible\"],\"9QTny9\":[\"Échec de la requête.\"],\"9S-fyV\":[\"Plan d'exécution préalable\"],\"9SJ_Sx\":[\"Ressources système\"],\"9UQ730\":[\"Cloner\"],\"9X6cky\":[\"NON\"],\"9XUV5V\":[\"Aucune donnée dans le presse-papiers\"],\"9hGjL2\":[\"Créer un index\"],\"9mMU1R\":[\"Temps\"],\"9mvFo_\":[\"Heure\"],\"9npOH9\":[\"Ouvrir un fichier\"],\"9uI_rE\":[\"Annuler\"],\"9xUjzm\":[\"Tout sélectionner\"],\"9y_02p\":[\"Discutez avec la communauté, obtenez de l’aide, proposez des fonctionnalités\"],\"A1pPcI\":[\"Hôte SSH\"],\"A1taO8\":[\"Rechercher\"],\"A6C0pv\":[\"Coût total\"],\"A7WG0p\":[\"Plugin désactivé\"],\"A7yRz3\":[\"La définition de la vue est requise\"],\"A9Uyp6\":[\"Échec de l’import : \"],\"ABEd-z\":[\"Utilisez votre gestionnaire de paquets pour mettre à jour Tabularis.\"],\"AMdgKV\":[\"Prompt d’analyse de plan EXPLAIN\"],\"ANSTMe\":[\"Aucun problème majeur détecté dans le résumé actuel du plan.\"],\"ANzIr7\":[\"Historique des requêtes\"],\"AOnaU7\":[\"ignorées\"],\"AVlZoM\":[\"Environnement\"],\"AXTVsE\":[\"Vérification complète\"],\"AXdRYR\":[\"Logs actuels\"],\"Aa-YkQ\":[\"Exporter le notebook\"],\"Ai2U7L\":[\"Hôte\"],\"AidayG\":[\"Filtrer par niveau\"],\"AlPiMN\":[\"Cliquer pour aller à la page\"],\"An-1rA\":[\"Lignes retournées\"],\"AnV8j-\":[\"Modifier la colonne\"],\"AvEr_L\":[\"Nouvelle console\"],\"AvYbUL\":[\"Mettre une étoile sur GitHub\"],\"Aw_eOs\":[\"Nécessite Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Aucun résultat trouvé\"],\"B0mJGb\":[\"Sortie brute\"],\"B1c58n\":[\"Modifier la colonne\"],\"B3toQF\":[\"Objets\"],\"B5nKny\":[\"/chemin/absolu/vers/dossier\"],\"B5xevr\":[\"Le nom de la connexion est requis\"],\"BAVvWJ\":[\"Diagramme ER\"],\"BBtVak\":[\"Tout réduire\"],\"BEVzjL\":[\"Échec de l’import\"],\"BHATjK\":[\"Exporter les connexions\"],\"BJe2lZ\":[\"Afficher/masquer la barre latérale\"],\"BK3WCj\":[\"Échec de chargement du registre\"],\"BKbO3i\":[\"Notebook modifié\"],\"BMB51y\":[\"Exécuter dans la console\"],\"BNW_Z4\":[\"ex. active_users, order_summary\"],\"BPkXj7\":[\"Créer une clé étrangère\"],\"BUO_JN\":[\"Copier la requête\"],\"BYkhHY\":[\"Vérifier les mises à jour au démarrage\"],\"BeSg6-\":[\"Collecter les logs de l’application en mémoire pour le débogage\"],\"BgAyQH\":[\"Effacer le tri\"],\"BinTJI\":[\"écosystème npm\"],\"BkFson\":[\"Pagination automatique\"],\"Bpglf1\":[\"Monter\"],\"BrGo6h\":[\"Rechercher des notebooks\"],\"BxiAN_\":[\"Supprimer la requête\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dépendances frontend\"],\"CE-M2e\":[\"Infos\"],\"CHIyL8\":[\"Aucun filtre —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Téléchargement...\"],\"CUxwxn\":[\"Afficher toutes les tables\"],\"CWMXbw\":[\"arrêtera brutalement son processus. Toute connexion à la base de données utilisant ce plugin cessera de fonctionner tant que le plugin ne sera pas redémarré.\"],\"CZt6BX\":[\"CONFIGURATION MANUELLE\"],\"Ca8ixZ\":[\"Supprimer\"],\"CbJBQS\":[\"Échec de la mise à jour : \"],\"Cdz-YU\":[\"Vue empilée\"],\"CpeQf9\":[\"Boucles\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Sélectionnez le modèle à utiliser pour la génération et l’explication.\"],\"DB8zMK\":[\"Appliquer\"],\"DDXf5E\":[\"Fonctions SQL\"],\"DEwnwi\":[\"Supprimer\"],\"DNTvdl\":[\"Ouvrir dans l’éditeur\"],\"DPc2P9\":[\"Supprimer la cellule\"],\"DUY8Ba\":[\"Changements incompatibles\"],\"DVnBSM\":[\"Hauteur de ligne\"],\"Dd7YLj\":[\"Peut-être plus tard\"],\"Deej3j\":[\"JSON invalide\"],\"DfKhk_\":[\"Mettre à jour\"],\"DiRiTz\":[\"Ouvrir la page du package\"],\"DlRHAD\":[\"Exécution d’EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" erreur\"],\"other\":[\"#\",\" erreurs\"]}]],\"Dvdihe\":[\"Sur \",[\"0\"],\" — examinez avant exécution.\"],\"DzFLzw\":[\"OUI\"],\"E-JUtQ\":[\"Validation manuelle\"],\"E0kcnZ\":[\"Général\"],\"E2mje_\":[\"Sélectionner la requête à expliquer\"],\"EDieyg\":[\"Voulez-vous vraiment supprimer cette connexion SSH ?\"],\"EHZxPj\":[\"Développer\"],\"EL4oDO\":[\"Nouvelle version disponible\"],\"EPi4gT\":[\"Trier par \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Non groupé\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Inconnu\"],\"EhADgB\":[\"Supprimer la colonne\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Vous êtes à jour\"],\"Em6JFd\":[\"Compter les lignes\"],\"EnGiqG\":[[\"0\"],\" éléments\"],\"Ew1n5z\":[\"Rechercher des plugins…\"],\"F18WP3\":[\"Paramètres\"],\"F3uc1x\":[\"Le fichier exporté contiendra vos mots de passe de base de données et SSH en clair. Conservez-le en lieu sûr.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" lignes\"],\"other\":[\"#\",\" lignes\"]}]],\"F6pfE9\":[\"Active\"],\"F8tXg7\":[\"Aperçu des données\"],\"F9-6yK\":[\"Format de copie par défaut\"],\"F9lxfG\":[\"Supprimer\"],\"F9nsa2\":[\"Le fichier d’historique était corrompu et a été mis de côté. Les nouvelles requêtes seront enregistrées normalement. Fichier de sauvegarde :\"],\"FF_oap\":[\"Valeur par défaut\"],\"FK8rlP\":[\"Aucune connexion SSH configurée pour le moment\"],\"FMRcH8\":[\"Première ligne comme en-tête\"],\"FNvDMc\":[\"Cette semaine\"],\"FQe1FI\":[\"Lignes estimées\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Avertissement\"],\"FZg3wM\":[\"Opération\"],\"Fa_cky\":[\"Schéma : \",[\"tableName\"]],\"FpEL5o\":[\"Choisissez un thème indépendant pour l’éditeur SQL ou gardez-le synchronisé avec le thème de l’application.\"],\"FsvZQL\":[\"Cellule \",[\"n\"],\" modifiée\"],\"FtwKL9\":[\"Changer d’onglet\"],\"FznI3z\":[\"Supprimer la clé étrangère \\\"\",[\"name\"],\"\\\" ?\"],\"G6W8j1\":[\"Échec de l’aperçu : \"],\"G8Q5Zq\":[\"Le namespace est requis\"],\"GAohqx\":[\"Supprimer la colonne\"],\"GJR99u\":[\"Échec de suppression de la colonne : \"],\"GKfzzM\":[\"Choisir une connexion...\"],\"GS-Mus\":[\"Exporter\"],\"GUaLUq\":[\"Échec du chargement du schéma : \"],\"GXP-Iw\":[\"Ajouter une cellule SQL\"],\"Gj1mLb\":[\"Cellules réordonnées\"],\"GlbqG2\":[\"Réinitialiser au défaut du pilote\"],\"Gq1YzP\":[\"Événements\"],\"Gs5AlY\":[\"Ouvrir\"],\"GtmO8_\":[\"de\"],\"GxkJXS\":[\"Téléversement...\"],\"H-o4D2\":[\"Créer une nouvelle colonne\"],\"H2B-KW\":[\"Choisissez le format par défaut lors de la copie des lignes avec Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Rétablir\"],\"H7mlCc\":[\"/chemin/absolu/vers/db.sqlite\"],\"H86f9p\":[\"Réduire\"],\"H9P8CD\":[\"ajouter le premier filtre\"],\"HAQlGl\":[\"Activité IA\"],\"HKNZrs\":[\"Condition d’index\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Supprimer \",\"#\",\" lignes\"],\"other\":[\"Supprimer \",\"#\",\" lignes\"]}]],\"HPuCiP\":[\"Chemin du dossier\"],\"HUs1R3\":[\"Aucun onglet ouvert pour cette connexion.\"],\"HV4Isp\":[\"Saisir le mot de passe SSH\"],\"HVC8Hh\":[\"Copié dans le presse-papier\"],\"HWEpq8\":[\"Écriture disque/s\"],\"HY4nP5\":[\"En ligne\"],\"HcmoWv\":[\"Échec de l’enregistrement de la vue : \"],\"He8v1Y\":[\"Désélectionner de Tout appliquer\"],\"HehHP1\":[\"Disposition par défaut\"],\"HilYn4\":[\"Ce notebook est vide. Ajoutez une cellule pour commencer.\"],\"HjxVK_\":[\"Test rapide de connexion\"],\"HmMnRx\":[\"Mode WKT\"],\"HoKCiI\":[\"L’application redémarrera automatiquement après l’installation\"],\"HpK_8d\":[\"Recharger\"],\"Hpi4Jm\":[\"Rejoindre maintenant\"],\"HuA3RU\":[\"Tabulation\"],\"I128p7\":[\"Barre verticale (|)\"],\"I3AgqA\":[\"Configurer SSH en ligne\"],\"I5VBsr\":[\"Identique à l’application\"],\"I8yrPb\":[\"Remplacer la table\"],\"I92BdB\":[\"Retirer du groupe\"],\"I92fr4\":[\"Me le rappeler plus tard\"],\"I99Miw\":[\"Coût\"],\"IETZIR\":[\"Modifier le nom de la cellule\"],\"IG9wzA\":[\"Échec de l’insertion de la ligne : \"],\"ILleOG\":[\"Le type de ressource doit être \\\"service\\\" ou \\\"pod\\\"\"],\"IQ3gAw\":[\"Téléverser un fichier\"],\"IUwGEM\":[\"Enregistrer les modifications\"],\"IUwmLq\":[\"Dépendances directes déclarées dans package.json et src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Bibliothèques open source\"],\"I_43p6\":[\"Sécurité\"],\"Iaizf4\":[\"Apparence\"],\"Il3FBB\":[\"Afficher/masquer le panneau de filtres structurés\"],\"IniZRK\":[\"Téléchargement indisponible - seul l’aperçu est chargé\"],\"Isaozb\":[\"Vérifier et ajuster\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Les requêtes et connexions actives via ce plugin seront interrompues.\"],\"J6v1s_\":[\"Modèle par défaut\"],\"JE-DVk\":[\"Interpréteur\"],\"JEGlfK\":[\"Début\"],\"JKDPqP\":[\"Sélectionnez d'abord un contexte\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Utiliser un tunnel SSH\"],\"JRz8tw\":[\"MySQL et MariaDB n’exposent des métriques réelles que sur les variantes prises en charge d’EXPLAIN ANALYZE ou ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP ou SVG · max. 512 Ko\"],\"JY5Oyv\":[\"Base de données\"],\"JlFRIB\":[\"Fuseau horaire de session envoyé à MySQL après connexion.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Refusée\"],\"K3H9p5\":[\"Non défini\"],\"K5Dgu_\":[\"Bases de données\"],\"K8IGKf\":[\"Type d’authentification\"],\"KAYNSW\":[\"Combien de logs conserver en mémoire (1-10000)\"],\"KHTGbr\":[\"EXPLAIN préalable\"],\"KHvda8\":[\"Non nul\"],\"KJKNaZ\":[\"Copier comme `column`\"],\"KM5Kc8\":[\"Au moins une colonne doit être sélectionnée\"],\"KSCnVQ\":[\"Type\"],\"KUjOb9\":[\"en cours\"],\"KXBdwy\":[\"Actualiser les routines\"],\"KXNyX7\":[\"Définir DEFAULT\"],\"Kd70-v\":[\"Importer depuis le Presse-papiers...\"],\"KhI4oS\":[\"Ouvrir la ligne référencée dans \",[\"0\"]],\"KhgrNu\":[\"Intégration du serveur MCP\"],\"KirERL\":[\"Délai dépassé\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Échec de suppression de l’index : \"],\"KzeARD\":[\"Échec de suppression de la table : \"],\"L-rMC9\":[\"Réinitialiser par défaut\"],\"L3HXkQ\":[\"Corrections de bugs\"],\"LCZ7Dy\":[\"Copier le nom\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"index\"],\"LMeAoR\":[\"lignes\"],\"LPCdc-\":[\"Prompt de nom d’onglet de requête\"],\"LPFmga\":[\"Sélectionner pour Tout appliquer\"],\"LYzbQ2\":[\"Outil\"],\"Lbis_V\":[\"Navigateur rapide\"],\"Lcpbe2\":[\"Le processus du plugin n’a pas pu être lancé. Vérifiez les détails de l’erreur ci-dessous.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN est uniquement pris en charge pour les instructions DML (SELECT, INSERT, UPDATE, DELETE). Les instructions DDL comme CREATE, DROP ou ALTER ne peuvent pas être expliquées.\"],\"LnT0hQ\":[\"Ajouter une colonne\"],\"LvutiO\":[\"Suggérer avec IA\"],\"M-rHQO\":[\"Quitter le plein écran\"],\"M0XJba\":[\"Voulez-vous vraiment effacer tout l’historique des requêtes pour cette connexion ?\"],\"M1co_O\":[\"Configuré\"],\"M73whl\":[\"Contexte\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Tout afficher\"],\"MXdOwj\":[\"Séparer les connexions\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Sélectionner une connexion K8s\"],\"Mc1tjS\":[\"Activez ANALYZE pour inspecter les lignes réelles, le temps, les boucles et les buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" lignes supplémentaires\"],\"Mp0jQ_\":[\"Ce pilote ne prend en charge les clés primaires qu’à la création de la table\"],\"MqpZwN\":[\"Processus Tabularis\"],\"MxIx43\":[\"↑↓ pour naviguer, Entrée pour ouvrir\"],\"MygtgQ\":[\"Ajouter une cellule Markdown\"],\"N40H-G\":[\"Tous\"],\"N5UQxq\":[\"Ollama non détecté sur le port \",[\"0\"],\". Est-il en cours d’exécution ?\"],\"N6GBcC\":[\"Confirmer la suppression\"],\"N6aqHp\":[\"Requêtes exécutées\"],\"N9_S15\":[\"Une nouvelle table sera créée\"],\"NBdMa1\":[\"Étape la plus lente\"],\"NC2AI2\":[\"Longueur\"],\"NCzNnx\":[\"Tri croissant\"],\"NT4Ubs\":[\"Supprimer la clé personnalisée et revenir à la variable d’environnement (si présente)\"],\"NUjrCO\":[\"Aucun favori ne correspond à votre recherche\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Total de l’arborescence : \",[\"0\"]],\"Nc2VQn\":[\"Ajouter à existante\"],\"NgFERn\":[\"Ajouter aux favoris\"],\"NktMHG\":[\"Nom de la base de données\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Tester\"],\"Nq5QTk\":[\"expliquer la n-ième\"],\"O2STgu\":[\"Échec de l’export : \"],\"O8SV8O\":[\"Téléchargement...\"],\"O9_WW6\":[\"connexion\"],\"OGEsKj\":[\"Exécuter toutes les cellules\"],\"OGWdBg\":[\"Nom de la vue\"],\"OHqT6w\":[\"Appuyez sur une combinaison de touches...\"],\"OXJsaG\":[\"Nom de paramètre invalide\"],\"OfhWJH\":[\"Réinitialiser\"],\"OlAl5i\":[\"Tout développer\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Rejoindre Discord\"],\"P1YGsb\":[\"Génération SQL\"],\"P2m1xb\":[\"Arrêter en cas d’erreur\"],\"P3Qlys\":[\"Aucun ID de connexion\"],\"P6Y3Yf\":[\"Exécutez cette commande dans votre terminal, puis redémarrez Claude Code.\"],\"PCdj-c\":[\"Tout désélectionner\"],\"PMnFt9\":[\"Lecture disque/s\"],\"PQU2Va\":[\"Accepter la suggestion avec Entrée\"],\"PRnH8G\":[\"sur \",[\"0\"]],\"PY8UF3\":[\"Parallèle basculé (cellule \",[\"n\"],\")\"],\"PiH3UR\":[\"Copié !\"],\"Pia95d\":[\"Le nom de la colonne est requis\"],\"PrElXQ\":[\"Mettre à jour\"],\"PrixCC\":[\"Les lignes seront ajoutées à une table existante\"],\"Pujgbb\":[\"Configurer la destination\"],\"Pw_eQV\":[\"Échec de démarrage du plugin\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Aucune requête enregistrée\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Aucun processus enfant\"],\"QCxMC0\":[\"Vérifier automatiquement les nouvelles versions au lancement de l’application\"],\"QEazml\":[\"Supprimer la sélection\"],\"QHcLEN\":[\"Connecté\"],\"QLHHFO\":[\"Mode lecture seule\"],\"QOvAW3\":[\"Nouvelles fonctionnalités\"],\"QULGRi\":[\"Aucune requête valide trouvée\"],\"QZwllF\":[\"Parcourir...\"],\"QbkSr_\":[\"EXPLAIN indisponible.\"],\"QeHFYZ\":[\"EXPLAIN a échoué : \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"En savoir plus\"],\"Qu4Hog\":[\"Notebook importé avec succès\"],\"R-A2Vd\":[\"Aucune donnée à afficher\"],\"R0Hkb2\":[[\"0\"],\" base(s) de données sélectionnée(s)\"],\"R1nHhB\":[\"Existe déjà\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convertir en console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configuration\"],\"RF-HyV\":[\"Choisissez votre langue préférée. \\\"Auto\\\" utilisera la langue de votre système.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copier le nom\"],\"RI-HZc\":[\"Saisir la clé \",[\"0\"]],\"RJrE17\":[\"Voulez-vous vraiment supprimer la vue \\\"\",[\"0\"],\"\\\" ?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Une étoile aide d’autres personnes à découvrir le projet\"],\"Rb3Tdm\":[\"Nom du notebook\"],\"RcbKJ3\":[\"À la mise à jour\"],\"RkefFq\":[\"Exécute EXPLAIN avant d'afficher le modal pour montrer le plan.\"],\"RnF_hl\":[\"Chargement du registre des plugins...\"],\"Rns7_C\":[\"Cette action ne peut pas être annulée immédiatement\"],\"RoKRqW\":[\"Plugins disponibles\"],\"RphpKk\":[\"Apparence\"],\"Rt8sHM\":[\"Travail de tri ou temporaire détecté\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Activés\"],\"S1veKH\":[\"Annuler la sélection\"],\"S5zeZU\":[\"Afficher/masquer l’aperçu\"],\"S8Yqbl\":[\"Insérer\"],\"SDND4q\":[\"Non configuré\"],\"SJRy3D\":[\"(Généré automatiquement)\"],\"SSwIjo\":[\"Définir EMPTY\"],\"SgvA_r\":[\"Appuyez sur Exécuter (Ctrl/Commande+F5) pour charger les données de la table\"],\"SlfejT\":[\"Erreur\"],\"SoATkx\":[\"Copier la cellule\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL du point de terminaison\"],\"T7w5CQ\":[\"Échec de création de la nouvelle ligne : \"],\"T9947j\":[\"Valeur (ex. 'texte' ou 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Passer en disposition verticale\"],\"TK5oex\":[\"Enregistrer le prompt\"],\"TKQ7K-\":[\"Installer\"],\"TKZreP\":[\"Exiger\"],\"TMLAx2\":[\"Requis\"],\"TO08JI\":[\"clés étrangères\"],\"TVKqvO\":[\"Modifier la ligne\"],\"TYSdQ3\":[\"Exécuter une requête SELECT\"],\"TfDFHS\":[\"Retourne les longues lignes dans l’éditeur au lieu d’un défilement horizontal.\"],\"Tibfjs\":[\"Aucune connexion enregistrée — créez-en une ci-dessous\"],\"Tj36Dr\":[\"Réinitialiser par défaut\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Verrouiller\"],\"TpwXyg\":[\"Si le temps manque, le serveur a probablement renvoyé un plan uniquement estimé.\"],\"Tw2M1h\":[\"Échec de l’installation\"],\"Ty-rm9\":[\"Connexions SSH\"],\"Tz0i8g\":[\"Paramètres\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Connexions Kubernetes\"],\"U4uzyV\":[\"Nouveautés\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Arrêter l’exécution lorsqu’une cellule échoue\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" sur \",[\"1\"],\" — examinez avant exécution.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configuration installée avec succès pour \",[\"clientName\"],\" ! Redémarrez l’application pour l’appliquer.\"],\"URmyfc\":[\"Détails\"],\"UWQBvp\":[\"Générer des modèles SQL\"],\"UawTKZ\":[\"Optionnel. Spécifiez l’exécutable utilisé pour lancer ce plugin (ex. python3 sous macOS/Linux, python ou un chemin complet sous Windows). Laissez vide pour utiliser la valeur par défaut.\"],\"Ub8sf5\":[\"SQLite ne prend pas en charge la suppression des clés étrangères via ALTER TABLE.\"],\"UbbJ8j\":[\"Aucune option trouvée\"],\"Ubs68g\":[\"Général\"],\"UftN8J\":[\"Ces connexions refuseront les écritures via MCP. Les autres restent normales.\"],\"UnQNah\":[\"Voulez-vous vraiment supprimer la colonne \\\"\",[\"0\"],\"\\\" de la table \\\"\",[\"tableName\"],\"\\\" ?\\n\\nATTENTION : toutes les données de cette colonne seront définitivement supprimées. Cette action est irréversible.\"],\"UncTTh\":[\"Somme du RSS sur l’arborescence des processus — peut surestimer la mémoire partagée\"],\"UpjgFm\":[\"Paramètres modifiés\"],\"UsAnu1\":[\"ANALYZE exécute la requête. Utilisez-le avec prudence pour les instructions modifiant les données.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Taille de tabulation\"],\"UzWGWO\":[\"Basculer vers le champ SQL WHERE\"],\"V-chk5\":[\"À quelle fréquence vérifier si les connexions actives sont toujours vivantes. Définissez 0 pour désactiver.\"],\"V-pw1j\":[\"Nom de la table\"],\"V2T0Uw\":[\"Aucun notebook enregistré pour le moment.\"],\"V3aNwx\":[\"Éditeur de données\"],\"VGYp2r\":[\"Appliquer à tout\"],\"VH8S7x\":[\"Colonne du presse-papiers\"],\"VIAEcS\":[\"Échec du chargement des bases de données. Vérifiez vos identifiants.\"],\"VKdztF\":[\"Ajouter des lignes\"],\"VLiHXI\":[\"Analyser les données\"],\"VMbmXc\":[\"Voulez-vous vraiment supprimer \\\"\",[\"pluginName\"],\"\\\" ? Cela supprimera les fichiers du plugin.\"],\"VO3weF\":[\"Aucun fichier chargé\"],\"VOZlKc\":[\"Importer une base de données\"],\"VPzsIz\":[\"Génération du nom...\"],\"VUul0v\":[\"Tuer\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Toutes les requêtes\"],\"Vi2Pqx\":[\"par\"],\"Vl2zn2\":[\"arrêté\"],\"Vo4uBA\":[\"Une erreur s’est produite lors de l’installation du plugin. Voir les détails ci-dessous.\"],\"VqqyOs\":[\"Exécutez une requête pour voir les résultats\"],\"VzhDFh\":[\"Bloquer tout statement non-SELECT via MCP, sauf pour les connexions autorisées ci-dessous.\"],\"W3uwpT\":[\"Fermer tous les onglets\"],\"W4MKLh\":[\"ex. Risqué en prod, confirmez…\"],\"W60eXm\":[\"Table\"],\"WA8RND\":[\"Voulez-vous vraiment supprimer la table \\\"\",[\"0\"],\"\\\" ?\"],\"WG8Qgt\":[\"Supprimer la table\"],\"WLnvCZ\":[\"Saisir le nom d'utilisateur\"],\"WM-__8\":[\"Rechercher des connexions...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes importées dans \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" lignes importées dans \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Voulez-vous vraiment supprimer la requête \\\"\",[\"0\"],\"\\\" ?\"],\"WarTN_\":[\"réussies\"],\"WcF1uL\":[\"Nom du groupe\"],\"Weq9zb\":[\"Général\"],\"WmPpB1\":[\"Chargement du plan d'exécution…\"],\"Wu7cK0\":[\"Aucune base de données trouvée\"],\"WvoUQF\":[\"Cellule \",[\"n\"],\" supprimée\"],\"Ww3pDD\":[\"COMMANDE MANUELLE\"],\"X-20AU\":[\"Saisir le prompt de nom d’onglet de requête...\"],\"X-U6_w\":[\"Famille de police\"],\"X5fs0g\":[\"Créez votre première connexion pour commencer.\"],\"X7Ayjp\":[\"Mot de passe enregistré dans le trousseau système\"],\"X9kySA\":[\"Favoris\"],\"XJOV1Y\":[\"Activité\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Explication de requête\"],\"XVF2Pf\":[\"Modifier les schémas\"],\"XW6OYF\":[\"Ce plugin peut nécessiter un interpréteur (ex. Python). Utilisez les paramètres du plugin pour configurer le chemin de l’interpréteur.\"],\"XZB6Xr\":[\"Nombre max d’entrées de log\"],\"Xcffv2\":[\"Afficher les boutons AI Assist et Explain dans l’éditeur\"],\"XeqTSh\":[\"Type de jointure\"],\"XmJfZT\":[\"nom\"],\"XoQfG1\":[\"Utilisateur SSH\"],\"XwI0Vw\":[\"Auto (Système)\"],\"XyDlLX\":[\"Nom de l’index\"],\"Y2P2aK\":[\"Sélectionnez les schémas à charger :\"],\"Y8HYw2\":[\"valeur\"],\"Y8zX3R\":[\"Insérer dans l’éditeur\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Rechercher...\"],\"YWlnMZ\":[\"Port Ollama\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Parcourez et installez des plugins depuis le registre.\"],\"Y_3yKT\":[\"Ouvrir dans un nouvel onglet\"],\"YiAQ_Q\":[\"Actualiser les tables\"],\"Ysjr9Y\":[\"Aperçu SQL\"],\"YswNf7\":[\"Tous les niveaux\"],\"YtNwr6\":[\"Nombre maximal d’entrées d’historique de requêtes stockées par connexion.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Chargement...\"],\"Z7ZXbT\":[\"Approuver\"],\"Z8JpBH\":[\"Exporter en Notebook\"],\"Z8fBIc\":[\"Les lignes réelles dépassent l’estimation\"],\"ZC2VJP\":[\"Exécuter\"],\"ZCIS4k\":[\"aucun filtre actif\"],\"ZF1_UT\":[\"Mode SSL\"],\"ZGjBPa\":[\"Effacer les logs\"],\"ZHQTlM\":[\"Import depuis\"],\"ZIFDoJ\":[\"Veuillez sélectionner au moins Structure ou Données\"],\"ZIZA6o\":[\"Modifier avant d'approuver\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avertissements d'analyse\"],\"other\":[\"#\",\" avertissements d'analyse\"]}]],\"ZVn8p2\":[\"Affiche les numéros de ligne dans la marge de l’éditeur.\"],\"ZYnwzF\":[\"Déconnecté\"],\"Za3_fO\":[\"Erreur\"],\"ZcOxO1\":[\"Créer la clé étrangère\"],\"Zf7LHg\":[\"Aucun contexte trouvé (kubectl est-il installé ?)\"],\"Zfotp5\":[\"De grands écarts d’estimation indiquent généralement des statistiques obsolètes ou des prédicats mal modélisés par le planificateur.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Échec du chargement des schémas\"],\"ZqXGPF\":[\"Échec de suppression de la vue : \"],\"ZuL73E\":[\"Créer une nouvelle vue de base de données\"],\"_-bi4r\":[\"Table référencée\"],\"_AEYGI\":[\"Aucun historique d’exécution pour le moment\"],\"_FdpZc\":[\"Échec du chargement de la définition de la vue : \"],\"_FxSdi\":[\"Parcourez les dépendances open source directes utilisées par l’application, le backend et l’outillage.\"],\"_JyTG8\":[\"Saisir le prompt d’explication...\"],\"_Ltc_k\":[\"Suppléments\"],\"_Q2Wix\":[\"lignes\"],\"_TK1zF\":[\"Connexion enregistrée\"],\"_bJFBE\":[\"Délai d’expiration de connexion\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Arborescence\"],\"_dqduX\":[\"Page suivante\"],\"_fwE6J\":[\"Plus ancien\"],\"_n04sB\":[\"Tuer\"],\"_otxbQ\":[\"Fichier de clé\"],\"_pezIT\":[\"Échec de connexion à \",[\"0\"],\". Vérifiez vos paramètres ou assurez-vous que la base de données est en cours d’exécution.\"],\"_srfkj\":[\"Clé personnalisée supprimée avec succès\"],\"_t6aFo\":[\"MySQL et MariaDB peuvent revenir à EXPLAIN FORMAT=JSON ou à EXPLAIN tabulaire selon la version du serveur.\"],\"_xTbaM\":[\"colonnes\"],\"_yxaaL\":[\"Index unique\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis est un projet libre et open source. Si vous le trouvez utile, pensez à soutenir le projet et à rejoindre la communauté.\"],\"a9CASo\":[\"SQLite ne prend en charge que le renommage des colonnes. Les autres modifications nécessitent de recréer la table manuellement.\"],\"aAIQg2\":[\"Apparence\"],\"aAURrV\":[\"Installé\"],\"aC_vCa\":[\"Générer un nom avec l’IA\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Sélectionnez un nœud pour voir les détails\"],\"aHKcKc\":[\"Page précédente\"],\"aI-5wG\":[\"Vérifier CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valeur par défaut\"],\"aScJP1\":[\"Exécuter cette requête\"],\"aVNbN8\":[\"Conditions de filtre\"],\"aWhdMQ\":[\"Utiliser une connexion SSH existante\"],\"aXYd8V\":[\"Délai\"],\"aX_S_r\":[\"Page \",[\"0\"],\" sur \",[\"totalPages\"]],\"agZcf8\":[\"SQL généré : \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [champs]\"],\"alplHn\":[\"Analyse du plan de requête avec l’IA...\"],\"anBcU3\":[\"Si vous aimez tabularis et souhaitez voir davantage de fonctionnalités, pensez à soutenir le projet en contribuant au code, en signalant des bugs ou en mettant une étoile au dépôt.\"],\"arHmj2\":[\"Voulez-vous vraiment supprimer cette requête de l’historique ?\"],\"arKcqW\":[\"Les anciens serveurs peuvent revenir à des plans estimés avec moins de métriques.\"],\"arcpYe\":[\"Validation requise\"],\"aurEkh\":[\"Chargement des processus…\"],\"avtdsd\":[\"Mode SQL\"],\"az8lvo\":[\"Désactivée\"],\"b1Ah3z\":[\"Focalisé sur\"],\"b392Dr\":[\"Tout développer\"],\"b5S_PU\":[\"Nom de la base de données\"],\"bAvovP\":[\"Descendre\"],\"bH3JqY\":[\"Aucune table trouvée\"],\"bP5JOn\":[\"Retour à la ligne automatique\"],\"bcOdok\":[\"Supprimer le groupe\"],\"bcqeas\":[\"Mettre toutes les requêtes MCP en lecture seule\"],\"bmca5u\":[\"Écritures seulement\"],\"bpCiBU\":[\"Autoriser les écritures via MCP\"],\"bqnhqW\":[\"L’estimation dépasse les lignes réelles\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Erreur\"],\"bw22Gk\":[\"Schéma des colonnes\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Principaux problèmes\"],\"cFCKYZ\":[\"Refuser\"],\"cFGrCP\":[\"table\"],\"cGeFup\":[\"Taille de police\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focaliser sur la table\"],\"cM9NHc\":[\"Rétrograder vers\"],\"cO9-2L\":[\"Désactiver\"],\"cSev-j\":[\"Filtres\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importer \",\"#\",\" lignes\"],\"other\":[\"Importer \",\"#\",\" lignes\"]}]],\"c_xoSn\":[\"Cellule \",[\"n\"],\" renommée\"],\"cd0XEW\":[\"Enregistrer la requête\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Diviser le groupe\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" instructions\"],\"d34vwG\":[\"Charger les bases de données\"],\"d6ynQ7\":[\"Tri décroissant\"],\"d8_6_v\":[\"annuler\"],\"d8wc1_\":[\"Exemples de valeurs\"],\"dBXoCS\":[\"Une variable d’environnement est présente, mais vous pouvez la remplacer en définissant une clé ci-dessus.\"],\"dD7NPy\":[\"Plan\"],\"dEgA5A\":[\"Annuler\"],\"dMtLDE\":[\"à\"],\"dPJVhW\":[\"Échec de l’installation\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" session\"],\"other\":[\"#\",\" sessions\"]}]],\"dTUzKm\":[\"Exécuter la sélection (\",[\"0\"],\")\"],\"dU_iQN\":[\"Aucune session ne correspond aux filtres.\"],\"dUh9QW\":[\"Planification\"],\"dVoir2\":[\"Cellule Markdown \",[\"n\"],\" ajoutée\"],\"dZ0d2O\":[\"Veuillez sélectionner au moins une table\"],\"dhi13U\":[\"Choisir une image…\"],\"dli1JX\":[\"Soumettre les modifications\"],\"dmYV6f\":[\"Routines\"],\"dohZCo\":[\"Instructions pour la génération SQL par IA. Utilisez \",[\"SCHEMA\"],\" comme espace réservé pour la structure de la base de données.\"],\"dtxpK2\":[\"Analyser\"],\"dwW9nJ\":[\"Afficher les numéros de ligne\"],\"dwWVw_\":[\"Afficher l’écran d’accueil\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" onglet\"],\"other\":[\"#\",\" onglets\"]}]],\"dxxY9r\":[\"Si existe\"],\"dyN4j9\":[\"Cliquez sur \\\"Exécuter l’aperçu\\\" pour voir les résultats\"],\"e07Iz5\":[\"Ouvrir le gestionnaire des tâches\"],\"e0NzXu\":[\"Ce projet est un Work In Progress (WIP). Les fonctionnalités principales sont stables, mais nous avons de grands projets.\"],\"e1UKxf\":[\"Enregistrer cette requête\"],\"e34gdU\":[\"Temps d'attente avant échec.\"],\"e62LQd\":[\"Forcer l’arrêt\"],\"e6QZsM\":[\"Thème de l’éditeur\"],\"e8CirT\":[\"Exécuter la requête\"],\"eD2kUP\":[\"Buffers lus\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Saisir le prompt d’analyse de plan EXPLAIN...\"],\"eIVolo\":[\"Lecture/écriture disque\"],\"eJOEBy\":[\"Exportation...\"],\"eKHY3W\":[\"Paramètres du plugin\"],\"eMb6Ub\":[\"Choisir une ressource...\"],\"ePK91l\":[\"Modifier\"],\"eXweu6\":[\"Développer la cellule\"],\"ecNsTE\":[\"Aucune requête ne correspond à votre recherche\"],\"ecUA8p\":[\"Aujourd’hui\"],\"ecpIZP\":[\"Saisissez la phrase secrète si la clé est chiffrée\"],\"ejmeDY\":[\"Installés\"],\"esl-Tv\":[\"Type de ressource\"],\"exyUec\":[\"Connexion\"],\"f2AJjl\":[\"Supprimer la ligne\"],\"f4pD-j\":[\"Échec du test de connexion\"],\"f7sXvi\":[\"Saisir le mot de passe\"],\"fAsxc0\":[\"Scans séquentiels\"],\"fIeFs0\":[\"Sélectionner une valeur...\"],\"fJm92A\":[\"Sélectionnez un fichier contenant un plan EXPLAIN (format JSON ou texte PostgreSQL) pour le visualiser.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Valeurs\"],\"f_b1TA\":[\"Historique d’exécution\"],\"fghnqP\":[\"Passer à la connexion 1-9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Virgule (,)\"],\"fp711N\":[\"Bloquée (lecture seule)\"],\"fpzyLj\":[\"Page \",[\"0\"],\" sur \",[\"1\"]],\"fuA6oy\":[\"Délai d’expiration du socket\"],\"fvImQM\":[[\"0\"],\" sélectionnées\"],\"fwr_nh\":[\"Installez des extensions, gérez les pilotes de plugins et gardez les paramètres d'exécution sous contrôle.\"],\"g0ZzK4\":[\"JSON valide\"],\"g11hAR\":[\"Nouvelle ligne\"],\"g8VcMm\":[\"Mon cluster K8s\"],\"gCFR_O\":[\"Exécution parallèle (Tout exécuter)\"],\"gEjU98\":[\"Ouvrir les connexions\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Au moins une colonne est requise\"],\"gSuQrG\":[\"Aucune connexion ne correspond à \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Relancer la requête\"],\"gZWMnn\":[\"Analyse IA\"],\"ghYd73\":[\"Choisir la cible...\"],\"giAqEC\":[\"Créer une nouvelle table\"],\"gnQS8X\":[\"Taille maximale de paquet utilisée par le connecteur MySQL.\"],\"gqV5VL\":[\"Intégré, non personnalisable\"],\"gww_XE\":[\"Colonne référencée\"],\"gxXPJ9\":[\"Configurer l’interpréteur\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Agrandir\"],\"h-XNc9\":[\"Délimiteur CSV\"],\"h-kNAk\":[\"ex. donnees_ventes\"],\"h3Z_aK\":[\"Écrivez du Markdown ici...\"],\"h7MgpO\":[\"Raccourcis clavier\"],\"h7peZQ\":[\"Autoriser\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processus système en cours\"],\"other\":[\"#\",\" processus système en cours\"]}]],\"hEZrFh\":[\"Exécuter un fichier SQL...\"],\"hEipgW\":[\"Vérifier les mises à jour maintenant\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Exporter en CSV\"],\"hItdtk\":[\"Parcourir le dossier\"],\"hXFVjo\":[\"Le nom de la table est requis\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Relancer\"],\"hbz1rh\":[\"clés\"],\"hdsaJo\":[\"Importation...\"],\"he3ygx\":[\"Copier\"],\"hfGimp\":[\"Choisir un namespace...\"],\"hjjSEi\":[\"Connexions en lecture seule\"],\"hjwN_s\":[\"Nom de la ressource\"],\"hlF1mD\":[\"Copier la sélection\"],\"hnboBb\":[\"Analyse IA du plan de requête\"],\"hnvu2p\":[\"Détails de l’erreur\"],\"hq4-D2\":[\"La clé API est stockée en toute sécurité dans le trousseau système. Définir une clé ici remplace la variable d’environnement.\"],\"hqjXdn\":[\"Échec de suppression de la connexion SSH\"],\"hqofAK\":[\"Copier le SQL\"],\"hy6L14\":[\"Voir sur GitHub\"],\"hyjACX\":[\"Cellules réduites/développées\"],\"hz1b5W\":[\"Aucun élément correspondant trouvé\"],\"i1vAVM\":[\"Créer nouvelle table\"],\"i3S5T3\":[\"Rechercher dans les favoris...\"],\"i4_LY_\":[\"Écriture\"],\"i5HBWh\":[\"Historique des requêtes réinitialisé\"],\"i5zCt4\":[\"Tableau\"],\"iAVlge\":[\"Personnalisez les instructions pour la génération IA des noms de cellules de notebook. Le contenu de la cellule (SQL ou Markdown) est envoyé comme message utilisateur.\"],\"iE1yAB\":[\"Filtrer les tables...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connecter\"],\"iSryJ2\":[\"Mon serveur SSH\"],\"iT7UeX\":[\"Ajouter un index\"],\"iUWwuR\":[\"Télécharger et installer\"],\"ia7i08\":[\"Sélectionnez d'abord contexte/namespace/type\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Enregistré\"],\"igcsfY\":[\"Aucun plugin disponible dans le registre.\"],\"ij-Elv\":[\"Aperçu de l’image\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" requêtes explicables trouvées\"],\"other\":[\"#\",\" requêtes explicables trouvées\"]}]],\"ioL38P\":[\"Surveillez en temps réel les processus plugins, le CPU, la RAM et l’utilisation disque\"],\"ixlL_e\":[\"Fichier de clé SSH (optionnel)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Sélectionner un modèle\"],\"j3gyYH\":[\"Tout appliquer\"],\"j5CWO4\":[\"À jour\"],\"j9HPuI\":[\"Ligne n°\",[\"0\"]],\"jBtpMP\":[\"Tous les statuts\"],\"jEu4bB\":[\"Colonnes\"],\"jEyQIs\":[\"Aucune routine trouvée\"],\"jHc1By\":[\"Supprimer la vue\"],\"jI6sj4\":[\"Le coût, le temps et les estimations de lignes sont souvent indisponibles comparés à PostgreSQL et MySQL.\"],\"jIxQCZ\":[\"Indisponible sur votre plateforme\"],\"jKIncn\":[\"Le nom de la base de données est requis\"],\"jPSk57\":[\"Motif (facultatif)\"],\"jUNY_d\":[\"vue\"],\"jVqjDo\":[\"Format de fichier notebook invalide\"],\"jWSZ-A\":[\"Aperçu uniquement - données complètes non chargées\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Délai d’expiration du socket en millisecondes.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Le nom de la connexion est requis\"],\"jsQZMk\":[\"IA\"],\"juO8wz\":[\"processus enfant\"],\"jx0t66\":[\"Réduire les processus enfants\"],\"k-0mL-\":[\"Ajouter une colonne\"],\"k-XiMX\":[\"Brut\"],\"k2UnVy\":[\"Condition hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"secondes\"],\"kBiBq7\":[\"Supprimer l’index \\\"\",[\"name\"],\"\\\" ?\"],\"kEYasw\":[\"Afficher/masquer le graphique\"],\"kI1qVD\":[\"Formater\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes · \",[\"1\"],\" ms\"],\"other\":[\"#\",\" lignes · \",[\"2\"],\" ms\"]}]],\"kJDmsI\":[\"Détails de l'événement\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registre\"],\"kY-q3P\":[[\"label\"],\" est requis\"],\"kexIdC\":[\"Utiliser le Port-Forward Kubernetes\"],\"krksx_\":[\"Succès\"],\"ktYUe9\":[\"Tout exécuter\"],\"kwY6nh\":[\"Fermer\"],\"kx0s-n\":[\"Résultats\"],\"kxUEfE\":[\"Échec de récupération de la définition de la routine : \"],\"l2Op2p\":[\"Paramètres de requête\"],\"l9Ivba\":[\"Processus plugins et ressources système\"],\"lBdPxu\":[\"Couleur d'accent\"],\"lCF0wC\":[\"Actualiser\"],\"lEQRwq\":[\"Données (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nouvelle table créée\"],\"lOekZ3\":[\"Passer en disposition horizontale\"],\"lUA1C1\":[\"Phrase secrète de clé SSH (optionnel)\"],\"lVeG20\":[\"Dépendances Rust\"],\"lXAG6D\":[\"Instructions pour l’explication de requêtes par IA. Utilisez \",[\"LANGUAGE\"],\" comme espace réservé pour la langue de sortie.\"],\"lbbYjy\":[\"Modifiez directement le fichier de configuration brut. Un redémarrage est nécessaire pour appliquer les changements.\"],\"lhKW0m\":[\"Cellule SQL \",[\"n\"],\" ajoutée\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Taille de page des résultats (limite)\"],\"lkz6PL\":[\"Durée\"],\"lmVGeo\":[\"Ajouter une clé étrangère\"],\"lnnx3E\":[\"Connectez Tabularis à Claude Desktop, Cursor et plus encore\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Ajouter\"],\"m2Q_r8\":[\"Détecter le JSON dans les colonnes texte\"],\"m2tskz\":[\"Succès\"],\"mA-qpe\":[\"Exécution complète\"],\"mBhhbA\":[\"Logs exportés dans le presse-papiers\"],\"mCNdzH\":[\"Exécuter la cellule\"],\"mO95sp\":[\"Fermer le panneau\"],\"mP7dLi\":[\"Saisissez le nom de la police ci-dessus\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloqué\"],\"other\":[\"#\",\" bloqués\"]}]],\"mS74ir\":[\"Échec de l’enregistrement de la connexion SSH\"],\"mSqtw8\":[\"Exécuter l’aperçu\"],\"mURmfQ\":[\"Définition de la vue (SQL)\"],\"mX_isJ\":[\"Verticale\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Structure (DDL)\"],\"mrk4Cf\":[\"Trier par \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Nous venons d’ouvrir une communauté dédiée à Tabularis : entraide, astuces et influence sur la roadmap.\"],\"mtvVdV\":[\"Lignes traitées\"],\"mx4evv\":[\"Créer la table\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Télécharger\"],\"n7JDTx\":[\"Installez et activez des plugins pour les voir ici\"],\"nDDJir\":[\"Rechercher session, client, connexion…\"],\"nHP-Kr\":[\"Aucune session active. Veuillez sélectionner une connexion.\"],\"nKhCjW\":[\"Sélectionner les tables\"],\"nNwvm4\":[\"Erreur\"],\"nOVim5\":[\"Échec de l’enregistrement de la connexion\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Événements\"],\"nf14vn\":[\"Extension requise : \",[\"0\"]],\"ngO6Pv\":[\"Autorise la touche Entrée (en plus de Tab) à accepter la suggestion d’autocomplétion active. Lorsqu’elle est désactivée, Entrée insère toujours un saut de ligne.\"],\"nhmF3p\":[\"connexions\"],\"noM5A_\":[\"Créez votre première connexion\"],\"nohy4m\":[\"Aucune activité MCP.\"],\"nr-axf\":[\"Supprimer le plugin\"],\"nsPFX9\":[\"Ouvrir dans Visual Explain\"],\"nuBbBr\":[\"Graphique\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Exporter la base de données\"],\"o-XJ9D\":[\"Modifier\"],\"o21Y-P\":[\"entrées\"],\"o3tP_A\":[\"Supprimer l’index\"],\"o45L8r\":[\"Indiquez le nom de votre connexion\"],\"o53XGh\":[\"Copier la/les ligne(s) sélectionnée(s)\"],\"o7J4JM\":[\"Filtre\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Niveau\"],\"oGiIL7\":[\"Fournisseur par défaut\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connexion perdue\"],\"oJlXF2\":[\"Importer le notebook\"],\"oMFv82\":[\"Diviser verticalement\"],\"oOFiQg\":[\"Limite le nombre de lignes récupérées par requête afin d’éviter les problèmes de performance. Définissez 0 pour désactiver la limite (non recommandé).\"],\"oT9ZD3\":[\"Masquer la vue d’ensemble\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Graphique modifié (cellule \",[\"n\"],\")\"],\"oWfclW\":[\"Affiche le visualiseur JSON lorsqu'une cellule texte non typée contient un objet ou un tableau JSON. Ajoute un petit coût d'analyse par cellule.\"],\"obpbdz\":[\"Fichier de configuration introuvable (à créer manuellement)\"],\"odZgfC\":[\"CLIENTS IA\"],\"ogZhXn\":[\"Choisissez la direction de disposition par défaut pour les diagrammes ER\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Lignes réelles\"],\"olWzar\":[\"Forcer l’arrêt du processus du plugin\"],\"ovBPCi\":[\"Défaut\"],\"owzTWN\":[\"Modèles IA actualisés depuis les fournisseurs\"],\"oxYi6j\":[\"Ajustez la taille de police de base utilisée dans toute l’application (10-20 px).\"],\"p--hsQ\":[\"Une connexion à la base de données a été perdue\"],\"p6NueD\":[\"NOUVELLE\"],\"pOYHox\":[\"Actions\"],\"pR9bTR\":[\"Aucune donnée BLOB\"],\"pS8S5q\":[\"ex. users, orders, products\"],\"pSws_M\":[\"Nom de la table\"],\"pVLbKZ\":[\"Vue créée avec succès\"],\"pWT04I\":[\"Vérification...\"],\"pZJ_6D\":[\"Le nom de l’index est requis\"],\"pddYFG\":[\"Saisir le prompt de nom de cellule de notebook...\"],\"pnpyuD\":[\"Activer les logs\"],\"pqKMPv\":[\"Échec de la création de la table : \"],\"pqaP1h\":[\"Fermer\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"ex. Comic Sans MS\"],\"pzu7v4\":[\"Horizontale\"],\"q-ch8m\":[\"Les autres restent en lecture seule. Seules celles cochées peuvent écrire.\"],\"qA5jLs\":[\"Détails de l’erreur\"],\"qIrtcK\":[\"Mises à jour\"],\"qOqy8G\":[\"Vérification de la configuration...\"],\"qWaVNs\":[\"Enregistrer et redémarrer\"],\"qb3LPX\":[\"Afficher le diagramme ER\"],\"qkK0vq\":[\"Le nom de la vue est requis\"],\"qki9tG\":[\"Erreur\"],\"qoIir-\":[\"L’URL de base de votre API compatible OpenAI. Exemples : https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Tout réduire\"],\"r6ncaO\":[\"Fermer l’onglet\"],\"rAJlpP\":[\"Port du conteneur\"],\"rG3WVm\":[\"Lecture\"],\"rGRCeK\":[\"Effacer l’historique des requêtes\"],\"rNIto7\":[\"Le nom de la ressource est requis\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exporté avec succès\"],\"rY4sEV\":[\"Supprimer la clé étrangère\"],\"rbu0nO\":[\"Gérer les connexions SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connexion(s)\"],\"other\":[\"#\",\" connexion(s)\"]}]],\"rn2_2V\":[\"Supprimer le filtre\"],\"roABNH\":[\"Aucun historique de requêtes\"],\"rtir7c\":[\"inconnu\"],\"ru0-2W\":[\"Aucune connexion active\"],\"rvDPWO\":[\"Écart d’estimation\"],\"rwWjWg\":[\"Notes de version\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Tester la connexion\"],\"sBOaim\":[\"Le fichier de configuration a été enregistré. Redémarrer maintenant pour appliquer les changements ?\"],\"sCyv9B\":[\"Actualiser les modèles\"],\"sSUqe4\":[\"Supprimer\"],\"sUBkgN\":[\"Génération du SQL...\"],\"sZZG3d\":[\"Voulez-vous vraiment importer \\\"\",[\"0\"],\"\\\" ?\\nCela peut écraser des données existantes.\"],\"sbK5ck\":[\"Rechercher dans l’historique...\"],\"sq_bS6\":[\"À la suppression\"],\"suW7-E\":[\"Délai d’expiration de connexion en millisecondes.\"],\"suqtBX\":[\"Échap pour fermer\"],\"t-R8-P\":[\"Exécution\"],\"t1OfVY\":[[\"totalLibraries\"],\" bibliothèques\"],\"t2TMzs\":[\"Fermer l’onglet\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Sélectionner une table...\"],\"t7KRl1\":[\"Journal de chaque appel MCP et des requêtes en attente de validation. Stockage local.\"],\"t9NJIk\":[\"Opérations gourmandes en scans détectées\"],\"tB7xof\":[\"Opérations temporaires ou de tri\"],\"tBBXTO\":[\"Intervalle de ping\"],\"tFrT3w\":[\"Ajoutez ceci manuellement au fichier de configuration de votre client si l’installation automatique échoue.\"],\"tJ7UbA\":[\"expliquer la sélection\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Diviser horizontalement\"],\"tQhW-D\":[\"Paramètres des logs\"],\"tT-BQX\":[\"Installés\"],\"tXFGEx\":[\"Aucune connexion Kubernetes enregistrée. Cliquez sur « Ajouter » pour en créer une.\"],\"tXLz_8\":[\"Supprimer\"],\"tXpRby\":[\"Grille de données\"],\"tbysEk\":[\"Actions\"],\"tdta9X\":[\"Page \",[\"0\"]],\"tfDRzk\":[\"Enregistrer\"],\"tfEioV\":[\"Exécuter toutes les cellules SQL de haut en bas\"],\"tiAIaJ\":[\"Mot de passe SSH manquant. Veuillez le ressaisir.\"],\"tk22BR\":[\"Collez des données structurées et vérifiez le schéma avant l'import\"],\"tst44n\":[\"Événements\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"Fichier SQL exécuté avec succès\"],\"u6QeR6\":[\"Redémarrer maintenant\"],\"uAQUqI\":[\"Statut\"],\"uBAxNB\":[\"Éditeur\"],\"uBI8D9\":[\"Esc pour fermer\"],\"uFViPK\":[\"Aucune connexion SSH disponible\"],\"uHUuhp\":[\"Expliquer cette requête\"],\"uHfFzS\":[\"Taille de police de l’éditeur\"],\"uJ_3K5\":[\"Supprimer le notebook « \",[\"0\"],\" » ? Cette action est irréversible.\"],\"uKaNJ3\":[\"Ouvrir dans l’éditeur JSON\"],\"uQBwTo\":[\"Schémas\"],\"ub54ff\":[\"Centre de plugins\"],\"ufFyBs\":[\"Base de données exportée avec succès\"],\"upNmR2\":[\"Ouvrir l’éditeur latéral\"],\"upwIY4\":[\"Définition de la vue\"],\"utMia3\":[\"Tout désélectionner\"],\"uyNaJg\":[\"1 élément\"],\"v61dnS\":[\"Saisissez le nom exact du modèle pour votre fournisseur compatible OpenAI.\"],\"v6oeyr\":[\"Installé\"],\"v75DGg\":[\"Parcourir le fichier\"],\"v99dO4\":[\"Clé primaire\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" requêtes trouvées\"],\"other\":[\"#\",\" requêtes trouvées\"]}]],\"vCSBPD\":[\"Ajouter un filtre\"],\"vH7uJj\":[\"Trier par…\"],\"vUOA1-\":[\"Rechercher des modèles...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE inclut les lignes réelles, le temps, les boucles et les compteurs de buffer lorsqu’ils sont disponibles.\"],\"vXIe7J\":[\"Langue\"],\"vYf4Jm\":[\"Saisissez une fonction SQL complète (ex. ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Préférer\"],\"vditm4\":[\"Expliquer le plan\"],\"vks_ls\":[\"Fermer les autres onglets\"],\"vnAnIp\":[\"Le modèle \",[\"0\"],\" est introuvable dans \",[\"1\"],\". Il pourrait ne pas fonctionner correctement.\"],\"vqoN5u\":[\"Structure\"],\"vrAvbP\":[\"Voulez-vous vraiment supprimer le groupe \\\"\",[\"0\"],\"\\\" ? Les connexions de ce groupe seront déplacées vers Non groupées.\"],\"vtJ2yO\":[\"Explorateur\"],\"vujQJ5\":[\"Localisation\"],\"vvJPVL\":[\"Afficher la vue d’ensemble\"],\"vwI5S4\":[\"Succès\"],\"vzH-7Z\":[\"Expliquer\"],\"w7QmD_\":[\"Saisir le prompt système...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Temps écoulé\"],\"wCfv2R\":[\"Ajouter une connexion\"],\"wGfc86\":[\"Effacer tout l’historique\"],\"wGwNv4\":[\"Base de données active\"],\"wJJ-Wy\":[\"Installation...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers touchés\"],\"wQn-RM\":[\"Ajouter une colonne\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Appliqué\"],\"wTmVhm\":[\"Supprimer\"],\"wZeIWq\":[\"Importer depuis le Presse-papiers\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"En attente\"],\"wckWOP\":[\"Gérer\"],\"wdYcKH\":[\"Onglets ouverts\"],\"wja8aL\":[\"Sans titre\"],\"wkOAzk\":[\"Aucun notebook ne correspond à votre recherche.\"],\"wp49Ao\":[\"Échec du traitement des insertions : \"],\"wqG2hQ\":[\"Ignorer (ne pas importer)\"],\"wwrAsK\":[\"Veuillez remplir tous les champs requis\"],\"wwu18a\":[\"Icône\"],\"x2fr_j\":[\"Graphe\"],\"xANKBj\":[\"Fonctions\"],\"xBwjck\":[\"Un redémarrage est nécessaire pour appliquer les changements.\"],\"xDAtGP\":[\"Message\"],\"xECY01\":[\"Procédures\"],\"xGPNgZ\":[\"Personnalisation des prompts\"],\"xNgtS-\":[\"Aucune vue trouvée\"],\"xOPa1b\":[\"Le port doit être compris entre 1 et 65535\"],\"xY9s5E\":[\"Délai dépassé\"],\"xaVUr1\":[\"Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwis\"],\"xbvTzL\":[\"Chemin du fichier\"],\"xlew5F\":[\"Effacer\"],\"xmNyKz\":[\"Test en cours...\"],\"xtuh6D\":[\"Développer l’explorateur\"],\"y-Zdqj\":[\"Choisir un contexte...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Ouvrir le visualiseur JSON\"],\"yQXjG5\":[\"Tout désélectionner\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Hier\"],\"ygCKqB\":[\"Arrêter\"],\"ykCc6r\":[\"Base de données modifiée (cellule \",[\"n\"],\")\"],\"ynVMSc\":[\"Tout sélectionner\"],\"ytdz1d\":[\"L'IA veut exécuter une écriture\"],\"yyhzur\":[\"Créer une table\"],\"yz7wBu\":[\"Fermer\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"Mot de passe SSH\"],\"z4oF5T\":[\"Exporter la base de données\"],\"z5kV0h\":[\"Connexions\"],\"zBTMzx\":[\"Aperçu\"],\"zCaAKs\":[\"Erreur de mise à jour\"],\"zDAakK\":[\"Impossible d’afficher le diagramme sans ID de connexion.\"],\"zGe21h\":[\"Cette clé est chargée depuis une variable d’environnement\"],\"zGfL5t\":[\"valeur\"],\"zL6-4A\":[\"Aucun processus de plugin n’est en cours\"],\"zLZhCi\":[\"Nouvelle communauté Discord !\"],\"zLlCou\":[\"Copier le nom de colonne\"],\"zNEL34\":[\"Rejoindre la communauté\"],\"zNgTlV\":[\"Fermer les onglets à droite\"],\"zQz55p\":[\"Inspecter la structure\"],\"zR0FfH\":[\"Exporté vers \",[\"target\"]],\"zRZeOc\":[\"Rechercher tables, vues, routines, triggers...\"],\"zUNMsr\":[\"Clé SSH\"],\"zXMRzb\":[\"Port SSH\"],\"zZgoXr\":[\"Aucune table correspondante\"],\"zaWbms\":[\"Annuler les modifications\"],\"zgClmU\":[\"Installer la configuration\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Saisir une valeur...\"],\"zvzN4C\":[\"Définir comme actif\"],\"zzDlyQ\":[\"Succès\"],\"zzMxrp\":[\"Modifier config.json\"],\"zz_Wd_\":[\"Mode\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Nombre max d’entrées d’historique\"],\"-6AWa-\":[\"Importer les connexions\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Déconnecter\"],\"-PLZfh\":[\"Échec de l’actualisation des modèles\"],\"-T5W2e\":[\"Notes du pilote\"],\"-ZgeeE\":[\"Historique des modifications\"],\"-aYrdc\":[\"La version \",[\"0\"],\" est disponible\"],\"-fBGXl\":[\"Coût le plus élevé\"],\"-jIQDz\":[\"Réduire la cellule\"],\"-u1eRo\":[\"Aucune base de données\"],\"-yoeVU\":[\"Chargement du schéma...\"],\"-zy2Nq\":[\"Type\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID validation\"],\"0E5-gF\":[\"Voulez-vous vraiment supprimer cette connexion ?\"],\"0HCubq\":[\"Agrandir\"],\"0Kmdvy\":[\"Police personnalisée\"],\"0Nj13E\":[\"Générer du SQL\"],\"0ROgz5\":[\"Saisir du JSON...\"],\"0SY9sU\":[\"Échec de la déconnexion de la base de données\"],\"0b3kL9\":[\"Sélectionner une base de données\"],\"0caMy7\":[\"Historique\"],\"0mx5ow\":[\"Requête\"],\"0n9BtL\":[\"Aperçu\"],\"0pHB9N\":[\"Copier comme table.column\"],\"0sQzZK\":[\"Filtrer les bases de données...\"],\"0uPP9X\":[\"Nom de la clé étrangère (optionnel)\"],\"0wxuek\":[\"Version actuelle\"],\"0x09Aw\":[\"Arrêt en cas d'erreur basculé\"],\"0yBP6v\":[\"Soutenir le développement\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes\"],\"other\":[\"#\",\" lignes\"]}]],\"0yVAoD\":[\"Compter les lignes\"],\"0zxJ87\":[\"Aucun log disponible\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Modifier la vue\"],\"11fGJ6\":[\"Requêtes\"],\"13hIUA\":[\"Clé API \",[\"0\"]],\"14qNWF\":[\"Sélectionner une connexion SSH\"],\"17qHRP\":[\"Nouvelle connexion\"],\"1Dn6bg\":[\"Importer depuis le Presse-papiers\"],\"1Dnd0I\":[\"Charger le nombre de lignes\"],\"1FjTLW\":[\"ex. python3\"],\"1GOvbo\":[\"Ollama connecté (\",[\"0\"],\" modèles trouvés)\"],\"1I6UoR\":[\"Vues\"],\"1U7hS5\":[\"Longueur\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Police de l’éditeur\"],\"1ekzlY\":[\"Processus des plugins\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Choix du thème\"],\"1xVZkL\":[\"Aucun modèle trouvé\"],\"26Joci\":[[\"0\"],\" lignes récupérées\"],\"2Bf-Qe\":[\"Nouvelle console\"],\"2CrSmP\":[\"Aidez tabularis à grandir\"],\"2D9F8_\":[\"Échec de duplication de la connexion\"],\"2Eoi_a\":[\"Voir les détails\"],\"2F4pE5\":[\"Build et tests Rust\"],\"2Fsd9r\":[\"Ce mois-ci\"],\"2JzKXI\":[\"Définir GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Tout sélectionner\"],\"2SO5RM\":[\"Kubernetes n'est pas disponible pour ce pilote.\"],\"2Uh5GA\":[\"écosystème Cargo\"],\"2YylFp\":[\"Nouvelle requête visuelle\"],\"2luuSG\":[\"Réessayer\"],\"2wxgft\":[\"Renommer\"],\"2yG2GC\":[\"Mettre en pause les écritures (ou toutes les requêtes) et demander la validation utilisateur avant exécution.\"],\"30-b5r\":[\"Supprimer\"],\"31kwdN\":[\"Dupliquer le filtre\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Tous les outils\"],\"3Am5DS\":[\"Vue onglets\"],\"3FVg9_\":[\"Colonne locale\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Exécuter\"],\"3L0HCz\":[\"Aucun plugin ne correspond à la recherche.\"],\"3Nv3JV\":[\"Exécution de la requête...\"],\"3TSz9S\":[\"Réduire\"],\"3UW8fG\":[\"Mises à jour gérées par \",[\"0\"]],\"3YvS-c\":[\"Nouvel onglet\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt de nom de cellule de notebook\"],\"3qkggm\":[\"Plein écran\"],\"3rBJ1T\":[\"Afficher le schéma\"],\"3xZ-xV\":[\"Insérer l'horodatage actuel\"],\"40Gx0U\":[\"Fuseau horaire\"],\"41GP4f\":[\"Choisissez le caractère séparateur par défaut utilisé lors de la copie ou de l’export des lignes en CSV.\"],\"42iaEi\":[\"PostgreSQL sans ANALYZE n’affiche que les estimations du planificateur.\"],\"44cXI8\":[\"Trier par \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gérer les bases de données\"],\"4CK17g\":[\"Voulez-vous vraiment modifier la vue \\\"\",[\"name\"],\"\\\" ?\"],\"4DDaw-\":[\"Sélectionnez au moins une base de données\"],\"4D_Nvt\":[\"Échec de création du groupe\"],\"4RiR6c\":[\"Exporter en HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processus enfant\"],\"other\":[\"#\",\" processus enfants\"]}]],\"4TtbAT\":[\"Fetch the latest translations from the cloud without waiting for an app update.\"],\"4VyuY3\":[\"Voulez-vous vraiment effacer tous les logs ?\"],\"4WWqS3\":[\"Afficher/masquer l'arbre JSON\"],\"4XAQdl\":[\"Créer l’index\"],\"4cEClj\":[\"Sessions\"],\"4cmfYp\":[\"Dupliquer la ligne\"],\"4hsr6d\":[\"Créer une vue\"],\"4lIZTB\":[\"Dépendances de développement frontend\"],\"4oYjvJ\":[\"Rechercher…\"],\"4tMxW4\":[\"Aperçu de l'enregistrement lié\"],\"4yJcjm\":[\"Sélectionner le type...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Fermer le panneau de filtres (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Point-virgule (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" événement\"],\"other\":[\"#\",\" événements\"]}]],\"5I2fxu\":[\"/chemin/vers/id_rsa\"],\"5NZpX8\":[\"Vue liste\"],\"5To6Z6\":[\"Copier la requête\"],\"5gqNQl\":[\"Vue grille\"],\"5igIzr\":[\"Import annulé\"],\"5nTIup\":[\"Modification de la vue : \",[\"name\"]],\"5qIe8E\":[\"Tout exécuter\"],\"66bEht\":[\"État du projet\"],\"6PIJVc\":[\"Démarrage\"],\"6QvP0l\":[\"Exporter en JSON\"],\"6W41Xq\":[\"Gestionnaire des tâches\"],\"6WngBH\":[\"Définir NULL\"],\"6YtxFj\":[\"Nom\"],\"6_dCYd\":[\"Vue d’ensemble\"],\"6dOBsk\":[\"Créer la vue\"],\"6gvoHP\":[\"Copier le message d’erreur\"],\"6oCVzX\":[\"Le contexte Kubernetes est requis\"],\"6wQO0f\":[\"Afficher les données\"],\"6z9W13\":[\"Redémarrer\"],\"71agNy\":[\"Générer des noms IA pour les cellules sans nom\"],\"74J3FG\":[\"Version initiale\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Compris\"],\"77nSMU\":[\"Supprimer tout l'historique d'activité IA ? Action irréversible.\"],\"7ABmyQ\":[\"Réessayer\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" sur \",[\"0\"],\" actifs\"],\"7E864M\":[\"Type de base de données\"],\"7FqaG1\":[\"Personnalisez les instructions pour l’analyse IA des plans EXPLAIN. Utilisez \",[\"LANGUAGE\"],\" pour la langue de sortie.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Types mixtes détectés, défaut TEXT\"],\"7RSQQd\":[\"Enregistrer les mots de passe dans le trousseau\"],\"7VpPHA\":[\"Confirmer\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"échouées\"],\"7sMeHQ\":[\"Clé\"],\"7sNhEz\":[\"Nom d’utilisateur\"],\"7tATh2\":[\"Exécuter la requête\"],\"7yb4gk\":[\"Échec : \"],\"8-4V8D\":[\"Tables\"],\"82G-l5\":[\"Le Model Context Protocol (MCP) permet aux assistants IA (comme Claude) de se connecter à vos outils locaux. Tabularis expose un serveur MCP permettant à l’IA de lire le schéma de votre base de données et d’exécuter des requêtes en toute sécurité.\"],\"83VjWE\":[\"Nouveau notebook\"],\"86IgoU\":[\"Exécuter la requête (dans l’éditeur)\"],\"86fCgf\":[\"Personnalisez les instructions pour la génération IA du nom des onglets de résultats. La requête SQL est envoyée comme message utilisateur.\"],\"87a_t_\":[\"Étiquette\"],\"87kWsr\":[\"Exporter les connexions\"],\"8CWirf\":[\"Serveur MCP\"],\"8S8aIX\":[\"Vérification de l’état des connexions\"],\"8TMaZI\":[\"Horodatage\"],\"8Tg_JR\":[\"Personnalisé\"],\"8UFKYr\":[\"Sélectionner la requête à exécuter\"],\"8VKSGV\":[\"Générer le SQL\"],\"8Wjy6z\":[\"Fermer les onglets à gauche\"],\"8ZsakT\":[\"Mot de passe\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Éditeur SQL\"],\"8bRgTe\":[\"Fournisseur IA non configuré. Veuillez aller dans Paramètres > IA.\"],\"8c_W0h\":[\"Anciennes versions\"],\"8guEQP\":[\"Actualiser les vues\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN est léger et principalement structurel.\"],\"8q_sOc\":[\"Supprimer\"],\"8t-akp\":[\"premières \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nom de la connexion\"],\"91gnWY\":[\"Exporter les logs\"],\"91rtHL\":[\"Créer une nouvelle vue\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Nouveau groupe\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vue mise à jour avec succès\"],\"9NzDFn\":[\"Afficher l’écran d’accueil au démarrage de l’application.\"],\"9OoUS3\":[\"Créer une nouvelle connexion SSH\"],\"9QGRD5\":[\"Colonne cible\"],\"9QTny9\":[\"Échec de la requête.\"],\"9S-fyV\":[\"Plan d'exécution préalable\"],\"9SJ_Sx\":[\"Ressources système\"],\"9UQ730\":[\"Cloner\"],\"9X6cky\":[\"NON\"],\"9XUV5V\":[\"Aucune donnée dans le presse-papiers\"],\"9hGjL2\":[\"Créer un index\"],\"9mMU1R\":[\"Temps\"],\"9mvFo_\":[\"Heure\"],\"9npOH9\":[\"Ouvrir un fichier\"],\"9uI_rE\":[\"Annuler\"],\"9xUjzm\":[\"Tout sélectionner\"],\"9y_02p\":[\"Discutez avec la communauté, obtenez de l’aide, proposez des fonctionnalités\"],\"A1pPcI\":[\"Hôte SSH\"],\"A1taO8\":[\"Rechercher\"],\"A6C0pv\":[\"Coût total\"],\"A7WG0p\":[\"Plugin désactivé\"],\"A7yRz3\":[\"La définition de la vue est requise\"],\"A9Uyp6\":[\"Échec de l’import : \"],\"ABEd-z\":[\"Utilisez votre gestionnaire de paquets pour mettre à jour Tabularis.\"],\"AMdgKV\":[\"Prompt d’analyse de plan EXPLAIN\"],\"ANSTMe\":[\"Aucun problème majeur détecté dans le résumé actuel du plan.\"],\"ANzIr7\":[\"Historique des requêtes\"],\"AOnaU7\":[\"ignorées\"],\"AVlZoM\":[\"Environnement\"],\"AXTVsE\":[\"Vérification complète\"],\"AXdRYR\":[\"Logs actuels\"],\"Aa-YkQ\":[\"Exporter le notebook\"],\"Ai2U7L\":[\"Hôte\"],\"AidayG\":[\"Filtrer par niveau\"],\"AlPiMN\":[\"Cliquer pour aller à la page\"],\"An-1rA\":[\"Lignes retournées\"],\"AnV8j-\":[\"Modifier la colonne\"],\"AvEr_L\":[\"Nouvelle console\"],\"AvYbUL\":[\"Mettre une étoile sur GitHub\"],\"Aw_eOs\":[\"Nécessite Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Aucun résultat trouvé\"],\"B0mJGb\":[\"Sortie brute\"],\"B1c58n\":[\"Modifier la colonne\"],\"B3toQF\":[\"Objets\"],\"B5nKny\":[\"/chemin/absolu/vers/dossier\"],\"B5xevr\":[\"Le nom de la connexion est requis\"],\"BAVvWJ\":[\"Diagramme ER\"],\"BBtVak\":[\"Tout réduire\"],\"BEVzjL\":[\"Échec de l’import\"],\"BHATjK\":[\"Exporter les connexions\"],\"BJe2lZ\":[\"Afficher/masquer la barre latérale\"],\"BK3WCj\":[\"Échec de chargement du registre\"],\"BKbO3i\":[\"Notebook modifié\"],\"BMB51y\":[\"Exécuter dans la console\"],\"BNW_Z4\":[\"ex. active_users, order_summary\"],\"BPkXj7\":[\"Créer une clé étrangère\"],\"BUO_JN\":[\"Copier la requête\"],\"BYkhHY\":[\"Vérifier les mises à jour au démarrage\"],\"BeSg6-\":[\"Collecter les logs de l’application en mémoire pour le débogage\"],\"BgAyQH\":[\"Effacer le tri\"],\"BinTJI\":[\"écosystème npm\"],\"BkFson\":[\"Pagination automatique\"],\"Bpglf1\":[\"Monter\"],\"BrGo6h\":[\"Rechercher des notebooks\"],\"BxiAN_\":[\"Supprimer la requête\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dépendances frontend\"],\"CE-M2e\":[\"Infos\"],\"CHIyL8\":[\"Aucun filtre —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Téléchargement...\"],\"CUxwxn\":[\"Afficher toutes les tables\"],\"CWMXbw\":[\"arrêtera brutalement son processus. Toute connexion à la base de données utilisant ce plugin cessera de fonctionner tant que le plugin ne sera pas redémarré.\"],\"CZt6BX\":[\"CONFIGURATION MANUELLE\"],\"Ca8ixZ\":[\"Supprimer\"],\"CbJBQS\":[\"Échec de la mise à jour : \"],\"Cdz-YU\":[\"Vue empilée\"],\"CpeQf9\":[\"Boucles\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Sélectionnez le modèle à utiliser pour la génération et l’explication.\"],\"DB8zMK\":[\"Appliquer\"],\"DDXf5E\":[\"Fonctions SQL\"],\"DEwnwi\":[\"Supprimer\"],\"DNTvdl\":[\"Ouvrir dans l’éditeur\"],\"DPc2P9\":[\"Supprimer la cellule\"],\"DUY8Ba\":[\"Changements incompatibles\"],\"DVnBSM\":[\"Hauteur de ligne\"],\"Dd7YLj\":[\"Peut-être plus tard\"],\"Deej3j\":[\"JSON invalide\"],\"DfKhk_\":[\"Mettre à jour\"],\"DiRiTz\":[\"Ouvrir la page du package\"],\"DlRHAD\":[\"Exécution d’EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" erreur\"],\"other\":[\"#\",\" erreurs\"]}]],\"Dvdihe\":[\"Sur \",[\"0\"],\" — examinez avant exécution.\"],\"DzFLzw\":[\"OUI\"],\"E-JUtQ\":[\"Validation manuelle\"],\"E0kcnZ\":[\"Général\"],\"E2mje_\":[\"Sélectionner la requête à expliquer\"],\"EDieyg\":[\"Voulez-vous vraiment supprimer cette connexion SSH ?\"],\"EHZxPj\":[\"Développer\"],\"EL4oDO\":[\"Nouvelle version disponible\"],\"EPi4gT\":[\"Trier par \",[\"field\"]],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"Non groupé\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Inconnu\"],\"EhADgB\":[\"Supprimer la colonne\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Vous êtes à jour\"],\"Em6JFd\":[\"Compter les lignes\"],\"EnGiqG\":[[\"0\"],\" éléments\"],\"Ew1n5z\":[\"Rechercher des plugins…\"],\"F18WP3\":[\"Paramètres\"],\"F3uc1x\":[\"Le fichier exporté contiendra vos mots de passe de base de données et SSH en clair. Conservez-le en lieu sûr.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" lignes\"],\"other\":[\"#\",\" lignes\"]}]],\"F6pfE9\":[\"Active\"],\"F8tXg7\":[\"Aperçu des données\"],\"F9-6yK\":[\"Format de copie par défaut\"],\"F9lxfG\":[\"Supprimer\"],\"F9nsa2\":[\"Le fichier d’historique était corrompu et a été mis de côté. Les nouvelles requêtes seront enregistrées normalement. Fichier de sauvegarde :\"],\"FF_oap\":[\"Valeur par défaut\"],\"FK8rlP\":[\"Aucune connexion SSH configurée pour le moment\"],\"FMRcH8\":[\"Première ligne comme en-tête\"],\"FNvDMc\":[\"Cette semaine\"],\"FQe1FI\":[\"Lignes estimées\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Avertissement\"],\"FZg3wM\":[\"Opération\"],\"Fa_cky\":[\"Schéma : \",[\"tableName\"]],\"FpEL5o\":[\"Choisissez un thème indépendant pour l’éditeur SQL ou gardez-le synchronisé avec le thème de l’application.\"],\"FsvZQL\":[\"Cellule \",[\"n\"],\" modifiée\"],\"FtwKL9\":[\"Changer d’onglet\"],\"FznI3z\":[\"Supprimer la clé étrangère \\\"\",[\"name\"],\"\\\" ?\"],\"G6W8j1\":[\"Échec de l’aperçu : \"],\"G8Q5Zq\":[\"Le namespace est requis\"],\"GAohqx\":[\"Supprimer la colonne\"],\"GJR99u\":[\"Échec de suppression de la colonne : \"],\"GKfzzM\":[\"Choisir une connexion...\"],\"GS-Mus\":[\"Exporter\"],\"GUaLUq\":[\"Échec du chargement du schéma : \"],\"GXP-Iw\":[\"Ajouter une cellule SQL\"],\"Gj1mLb\":[\"Cellules réordonnées\"],\"GlbqG2\":[\"Réinitialiser au défaut du pilote\"],\"Gq1YzP\":[\"Événements\"],\"Gs5AlY\":[\"Ouvrir\"],\"GtmO8_\":[\"de\"],\"GxkJXS\":[\"Téléversement...\"],\"H-o4D2\":[\"Créer une nouvelle colonne\"],\"H2B-KW\":[\"Choisissez le format par défaut lors de la copie des lignes avec Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Rétablir\"],\"H7mlCc\":[\"/chemin/absolu/vers/db.sqlite\"],\"H86f9p\":[\"Réduire\"],\"H9HlDe\":[\"minutes\"],\"H9P8CD\":[\"ajouter le premier filtre\"],\"HAQlGl\":[\"Activité IA\"],\"HKNZrs\":[\"Condition d’index\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Supprimer \",\"#\",\" lignes\"],\"other\":[\"Supprimer \",\"#\",\" lignes\"]}]],\"HPuCiP\":[\"Chemin du dossier\"],\"HUs1R3\":[\"Aucun onglet ouvert pour cette connexion.\"],\"HV4Isp\":[\"Saisir le mot de passe SSH\"],\"HVC8Hh\":[\"Copié dans le presse-papier\"],\"HWEpq8\":[\"Écriture disque/s\"],\"HY4nP5\":[\"En ligne\"],\"HcmoWv\":[\"Échec de l’enregistrement de la vue : \"],\"He8v1Y\":[\"Désélectionner de Tout appliquer\"],\"HehHP1\":[\"Disposition par défaut\"],\"HilYn4\":[\"Ce notebook est vide. Ajoutez une cellule pour commencer.\"],\"HjxVK_\":[\"Test rapide de connexion\"],\"HmMnRx\":[\"Mode WKT\"],\"HoKCiI\":[\"L’application redémarrera automatiquement après l’installation\"],\"HpK_8d\":[\"Recharger\"],\"Hpi4Jm\":[\"Rejoindre maintenant\"],\"HuA3RU\":[\"Tabulation\"],\"I128p7\":[\"Barre verticale (|)\"],\"I3AgqA\":[\"Configurer SSH en ligne\"],\"I5VBsr\":[\"Identique à l’application\"],\"I8yrPb\":[\"Remplacer la table\"],\"I92BdB\":[\"Retirer du groupe\"],\"I92fr4\":[\"Me le rappeler plus tard\"],\"I99Miw\":[\"Coût\"],\"IETZIR\":[\"Modifier le nom de la cellule\"],\"IG9wzA\":[\"Échec de l’insertion de la ligne : \"],\"ILleOG\":[\"Le type de ressource doit être \\\"service\\\" ou \\\"pod\\\"\"],\"IQ3gAw\":[\"Téléverser un fichier\"],\"IUwGEM\":[\"Enregistrer les modifications\"],\"IUwmLq\":[\"Dépendances directes déclarées dans package.json et src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Bibliothèques open source\"],\"I_43p6\":[\"Sécurité\"],\"Iaizf4\":[\"Apparence\"],\"Il3FBB\":[\"Afficher/masquer le panneau de filtres structurés\"],\"IniZRK\":[\"Téléchargement indisponible - seul l’aperçu est chargé\"],\"Isaozb\":[\"Vérifier et ajuster\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Les requêtes et connexions actives via ce plugin seront interrompues.\"],\"J6v1s_\":[\"Modèle par défaut\"],\"JE-DVk\":[\"Interpréteur\"],\"JEGlfK\":[\"Début\"],\"JKDPqP\":[\"Sélectionnez d'abord un contexte\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Utiliser un tunnel SSH\"],\"JRz8tw\":[\"MySQL et MariaDB n’exposent des métriques réelles que sur les variantes prises en charge d’EXPLAIN ANALYZE ou ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP ou SVG · max. 512 Ko\"],\"JY5Oyv\":[\"Base de données\"],\"JlFRIB\":[\"Fuseau horaire de session envoyé à MySQL après connexion.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Refusée\"],\"K3H9p5\":[\"Non défini\"],\"K5Dgu_\":[\"Bases de données\"],\"K8IGKf\":[\"Type d’authentification\"],\"KAYNSW\":[\"Combien de logs conserver en mémoire (1-10000)\"],\"KHTGbr\":[\"EXPLAIN préalable\"],\"KHvda8\":[\"Non nul\"],\"KJKNaZ\":[\"Copier comme `column`\"],\"KM5Kc8\":[\"Au moins une colonne doit être sélectionnée\"],\"KSCnVQ\":[\"Type\"],\"KUjOb9\":[\"en cours\"],\"KXBdwy\":[\"Actualiser les routines\"],\"KXNyX7\":[\"Définir DEFAULT\"],\"Kd70-v\":[\"Importer depuis le Presse-papiers...\"],\"KhI4oS\":[\"Ouvrir la ligne référencée dans \",[\"0\"]],\"KhgrNu\":[\"Intégration du serveur MCP\"],\"KirERL\":[\"Délai dépassé\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Échec de suppression de l’index : \"],\"KzeARD\":[\"Échec de suppression de la table : \"],\"L-rMC9\":[\"Réinitialiser par défaut\"],\"L3HXkQ\":[\"Corrections de bugs\"],\"LCZ7Dy\":[\"Copier le nom\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"index\"],\"LMeAoR\":[\"lignes\"],\"LPCdc-\":[\"Prompt de nom d’onglet de requête\"],\"LPFmga\":[\"Sélectionner pour Tout appliquer\"],\"LYzbQ2\":[\"Outil\"],\"Lbis_V\":[\"Navigateur rapide\"],\"Lcpbe2\":[\"Le processus du plugin n’a pas pu être lancé. Vérifiez les détails de l’erreur ci-dessous.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN est uniquement pris en charge pour les instructions DML (SELECT, INSERT, UPDATE, DELETE). Les instructions DDL comme CREATE, DROP ou ALTER ne peuvent pas être expliquées.\"],\"LnT0hQ\":[\"Ajouter une colonne\"],\"LvutiO\":[\"Suggérer avec IA\"],\"M-rHQO\":[\"Quitter le plein écran\"],\"M0XJba\":[\"Voulez-vous vraiment effacer tout l’historique des requêtes pour cette connexion ?\"],\"M1co_O\":[\"Configuré\"],\"M73whl\":[\"Contexte\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Tout afficher\"],\"MXdOwj\":[\"Séparer les connexions\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Sélectionner une connexion K8s\"],\"Mc1tjS\":[\"Activez ANALYZE pour inspecter les lignes réelles, le temps, les boucles et les buffers.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" lignes supplémentaires\"],\"Mp0jQ_\":[\"Ce pilote ne prend en charge les clés primaires qu’à la création de la table\"],\"MqpZwN\":[\"Processus Tabularis\"],\"MxIx43\":[\"↑↓ pour naviguer, Entrée pour ouvrir\"],\"MygtgQ\":[\"Ajouter une cellule Markdown\"],\"N40H-G\":[\"Tous\"],\"N5UQxq\":[\"Ollama non détecté sur le port \",[\"0\"],\". Est-il en cours d’exécution ?\"],\"N6GBcC\":[\"Confirmer la suppression\"],\"N6aqHp\":[\"Requêtes exécutées\"],\"N9_S15\":[\"Une nouvelle table sera créée\"],\"NBdMa1\":[\"Étape la plus lente\"],\"NC2AI2\":[\"Longueur\"],\"NCzNnx\":[\"Tri croissant\"],\"NT4Ubs\":[\"Supprimer la clé personnalisée et revenir à la variable d’environnement (si présente)\"],\"NUjrCO\":[\"Aucun favori ne correspond à votre recherche\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Total de l’arborescence : \",[\"0\"]],\"Nc2VQn\":[\"Ajouter à existante\"],\"NgFERn\":[\"Ajouter aux favoris\"],\"NktMHG\":[\"Nom de la base de données\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Tester\"],\"Nq5QTk\":[\"expliquer la n-ième\"],\"O2STgu\":[\"Échec de l’export : \"],\"O8SV8O\":[\"Téléchargement...\"],\"O9_WW6\":[\"connexion\"],\"OGEsKj\":[\"Exécuter toutes les cellules\"],\"OGWdBg\":[\"Nom de la vue\"],\"OHqT6w\":[\"Appuyez sur une combinaison de touches...\"],\"OXJsaG\":[\"Nom de paramètre invalide\"],\"OfhWJH\":[\"Réinitialiser\"],\"OlAl5i\":[\"Tout développer\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Rejoindre Discord\"],\"P1YGsb\":[\"Génération SQL\"],\"P2m1xb\":[\"Arrêter en cas d’erreur\"],\"P3Qlys\":[\"Aucun ID de connexion\"],\"P6Y3Yf\":[\"Exécutez cette commande dans votre terminal, puis redémarrez Claude Code.\"],\"PCdj-c\":[\"Tout désélectionner\"],\"PMnFt9\":[\"Lecture disque/s\"],\"PQU2Va\":[\"Accepter la suggestion avec Entrée\"],\"PRnH8G\":[\"sur \",[\"0\"]],\"PY8UF3\":[\"Parallèle basculé (cellule \",[\"n\"],\")\"],\"PiH3UR\":[\"Copié !\"],\"Pia95d\":[\"Le nom de la colonne est requis\"],\"PrElXQ\":[\"Mettre à jour\"],\"PrixCC\":[\"Les lignes seront ajoutées à une table existante\"],\"Pujgbb\":[\"Configurer la destination\"],\"Pw_eQV\":[\"Échec de démarrage du plugin\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Aucune requête enregistrée\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Aucun processus enfant\"],\"QCxMC0\":[\"Vérifier automatiquement les nouvelles versions au lancement de l’application\"],\"QEazml\":[\"Supprimer la sélection\"],\"QHcLEN\":[\"Connecté\"],\"QLHHFO\":[\"Mode lecture seule\"],\"QOvAW3\":[\"Nouvelles fonctionnalités\"],\"QULGRi\":[\"Aucune requête valide trouvée\"],\"QZwllF\":[\"Parcourir...\"],\"QbkSr_\":[\"EXPLAIN indisponible.\"],\"QeHFYZ\":[\"EXPLAIN a échoué : \",[\"0\"]],\"Qll2Tb\":[\"Desc\"],\"Qoq-GP\":[\"En savoir plus\"],\"Qu4Hog\":[\"Notebook importé avec succès\"],\"R-A2Vd\":[\"Aucune donnée à afficher\"],\"R0Hkb2\":[[\"0\"],\" base(s) de données sélectionnée(s)\"],\"R1nHhB\":[\"Existe déjà\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Convertir en console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configuration\"],\"RF-HyV\":[\"Choisissez votre langue préférée. \\\"Auto\\\" utilisera la langue de votre système.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copier le nom\"],\"RI-HZc\":[\"Saisir la clé \",[\"0\"]],\"RJrE17\":[\"Voulez-vous vraiment supprimer la vue \\\"\",[\"0\"],\"\\\" ?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Une étoile aide d’autres personnes à découvrir le projet\"],\"Rb3Tdm\":[\"Nom du notebook\"],\"RcbKJ3\":[\"À la mise à jour\"],\"RkefFq\":[\"Exécute EXPLAIN avant d'afficher le modal pour montrer le plan.\"],\"RnF_hl\":[\"Chargement du registre des plugins...\"],\"Rns7_C\":[\"Cette action ne peut pas être annulée immédiatement\"],\"RoKRqW\":[\"Plugins disponibles\"],\"RphpKk\":[\"Apparence\"],\"Rt8sHM\":[\"Travail de tri ou temporaire détecté\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Activés\"],\"S1veKH\":[\"Annuler la sélection\"],\"S5zeZU\":[\"Afficher/masquer l’aperçu\"],\"S8Yqbl\":[\"Insérer\"],\"SDND4q\":[\"Non configuré\"],\"SJRy3D\":[\"(Généré automatiquement)\"],\"SSwIjo\":[\"Définir EMPTY\"],\"SgvA_r\":[\"Appuyez sur Exécuter (Ctrl/Commande+F5) pour charger les données de la table\"],\"SlfejT\":[\"Erreur\"],\"SoATkx\":[\"Copier la cellule\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL du point de terminaison\"],\"T7w5CQ\":[\"Échec de création de la nouvelle ligne : \"],\"T9947j\":[\"Valeur (ex. 'texte' ou 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Passer en disposition verticale\"],\"TK5oex\":[\"Enregistrer le prompt\"],\"TKQ7K-\":[\"Installer\"],\"TKZreP\":[\"Exiger\"],\"TMLAx2\":[\"Requis\"],\"TO08JI\":[\"clés étrangères\"],\"TVKqvO\":[\"Modifier la ligne\"],\"TYSdQ3\":[\"Exécuter une requête SELECT\"],\"TfDFHS\":[\"Retourne les longues lignes dans l’éditeur au lieu d’un défilement horizontal.\"],\"Tibfjs\":[\"Aucune connexion enregistrée — créez-en une ci-dessous\"],\"Tj36Dr\":[\"Réinitialiser par défaut\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Verrouiller\"],\"TpwXyg\":[\"Si le temps manque, le serveur a probablement renvoyé un plan uniquement estimé.\"],\"Tw2M1h\":[\"Échec de l’installation\"],\"Ty-rm9\":[\"Connexions SSH\"],\"Tz0i8g\":[\"Paramètres\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Connexions Kubernetes\"],\"U4uzyV\":[\"Nouveautés\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Arrêter l’exécution lorsqu’une cellule échoue\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" sur \",[\"1\"],\" — examinez avant exécution.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configuration installée avec succès pour \",[\"clientName\"],\" ! Redémarrez l’application pour l’appliquer.\"],\"URmyfc\":[\"Détails\"],\"UWQBvp\":[\"Générer des modèles SQL\"],\"UawTKZ\":[\"Optionnel. Spécifiez l’exécutable utilisé pour lancer ce plugin (ex. python3 sous macOS/Linux, python ou un chemin complet sous Windows). Laissez vide pour utiliser la valeur par défaut.\"],\"Ub8sf5\":[\"SQLite ne prend pas en charge la suppression des clés étrangères via ALTER TABLE.\"],\"UbbJ8j\":[\"Aucune option trouvée\"],\"Ubs68g\":[\"Général\"],\"UftN8J\":[\"Ces connexions refuseront les écritures via MCP. Les autres restent normales.\"],\"UnQNah\":[\"Voulez-vous vraiment supprimer la colonne \\\"\",[\"0\"],\"\\\" de la table \\\"\",[\"tableName\"],\"\\\" ?\\n\\nATTENTION : toutes les données de cette colonne seront définitivement supprimées. Cette action est irréversible.\"],\"UncTTh\":[\"Somme du RSS sur l’arborescence des processus — peut surestimer la mémoire partagée\"],\"UpjgFm\":[\"Paramètres modifiés\"],\"UsAnu1\":[\"ANALYZE exécute la requête. Utilisez-le avec prudence pour les instructions modifiant les données.\"],\"UxKoFf\":[\"Navigation\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Taille de tabulation\"],\"UzWGWO\":[\"Basculer vers le champ SQL WHERE\"],\"V-chk5\":[\"À quelle fréquence vérifier si les connexions actives sont toujours vivantes. Définissez 0 pour désactiver.\"],\"V-pw1j\":[\"Nom de la table\"],\"V2T0Uw\":[\"Aucun notebook enregistré pour le moment.\"],\"V3aNwx\":[\"Éditeur de données\"],\"VGYp2r\":[\"Appliquer à tout\"],\"VH8S7x\":[\"Colonne du presse-papiers\"],\"VIAEcS\":[\"Échec du chargement des bases de données. Vérifiez vos identifiants.\"],\"VKdztF\":[\"Ajouter des lignes\"],\"VLiHXI\":[\"Analyser les données\"],\"VMbmXc\":[\"Voulez-vous vraiment supprimer \\\"\",[\"pluginName\"],\"\\\" ? Cela supprimera les fichiers du plugin.\"],\"VO3weF\":[\"Aucun fichier chargé\"],\"VOZlKc\":[\"Importer une base de données\"],\"VPzsIz\":[\"Génération du nom...\"],\"VUul0v\":[\"Tuer\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Toutes les requêtes\"],\"Vi2Pqx\":[\"par\"],\"Vl2zn2\":[\"arrêté\"],\"Vo4uBA\":[\"Une erreur s’est produite lors de l’installation du plugin. Voir les détails ci-dessous.\"],\"VqqyOs\":[\"Exécutez une requête pour voir les résultats\"],\"VzhDFh\":[\"Bloquer tout statement non-SELECT via MCP, sauf pour les connexions autorisées ci-dessous.\"],\"W3uwpT\":[\"Fermer tous les onglets\"],\"W4MKLh\":[\"ex. Risqué en prod, confirmez…\"],\"W60eXm\":[\"Table\"],\"WA8RND\":[\"Voulez-vous vraiment supprimer la table \\\"\",[\"0\"],\"\\\" ?\"],\"WG8Qgt\":[\"Supprimer la table\"],\"WLnvCZ\":[\"Saisir le nom d'utilisateur\"],\"WM-__8\":[\"Rechercher des connexions...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes importées dans \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" lignes importées dans \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Voulez-vous vraiment supprimer la requête \\\"\",[\"0\"],\"\\\" ?\"],\"WarTN_\":[\"réussies\"],\"WcF1uL\":[\"Nom du groupe\"],\"Weq9zb\":[\"Général\"],\"WmPpB1\":[\"Chargement du plan d'exécution…\"],\"Wu7cK0\":[\"Aucune base de données trouvée\"],\"WvoUQF\":[\"Cellule \",[\"n\"],\" supprimée\"],\"Ww3pDD\":[\"COMMANDE MANUELLE\"],\"X-20AU\":[\"Saisir le prompt de nom d’onglet de requête...\"],\"X-U6_w\":[\"Famille de police\"],\"X5fs0g\":[\"Créez votre première connexion pour commencer.\"],\"X7Ayjp\":[\"Mot de passe enregistré dans le trousseau système\"],\"X9kySA\":[\"Favoris\"],\"XJOV1Y\":[\"Activité\"],\"XMCLEL\":[\"Create New Trigger\"],\"XN_sSd\":[\"Automatic updates\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Explication de requête\"],\"XVF2Pf\":[\"Modifier les schémas\"],\"XW6OYF\":[\"Ce plugin peut nécessiter un interpréteur (ex. Python). Utilisez les paramètres du plugin pour configurer le chemin de l’interpréteur.\"],\"XZB6Xr\":[\"Nombre max d’entrées de log\"],\"Xcffv2\":[\"Afficher les boutons AI Assist et Explain dans l’éditeur\"],\"XeqTSh\":[\"Type de jointure\"],\"XmJfZT\":[\"nom\"],\"XoQfG1\":[\"Utilisateur SSH\"],\"XwI0Vw\":[\"Auto (Système)\"],\"XyDlLX\":[\"Nom de l’index\"],\"Y2P2aK\":[\"Sélectionnez les schémas à charger :\"],\"Y8HYw2\":[\"valeur\"],\"Y8zX3R\":[\"Insérer dans l’éditeur\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Rechercher...\"],\"YWlnMZ\":[\"Port Ollama\"],\"YYdC3A\":[\"Version \",[\"0\"]],\"YYn8b5\":[\"Parcourez et installez des plugins depuis le registre.\"],\"Y_3yKT\":[\"Ouvrir dans un nouvel onglet\"],\"YiAQ_Q\":[\"Actualiser les tables\"],\"Ysjr9Y\":[\"Aperçu SQL\"],\"YswNf7\":[\"Tous les niveaux\"],\"YtNwr6\":[\"Nombre maximal d’entrées d’historique de requêtes stockées par connexion.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Chargement...\"],\"Z7ZXbT\":[\"Approuver\"],\"Z8JpBH\":[\"Exporter en Notebook\"],\"Z8fBIc\":[\"Les lignes réelles dépassent l’estimation\"],\"ZC2VJP\":[\"Exécuter\"],\"ZCIS4k\":[\"aucun filtre actif\"],\"ZF1_UT\":[\"Mode SSL\"],\"ZGjBPa\":[\"Effacer les logs\"],\"ZHQTlM\":[\"Import depuis\"],\"ZIFDoJ\":[\"Veuillez sélectionner au moins Structure ou Données\"],\"ZIZA6o\":[\"Modifier avant d'approuver\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avertissements d'analyse\"],\"other\":[\"#\",\" avertissements d'analyse\"]}]],\"ZVn8p2\":[\"Affiche les numéros de ligne dans la marge de l’éditeur.\"],\"ZYnwzF\":[\"Déconnecté\"],\"Za3_fO\":[\"Erreur\"],\"ZcOxO1\":[\"Créer la clé étrangère\"],\"Zf7LHg\":[\"Aucun contexte trouvé (kubectl est-il installé ?)\"],\"Zfotp5\":[\"De grands écarts d’estimation indiquent généralement des statistiques obsolètes ou des prédicats mal modélisés par le planificateur.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Échec du chargement des schémas\"],\"ZqXGPF\":[\"Échec de suppression de la vue : \"],\"ZuL73E\":[\"Créer une nouvelle vue de base de données\"],\"_-bi4r\":[\"Table référencée\"],\"_AEYGI\":[\"Aucun historique d’exécution pour le moment\"],\"_FdpZc\":[\"Échec du chargement de la définition de la vue : \"],\"_FxSdi\":[\"Parcourez les dépendances open source directes utilisées par l’application, le backend et l’outillage.\"],\"_JyTG8\":[\"Saisir le prompt d’explication...\"],\"_Ltc_k\":[\"Suppléments\"],\"_Q2Wix\":[\"lignes\"],\"_TK1zF\":[\"Connexion enregistrée\"],\"_bJFBE\":[\"Délai d’expiration de connexion\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Arborescence\"],\"_dqduX\":[\"Page suivante\"],\"_fwE6J\":[\"Plus ancien\"],\"_n04sB\":[\"Tuer\"],\"_otxbQ\":[\"Fichier de clé\"],\"_pezIT\":[\"Échec de connexion à \",[\"0\"],\". Vérifiez vos paramètres ou assurez-vous que la base de données est en cours d’exécution.\"],\"_srfkj\":[\"Clé personnalisée supprimée avec succès\"],\"_t6aFo\":[\"MySQL et MariaDB peuvent revenir à EXPLAIN FORMAT=JSON ou à EXPLAIN tabulaire selon la version du serveur.\"],\"_xTbaM\":[\"colonnes\"],\"_yxaaL\":[\"Index unique\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis est un projet libre et open source. Si vous le trouvez utile, pensez à soutenir le projet et à rejoindre la communauté.\"],\"a9CASo\":[\"SQLite ne prend en charge que le renommage des colonnes. Les autres modifications nécessitent de recréer la table manuellement.\"],\"aAIQg2\":[\"Apparence\"],\"aAURrV\":[\"Installé\"],\"aC_vCa\":[\"Générer un nom avec l’IA\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Sélectionnez un nœud pour voir les détails\"],\"aHKcKc\":[\"Page précédente\"],\"aI-5wG\":[\"Vérifier CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valeur par défaut\"],\"aScJP1\":[\"Exécuter cette requête\"],\"aVNbN8\":[\"Conditions de filtre\"],\"aWhdMQ\":[\"Utiliser une connexion SSH existante\"],\"aXYd8V\":[\"Délai\"],\"aX_S_r\":[\"Page \",[\"0\"],\" sur \",[\"totalPages\"]],\"agZcf8\":[\"SQL généré : \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [champs]\"],\"alplHn\":[\"Analyse du plan de requête avec l’IA...\"],\"anBcU3\":[\"Si vous aimez tabularis et souhaitez voir davantage de fonctionnalités, pensez à soutenir le projet en contribuant au code, en signalant des bugs ou en mettant une étoile au dépôt.\"],\"arHmj2\":[\"Voulez-vous vraiment supprimer cette requête de l’historique ?\"],\"arKcqW\":[\"Les anciens serveurs peuvent revenir à des plans estimés avec moins de métriques.\"],\"arcpYe\":[\"Validation requise\"],\"aurEkh\":[\"Chargement des processus…\"],\"avtdsd\":[\"Mode SQL\"],\"az8lvo\":[\"Désactivée\"],\"b1Ah3z\":[\"Focalisé sur\"],\"b392Dr\":[\"Tout développer\"],\"b5S_PU\":[\"Nom de la base de données\"],\"bAvovP\":[\"Descendre\"],\"bH3JqY\":[\"Aucune table trouvée\"],\"bP5JOn\":[\"Retour à la ligne automatique\"],\"bcOdok\":[\"Supprimer le groupe\"],\"bcqeas\":[\"Mettre toutes les requêtes MCP en lecture seule\"],\"bmca5u\":[\"Écritures seulement\"],\"bpCiBU\":[\"Autoriser les écritures via MCP\"],\"bqnhqW\":[\"L’estimation dépasse les lignes réelles\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Erreur\"],\"bw22Gk\":[\"Schéma des colonnes\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Principaux problèmes\"],\"cFCKYZ\":[\"Refuser\"],\"cFGrCP\":[\"table\"],\"cGeFup\":[\"Taille de police\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focaliser sur la table\"],\"cM9NHc\":[\"Rétrograder vers\"],\"cO9-2L\":[\"Désactiver\"],\"cSev-j\":[\"Filtres\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importer \",\"#\",\" lignes\"],\"other\":[\"Importer \",\"#\",\" lignes\"]}]],\"c_xoSn\":[\"Cellule \",[\"n\"],\" renommée\"],\"cd0XEW\":[\"Enregistrer la requête\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Diviser le groupe\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" instructions\"],\"d34vwG\":[\"Charger les bases de données\"],\"d6ynQ7\":[\"Tri décroissant\"],\"d8_6_v\":[\"annuler\"],\"d8wc1_\":[\"Exemples de valeurs\"],\"dBXoCS\":[\"Une variable d’environnement est présente, mais vous pouvez la remplacer en définissant une clé ci-dessus.\"],\"dD7NPy\":[\"Plan\"],\"dEgA5A\":[\"Annuler\"],\"dMtLDE\":[\"à\"],\"dPJVhW\":[\"Échec de l’installation\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" session\"],\"other\":[\"#\",\" sessions\"]}]],\"dTUzKm\":[\"Exécuter la sélection (\",[\"0\"],\")\"],\"dU_iQN\":[\"Aucune session ne correspond aux filtres.\"],\"dUh9QW\":[\"Planification\"],\"dVoir2\":[\"Cellule Markdown \",[\"n\"],\" ajoutée\"],\"dZ0d2O\":[\"Veuillez sélectionner au moins une table\"],\"dhi13U\":[\"Choisir une image…\"],\"dli1JX\":[\"Soumettre les modifications\"],\"dmYV6f\":[\"Routines\"],\"dohZCo\":[\"Instructions pour la génération SQL par IA. Utilisez \",[\"SCHEMA\"],\" comme espace réservé pour la structure de la base de données.\"],\"dtxpK2\":[\"Analyser\"],\"dwW9nJ\":[\"Afficher les numéros de ligne\"],\"dwWVw_\":[\"Afficher l’écran d’accueil\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" onglet\"],\"other\":[\"#\",\" onglets\"]}]],\"dxxY9r\":[\"Si existe\"],\"dyN4j9\":[\"Cliquez sur \\\"Exécuter l’aperçu\\\" pour voir les résultats\"],\"e07Iz5\":[\"Ouvrir le gestionnaire des tâches\"],\"e0NzXu\":[\"Ce projet est un Work In Progress (WIP). Les fonctionnalités principales sont stables, mais nous avons de grands projets.\"],\"e1UKxf\":[\"Enregistrer cette requête\"],\"e34gdU\":[\"Temps d'attente avant échec.\"],\"e62LQd\":[\"Forcer l’arrêt\"],\"e6QZsM\":[\"Thème de l’éditeur\"],\"e8CirT\":[\"Exécuter la requête\"],\"eD2kUP\":[\"Buffers lus\"],\"eE0JZ4\":[\"Version\"],\"eIDch7\":[\"Saisir le prompt d’analyse de plan EXPLAIN...\"],\"eIVolo\":[\"Lecture/écriture disque\"],\"eJOEBy\":[\"Exportation...\"],\"eKHY3W\":[\"Paramètres du plugin\"],\"eMb6Ub\":[\"Choisir une ressource...\"],\"ePK91l\":[\"Modifier\"],\"eXweu6\":[\"Développer la cellule\"],\"ecNsTE\":[\"Aucune requête ne correspond à votre recherche\"],\"ecUA8p\":[\"Aujourd’hui\"],\"ecpIZP\":[\"Saisissez la phrase secrète si la clé est chiffrée\"],\"ejmeDY\":[\"Installés\"],\"esl-Tv\":[\"Type de ressource\"],\"exyUec\":[\"Connexion\"],\"f2AJjl\":[\"Supprimer la ligne\"],\"f4pD-j\":[\"Échec du test de connexion\"],\"f7sXvi\":[\"Saisir le mot de passe\"],\"fAsxc0\":[\"Scans séquentiels\"],\"fIeFs0\":[\"Sélectionner une valeur...\"],\"fJm92A\":[\"Sélectionnez un fichier contenant un plan EXPLAIN (format JSON ou texte PostgreSQL) pour le visualiser.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Valeurs\"],\"f_b1TA\":[\"Historique d’exécution\"],\"fghnqP\":[\"Passer à la connexion 1-9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Virgule (,)\"],\"fp711N\":[\"Bloquée (lecture seule)\"],\"fpzyLj\":[\"Page \",[\"0\"],\" sur \",[\"1\"]],\"fuA6oy\":[\"Délai d’expiration du socket\"],\"fvImQM\":[[\"0\"],\" sélectionnées\"],\"fwr_nh\":[\"Installez des extensions, gérez les pilotes de plugins et gardez les paramètres d'exécution sous contrôle.\"],\"g0ZzK4\":[\"JSON valide\"],\"g11hAR\":[\"Nouvelle ligne\"],\"g8VcMm\":[\"Mon cluster K8s\"],\"gCFR_O\":[\"Exécution parallèle (Tout exécuter)\"],\"gEjU98\":[\"Ouvrir les connexions\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Au moins une colonne est requise\"],\"gSuQrG\":[\"Aucune connexion ne correspond à \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Relancer la requête\"],\"gZWMnn\":[\"Analyse IA\"],\"ghYd73\":[\"Choisir la cible...\"],\"giAqEC\":[\"Créer une nouvelle table\"],\"gnQS8X\":[\"Taille maximale de paquet utilisée par le connecteur MySQL.\"],\"gqV5VL\":[\"Intégré, non personnalisable\"],\"gww_XE\":[\"Colonne référencée\"],\"gxXPJ9\":[\"Configurer l’interpréteur\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Agrandir\"],\"h-XNc9\":[\"Délimiteur CSV\"],\"h-kNAk\":[\"ex. donnees_ventes\"],\"h3Z_aK\":[\"Écrivez du Markdown ici...\"],\"h7MgpO\":[\"Raccourcis clavier\"],\"h7peZQ\":[\"Autoriser\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processus système en cours\"],\"other\":[\"#\",\" processus système en cours\"]}]],\"hEZrFh\":[\"Exécuter un fichier SQL...\"],\"hEipgW\":[\"Vérifier les mises à jour maintenant\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Exporter en CSV\"],\"hItdtk\":[\"Parcourir le dossier\"],\"hXFVjo\":[\"Le nom de la table est requis\"],\"hZ6znB\":[\"Port\"],\"h_huI6\":[\"Relancer\"],\"hbz1rh\":[\"clés\"],\"hdsaJo\":[\"Importation...\"],\"he3ygx\":[\"Copier\"],\"hfGimp\":[\"Choisir un namespace...\"],\"hjjSEi\":[\"Connexions en lecture seule\"],\"hjwN_s\":[\"Nom de la ressource\"],\"hlF1mD\":[\"Copier la sélection\"],\"hnboBb\":[\"Analyse IA du plan de requête\"],\"hnvu2p\":[\"Détails de l’erreur\"],\"hq4-D2\":[\"La clé API est stockée en toute sécurité dans le trousseau système. Définir une clé ici remplace la variable d’environnement.\"],\"hqjXdn\":[\"Échec de suppression de la connexion SSH\"],\"hqofAK\":[\"Copier le SQL\"],\"hy6L14\":[\"Voir sur GitHub\"],\"hyjACX\":[\"Cellules réduites/développées\"],\"hz1b5W\":[\"Aucun élément correspondant trouvé\"],\"i1vAVM\":[\"Créer nouvelle table\"],\"i3S5T3\":[\"Rechercher dans les favoris...\"],\"i4_LY_\":[\"Écriture\"],\"i5HBWh\":[\"Historique des requêtes réinitialisé\"],\"i5zCt4\":[\"Tableau\"],\"iAVlge\":[\"Personnalisez les instructions pour la génération IA des noms de cellules de notebook. Le contenu de la cellule (SQL ou Markdown) est envoyé comme message utilisateur.\"],\"iE1yAB\":[\"Filtrer les tables...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connecter\"],\"iSryJ2\":[\"Mon serveur SSH\"],\"iT7UeX\":[\"Ajouter un index\"],\"iUWwuR\":[\"Télécharger et installer\"],\"ia7i08\":[\"Sélectionnez d'abord contexte/namespace/type\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Enregistré\"],\"igcsfY\":[\"Aucun plugin disponible dans le registre.\"],\"ij-Elv\":[\"Aperçu de l’image\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" requêtes explicables trouvées\"],\"other\":[\"#\",\" requêtes explicables trouvées\"]}]],\"ioL38P\":[\"Surveillez en temps réel les processus plugins, le CPU, la RAM et l’utilisation disque\"],\"ixlL_e\":[\"Fichier de clé SSH (optionnel)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Sélectionner un modèle\"],\"j3gyYH\":[\"Tout appliquer\"],\"j5CWO4\":[\"À jour\"],\"j9HPuI\":[\"Ligne n°\",[\"0\"]],\"jBtpMP\":[\"Tous les statuts\"],\"jEu4bB\":[\"Colonnes\"],\"jEyQIs\":[\"Aucune routine trouvée\"],\"jHc1By\":[\"Supprimer la vue\"],\"jI6sj4\":[\"Le coût, le temps et les estimations de lignes sont souvent indisponibles comparés à PostgreSQL et MySQL.\"],\"jIxQCZ\":[\"Indisponible sur votre plateforme\"],\"jKIncn\":[\"Le nom de la base de données est requis\"],\"jPSk57\":[\"Motif (facultatif)\"],\"jUNY_d\":[\"vue\"],\"jVqjDo\":[\"Format de fichier notebook invalide\"],\"jWSZ-A\":[\"Aperçu uniquement - données complètes non chargées\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Délai d’expiration du socket en millisecondes.\"],\"jpeU_Z\":[\"Notebooks\"],\"jpgB4Y\":[\"Le nom de la connexion est requis\"],\"jsQZMk\":[\"IA\"],\"juO8wz\":[\"processus enfant\"],\"jx0t66\":[\"Réduire les processus enfants\"],\"k-0mL-\":[\"Ajouter une colonne\"],\"k-XiMX\":[\"Brut\"],\"k2UnVy\":[\"Condition hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"secondes\"],\"kBiBq7\":[\"Supprimer l’index \\\"\",[\"name\"],\"\\\" ?\"],\"kEYasw\":[\"Afficher/masquer le graphique\"],\"kI1qVD\":[\"Formater\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" lignes · \",[\"1\"],\" ms\"],\"other\":[\"#\",\" lignes · \",[\"2\"],\" ms\"]}]],\"kJDmsI\":[\"Détails de l'événement\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registre\"],\"kY-q3P\":[[\"label\"],\" est requis\"],\"kexIdC\":[\"Utiliser le Port-Forward Kubernetes\"],\"krksx_\":[\"Succès\"],\"ktYUe9\":[\"Tout exécuter\"],\"kwY6nh\":[\"Fermer\"],\"kx0s-n\":[\"Résultats\"],\"kxUEfE\":[\"Échec de récupération de la définition de la routine : \"],\"l2Op2p\":[\"Paramètres de requête\"],\"l9Ivba\":[\"Processus plugins et ressources système\"],\"lBdPxu\":[\"Couleur d'accent\"],\"lCF0wC\":[\"Actualiser\"],\"lEQRwq\":[\"Données (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nouvelle table créée\"],\"lOekZ3\":[\"Passer en disposition horizontale\"],\"lUA1C1\":[\"Phrase secrète de clé SSH (optionnel)\"],\"lVeG20\":[\"Dépendances Rust\"],\"lXAG6D\":[\"Instructions pour l’explication de requêtes par IA. Utilisez \",[\"LANGUAGE\"],\" comme espace réservé pour la langue de sortie.\"],\"lbbYjy\":[\"Modifiez directement le fichier de configuration brut. Un redémarrage est nécessaire pour appliquer les changements.\"],\"lhKW0m\":[\"Cellule SQL \",[\"n\"],\" ajoutée\"],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Taille de page des résultats (limite)\"],\"lkz6PL\":[\"Durée\"],\"lmVGeo\":[\"Ajouter une clé étrangère\"],\"lnnx3E\":[\"Connectez Tabularis à Claude Desktop, Cursor et plus encore\"],\"lpGiOh\":[\"Check interval\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Ajouter\"],\"m2Q_r8\":[\"Détecter le JSON dans les colonnes texte\"],\"m2tskz\":[\"Succès\"],\"mA-qpe\":[\"Exécution complète\"],\"mBhhbA\":[\"Logs exportés dans le presse-papiers\"],\"mCNdzH\":[\"Exécuter la cellule\"],\"mO95sp\":[\"Fermer le panneau\"],\"mP7dLi\":[\"Saisissez le nom de la police ci-dessus\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloqué\"],\"other\":[\"#\",\" bloqués\"]}]],\"mS74ir\":[\"Échec de l’enregistrement de la connexion SSH\"],\"mSqtw8\":[\"Exécuter l’aperçu\"],\"mURmfQ\":[\"Définition de la vue (SQL)\"],\"mX_isJ\":[\"Verticale\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Structure (DDL)\"],\"mrk4Cf\":[\"Trier par \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Nous venons d’ouvrir une communauté dédiée à Tabularis : entraide, astuces et influence sur la roadmap.\"],\"mtvVdV\":[\"Lignes traitées\"],\"mx4evv\":[\"Créer la table\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Télécharger\"],\"n7JDTx\":[\"Installez et activez des plugins pour les voir ici\"],\"nDDJir\":[\"Rechercher session, client, connexion…\"],\"nHP-Kr\":[\"Aucune session active. Veuillez sélectionner une connexion.\"],\"nKhCjW\":[\"Sélectionner les tables\"],\"nNwvm4\":[\"Erreur\"],\"nOVim5\":[\"Échec de l’enregistrement de la connexion\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Événements\"],\"nf14vn\":[\"Extension requise : \",[\"0\"]],\"ngO6Pv\":[\"Autorise la touche Entrée (en plus de Tab) à accepter la suggestion d’autocomplétion active. Lorsqu’elle est désactivée, Entrée insère toujours un saut de ligne.\"],\"nhmF3p\":[\"connexions\"],\"noM5A_\":[\"Créez votre première connexion\"],\"nohy4m\":[\"Aucune activité MCP.\"],\"nr-axf\":[\"Supprimer le plugin\"],\"nsPFX9\":[\"Ouvrir dans Visual Explain\"],\"nuBbBr\":[\"Graphique\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Exporter la base de données\"],\"o-XJ9D\":[\"Modifier\"],\"o21Y-P\":[\"entrées\"],\"o3tP_A\":[\"Supprimer l’index\"],\"o45L8r\":[\"Indiquez le nom de votre connexion\"],\"o53XGh\":[\"Copier la/les ligne(s) sélectionnée(s)\"],\"o7J4JM\":[\"Filtre\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Niveau\"],\"oGiIL7\":[\"Fournisseur par défaut\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connexion perdue\"],\"oJlXF2\":[\"Importer le notebook\"],\"oMFv82\":[\"Diviser verticalement\"],\"oOFiQg\":[\"Limite le nombre de lignes récupérées par requête afin d’éviter les problèmes de performance. Définissez 0 pour désactiver la limite (non recommandé).\"],\"oT9ZD3\":[\"Masquer la vue d’ensemble\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Graphique modifié (cellule \",[\"n\"],\")\"],\"oWfclW\":[\"Affiche le visualiseur JSON lorsqu'une cellule texte non typée contient un objet ou un tableau JSON. Ajoute un petit coût d'analyse par cellule.\"],\"obpbdz\":[\"Fichier de configuration introuvable (à créer manuellement)\"],\"odZgfC\":[\"CLIENTS IA\"],\"ogZhXn\":[\"Choisissez la direction de disposition par défaut pour les diagrammes ER\"],\"ohUJJM\":[\"Plugins\"],\"olAdaI\":[\"Lignes réelles\"],\"olWzar\":[\"Forcer l’arrêt du processus du plugin\"],\"ovBPCi\":[\"Défaut\"],\"owzTWN\":[\"Modèles IA actualisés depuis les fournisseurs\"],\"oxYi6j\":[\"Ajustez la taille de police de base utilisée dans toute l’application (10-20 px).\"],\"p--hsQ\":[\"Une connexion à la base de données a été perdue\"],\"p6NueD\":[\"NOUVELLE\"],\"pOYHox\":[\"Actions\"],\"pR9bTR\":[\"Aucune donnée BLOB\"],\"pS8S5q\":[\"ex. users, orders, products\"],\"pSws_M\":[\"Nom de la table\"],\"pVLbKZ\":[\"Vue créée avec succès\"],\"pWT04I\":[\"Vérification...\"],\"pZJ_6D\":[\"Le nom de l’index est requis\"],\"pddYFG\":[\"Saisir le prompt de nom de cellule de notebook...\"],\"pm9Yb5\":[\"Translation updates\"],\"pnpyuD\":[\"Activer les logs\"],\"pqKMPv\":[\"Échec de la création de la table : \"],\"pqaP1h\":[\"Fermer\"],\"pqarBu\":[\"Asc\"],\"ptuq35\":[\"ex. Comic Sans MS\"],\"pzu7v4\":[\"Horizontale\"],\"q-ch8m\":[\"Les autres restent en lecture seule. Seules celles cochées peuvent écrire.\"],\"qA5jLs\":[\"Détails de l’erreur\"],\"qIrtcK\":[\"Mises à jour\"],\"qOqy8G\":[\"Vérification de la configuration...\"],\"qWaVNs\":[\"Enregistrer et redémarrer\"],\"qb3LPX\":[\"Afficher le diagramme ER\"],\"qkK0vq\":[\"Le nom de la vue est requis\"],\"qki9tG\":[\"Erreur\"],\"qoIir-\":[\"L’URL de base de votre API compatible OpenAI. Exemples : https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Tout réduire\"],\"r6ncaO\":[\"Fermer l’onglet\"],\"rAJlpP\":[\"Port du conteneur\"],\"rG3WVm\":[\"Lecture\"],\"rGRCeK\":[\"Effacer l’historique des requêtes\"],\"rNIto7\":[\"Le nom de la ressource est requis\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook exporté avec succès\"],\"rY4sEV\":[\"Supprimer la clé étrangère\"],\"rbu0nO\":[\"Gérer les connexions SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connexion(s)\"],\"other\":[\"#\",\" connexion(s)\"]}]],\"rn2_2V\":[\"Supprimer le filtre\"],\"roABNH\":[\"Aucun historique de requêtes\"],\"rtir7c\":[\"inconnu\"],\"ru0-2W\":[\"Aucune connexion active\"],\"rvDPWO\":[\"Écart d’estimation\"],\"rwWjWg\":[\"Notes de version\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Tester la connexion\"],\"sBOaim\":[\"Le fichier de configuration a été enregistré. Redémarrer maintenant pour appliquer les changements ?\"],\"sCyv9B\":[\"Actualiser les modèles\"],\"sSUqe4\":[\"Supprimer\"],\"sUBkgN\":[\"Génération du SQL...\"],\"sZZG3d\":[\"Voulez-vous vraiment importer \\\"\",[\"0\"],\"\\\" ?\\nCela peut écraser des données existantes.\"],\"sbK5ck\":[\"Rechercher dans l’historique...\"],\"sq_bS6\":[\"À la suppression\"],\"suW7-E\":[\"Délai d’expiration de connexion en millisecondes.\"],\"suqtBX\":[\"Échap pour fermer\"],\"t-R8-P\":[\"Exécution\"],\"t1OfVY\":[[\"totalLibraries\"],\" bibliothèques\"],\"t2TMzs\":[\"Fermer l’onglet\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Sélectionner une table...\"],\"t7KRl1\":[\"Journal de chaque appel MCP et des requêtes en attente de validation. Stockage local.\"],\"t9NJIk\":[\"Opérations gourmandes en scans détectées\"],\"tB7xof\":[\"Opérations temporaires ou de tri\"],\"tBBXTO\":[\"Intervalle de ping\"],\"tFrT3w\":[\"Ajoutez ceci manuellement au fichier de configuration de votre client si l’installation automatique échoue.\"],\"tJ7UbA\":[\"expliquer la sélection\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Diviser horizontalement\"],\"tQhW-D\":[\"Paramètres des logs\"],\"tT-BQX\":[\"Installés\"],\"tXFGEx\":[\"Aucune connexion Kubernetes enregistrée. Cliquez sur « Ajouter » pour en créer une.\"],\"tXLz_8\":[\"Supprimer\"],\"tXpRby\":[\"Grille de données\"],\"tbysEk\":[\"Actions\"],\"tdta9X\":[\"Page \",[\"0\"]],\"tfDRzk\":[\"Enregistrer\"],\"tfEioV\":[\"Exécuter toutes les cellules SQL de haut en bas\"],\"tiAIaJ\":[\"Mot de passe SSH manquant. Veuillez le ressaisir.\"],\"tk22BR\":[\"Collez des données structurées et vérifiez le schéma avant l'import\"],\"tst44n\":[\"Événements\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"Fichier SQL exécuté avec succès\"],\"u6QeR6\":[\"Redémarrer maintenant\"],\"uAQUqI\":[\"Statut\"],\"uBAxNB\":[\"Éditeur\"],\"uBI8D9\":[\"Esc pour fermer\"],\"uFViPK\":[\"Aucune connexion SSH disponible\"],\"uHUuhp\":[\"Expliquer cette requête\"],\"uHfFzS\":[\"Taille de police de l’éditeur\"],\"uJ_3K5\":[\"Supprimer le notebook « \",[\"0\"],\" » ? Cette action est irréversible.\"],\"uKaNJ3\":[\"Ouvrir dans l’éditeur JSON\"],\"uQBwTo\":[\"Schémas\"],\"ub54ff\":[\"Centre de plugins\"],\"ufFyBs\":[\"Base de données exportée avec succès\"],\"upNmR2\":[\"Ouvrir l’éditeur latéral\"],\"upwIY4\":[\"Définition de la vue\"],\"utMia3\":[\"Tout désélectionner\"],\"uyNaJg\":[\"1 élément\"],\"v61dnS\":[\"Saisissez le nom exact du modèle pour votre fournisseur compatible OpenAI.\"],\"v6oeyr\":[\"Installé\"],\"v75DGg\":[\"Parcourir le fichier\"],\"v99dO4\":[\"Clé primaire\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" requêtes trouvées\"],\"other\":[\"#\",\" requêtes trouvées\"]}]],\"vCSBPD\":[\"Ajouter un filtre\"],\"vH7uJj\":[\"Trier par…\"],\"vUOA1-\":[\"Rechercher des modèles...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE inclut les lignes réelles, le temps, les boucles et les compteurs de buffer lorsqu’ils sont disponibles.\"],\"vXIe7J\":[\"Langue\"],\"vYf4Jm\":[\"Saisissez une fonction SQL complète (ex. ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Préférer\"],\"vditm4\":[\"Expliquer le plan\"],\"vks_ls\":[\"Fermer les autres onglets\"],\"vnAnIp\":[\"Le modèle \",[\"0\"],\" est introuvable dans \",[\"1\"],\". Il pourrait ne pas fonctionner correctement.\"],\"vqoN5u\":[\"Structure\"],\"vrAvbP\":[\"Voulez-vous vraiment supprimer le groupe \\\"\",[\"0\"],\"\\\" ? Les connexions de ce groupe seront déplacées vers Non groupées.\"],\"vtJ2yO\":[\"Explorateur\"],\"vujQJ5\":[\"Localisation\"],\"vvJPVL\":[\"Afficher la vue d’ensemble\"],\"vwI5S4\":[\"Succès\"],\"vzH-7Z\":[\"Expliquer\"],\"w7QmD_\":[\"Saisir le prompt système...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Temps écoulé\"],\"wCfv2R\":[\"Ajouter une connexion\"],\"wGfc86\":[\"Effacer tout l’historique\"],\"wGwNv4\":[\"Base de données active\"],\"wJJ-Wy\":[\"Installation...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffers touchés\"],\"wQn-RM\":[\"Ajouter une colonne\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Appliqué\"],\"wTmVhm\":[\"Supprimer\"],\"wXx7W4\":[\"How often to check for new translations.\"],\"wZeIWq\":[\"Importer depuis le Presse-papiers\"],\"w_bY7R\":[\"Logs\"],\"wc_8bA\":[\"En attente\"],\"wckWOP\":[\"Gérer\"],\"wdYcKH\":[\"Onglets ouverts\"],\"wja8aL\":[\"Sans titre\"],\"wkOAzk\":[\"Aucun notebook ne correspond à votre recherche.\"],\"wp49Ao\":[\"Échec du traitement des insertions : \"],\"wqG2hQ\":[\"Ignorer (ne pas importer)\"],\"wwrAsK\":[\"Veuillez remplir tous les champs requis\"],\"wwu18a\":[\"Icône\"],\"x2fr_j\":[\"Graphe\"],\"xANKBj\":[\"Fonctions\"],\"xBwjck\":[\"Un redémarrage est nécessaire pour appliquer les changements.\"],\"xDAtGP\":[\"Message\"],\"xECY01\":[\"Procédures\"],\"xGPNgZ\":[\"Personnalisation des prompts\"],\"xNgtS-\":[\"Aucune vue trouvée\"],\"xOPa1b\":[\"Le port doit être compris entre 1 et 65535\"],\"xY9s5E\":[\"Délai dépassé\"],\"xaVUr1\":[\"Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwis\"],\"xbvTzL\":[\"Chemin du fichier\"],\"xlew5F\":[\"Effacer\"],\"xmNyKz\":[\"Test en cours...\"],\"xtuh6D\":[\"Développer l’explorateur\"],\"y-Zdqj\":[\"Choisir un contexte...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Ouvrir le visualiseur JSON\"],\"yQXjG5\":[\"Tout désélectionner\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Hier\"],\"ygCKqB\":[\"Arrêter\"],\"ykCc6r\":[\"Base de données modifiée (cellule \",[\"n\"],\")\"],\"ynVMSc\":[\"Tout sélectionner\"],\"ytdz1d\":[\"L'IA veut exécuter une écriture\"],\"yyhzur\":[\"Créer une table\"],\"yz7wBu\":[\"Fermer\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"Mot de passe SSH\"],\"z4oF5T\":[\"Exporter la base de données\"],\"z5kV0h\":[\"Connexions\"],\"zBTMzx\":[\"Aperçu\"],\"zCaAKs\":[\"Erreur de mise à jour\"],\"zDAakK\":[\"Impossible d’afficher le diagramme sans ID de connexion.\"],\"zGe21h\":[\"Cette clé est chargée depuis une variable d’environnement\"],\"zGfL5t\":[\"valeur\"],\"zL6-4A\":[\"Aucun processus de plugin n’est en cours\"],\"zLZhCi\":[\"Nouvelle communauté Discord !\"],\"zLlCou\":[\"Copier le nom de colonne\"],\"zNEL34\":[\"Rejoindre la communauté\"],\"zNgTlV\":[\"Fermer les onglets à droite\"],\"zQz55p\":[\"Inspecter la structure\"],\"zR0FfH\":[\"Exporté vers \",[\"target\"]],\"zRZeOc\":[\"Rechercher tables, vues, routines, triggers...\"],\"zUNMsr\":[\"Clé SSH\"],\"zXMRzb\":[\"Port SSH\"],\"zZgoXr\":[\"Aucune table correspondante\"],\"zaWbms\":[\"Annuler les modifications\"],\"zgClmU\":[\"Installer la configuration\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Saisir une valeur...\"],\"zvzN4C\":[\"Définir comme actif\"],\"zzDlyQ\":[\"Succès\"],\"zzMxrp\":[\"Modifier config.json\"],\"zz_Wd_\":[\"Mode\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/it/messages.po b/src/locales/it/messages.po index 0254142e..8005b3af 100644 --- a/src/locales/it/messages.po +++ b/src/locales/it/messages.po @@ -500,12 +500,10 @@ msgstr "Sei sicuro di voler cancellare tutta la cronologia delle query per quest #. placeholder {0}: column.name #: src/components/layout/sidebar/SidebarColumnItem.tsx -msgid "" -"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +msgid "Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" "\n" "WARNING: This will permanently delete all data in this column. This action cannot be undone." -msgstr "" -"Sei sicuro di voler eliminare la colonna \"{0}\" dalla tabella \"{tableName}\"?\n" +msgstr "Sei sicuro di voler eliminare la colonna \"{0}\" dalla tabella \"{tableName}\"?\n" "\n" "ATTENZIONE: Questo eliminerà permanentemente tutti i dati in questa colonna. L'azione non può essere annullata." @@ -548,11 +546,9 @@ msgstr "Sei sicuro di voler eliminare la vista \"{0}\"?" #. placeholder {0}: file.split(/[\\/]/).pop() #: src/components/layout/ExplorerSidebar.tsx -msgid "" -"Are you sure you want to import \"{0}\"?\n" +msgid "Are you sure you want to import \"{0}\"?\n" "This may overwrite existing data." -msgstr "" -"Sei sicuro di voler importare \"{0}\"?\n" +msgstr "Sei sicuro di voler importare \"{0}\"?\n" "Questo potrebbe sovrascrivere i dati esistenti." #: src/components/modals/ViewEditorModal.tsx @@ -601,6 +597,10 @@ msgstr "Auto Increment" msgid "Auto paginated" msgstr "Impaginazione automatica" +#: src/components/settings/LocalizationTab.tsx +msgid "Automatic updates" +msgstr "" + #: src/components/settings/InfoTab.tsx msgid "Automatically check for new versions when the app launches" msgstr "Controlla automaticamente nuove versioni all'avvio dell'app" @@ -746,6 +746,10 @@ msgstr "Controlla Aggiornamenti Ora" msgid "Check for updates on startup" msgstr "Controlla aggiornamenti all'avvio" +#: src/components/settings/LocalizationTab.tsx +msgid "Check interval" +msgstr "" + #: src/components/modals/McpModal.tsx #: src/pages/McpPage.tsx msgid "Checking configuration..." @@ -2297,6 +2301,10 @@ msgstr "Fallito: " msgid "Favorites" msgstr "Preferiti" +#: src/components/settings/LocalizationTab.tsx +msgid "Fetch the latest translations from the cloud without waiting for an app update." +msgstr "" + #: src/components/modals/NewConnectionModal.tsx msgid "File Path" msgstr "Percorso File" @@ -2520,6 +2528,10 @@ msgstr "Quanti secondi il processo MCP attende la decisione dell'utente prima di msgid "How many logs to keep in memory (1-10000)" msgstr "Quanti log mantenere in memoria (1-10000)" +#: src/components/settings/LocalizationTab.tsx +msgid "How often to check for new translations." +msgstr "" + #: src/components/settings/GeneralTab.tsx msgid "How often to check if active connections are still alive. Set to 0 to disable." msgstr "Frequenza con cui verificare se le connessioni attive sono ancora raggiungibili. Imposta 0 per disabilitare." @@ -2971,6 +2983,10 @@ msgstr "Messaggio" msgid "Minimize" msgstr "Riduci" +#: src/components/settings/LocalizationTab.tsx +msgid "minutes" +msgstr "" + #: src/components/modals/ClipboardImport/SchemaEditor.tsx msgid "Mixed types detected, defaulted to TEXT" msgstr "Tipi misti rilevati, default TEXT" @@ -5022,6 +5038,10 @@ msgstr "Punti Critici" msgid "Total Cost" msgstr "Costo Totale" +#: src/components/settings/LocalizationTab.tsx +msgid "Translation updates" +msgstr "" + #: src/components/ui/JsonInput.tsx msgid "Tree" msgstr "Albero" diff --git a/src/locales/it/messages.ts b/src/locales/it/messages.ts index 3f0bb994..45f314e3 100644 --- a/src/locales/it/messages.ts +++ b/src/locales/it/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Max Voci Cronologia\"],\"-6AWa-\":[\"Importa connessioni\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Disconnetti\"],\"-PLZfh\":[\"Impossibile aggiornare i modelli\"],\"-T5W2e\":[\"Note Driver\"],\"-ZgeeE\":[\"Cronologia modifiche\"],\"-aYrdc\":[\"La versione \",[\"0\"],\" è disponibile\"],\"-fBGXl\":[\"Costo Più Alto\"],\"-jIQDz\":[\"Comprimi Cella\"],\"-u1eRo\":[\"Nessun database\"],\"-yoeVU\":[\"Caricamento schema...\"],\"-zy2Nq\":[\"Tipo\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID approvazione\"],\"0E5-gF\":[\"Sei sicuro di voler eliminare questa connessione?\"],\"0HCubq\":[\"Espandi\"],\"0Kmdvy\":[\"Font Personalizzato\"],\"0Nj13E\":[\"Genera SQL\"],\"0ROgz5\":[\"Inserisci JSON...\"],\"0SY9sU\":[\"Impossibile disconnettersi dal database\"],\"0b3kL9\":[\"Seleziona un database\"],\"0caMy7\":[\"Cronologia\"],\"0mx5ow\":[\"Query\"],\"0n9BtL\":[\"Anteprima\"],\"0pHB9N\":[\"Copia come tabella.colonna\"],\"0sQzZK\":[\"Filtra database...\"],\"0uPP9X\":[\"Nome FK (Opzionale)\"],\"0wxuek\":[\"Versione Corrente\"],\"0x09Aw\":[\"Stop on error commutato\"],\"0yBP6v\":[\"Supporta lo Sviluppo\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe\"],\"other\":[\"#\",\" righe\"]}]],\"0yVAoD\":[\"Conta righe\"],\"0zxJ87\":[\"Nessun log disponibile\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Modifica Vista\"],\"11fGJ6\":[\"Query\"],\"13hIUA\":[\"Chiave API \",[\"0\"]],\"14qNWF\":[\"Seleziona Connessione SSH\"],\"17qHRP\":[\"Nuova connessione\"],\"1Dn6bg\":[\"Importa dagli Appunti\"],\"1Dnd0I\":[\"Carica conteggio righe\"],\"1FjTLW\":[\"es. python3\"],\"1GOvbo\":[\"Ollama connesso (\",[\"0\"],\" modelli trovati)\"],\"1I6UoR\":[\"Viste\"],\"1U7hS5\":[\"Lung\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Font dell'Editor\"],\"1ekzlY\":[\"Processi Plugin\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Selezione Tema\"],\"1xVZkL\":[\"Nessun modello trovato\"],\"26Joci\":[[\"0\"],\" righe recuperate\"],\"2Bf-Qe\":[\"Nuova console\"],\"2CrSmP\":[\"Aiuta tabularis a crescere\"],\"2D9F8_\":[\"Impossibile duplicare la connessione\"],\"2Eoi_a\":[\"Mostra dettagli\"],\"2F4pE5\":[\"Build e Test Rust\"],\"2Fsd9r\":[\"Questo Mese\"],\"2JzKXI\":[\"Imposta GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Seleziona Tutto\"],\"2SO5RM\":[\"Kubernetes non è disponibile per questo driver.\"],\"2Uh5GA\":[\"ecosistema Cargo\"],\"2YylFp\":[\"Nuova Query Visuale\"],\"2luuSG\":[\"Riprova\"],\"2wxgft\":[\"Rinomina\"],\"2yG2GC\":[\"Sospendi le scritture (o ogni query) chiedendo conferma all'utente in Tabularis prima dell'esecuzione.\"],\"30-b5r\":[\"Elimina\"],\"31kwdN\":[\"Duplica filtro\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Tutti gli strumenti\"],\"3Am5DS\":[\"Vista a tab\"],\"3FVg9_\":[\"Colonna Locale\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Esegui\"],\"3L0HCz\":[\"Nessun plugin corrisponde alla ricerca.\"],\"3Nv3JV\":[\"Esecuzione query...\"],\"3TSz9S\":[\"Riduci\"],\"3UW8fG\":[\"Aggiornamenti gestiti da \",[\"0\"]],\"3YvS-c\":[\"Nuovo tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt Nome Cella Notebook\"],\"3qkggm\":[\"Schermo Intero\"],\"3rBJ1T\":[\"Vedi schema\"],\"3xZ-xV\":[\"Insert Current Timestamp\"],\"40Gx0U\":[\"Fuso Orario\"],\"41GP4f\":[\"Scegli il delimitatore predefinito utilizzato per la copia o l'esportazione delle righe in formato CSV.\"],\"42iaEi\":[\"PostgreSQL senza ANALYZE mostra solo le stime del planner.\"],\"44cXI8\":[\"Ordina per \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gestisci Database\"],\"4CK17g\":[\"Sei sicuro di voler modificare la vista \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Seleziona almeno un database\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Esporta come HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processo figlio\"],\"other\":[\"#\",\" processi figli\"]}]],\"4VyuY3\":[\"Sei sicuro di voler cancellare tutti i log?\"],\"4WWqS3\":[\"Espandi/comprimi albero JSON\"],\"4XAQdl\":[\"Crea Indice\"],\"4cEClj\":[\"Sessioni\"],\"4cmfYp\":[\"Duplicate Row\"],\"4hsr6d\":[\"Crea Vista\"],\"4lIZTB\":[\"Dipendenze Dev Frontend\"],\"4oYjvJ\":[\"Cerca nella query…\"],\"4tMxW4\":[\"Anteprima record correlato\"],\"4yJcjm\":[\"Seleziona tipo...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Chiudi pannello filtri (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Punto e virgola (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" evento\"],\"other\":[\"#\",\" eventi\"]}]],\"5I2fxu\":[\"/percorso/id_rsa\"],\"5NZpX8\":[\"Vista lista\"],\"5To6Z6\":[\"Copia query\"],\"5gqNQl\":[\"Vista griglia\"],\"5igIzr\":[\"Importazione annullata\"],\"5nTIup\":[\"Modifica vista: \",[\"name\"]],\"5qIe8E\":[\"Esegui Tutto\"],\"66bEht\":[\"Stato del Progetto\"],\"6PIJVc\":[\"Avvio\"],\"6QvP0l\":[\"Esporta come JSON\"],\"6W41Xq\":[\"Gestione Attività\"],\"6WngBH\":[\"Imposta NULL\"],\"6YtxFj\":[\"Nome\"],\"6_dCYd\":[\"Panoramica\"],\"6dOBsk\":[\"Crea Vista\"],\"6gvoHP\":[\"Copia messaggio d’errore\"],\"6oCVzX\":[\"Il contesto Kubernetes è obbligatorio\"],\"6wQO0f\":[\"Mostra Dati\"],\"6z9W13\":[\"Riavvia\"],\"71agNy\":[\"Genera nomi per le celle senza nome con AI\"],\"74J3FG\":[\"Versione iniziale\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Ho capito\"],\"77nSMU\":[\"Vuoi eliminare l'intera storia delle attività AI? L'operazione è irreversibile.\"],\"7ABmyQ\":[\"Riprova\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" di \",[\"0\"],\" attivi\"],\"7E864M\":[\"Tipo Database\"],\"7FqaG1\":[\"Personalizza le istruzioni per l'analisi AI dei piani EXPLAIN. Usa \",[\"LANGUAGE\"],\" per la lingua di output.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Tipi misti rilevati, default TEXT\"],\"7RSQQd\":[\"Salva password nel Portachiavi\"],\"7VpPHA\":[\"Conferma\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fallite\"],\"7sMeHQ\":[\"Chiave\"],\"7sNhEz\":[\"Nome utente\"],\"7tATh2\":[\"Esegui Query\"],\"7yb4gk\":[\"Fallito: \"],\"8-4V8D\":[\"Tabelle\"],\"82G-l5\":[\"Il Model Context Protocol (MCP) permette agli assistenti AI (come Claude) di connettersi ai tuoi strumenti locali. Tabularis espone un server MCP che permette all'AI di leggere lo schema del database ed eseguire query in sicurezza.\"],\"83VjWE\":[\"Nuovo Notebook\"],\"86IgoU\":[\"Esegui query (nell'editor)\"],\"86fCgf\":[\"Personalizza le istruzioni per la generazione AI del nome delle tab risultato query. La query SQL viene inviata come messaggio utente.\"],\"87a_t_\":[\"Etichetta\"],\"87kWsr\":[\"Esporta connessioni\"],\"8CWirf\":[\"Server MCP\"],\"8S8aIX\":[\"Controllo Connessione\"],\"8TMaZI\":[\"Timestamp\"],\"8Tg_JR\":[\"Personalizzato\"],\"8UFKYr\":[\"Seleziona la query da eseguire\"],\"8VKSGV\":[\"Genera SQL\"],\"8Wjy6z\":[\"Chiudi schede a sinistra\"],\"8ZsakT\":[\"Password\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Editor SQL\"],\"8bRgTe\":[\"Provider AI non configurato. Vai su Impostazioni > AI.\"],\"8c_W0h\":[\"Versioni precedenti\"],\"8guEQP\":[\"Aggiorna Viste\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN è leggero e soprattutto strutturale.\"],\"8q_sOc\":[\"Rimuovi\"],\"8t-akp\":[\"prime \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nome Connessione\"],\"91gnWY\":[\"Esporta Log\"],\"91rtHL\":[\"Crea Nuova Vista\"],\"92hf9a\":[\"Rimuovi\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vista aggiornata con successo\"],\"9NzDFn\":[\"Mostra la schermata di benvenuto all'avvio dell'applicazione.\"],\"9OoUS3\":[\"Crea Nuova Connessione SSH\"],\"9QGRD5\":[\"Colonna destinazione\"],\"9QTny9\":[\"Esecuzione query fallita.\"],\"9S-fyV\":[\"Piano di esecuzione preliminare\"],\"9SJ_Sx\":[\"Risorse di Sistema\"],\"9UQ730\":[\"Clona\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"Nessun dato negli appunti\"],\"9hGjL2\":[\"Crea Indice\"],\"9mMU1R\":[\"Tempo\"],\"9mvFo_\":[\"Ora\"],\"9npOH9\":[\"Apri file\"],\"9uI_rE\":[\"Annulla\"],\"9xUjzm\":[\"Seleziona Tutti\"],\"9y_02p\":[\"Chatta con la community, ricevi aiuto, suggerisci funzionalità\"],\"A1pPcI\":[\"Host SSH\"],\"A1taO8\":[\"Cerca\"],\"A6C0pv\":[\"Costo Totale\"],\"A7WG0p\":[\"Plugin disabilitato\"],\"A7yRz3\":[\"La definizione della vista è richiesta\"],\"A9Uyp6\":[\"Importazione fallita: \"],\"ABEd-z\":[\"Usa il tuo package manager per aggiornare Tabularis.\"],\"AMdgKV\":[\"Prompt Analisi Piano di Esecuzione\"],\"ANSTMe\":[\"Nessun problema rilevante nel riepilogo del piano corrente.\"],\"ANzIr7\":[\"Cronologia Query\"],\"AOnaU7\":[\"saltate\"],\"AVlZoM\":[\"Variabile Ambiente\"],\"AXTVsE\":[\"Verifica completa\"],\"AXdRYR\":[\"Log attuali\"],\"Aa-YkQ\":[\"Esporta Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filtra per livello\"],\"AlPiMN\":[\"Clicca per saltare alla pagina\"],\"An-1rA\":[\"Righe restituite\"],\"AnV8j-\":[\"Modifica Colonna\"],\"AvEr_L\":[\"Nuova Console\"],\"AvYbUL\":[\"Star su GitHub\"],\"Aw_eOs\":[\"Richiede Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Nessun risultato trovato\"],\"B0mJGb\":[\"Output Grezzo\"],\"B1c58n\":[\"Modifica colonna\"],\"B3toQF\":[\"Oggetti\"],\"B5nKny\":[\"/percorso/assoluto/cartella\"],\"B5xevr\":[\"Il nome della connessione è obbligatorio\"],\"BAVvWJ\":[\"Diagramma ER\"],\"BBtVak\":[\"Comprimi Tutto\"],\"BEVzjL\":[\"Importazione fallita\"],\"BHATjK\":[\"Esporta connessioni\"],\"BJe2lZ\":[\"Mostra/nascondi sidebar\"],\"BK3WCj\":[\"Impossibile caricare il registro\"],\"BKbO3i\":[\"Notebook modificato\"],\"BMB51y\":[\"Esegui nella console\"],\"BNW_Z4\":[\"es. utenti_attivi, riepilogo_ordini\"],\"BPkXj7\":[\"Crea Chiave Esterna\"],\"BUO_JN\":[\"Copia Query\"],\"BYkhHY\":[\"Controlla aggiornamenti all'avvio\"],\"BeSg6-\":[\"Raccogli i log dell'applicazione in memoria per il debug\"],\"BgAyQH\":[\"Rimuovi ordinamento\"],\"BinTJI\":[\"ecosistema npm\"],\"BkFson\":[\"Impaginazione automatica\"],\"Bpglf1\":[\"Sposta Su\"],\"BrGo6h\":[\"Cerca notebook\"],\"BxiAN_\":[\"Elimina Query\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dipendenze Frontend\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Nessun filtro —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Download in corso...\"],\"CUxwxn\":[\"Mostra Tutte le Tabelle\"],\"CWMXbw\":[\"fermerà forzatamente il suo processo. Tutte le connessioni database attive che usano questo plugin smetteranno di funzionare finché il plugin non verrà riavviato.\"],\"CZt6BX\":[\"CONFIGURAZIONE MANUALE\"],\"Ca8ixZ\":[\"Elimina\"],\"CbJBQS\":[\"Aggiornamento fallito: \"],\"Cdz-YU\":[\"Vista impilata\"],\"CpeQf9\":[\"Cicli\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Seleziona il modello da utilizzare per la generazione e la spiegazione.\"],\"DB8zMK\":[\"Applica\"],\"DDXf5E\":[\"Funzioni SQL\"],\"DEwnwi\":[\"Elimina\"],\"DNTvdl\":[\"Apri nell'editor\"],\"DPc2P9\":[\"Elimina Cella\"],\"DUY8Ba\":[\"Modifiche Incompatibili\"],\"DVnBSM\":[\"Altezza Riga\"],\"Dd7YLj\":[\"Forse più tardi\"],\"Deej3j\":[\"JSON non valido\"],\"DfKhk_\":[\"Aggiorna\"],\"DiRiTz\":[\"Apri pagina del pacchetto\"],\"DlRHAD\":[\"Esecuzione EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" errore\"],\"other\":[\"#\",\" errori\"]}]],\"Dvdihe\":[\"Su \",[\"0\"],\" — controlla e decidi prima dell'esecuzione.\"],\"DzFLzw\":[\"SÌ\"],\"E-JUtQ\":[\"Approvazione manuale\"],\"E0kcnZ\":[\"Generale\"],\"E2mje_\":[\"Seleziona la query da analizzare\"],\"EDieyg\":[\"Sei sicuro di voler eliminare questa connessione SSH?\"],\"EHZxPj\":[\"Espandi\"],\"EL4oDO\":[\"Nuova Versione Disponibile\"],\"EPi4gT\":[\"Ordina per \",[\"field\"]],\"EWPtMO\":[\"Codice\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Sconosciuto\"],\"EhADgB\":[\"Elimina colonna\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Sei aggiornato\"],\"Em6JFd\":[\"Conta righe\"],\"EnGiqG\":[[\"0\"],\" elementi\"],\"Ew1n5z\":[\"Cerca plugin…\"],\"F18WP3\":[\"Parametri\"],\"F3uc1x\":[\"Il file esportato conterrà le password del database e SSH in chiaro. Conservalo in modo sicuro.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" righe\"],\"other\":[\"#\",\" righe\"]}]],\"F6pfE9\":[\"Attiva\"],\"F8tXg7\":[\"Anteprima Dati\"],\"F9-6yK\":[\"Formato di copia predefinito\"],\"F9lxfG\":[\"Rimuovi\"],\"F9nsa2\":[\"Il file di cronologia era corrotto ed è stato spostato in backup. Le nuove query verranno registrate normalmente. File di backup:\"],\"FF_oap\":[\"Default\"],\"FK8rlP\":[\"Nessuna connessione SSH configurata\"],\"FMRcH8\":[\"Prima riga come intestazione\"],\"FNvDMc\":[\"Questa Settimana\"],\"FQe1FI\":[\"Righe Stimate\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operazione\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Scegli un tema indipendente per l'editor SQL, oppure mantienilo sincronizzato con il tema dell'app.\"],\"FsvZQL\":[\"Modificata cella \",[\"n\"]],\"FtwKL9\":[\"Cambia tab\"],\"FznI3z\":[\"Eliminare la chiave esterna \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Anteprima fallita: \"],\"G8Q5Zq\":[\"Il namespace è obbligatorio\"],\"GAohqx\":[\"Elimina colonna\"],\"GJR99u\":[\"Eliminazione colonna fallita: \"],\"GKfzzM\":[\"Scegli una connessione...\"],\"GS-Mus\":[\"Esporta\"],\"GUaLUq\":[\"Caricamento schema fallito: \"],\"GXP-Iw\":[\"Aggiungi Cella SQL\"],\"Gj1mLb\":[\"Celle riordinate\"],\"GlbqG2\":[\"Ripristina predefinito\"],\"Gq1YzP\":[\"Eventi\"],\"Gs5AlY\":[\"Aperta\"],\"GtmO8_\":[\"da\"],\"GxkJXS\":[\"Caricamento in corso...\"],\"H-o4D2\":[\"Crea nuova colonna\"],\"H2B-KW\":[\"Scegli il formato predefinito per la copia delle righe con Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Ripeti\"],\"H7mlCc\":[\"/percorso/assoluto/db.sqlite\"],\"H86f9p\":[\"Riduci\"],\"H9P8CD\":[\"aggiungi il primo filtro\"],\"HAQlGl\":[\"Attività AI\"],\"HKNZrs\":[\"Cond. Indice\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Elimina \",\"#\",\" righe\"],\"other\":[\"Elimina \",\"#\",\" righe\"]}]],\"HPuCiP\":[\"Percorso Cartella\"],\"HUs1R3\":[\"Nessuna scheda aperta per questa connessione.\"],\"HV4Isp\":[\"Inserisci password SSH\"],\"HVC8Hh\":[\"Copiato negli appunti\"],\"HWEpq8\":[\"Scrittura Disco/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Salvataggio vista fallito: \"],\"He8v1Y\":[\"Deseleziona da Applica tutti\"],\"HehHP1\":[\"Layout Predefinito\"],\"HilYn4\":[\"Questo notebook è vuoto. Aggiungi una cella per iniziare.\"],\"HjxVK_\":[\"Test connessione rapido\"],\"HmMnRx\":[\"Modalità WKT\"],\"HoKCiI\":[\"L'app si riavvierà automaticamente dopo l'installazione\"],\"HpK_8d\":[\"Ricarica\"],\"Hpi4Jm\":[\"Entra subito\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configura SSH Inline\"],\"I5VBsr\":[\"Come l'app\"],\"I8yrPb\":[\"Sostituisci tabella\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Ricordamelo Dopo\"],\"I99Miw\":[\"Costo\"],\"IETZIR\":[\"Modifica nome cella\"],\"IG9wzA\":[\"Inserimento riga fallito: \"],\"ILleOG\":[\"Il tipo di risorsa deve essere \\\"service\\\" o \\\"pod\\\"\"],\"IQ3gAw\":[\"Carica File\"],\"IUwGEM\":[\"Salva Modifiche\"],\"IUwmLq\":[\"Dipendenze dirette dichiarate in package.json e src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Librerie Open Source\"],\"I_43p6\":[\"Sicurezza\"],\"Iaizf4\":[\"Aspetto\"],\"Il3FBB\":[\"Pannello filtri strutturati\"],\"IniZRK\":[\"Download non disponibile - caricata solo anteprima\"],\"Isaozb\":[\"Rivedi e modifica\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Le query attive e le connessioni attraverso questo plugin verranno interrotte.\"],\"J6v1s_\":[\"Modello Predefinito\"],\"JE-DVk\":[\"Interprete\"],\"JEGlfK\":[\"Inizio\"],\"JKDPqP\":[\"Seleziona prima un contesto\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Usa Tunnel SSH\"],\"JRz8tw\":[\"MySQL e MariaDB espongono metriche reali solo con le varianti supportate di EXPLAIN ANALYZE o ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP o SVG · max 512 KB\"],\"JY5Oyv\":[\"Database\"],\"JlFRIB\":[\"Fuso orario della sessione inviato a MySQL dopo la connessione.\"],\"JrOEip\":[\"Anteprima\"],\"JsY1p5\":[\"Negata\"],\"K3H9p5\":[\"Rimuovi\"],\"K5Dgu_\":[\"Database\"],\"K8IGKf\":[\"Tipo di Autenticazione\"],\"KAYNSW\":[\"Quanti log mantenere in memoria (1-10000)\"],\"KHTGbr\":[\"EXPLAIN preliminare\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copia come `colonna`\"],\"KM5Kc8\":[\"Almeno una colonna deve essere selezionata\"],\"KSCnVQ\":[\"Tipo\"],\"KUjOb9\":[\"in esecuzione\"],\"KXBdwy\":[\"Aggiorna Routine\"],\"KXNyX7\":[\"Imposta DEFAULT\"],\"Kd70-v\":[\"Importa dagli Appunti...\"],\"KhI4oS\":[\"Apri la riga referenziata in \",[\"0\"]],\"KhgrNu\":[\"Integrazione Server MCP\"],\"KirERL\":[\"Timeout\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Eliminazione indice fallita: \"],\"KzeARD\":[\"Eliminazione tabella fallita: \"],\"L-rMC9\":[\"Ripristina predefinito\"],\"L3HXkQ\":[\"Correzioni Bug\"],\"LCZ7Dy\":[\"Copia nome\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"indici\"],\"LMeAoR\":[\"righe\"],\"LPCdc-\":[\"Prompt Nome Tab Query\"],\"LPFmga\":[\"Seleziona per Applica tutti\"],\"LYzbQ2\":[\"Strumento\"],\"Lbis_V\":[\"Navigatore rapido\"],\"Lcpbe2\":[\"Impossibile avviare il processo del plugin. Controlla i dettagli dell'errore.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN è supportato solo per istruzioni DML (SELECT, INSERT, UPDATE, DELETE). Le istruzioni DDL come CREATE, DROP o ALTER non possono essere analizzate.\"],\"LnT0hQ\":[\"Aggiungi colonna\"],\"LvutiO\":[\"Suggerisci con AI\"],\"M-rHQO\":[\"Esci da Schermo Intero\"],\"M0XJba\":[\"Sei sicuro di voler cancellare tutta la cronologia delle query per questa connessione?\"],\"M1co_O\":[\"Configurato\"],\"M73whl\":[\"Contesto\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Emoji selezionato\"],\"MWB7fV\":[\"Mostra Tutto\"],\"MXdOwj\":[\"Separa Connessioni\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Seleziona connessione K8s\"],\"Mc1tjS\":[\"Abilita ANALYZE per ispezionare righe reali, tempi, cicli e buffer.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" righe in più\"],\"Mp0jQ_\":[\"Questo driver supporta le chiavi primarie solo in fase di creazione della tabella\"],\"MqpZwN\":[\"Processo Tabularis\"],\"MxIx43\":[\"↑↓ per navigare, Invio per aprire\"],\"MygtgQ\":[\"Aggiungi Cella Markdown\"],\"N40H-G\":[\"Tutti\"],\"N5UQxq\":[\"Ollama non rilevato sulla porta \",[\"0\"],\". È in esecuzione?\"],\"N6GBcC\":[\"Conferma eliminazione\"],\"N6aqHp\":[\"Query eseguite\"],\"N9_S15\":[\"Verrà creata una nuova tabella\"],\"NBdMa1\":[\"Step Più Lento\"],\"NC2AI2\":[\"Lunghezza\"],\"NCzNnx\":[\"Ordine crescente\"],\"NT4Ubs\":[\"Elimina chiave personalizzata e ripristina variabile d'ambiente (se presente)\"],\"NUjrCO\":[\"Nessun preferito corrisponde alla ricerca\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Totale albero: \",[\"0\"]],\"Nc2VQn\":[\"Aggiungi a esistente\"],\"NgFERn\":[\"Aggiungi ai Preferiti\"],\"NktMHG\":[\"Nome database\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Test\"],\"Nq5QTk\":[\"analizza N-esima\"],\"O2STgu\":[\"Esportazione fallita: \"],\"O8SV8O\":[\"Download in corso...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Esegui Tutte le Celle\"],\"OGWdBg\":[\"Nome Vista\"],\"OHqT6w\":[\"Premi la combinazione di tasti...\"],\"OXJsaG\":[\"Nome parametro non valido\"],\"OfhWJH\":[\"Ripristina\"],\"OlAl5i\":[\"Espandi tutto\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Unisciti su Discord\"],\"P1YGsb\":[\"Generazione SQL\"],\"P2m1xb\":[\"Ferma su Errore\"],\"P3Qlys\":[\"Nessun ID Connessione\"],\"P6Y3Yf\":[\"Esegui questo comando nel terminale, poi riavvia Claude Code.\"],\"PCdj-c\":[\"Deseleziona tutte\"],\"PMnFt9\":[\"Lettura Disco/s\"],\"PQU2Va\":[\"Accetta Suggerimento con Invio\"],\"PRnH8G\":[\"su \",[\"0\"]],\"PY8UF3\":[\"Parallelo commutato (cella \",[\"n\"],\")\"],\"PiH3UR\":[\"Copiato!\"],\"Pia95d\":[\"Il nome della colonna è richiesto\"],\"PrElXQ\":[\"Aggiorna\"],\"PrixCC\":[\"Le righe verranno aggiunte a una tabella esistente\"],\"Pujgbb\":[\"Configura destinazione\"],\"Pw_eQV\":[\"Plugin non avviato\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Nessuna query salvata\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Nessun processo figlio\"],\"QCxMC0\":[\"Controlla automaticamente nuove versioni all'avvio dell'app\"],\"QEazml\":[\"Elimina selezionate\"],\"QHcLEN\":[\"Connesso\"],\"QLHHFO\":[\"Modalità sola lettura\"],\"QOvAW3\":[\"Nuove Funzionalità\"],\"QULGRi\":[\"Nessuna query valida trovata\"],\"QZwllF\":[\"Sfoglia...\"],\"QbkSr_\":[\"EXPLAIN non disponibile per questa query.\"],\"QeHFYZ\":[\"EXPLAIN fallito: \",[\"0\"]],\"Qll2Tb\":[\"Decresc.\"],\"Qoq-GP\":[\"Leggi di più\"],\"Qu4Hog\":[\"Notebook importato con successo\"],\"R-A2Vd\":[\"Nessun dato da visualizzare\"],\"R0Hkb2\":[[\"0\"],\" database selezionato/i\"],\"R1nHhB\":[\"Esiste già\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Converti in Console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configurazione\"],\"RF-HyV\":[\"Scegli la tua lingua preferita. 'Auto' userà la lingua di sistema.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copia nome\"],\"RI-HZc\":[\"Inserisci Chiave \",[\"0\"]],\"RJrE17\":[\"Sei sicuro di voler eliminare la vista \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Una stella aiuta gli altri a scoprire il progetto\"],\"Rb3Tdm\":[\"Nome del notebook\"],\"RcbKJ3\":[\"All'Update\"],\"RkefFq\":[\"Esegui un EXPLAIN della query prima di mostrare il modal di approvazione, così l'utente vede il piano di esecuzione.\"],\"RnF_hl\":[\"Caricamento registro plugin...\"],\"Rns7_C\":[\"Questa azione non può essere annullata immediatamente\"],\"RoKRqW\":[\"Plugin Disponibili\"],\"RphpKk\":[\"Aspetto\"],\"Rt8sHM\":[\"Rilevato lavoro di sort o temporaneo\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Abilitati\"],\"S1veKH\":[\"Ripristina selezionato\"],\"S5zeZU\":[\"Anteprima\"],\"S8Yqbl\":[\"Inserisci\"],\"SDND4q\":[\"Non configurato\"],\"SJRy3D\":[\"(Auto-generato)\"],\"SSwIjo\":[\"Imposta VUOTO\"],\"SgvA_r\":[\"Premi Esegui (Ctrl/Command+F5) per caricare i dati della tabella\"],\"SlfejT\":[\"Errore\"],\"SoATkx\":[\"Copia cella\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL Endpoint\"],\"T7w5CQ\":[\"Impossibile creare nuova riga: \"],\"T9947j\":[\"Valore (es. 'testo' o 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Passa a Layout Verticale\"],\"TK5oex\":[\"Salva Prompt\"],\"TKQ7K-\":[\"Installa\"],\"TKZreP\":[\"Richiesto\"],\"TMLAx2\":[\"Richiesto\"],\"TO08JI\":[\"chiavi esterne\"],\"TVKqvO\":[\"Modifica Riga\"],\"TYSdQ3\":[\"Esegui query SELECT\"],\"TfDFHS\":[\"Manda a capo le righe lunghe nell'editor invece di scorrere orizzontalmente.\"],\"Tibfjs\":[\"Nessuna connessione salvata — creane una qui sotto\"],\"Tj36Dr\":[\"Ripristina Predefinito\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Blocca query\"],\"TpwXyg\":[\"Se il tempo manca, il server ha probabilmente restituito un piano solo stimato.\"],\"Tw2M1h\":[\"Installazione fallita\"],\"Ty-rm9\":[\"Connessioni SSH\"],\"Tz0i8g\":[\"Impostazioni\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Connessioni Kubernetes\"],\"U4uzyV\":[\"Novità\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Ferma l'esecuzione quando una cella fallisce\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" su \",[\"1\"],\" — controlla e decidi prima dell'esecuzione.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configurazione installata per \",[\"clientName\"],\"! Riavvia l'app per applicare.\"],\"URmyfc\":[\"Dettagli\"],\"UWQBvp\":[\"Genera modelli SQL\"],\"UawTKZ\":[\"Opzionale. Specifica l'eseguibile usato per avviare questo plugin (es. python3 su macOS/Linux, python o percorso completo su Windows). Lascia vuoto per usare il valore predefinito.\"],\"Ub8sf5\":[\"SQLite non supporta l'eliminazione di FK tramite ALTER TABLE.\"],\"UbbJ8j\":[\"Nessuna opzione trovata\"],\"Ubs68g\":[\"Generali\"],\"UftN8J\":[\"Queste connessioni rifiuteranno le scritture da MCP. Le altre si comportano normalmente.\"],\"UnQNah\":[\"Sei sicuro di voler eliminare la colonna \\\"\",[\"0\"],\"\\\" dalla tabella \\\"\",[\"tableName\"],\"\\\"?\\n\\nATTENZIONE: Questo eliminerà permanentemente tutti i dati in questa colonna. L'azione non può essere annullata.\"],\"UncTTh\":[\"Somma RSS dell'albero dei processi — può sovrastimare la memoria condivisa\"],\"UpjgFm\":[\"Parametri modificati\"],\"UsAnu1\":[\"ANALYZE esegue la query. Usare con cautela su istruzioni che modificano dati.\"],\"UxKoFf\":[\"Navigazione\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Dimensione Tab\"],\"UzWGWO\":[\"Passa all'input SQL WHERE\"],\"V-chk5\":[\"Frequenza con cui verificare se le connessioni attive sono ancora raggiungibili. Imposta 0 per disabilitare.\"],\"V-pw1j\":[\"Nome tabella\"],\"V2T0Uw\":[\"Nessun notebook salvato.\"],\"V3aNwx\":[\"Editor Dati\"],\"VGYp2r\":[\"Applica a tutto\"],\"VH8S7x\":[\"Colonna appunti\"],\"VIAEcS\":[\"Impossibile caricare i database. Verifica le credenziali.\"],\"VKdztF\":[\"Aggiungi righe\"],\"VLiHXI\":[\"Dati Analyze\"],\"VMbmXc\":[\"Sei sicuro di voler rimuovere \\\"\",[\"pluginName\"],\"\\\"? I file del plugin verranno eliminati.\"],\"VO3weF\":[\"Nessun file caricato\"],\"VOZlKc\":[\"Importazione Database\"],\"VPzsIz\":[\"Generazione nome...\"],\"VUul0v\":[\"La terminazione di\"],\"VW0GVQ\":[\"Clicca un altro emoji qui sotto per cambiarlo.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Tutte le query\"],\"Vi2Pqx\":[\"di\"],\"Vl2zn2\":[\"arrestato\"],\"Vo4uBA\":[\"Si è verificato un errore durante l'installazione del plugin. Vedi i dettagli qui sotto.\"],\"VqqyOs\":[\"Esegui una query per vedere i risultati\"],\"VzhDFh\":[\"Blocca qualsiasi statement non-SELECT proveniente da MCP, salvo le connessioni esplicitamente abilitate.\"],\"W3uwpT\":[\"Chiudi tutte le schede\"],\"W4MKLh\":[\"es. Sembra rischiosa in produzione, conferma…\"],\"W60eXm\":[\"Tabella\"],\"WA8RND\":[\"Sei sicuro di voler eliminare la tabella \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Elimina tabella\"],\"WLnvCZ\":[\"Inserisci nome utente\"],\"WM-__8\":[\"Cerca connessioni...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe importate in \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" righe importate in \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Sei sicuro di voler eliminare la query \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"riuscite\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"Generali\"],\"WmPpB1\":[\"Caricamento del piano di esecuzione…\"],\"Wu7cK0\":[\"Nessun database trovato\"],\"WvoUQF\":[\"Eliminata cella \",[\"n\"]],\"Ww3pDD\":[\"COMANDO MANUALE\"],\"X-20AU\":[\"Inserisci prompt nome tab query...\"],\"X-U6_w\":[\"Famiglia Font\"],\"X5fs0g\":[\"Crea la tua prima connessione per iniziare.\"],\"X7Ayjp\":[\"Password salvata nel portachiavi di sistema\"],\"X9kySA\":[\"Preferiti\"],\"XJOV1Y\":[\"Attività\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Spiegazione Query\"],\"XVF2Pf\":[\"Modifica Schemi\"],\"XW6OYF\":[\"Questo plugin potrebbe richiedere un interprete (es. Python). Usa le Impostazioni Plugin per configurare il percorso dell'interprete.\"],\"XZB6Xr\":[\"Numero massimo di log\"],\"Xcffv2\":[\"Mostra i pulsanti AI Assist ed Explain nell'editor\"],\"XeqTSh\":[\"Tipo Join\"],\"XmJfZT\":[\"nome\"],\"XoQfG1\":[\"Utente SSH\"],\"XwI0Vw\":[\"Auto (Sistema)\"],\"XyDlLX\":[\"Nome Indice\"],\"Y2P2aK\":[\"Seleziona gli schemi da caricare:\"],\"Y8HYw2\":[\"valore\"],\"Y8zX3R\":[\"Inserisci nell'Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Cerca...\"],\"YWlnMZ\":[\"Porta Ollama\"],\"YYdC3A\":[\"Versione \",[\"0\"]],\"YYn8b5\":[\"Sfoglia e installa plugin dal registro.\"],\"Y_3yKT\":[\"Apri in Nuova Scheda\"],\"YiAQ_Q\":[\"Aggiorna Tabelle\"],\"Ysjr9Y\":[\"Anteprima SQL\"],\"YswNf7\":[\"Tutti i livelli\"],\"YtNwr6\":[\"Numero massimo di voci nella cronologia delle query salvate per connessione.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Caricamento...\"],\"Z7ZXbT\":[\"Approva\"],\"Z8JpBH\":[\"Esporta come Notebook\"],\"Z8fBIc\":[\"Le righe reali superano la stima\"],\"ZC2VJP\":[\"Esegui\"],\"ZCIS4k\":[\"nessun filtro attivo\"],\"ZF1_UT\":[\"Modalità SSL\"],\"ZGjBPa\":[\"Pulisci Log\"],\"ZHQTlM\":[\"Importazione da\"],\"ZIFDoJ\":[\"Seleziona almeno Struttura o Dati\"],\"ZIZA6o\":[\"Modifica prima di approvare\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avvisi di parsing\"],\"other\":[\"#\",\" avvisi di parsing\"]}]],\"ZVn8p2\":[\"Visualizza i numeri di riga nel margine dell'editor.\"],\"ZYnwzF\":[\"Disconnesso\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Crea Chiave Esterna\"],\"Zf7LHg\":[\"Nessun contesto trovato (kubectl è installato?)\"],\"Zfotp5\":[\"Scostamenti elevati tra stima e reale indicano spesso statistiche non aggiornate o predicati difficili da modellare.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Caricamento degli schemi fallito\"],\"ZqXGPF\":[\"Eliminazione vista fallita: \"],\"ZuL73E\":[\"Crea una nuova vista database\"],\"_-bi4r\":[\"Tabella Riferita\"],\"_AEYGI\":[\"Nessuna cronologia di esecuzione\"],\"_FdpZc\":[\"Impossibile caricare la definizione della vista: \"],\"_FxSdi\":[\"Consulta le dipendenze open source dirette usate dall'app, dal backend e dalla toolchain.\"],\"_JyTG8\":[\"Inserisci prompt di spiegazione...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"righe\"],\"_TK1zF\":[\"Connessione salvata\"],\"_bJFBE\":[\"Timeout Connessione\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Albero\"],\"_dqduX\":[\"Pagina successiva\"],\"_fwE6J\":[\"Precedenti\"],\"_n04sB\":[\"Termina\"],\"_otxbQ\":[\"File chiave\"],\"_pezIT\":[\"Impossibile connettersi a \",[\"0\"],\". Verifica le impostazioni o assicurati che il database sia in esecuzione.\"],\"_srfkj\":[\"Chiave personalizzata eliminata con successo\"],\"_t6aFo\":[\"MySQL e MariaDB possono ripiegare su EXPLAIN FORMAT=JSON o sull'EXPLAIN tabellare in base alla versione del server.\"],\"_xTbaM\":[\"colonne\"],\"_yxaaL\":[\"Indice Unico\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis è un progetto gratuito e open-source. Se lo trovi utile, considera di supportare il progetto e unirti alla community.\"],\"a9CASo\":[\"SQLite supporta solo la rinomina delle colonne. Altre modifiche richiedono la ricreazione manuale della tabella.\"],\"aAIQg2\":[\"Aspetto\"],\"aAURrV\":[\"Installato\"],\"aC_vCa\":[\"Genera nome con AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Seleziona un nodo per i dettagli\"],\"aHKcKc\":[\"Pagina precedente\"],\"aI-5wG\":[\"Verifica CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valore Predefinito\"],\"aScJP1\":[\"Esegui questa query\"],\"aVNbN8\":[\"Condizioni filtro\"],\"aWhdMQ\":[\"Usa Connessione SSH Esistente\"],\"aXYd8V\":[\"Timeout\"],\"aX_S_r\":[\"Pagina \",[\"0\"],\" di \",[\"totalPages\"]],\"agZcf8\":[\"SQL Generato: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [campi]\"],\"alplHn\":[\"Analisi del piano di esecuzione con AI...\"],\"anBcU3\":[\"Se ti piace tabularis e vuoi vedere nuove funzionalità, considera di supportare il progetto contribuendo al codice, segnalando bug o mettendo una stella su GitHub.\"],\"arHmj2\":[\"Sei sicuro di voler eliminare questa query dalla cronologia?\"],\"arKcqW\":[\"I server meno recenti possono ripiegare su piani stimati con meno metriche.\"],\"arcpYe\":[\"Approvazione richiesta\"],\"aurEkh\":[\"Caricamento processi…\"],\"avtdsd\":[\"Modalità SQL\"],\"az8lvo\":[\"Disattiva\"],\"b1Ah3z\":[\"Focus su\"],\"b392Dr\":[\"Espandi Tutto\"],\"b5S_PU\":[\"Nome Database\"],\"bAvovP\":[\"Sposta Giù\"],\"bH3JqY\":[\"Nessuna tabella trovata\"],\"bP5JOn\":[\"A Capo Automatico\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Rendi tutte le query MCP di sola lettura\"],\"bmca5u\":[\"Solo scritture\"],\"bpCiBU\":[\"Consenti scritture da MCP\"],\"bqnhqW\":[\"La stima supera le righe reali\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Errore\"],\"bw22Gk\":[\"Schema Colonne\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Punti Critici\"],\"cFCKYZ\":[\"Nega\"],\"cFGrCP\":[\"tabella\"],\"cGeFup\":[\"Dimensione Font\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focus su Tabella\"],\"cM9NHc\":[\"Effettua downgrade a\"],\"cO9-2L\":[\"Disabilitato\"],\"cSev-j\":[\"Filtri\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importa \",\"#\",\" righe\"],\"other\":[\"Importa \",\"#\",\" righe\"]}]],\"c_xoSn\":[\"Rinominata cella \",[\"n\"]],\"cd0XEW\":[\"Salva Query\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Gruppo Diviso\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" istruzioni\"],\"d34vwG\":[\"Carica Database\"],\"d6ynQ7\":[\"Ordine decrescente\"],\"d8_6_v\":[\"annulla\"],\"d8wc1_\":[\"Valori campione\"],\"dBXoCS\":[\"È presente una variabile d'ambiente, ma puoi sovrascriverla impostando una chiave qui sopra.\"],\"dD7NPy\":[\"Sommario\"],\"dEgA5A\":[\"Annulla\"],\"dMtLDE\":[\"a\"],\"dPJVhW\":[\"Installazione Fallita\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" sessione\"],\"other\":[\"#\",\" sessioni\"]}]],\"dTUzKm\":[\"Esegui selezionate (\",[\"0\"],\")\"],\"dU_iQN\":[\"Nessuna sessione corrisponde ai filtri.\"],\"dUh9QW\":[\"Pianificazione\"],\"dVoir2\":[\"Aggiunta cella Markdown \",[\"n\"]],\"dZ0d2O\":[\"Seleziona almeno una tabella\"],\"dhi13U\":[\"Scegli immagine…\"],\"dli1JX\":[\"Invia Modifiche\"],\"dmYV6f\":[\"Routine\"],\"dohZCo\":[\"Istruzioni per la generazione SQL tramite AI. Usa \",[\"SCHEMA\"],\" come segnaposto per la struttura del database.\"],\"dtxpK2\":[\"Analizza\"],\"dwW9nJ\":[\"Mostra Numeri di Riga\"],\"dwWVw_\":[\"Mostra schermata di benvenuto\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"Se esiste\"],\"dyN4j9\":[\"Clicca 'Esegui Anteprima' per vedere i risultati\"],\"e07Iz5\":[\"Apri Gestione Attività\"],\"e0NzXu\":[\"Questo progetto è un Work In Progress (WIP). Le funzioni principali sono stabili, ma abbiamo grandi piani.\"],\"e1UKxf\":[\"Salva questa query\"],\"e34gdU\":[\"Quanti secondi il processo MCP attende la decisione dell'utente prima di abortire.\"],\"e62LQd\":[\"Termina Forzatamente\"],\"e6QZsM\":[\"Tema dell'Editor\"],\"e8CirT\":[\"Esegui query\"],\"eD2kUP\":[\"Buffer Letti\"],\"eE0JZ4\":[\"Versione\"],\"eIDch7\":[\"Inserisci prompt analisi piano di esecuzione...\"],\"eIVolo\":[\"Disco L/S\"],\"eJOEBy\":[\"Esportazione in corso...\"],\"eKHY3W\":[\"Impostazioni Plugin\"],\"eMb6Ub\":[\"Scegli una risorsa...\"],\"ePK91l\":[\"Modifica\"],\"eXweu6\":[\"Espandi Cella\"],\"ecNsTE\":[\"Nessuna query corrisponde alla ricerca\"],\"ecUA8p\":[\"Oggi\"],\"ecpIZP\":[\"Inserisci passphrase se la chiave è cifrata\"],\"ejmeDY\":[\"Installati\"],\"esl-Tv\":[\"Tipo di risorsa\"],\"exyUec\":[\"Connessione\"],\"f2AJjl\":[\"Elimina riga\"],\"f4pD-j\":[\"Test connessione fallito\"],\"f7sXvi\":[\"Inserisci password\"],\"fAsxc0\":[\"Scansioni Sequenziali\"],\"fIeFs0\":[\"Seleziona valore...\"],\"fJm92A\":[\"Seleziona un file contenente un piano EXPLAIN (formato JSON o testo PostgreSQL) per visualizzarlo.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Valori\"],\"f_b1TA\":[\"Cronologia Esecuzioni\"],\"fghnqP\":[\"Passa alla connessione 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Virgola (,)\"],\"fp711N\":[\"Bloccata (sola lettura)\"],\"fpzyLj\":[\"Pagina \",[\"0\"],\" di \",[\"1\"]],\"fuA6oy\":[\"Timeout Socket\"],\"fvImQM\":[[\"0\"],\" selezionate\"],\"fwr_nh\":[\"Installa estensioni, gestisci i driver dei plugin e tieni sotto controllo le impostazioni di runtime.\"],\"g0ZzK4\":[\"JSON valido\"],\"g11hAR\":[\"Nuova riga\"],\"g8VcMm\":[\"Il mio cluster K8s\"],\"gCFR_O\":[\"Esecuzione Parallela (Esegui Tutto)\"],\"gEjU98\":[\"Apri connessioni\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"È richiesta almeno una colonna\"],\"gSuQrG\":[\"Nessuna connessione corrisponde a \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Riesegui query\"],\"gZWMnn\":[\"Analisi AI\"],\"ghYd73\":[\"Scegli destinazione...\"],\"giAqEC\":[\"Crea Nuova Tabella\"],\"gnQS8X\":[\"Dimensione massima del pacchetto usata dal connettore MySQL.\"],\"gqV5VL\":[\"Integrata, non personalizzabile\"],\"gww_XE\":[\"Colonna Riferita\"],\"gxXPJ9\":[\"Configura Interprete\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Massimizza\"],\"h-XNc9\":[\"Delimitatore CSV\"],\"h-kNAk\":[\"es. dati_vendite\"],\"h3Z_aK\":[\"Scrivi Markdown qui...\"],\"h7MgpO\":[\"Scorciatoie da tastiera\"],\"h7peZQ\":[\"Permetti\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processo di sistema in esecuzione\"],\"other\":[\"#\",\" processi di sistema in esecuzione\"]}]],\"hEZrFh\":[\"Esegui File SQL...\"],\"hEipgW\":[\"Controlla Aggiornamenti Ora\"],\"hG89Ed\":[\"Immagine\"],\"hIHcBE\":[\"Esporta come CSV\"],\"hItdtk\":[\"Sfoglia cartella\"],\"hXFVjo\":[\"Il nome della tabella è richiesto\"],\"hZ6znB\":[\"Porta\"],\"h_huI6\":[\"Riesegui\"],\"hbz1rh\":[\"chiavi\"],\"hdsaJo\":[\"Importazione...\"],\"he3ygx\":[\"Copia\"],\"hfGimp\":[\"Scegli un namespace...\"],\"hjjSEi\":[\"Connessioni di sola lettura\"],\"hjwN_s\":[\"Nome risorsa\"],\"hlF1mD\":[\"Copia selezione\"],\"hnboBb\":[\"Analisi AI del Piano di Esecuzione\"],\"hnvu2p\":[\"Dettagli Errore\"],\"hq4-D2\":[\"La chiave API è salvata in modo sicuro nel portachiavi. Impostare una chiave qui sovrascrive la variabile d'ambiente.\"],\"hqjXdn\":[\"Eliminazione connessione SSH fallita\"],\"hqofAK\":[\"Copia SQL\"],\"hy6L14\":[\"Visualizza su GitHub\"],\"hyjACX\":[\"Celle compresse/espanse\"],\"hz1b5W\":[\"Nessun elemento corrispondente trovato\"],\"i1vAVM\":[\"Crea nuova tabella\"],\"i3S5T3\":[\"Cerca nei preferiti...\"],\"i4_LY_\":[\"Scrittura\"],\"i5HBWh\":[\"Cronologia query azzerata\"],\"i5zCt4\":[\"Tabella\"],\"iAVlge\":[\"Personalizza le istruzioni per la generazione AI del nome cella nei notebook. Il contenuto della cella (SQL o Markdown) viene inviato come messaggio utente.\"],\"iE1yAB\":[\"Filtra tabelle...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connetti\"],\"iSryJ2\":[\"Il Mio Server SSH\"],\"iT7UeX\":[\"Aggiungi Indice\"],\"iUWwuR\":[\"Scarica e Installa\"],\"ia7i08\":[\"Seleziona prima contesto/namespace/tipo\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Salvato\"],\"igcsfY\":[\"Nessun plugin disponibile nel registro.\"],\"ij-Elv\":[\"Anteprima immagine\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query analizzabili trovate\"],\"other\":[\"#\",\" query analizzabili trovate\"]}]],\"ioL38P\":[\"Monitora i processi dei plugin, CPU, RAM e utilizzo disco in tempo reale\"],\"ixlL_e\":[\"File Chiave SSH (Opzionale)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Seleziona un modello\"],\"j3gyYH\":[\"Applica tutti\"],\"j5CWO4\":[\"Aggiornato\"],\"j9HPuI\":[\"Riga #\",[\"0\"]],\"jBtpMP\":[\"Tutti gli stati\"],\"jEu4bB\":[\"Colonne\"],\"jEyQIs\":[\"Nessuna routine trovata\"],\"jHc1By\":[\"Elimina Vista\"],\"jI6sj4\":[\"Costo, tempi e stime di righe spesso non sono disponibili come in PostgreSQL e MySQL.\"],\"jIxQCZ\":[\"Non disponibile per la tua piattaforma\"],\"jKIncn\":[\"Il nome del database è richiesto\"],\"jPSk57\":[\"Motivo (opzionale)\"],\"jUNY_d\":[\"vista\"],\"jVqjDo\":[\"Formato file notebook non valido\"],\"jWSZ-A\":[\"Solo anteprima - dati completi non caricati\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Timeout del socket in millisecondi.\"],\"jpeU_Z\":[\"Notebook\"],\"jpgB4Y\":[\"Il nome della connessione è richiesto\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"processo figlio\"],\"jx0t66\":[\"Comprimi processi figli\"],\"k-0mL-\":[\"Aggiungi Colonna\"],\"k-XiMX\":[\"Grezzo\"],\"k2UnVy\":[\"Cond. Hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"secondi\"],\"kBiBq7\":[\"Eliminare l'indice \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Mostra/Nascondi Grafico\"],\"kI1qVD\":[\"Formatta\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" righe · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Dettagli evento\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registro\"],\"kY-q3P\":[[\"label\"],\" è obbligatorio\"],\"kexIdC\":[\"Usa Port-Forward Kubernetes\"],\"krksx_\":[\"Successo\"],\"ktYUe9\":[\"Esegui tutte\"],\"kwY6nh\":[\"Chiudi\"],\"kx0s-n\":[\"Risultati\"],\"kxUEfE\":[\"Impossibile recuperare la definizione della routine: \"],\"l2Op2p\":[\"Parametri Query\"],\"l9Ivba\":[\"Processi dei plugin e risorse di sistema\"],\"lBdPxu\":[\"Colore di accento\"],\"lCF0wC\":[\"Aggiorna\"],\"lEQRwq\":[\"Dati (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nuova tabella creata\"],\"lOekZ3\":[\"Passa a Layout Orizzontale\"],\"lUA1C1\":[\"Passphrase Chiave SSH (Opzionale)\"],\"lVeG20\":[\"Dipendenze Rust\"],\"lXAG6D\":[\"Istruzioni per la spiegazione delle query tramite AI. Usa \",[\"LANGUAGE\"],\" come segnaposto per la lingua di output.\"],\"lbbYjy\":[\"Modifica direttamente il file di configurazione grezzo. È necessario un riavvio per applicare le modifiche.\"],\"lhKW0m\":[\"Aggiunta cella SQL \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Dimensione Pagina Risultati (Limite)\"],\"lkz6PL\":[\"Durata\"],\"lmVGeo\":[\"Aggiungi Chiave Esterna\"],\"lnnx3E\":[\"Connetti Tabularis a Claude Desktop, Cursor e altri\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Aggiungi\"],\"m2Q_r8\":[\"Rileva JSON nelle colonne di testo\"],\"m2tskz\":[\"Successo\"],\"mA-qpe\":[\"Esecuzione Completata\"],\"mBhhbA\":[\"Log esportati negli appunti\"],\"mCNdzH\":[\"Esegui Cella\"],\"mO95sp\":[\"Chiudi pannello\"],\"mP7dLi\":[\"Inserisci il nome del font sopra\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloccato\"],\"other\":[\"#\",\" bloccati\"]}]],\"mS74ir\":[\"Salvataggio connessione SSH fallito\"],\"mSqtw8\":[\"Esegui Anteprima\"],\"mURmfQ\":[\"Definizione Vista (SQL)\"],\"mX_isJ\":[\"Verticale\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Struttura (DDL)\"],\"mrk4Cf\":[\"Ordina per \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Abbiamo una community Discord dedicata a Tabularis: ricevi aiuto, scambia consigli e influenza la roadmap.\"],\"mtvVdV\":[\"Righe processate\"],\"mx4evv\":[\"Crea Tabella\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Scarica\"],\"n7JDTx\":[\"Installa e abilita i plugin per vederli qui\"],\"nDDJir\":[\"Cerca sessione, client, connessione…\"],\"nHP-Kr\":[\"Nessuna sessione attiva. Seleziona una connessione.\"],\"nKhCjW\":[\"Seleziona Tabelle\"],\"nNwvm4\":[\"Errore\"],\"nOVim5\":[\"Salvataggio connessione fallito\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Eventi\"],\"nf14vn\":[\"Richiede estensione: \",[\"0\"]],\"ngO6Pv\":[\"Permetti al tasto Invio (oltre a Tab) di accettare il suggerimento di autocompletamento attivo. Quando disattivato, Invio inserisce sempre una nuova riga.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Crea la tua prima connessione\"],\"nohy4m\":[\"Nessuna attività MCP registrata.\"],\"nr-axf\":[\"Rimuovi Plugin\"],\"nsPFX9\":[\"Apri in Visual Explain\"],\"nuBbBr\":[\"Grafico\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Esporta Database\"],\"o-XJ9D\":[\"Cambia\"],\"o21Y-P\":[\"voci\"],\"o3tP_A\":[\"Elimina indice\"],\"o45L8r\":[\"Inserisci il nome della connessione\"],\"o53XGh\":[\"Copia riga/righe selezionate\"],\"o7J4JM\":[\"Filtro\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Livello\"],\"oGiIL7\":[\"Provider Predefinito\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connessione Persa\"],\"oJlXF2\":[\"Importa Notebook\"],\"oMFv82\":[\"Dividi Verticale\"],\"oOFiQg\":[\"Limita il numero di righe caricate per query per prevenire problemi di performance. Imposta a 0 per disabilitare (non consigliato).\"],\"oT9ZD3\":[\"Nascondi panoramica\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Grafico cambiato (cella \",[\"n\"],\")\"],\"oWfclW\":[\"Mostra il visualizzatore JSON quando una cella di testo non tipizzata contiene un oggetto o un array JSON. Aggiunge un piccolo costo di analisi per cella.\"],\"obpbdz\":[\"File config non trovato (crealo manualmente)\"],\"odZgfC\":[\"CLIENT AI\"],\"ogZhXn\":[\"Scegli la direzione di default per i diagrammi ER\"],\"ohUJJM\":[\"Plugin\"],\"olAdaI\":[\"Righe Reali\"],\"olWzar\":[\"Termina Forzatamente il Processo\"],\"ovBPCi\":[\"Predefinito\"],\"owzTWN\":[\"Modelli AI aggiornati dai provider\"],\"oxYi6j\":[\"Regola la dimensione base del font usata nell'applicazione (10-20px).\"],\"p--hsQ\":[\"Una connessione al database è stata persa\"],\"p6NueD\":[\"NUOVA\"],\"pOYHox\":[\"Azioni\"],\"pR9bTR\":[\"Nessun dato BLOB\"],\"pS8S5q\":[\"es. utenti, ordini, prodotti\"],\"pSws_M\":[\"Nome Tabella\"],\"pVLbKZ\":[\"Vista creata con successo\"],\"pWT04I\":[\"Controllo...\"],\"pZJ_6D\":[\"Il nome dell'indice è richiesto\"],\"pddYFG\":[\"Inserisci prompt nome cella...\"],\"pnpyuD\":[\"Abilita Logging\"],\"pqKMPv\":[\"Creazione tabella fallita: \"],\"pqaP1h\":[\"Chiudi\"],\"pqarBu\":[\"Cresc.\"],\"ptuq35\":[\"es. Comic Sans MS\"],\"pzu7v4\":[\"Orizzontale\"],\"q-ch8m\":[\"Tutte le altre connessioni restano in sola lettura. Solo quelle selezionate possono eseguire scritture.\"],\"qA5jLs\":[\"Dettagli errore\"],\"qIrtcK\":[\"Aggiornamenti\"],\"qOqy8G\":[\"Verifica configurazione...\"],\"qWaVNs\":[\"Salva e Riavvia\"],\"qb3LPX\":[\"Visualizza Diagramma ER\"],\"qkK0vq\":[\"Il nome della vista è richiesto\"],\"qki9tG\":[\"Errore\"],\"qoIir-\":[\"L'URL base della tua API compatibile OpenAI. Esempi: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Comprimi tutto\"],\"r6ncaO\":[\"Chiudi tab\"],\"rAJlpP\":[\"Porta container\"],\"rG3WVm\":[\"Lettura\"],\"rGRCeK\":[\"Cancella Cronologia Query\"],\"rNIto7\":[\"Il nome della risorsa è obbligatorio\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook esportato con successo\"],\"rY4sEV\":[\"Elimina FK\"],\"rbu0nO\":[\"Gestisci Connessioni SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connessione/i\"],\"other\":[\"#\",\" connessione/i\"]}]],\"rn2_2V\":[\"Rimuovi filtro\"],\"roABNH\":[\"Nessuna cronologia query\"],\"rtir7c\":[\"sconosciuto\"],\"ru0-2W\":[\"Nessuna connessione attiva\"],\"rvDPWO\":[\"Scostamento Stima\"],\"rwWjWg\":[\"Note di Rilascio\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Testa Connessione\"],\"sBOaim\":[\"Il file di configurazione è stato salvato. Riavviare ora per applicare le modifiche?\"],\"sCyv9B\":[\"Aggiorna Modelli\"],\"sSUqe4\":[\"Elimina\"],\"sUBkgN\":[\"Generazione SQL in corso...\"],\"sZZG3d\":[\"Sei sicuro di voler importare \\\"\",[\"0\"],\"\\\"?\\nQuesto potrebbe sovrascrivere i dati esistenti.\"],\"sbK5ck\":[\"Cerca nella cronologia...\"],\"sq_bS6\":[\"Al Delete\"],\"suW7-E\":[\"Timeout di connessione in millisecondi.\"],\"suqtBX\":[\"Esc per chiudere\"],\"t-R8-P\":[\"Esecuzione\"],\"t1OfVY\":[[\"totalLibraries\"],\" librerie\"],\"t2TMzs\":[\"Chiudi scheda\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Seleziona una tabella...\"],\"t7KRl1\":[\"Log di ogni chiamata MCP e delle query in attesa di approvazione. Tutto è salvato localmente.\"],\"t9NJIk\":[\"Rilevate operazioni con scansione pesante\"],\"tB7xof\":[\"Operazioni Temp o Sort\"],\"tBBXTO\":[\"Intervallo di Ping\"],\"tFrT3w\":[\"Aggiungi questo al file di configurazione del client manualmente se l'installazione automatica fallisce.\"],\"tJ7UbA\":[\"analizza selezionata\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Dividi Orizzontale\"],\"tQhW-D\":[\"Impostazioni Log\"],\"tT-BQX\":[\"Installati\"],\"tXFGEx\":[\"Nessuna connessione Kubernetes salvata. Clicca \\\"Aggiungi\\\" per crearne una.\"],\"tXLz_8\":[\"Elimina\"],\"tXpRby\":[\"Griglia dati\"],\"tbysEk\":[\"Azioni\"],\"tdta9X\":[\"Pagina \",[\"0\"]],\"tfDRzk\":[\"Salva\"],\"tfEioV\":[\"Esegui tutte le celle SQL dall'alto in basso\"],\"tiAIaJ\":[\"Password SSH mancante. Per favore reinseriscila.\"],\"tk22BR\":[\"Incolla dati strutturati e rivedi lo schema prima dell'importazione\"],\"tst44n\":[\"Eventi\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"File SQL eseguito con successo\"],\"u6QeR6\":[\"Riavvia Ora\"],\"uAQUqI\":[\"Stato\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc per chiudere\"],\"uFViPK\":[\"Nessuna connessione SSH disponibile\"],\"uHUuhp\":[\"Analizza questa query\"],\"uHfFzS\":[\"Dimensione Font dell'Editor\"],\"uJ_3K5\":[\"Eliminare il notebook \\\"\",[\"0\"],\"\\\"? L'operazione non è reversibile.\"],\"uKaNJ3\":[\"Apri nell'editor JSON\"],\"uQBwTo\":[\"Schemi\"],\"ub54ff\":[\"Centro Plugin\"],\"ufFyBs\":[\"Database esportato con successo\"],\"upNmR2\":[\"Apri Barra Laterale\"],\"upwIY4\":[\"Definizione Vista\"],\"utMia3\":[\"Deseleziona Tutto\"],\"uyNaJg\":[\"1 elemento\"],\"v61dnS\":[\"Inserisci il nome esatto del modello per il tuo provider compatibile OpenAI.\"],\"v6oeyr\":[\"Installato\"],\"v75DGg\":[\"Sfoglia file\"],\"v99dO4\":[\"Chiave Primaria\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query trovate\"],\"other\":[\"#\",\" query trovate\"]}]],\"vCSBPD\":[\"Aggiungi filtro\"],\"vH7uJj\":[\"Ordina per…\"],\"vUOA1-\":[\"Cerca modelli...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE include righe reali, tempi, cicli e contatori buffer quando disponibili.\"],\"vXIe7J\":[\"Lingua\"],\"vYf4Jm\":[\"Inserisci una funzione SQL completa (es: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Preferito\"],\"vditm4\":[\"Piano Query\"],\"vks_ls\":[\"Chiudi altre schede\"],\"vnAnIp\":[\"Modello \",[\"0\"],\" non trovato in \",[\"1\"],\". Potrebbe non funzionare correttamente.\"],\"vqoN5u\":[\"Struttura\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Esplora\"],\"vujQJ5\":[\"Localizzazione\"],\"vvJPVL\":[\"Mostra panoramica\"],\"vwI5S4\":[\"Successo\"],\"vzH-7Z\":[\"Spiega\"],\"w7QmD_\":[\"Inserisci prompt di sistema...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Tempo trascorso\"],\"wCfv2R\":[\"Aggiungi Connessione\"],\"wGfc86\":[\"Cancella Tutta la Cronologia\"],\"wGwNv4\":[\"Database attivo\"],\"wJJ-Wy\":[\"Installazione in corso...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffer Hit\"],\"wQn-RM\":[\"Aggiungi Colonna\"],\"wRXcR2\":[\"In uso l'icona predefinita del driver.\"],\"wTOwz-\":[\"Applicato\"],\"wTmVhm\":[\"Delete\"],\"wZeIWq\":[\"Importa dagli Appunti\"],\"w_bY7R\":[\"Log\"],\"wc_8bA\":[\"In attesa\"],\"wckWOP\":[\"Gestisci\"],\"wdYcKH\":[\"Tab Aperte\"],\"wja8aL\":[\"Senza nome\"],\"wkOAzk\":[\"Nessun notebook corrisponde alla ricerca.\"],\"wp49Ao\":[\"Impossibile processare gli inserimenti: \"],\"wqG2hQ\":[\"Salta (non importare)\"],\"wwrAsK\":[\"Per favore compila tutti i campi obbligatori\"],\"wwu18a\":[\"Icona\"],\"x2fr_j\":[\"Grafo\"],\"xANKBj\":[\"Funzioni\"],\"xBwjck\":[\"È necessario un riavvio per applicare le modifiche.\"],\"xDAtGP\":[\"Messaggio\"],\"xECY01\":[\"Procedure\"],\"xGPNgZ\":[\"Personalizzazione Prompt\"],\"xNgtS-\":[\"Nessuna vista trovata\"],\"xOPa1b\":[\"La porta deve essere compresa tra 1 e 65535\"],\"xY9s5E\":[\"Timeout\"],\"xaVUr1\":[\"La volpe marrone salta sopra il cane pigro\"],\"xbvTzL\":[\"Percorso File\"],\"xlew5F\":[\"Svuota\"],\"xmNyKz\":[\"Test in corso...\"],\"xtuh6D\":[\"Espandi Explorer\"],\"y-Zdqj\":[\"Scegli un contesto...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Apri visualizzatore JSON\"],\"yQXjG5\":[\"Deseleziona Tutti\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Ieri\"],\"ygCKqB\":[\"Stop\"],\"ykCc6r\":[\"Database cambiato (cella \",[\"n\"],\")\"],\"ynVMSc\":[\"Seleziona tutte\"],\"ytdz1d\":[\"L'AI vuole eseguire una scrittura sul database\"],\"yyhzur\":[\"Crea tabella\"],\"yz7wBu\":[\"Chiudi\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"Password SSH\"],\"z4oF5T\":[\"Esporta Database\"],\"z5kV0h\":[\"Connessioni\"],\"zBTMzx\":[\"Anteprima\"],\"zCaAKs\":[\"Errore Aggiornamento\"],\"zDAakK\":[\"Impossibile visualizzare il diagramma senza un ID connessione.\"],\"zGe21h\":[\"Questa chiave è caricata da una variabile d'ambiente\"],\"zGfL5t\":[\"valore\"],\"zL6-4A\":[\"Nessun processo plugin in esecuzione\"],\"zLZhCi\":[\"Nuova community Discord!\"],\"zLlCou\":[\"Copia nome colonna\"],\"zNEL34\":[\"Unisciti alla Community\"],\"zNgTlV\":[\"Chiudi schede a destra\"],\"zQz55p\":[\"Ispeziona struttura\"],\"zR0FfH\":[\"Esportato in \",[\"target\"]],\"zRZeOc\":[\"Cerca tabelle, viste, routine, trigger...\"],\"zUNMsr\":[\"Chiave SSH\"],\"zXMRzb\":[\"Porta SSH\"],\"zZgoXr\":[\"Nessuna tabella trovata\"],\"zaWbms\":[\"Annulla Modifiche\"],\"zgClmU\":[\"Installa Config\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Inserisci valore...\"],\"zvzN4C\":[\"Imposta come attiva\"],\"zzDlyQ\":[\"Successo\"],\"zzMxrp\":[\"Modifica config.json\"],\"zz_Wd_\":[\"Modalità\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Max Voci Cronologia\"],\"-6AWa-\":[\"Importa connessioni\"],\"-6NyRG\":[\"Client\"],\"-K0AvT\":[\"Disconnetti\"],\"-PLZfh\":[\"Impossibile aggiornare i modelli\"],\"-T5W2e\":[\"Note Driver\"],\"-ZgeeE\":[\"Cronologia modifiche\"],\"-aYrdc\":[\"La versione \",[\"0\"],\" è disponibile\"],\"-fBGXl\":[\"Costo Più Alto\"],\"-jIQDz\":[\"Comprimi Cella\"],\"-u1eRo\":[\"Nessun database\"],\"-yoeVU\":[\"Caricamento schema...\"],\"-zy2Nq\":[\"Tipo\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID approvazione\"],\"0E5-gF\":[\"Sei sicuro di voler eliminare questa connessione?\"],\"0HCubq\":[\"Espandi\"],\"0Kmdvy\":[\"Font Personalizzato\"],\"0Nj13E\":[\"Genera SQL\"],\"0ROgz5\":[\"Inserisci JSON...\"],\"0SY9sU\":[\"Impossibile disconnettersi dal database\"],\"0b3kL9\":[\"Seleziona un database\"],\"0caMy7\":[\"Cronologia\"],\"0mx5ow\":[\"Query\"],\"0n9BtL\":[\"Anteprima\"],\"0pHB9N\":[\"Copia come tabella.colonna\"],\"0sQzZK\":[\"Filtra database...\"],\"0uPP9X\":[\"Nome FK (Opzionale)\"],\"0wxuek\":[\"Versione Corrente\"],\"0x09Aw\":[\"Stop on error commutato\"],\"0yBP6v\":[\"Supporta lo Sviluppo\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe\"],\"other\":[\"#\",\" righe\"]}]],\"0yVAoD\":[\"Conta righe\"],\"0zxJ87\":[\"Nessun log disponibile\"],\"1-ETbn\":[\"Visual Explain\"],\"1133_z\":[\"Modifica Vista\"],\"11fGJ6\":[\"Query\"],\"13hIUA\":[\"Chiave API \",[\"0\"]],\"14qNWF\":[\"Seleziona Connessione SSH\"],\"17qHRP\":[\"Nuova connessione\"],\"1Dn6bg\":[\"Importa dagli Appunti\"],\"1Dnd0I\":[\"Carica conteggio righe\"],\"1FjTLW\":[\"es. python3\"],\"1GOvbo\":[\"Ollama connesso (\",[\"0\"],\" modelli trovati)\"],\"1I6UoR\":[\"Viste\"],\"1U7hS5\":[\"Lung\"],\"1UTmg5\":[\"Max Allowed Packet\"],\"1b7aSU\":[\"Font dell'Editor\"],\"1ekzlY\":[\"Processi Plugin\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Selezione Tema\"],\"1xVZkL\":[\"Nessun modello trovato\"],\"26Joci\":[[\"0\"],\" righe recuperate\"],\"2Bf-Qe\":[\"Nuova console\"],\"2CrSmP\":[\"Aiuta tabularis a crescere\"],\"2D9F8_\":[\"Impossibile duplicare la connessione\"],\"2Eoi_a\":[\"Mostra dettagli\"],\"2F4pE5\":[\"Build e Test Rust\"],\"2Fsd9r\":[\"Questo Mese\"],\"2JzKXI\":[\"Imposta GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Seleziona Tutto\"],\"2SO5RM\":[\"Kubernetes non è disponibile per questo driver.\"],\"2Uh5GA\":[\"ecosistema Cargo\"],\"2YylFp\":[\"Nuova Query Visuale\"],\"2luuSG\":[\"Riprova\"],\"2wxgft\":[\"Rinomina\"],\"2yG2GC\":[\"Sospendi le scritture (o ogni query) chiedendo conferma all'utente in Tabularis prima dell'esecuzione.\"],\"30-b5r\":[\"Elimina\"],\"31kwdN\":[\"Duplica filtro\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"Tutti gli strumenti\"],\"3Am5DS\":[\"Vista a tab\"],\"3FVg9_\":[\"Colonna Locale\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Esegui\"],\"3L0HCz\":[\"Nessun plugin corrisponde alla ricerca.\"],\"3Nv3JV\":[\"Esecuzione query...\"],\"3TSz9S\":[\"Riduci\"],\"3UW8fG\":[\"Aggiornamenti gestiti da \",[\"0\"]],\"3YvS-c\":[\"Nuovo tab\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Prompt Nome Cella Notebook\"],\"3qkggm\":[\"Schermo Intero\"],\"3rBJ1T\":[\"Vedi schema\"],\"3xZ-xV\":[\"Insert Current Timestamp\"],\"40Gx0U\":[\"Fuso Orario\"],\"41GP4f\":[\"Scegli il delimitatore predefinito utilizzato per la copia o l'esportazione delle righe in formato CSV.\"],\"42iaEi\":[\"PostgreSQL senza ANALYZE mostra solo le stime del planner.\"],\"44cXI8\":[\"Ordina per \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Gestisci Database\"],\"4CK17g\":[\"Sei sicuro di voler modificare la vista \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Seleziona almeno un database\"],\"4D_Nvt\":[\"Failed to create group\"],\"4RiR6c\":[\"Esporta come HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processo figlio\"],\"other\":[\"#\",\" processi figli\"]}]],\"4TtbAT\":[\"Fetch the latest translations from the cloud without waiting for an app update.\"],\"4VyuY3\":[\"Sei sicuro di voler cancellare tutti i log?\"],\"4WWqS3\":[\"Espandi/comprimi albero JSON\"],\"4XAQdl\":[\"Crea Indice\"],\"4cEClj\":[\"Sessioni\"],\"4cmfYp\":[\"Duplicate Row\"],\"4hsr6d\":[\"Crea Vista\"],\"4lIZTB\":[\"Dipendenze Dev Frontend\"],\"4oYjvJ\":[\"Cerca nella query…\"],\"4tMxW4\":[\"Anteprima record correlato\"],\"4yJcjm\":[\"Seleziona tipo...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Chiudi pannello filtri (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Punto e virgola (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" evento\"],\"other\":[\"#\",\" eventi\"]}]],\"5I2fxu\":[\"/percorso/id_rsa\"],\"5NZpX8\":[\"Vista lista\"],\"5To6Z6\":[\"Copia query\"],\"5gqNQl\":[\"Vista griglia\"],\"5igIzr\":[\"Importazione annullata\"],\"5nTIup\":[\"Modifica vista: \",[\"name\"]],\"5qIe8E\":[\"Esegui Tutto\"],\"66bEht\":[\"Stato del Progetto\"],\"6PIJVc\":[\"Avvio\"],\"6QvP0l\":[\"Esporta come JSON\"],\"6W41Xq\":[\"Gestione Attività\"],\"6WngBH\":[\"Imposta NULL\"],\"6YtxFj\":[\"Nome\"],\"6_dCYd\":[\"Panoramica\"],\"6dOBsk\":[\"Crea Vista\"],\"6gvoHP\":[\"Copia messaggio d’errore\"],\"6oCVzX\":[\"Il contesto Kubernetes è obbligatorio\"],\"6wQO0f\":[\"Mostra Dati\"],\"6z9W13\":[\"Riavvia\"],\"71agNy\":[\"Genera nomi per le celle senza nome con AI\"],\"74J3FG\":[\"Versione iniziale\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"Ho capito\"],\"77nSMU\":[\"Vuoi eliminare l'intera storia delle attività AI? L'operazione è irreversibile.\"],\"7ABmyQ\":[\"Riprova\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" di \",[\"0\"],\" attivi\"],\"7E864M\":[\"Tipo Database\"],\"7FqaG1\":[\"Personalizza le istruzioni per l'analisi AI dei piani EXPLAIN. Usa \",[\"LANGUAGE\"],\" per la lingua di output.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Tipi misti rilevati, default TEXT\"],\"7RSQQd\":[\"Salva password nel Portachiavi\"],\"7VpPHA\":[\"Conferma\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"fallite\"],\"7sMeHQ\":[\"Chiave\"],\"7sNhEz\":[\"Nome utente\"],\"7tATh2\":[\"Esegui Query\"],\"7yb4gk\":[\"Fallito: \"],\"8-4V8D\":[\"Tabelle\"],\"82G-l5\":[\"Il Model Context Protocol (MCP) permette agli assistenti AI (come Claude) di connettersi ai tuoi strumenti locali. Tabularis espone un server MCP che permette all'AI di leggere lo schema del database ed eseguire query in sicurezza.\"],\"83VjWE\":[\"Nuovo Notebook\"],\"86IgoU\":[\"Esegui query (nell'editor)\"],\"86fCgf\":[\"Personalizza le istruzioni per la generazione AI del nome delle tab risultato query. La query SQL viene inviata come messaggio utente.\"],\"87a_t_\":[\"Etichetta\"],\"87kWsr\":[\"Esporta connessioni\"],\"8CWirf\":[\"Server MCP\"],\"8S8aIX\":[\"Controllo Connessione\"],\"8TMaZI\":[\"Timestamp\"],\"8Tg_JR\":[\"Personalizzato\"],\"8UFKYr\":[\"Seleziona la query da eseguire\"],\"8VKSGV\":[\"Genera SQL\"],\"8Wjy6z\":[\"Chiudi schede a sinistra\"],\"8ZsakT\":[\"Password\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"Editor SQL\"],\"8bRgTe\":[\"Provider AI non configurato. Vai su Impostazioni > AI.\"],\"8c_W0h\":[\"Versioni precedenti\"],\"8guEQP\":[\"Aggiorna Viste\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN è leggero e soprattutto strutturale.\"],\"8q_sOc\":[\"Rimuovi\"],\"8t-akp\":[\"prime \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"Nome Connessione\"],\"91gnWY\":[\"Esporta Log\"],\"91rtHL\":[\"Crea Nuova Vista\"],\"92hf9a\":[\"Rimuovi\"],\"93KA8w\":[\"New Group\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"Vista aggiornata con successo\"],\"9NzDFn\":[\"Mostra la schermata di benvenuto all'avvio dell'applicazione.\"],\"9OoUS3\":[\"Crea Nuova Connessione SSH\"],\"9QGRD5\":[\"Colonna destinazione\"],\"9QTny9\":[\"Esecuzione query fallita.\"],\"9S-fyV\":[\"Piano di esecuzione preliminare\"],\"9SJ_Sx\":[\"Risorse di Sistema\"],\"9UQ730\":[\"Clona\"],\"9X6cky\":[\"NO\"],\"9XUV5V\":[\"Nessun dato negli appunti\"],\"9hGjL2\":[\"Crea Indice\"],\"9mMU1R\":[\"Tempo\"],\"9mvFo_\":[\"Ora\"],\"9npOH9\":[\"Apri file\"],\"9uI_rE\":[\"Annulla\"],\"9xUjzm\":[\"Seleziona Tutti\"],\"9y_02p\":[\"Chatta con la community, ricevi aiuto, suggerisci funzionalità\"],\"A1pPcI\":[\"Host SSH\"],\"A1taO8\":[\"Cerca\"],\"A6C0pv\":[\"Costo Totale\"],\"A7WG0p\":[\"Plugin disabilitato\"],\"A7yRz3\":[\"La definizione della vista è richiesta\"],\"A9Uyp6\":[\"Importazione fallita: \"],\"ABEd-z\":[\"Usa il tuo package manager per aggiornare Tabularis.\"],\"AMdgKV\":[\"Prompt Analisi Piano di Esecuzione\"],\"ANSTMe\":[\"Nessun problema rilevante nel riepilogo del piano corrente.\"],\"ANzIr7\":[\"Cronologia Query\"],\"AOnaU7\":[\"saltate\"],\"AVlZoM\":[\"Variabile Ambiente\"],\"AXTVsE\":[\"Verifica completa\"],\"AXdRYR\":[\"Log attuali\"],\"Aa-YkQ\":[\"Esporta Notebook\"],\"Ai2U7L\":[\"Host\"],\"AidayG\":[\"Filtra per livello\"],\"AlPiMN\":[\"Clicca per saltare alla pagina\"],\"An-1rA\":[\"Righe restituite\"],\"AnV8j-\":[\"Modifica Colonna\"],\"AvEr_L\":[\"Nuova Console\"],\"AvYbUL\":[\"Star su GitHub\"],\"Aw_eOs\":[\"Richiede Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Nessun risultato trovato\"],\"B0mJGb\":[\"Output Grezzo\"],\"B1c58n\":[\"Modifica colonna\"],\"B3toQF\":[\"Oggetti\"],\"B5nKny\":[\"/percorso/assoluto/cartella\"],\"B5xevr\":[\"Il nome della connessione è obbligatorio\"],\"BAVvWJ\":[\"Diagramma ER\"],\"BBtVak\":[\"Comprimi Tutto\"],\"BEVzjL\":[\"Importazione fallita\"],\"BHATjK\":[\"Esporta connessioni\"],\"BJe2lZ\":[\"Mostra/nascondi sidebar\"],\"BK3WCj\":[\"Impossibile caricare il registro\"],\"BKbO3i\":[\"Notebook modificato\"],\"BMB51y\":[\"Esegui nella console\"],\"BNW_Z4\":[\"es. utenti_attivi, riepilogo_ordini\"],\"BPkXj7\":[\"Crea Chiave Esterna\"],\"BUO_JN\":[\"Copia Query\"],\"BYkhHY\":[\"Controlla aggiornamenti all'avvio\"],\"BeSg6-\":[\"Raccogli i log dell'applicazione in memoria per il debug\"],\"BgAyQH\":[\"Rimuovi ordinamento\"],\"BinTJI\":[\"ecosistema npm\"],\"BkFson\":[\"Impaginazione automatica\"],\"Bpglf1\":[\"Sposta Su\"],\"BrGo6h\":[\"Cerca notebook\"],\"BxiAN_\":[\"Elimina Query\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Dipendenze Frontend\"],\"CE-M2e\":[\"Info\"],\"CHIyL8\":[\"Nessun filtro —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"Download in corso...\"],\"CUxwxn\":[\"Mostra Tutte le Tabelle\"],\"CWMXbw\":[\"fermerà forzatamente il suo processo. Tutte le connessioni database attive che usano questo plugin smetteranno di funzionare finché il plugin non verrà riavviato.\"],\"CZt6BX\":[\"CONFIGURAZIONE MANUALE\"],\"Ca8ixZ\":[\"Elimina\"],\"CbJBQS\":[\"Aggiornamento fallito: \"],\"Cdz-YU\":[\"Vista impilata\"],\"CpeQf9\":[\"Cicli\"],\"D2wXBw\":[\"Auto Increment\"],\"D6Ql0c\":[\"Seleziona il modello da utilizzare per la generazione e la spiegazione.\"],\"DB8zMK\":[\"Applica\"],\"DDXf5E\":[\"Funzioni SQL\"],\"DEwnwi\":[\"Elimina\"],\"DNTvdl\":[\"Apri nell'editor\"],\"DPc2P9\":[\"Elimina Cella\"],\"DUY8Ba\":[\"Modifiche Incompatibili\"],\"DVnBSM\":[\"Altezza Riga\"],\"Dd7YLj\":[\"Forse più tardi\"],\"Deej3j\":[\"JSON non valido\"],\"DfKhk_\":[\"Aggiorna\"],\"DiRiTz\":[\"Apri pagina del pacchetto\"],\"DlRHAD\":[\"Esecuzione EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" errore\"],\"other\":[\"#\",\" errori\"]}]],\"Dvdihe\":[\"Su \",[\"0\"],\" — controlla e decidi prima dell'esecuzione.\"],\"DzFLzw\":[\"SÌ\"],\"E-JUtQ\":[\"Approvazione manuale\"],\"E0kcnZ\":[\"Generale\"],\"E2mje_\":[\"Seleziona la query da analizzare\"],\"EDieyg\":[\"Sei sicuro di voler eliminare questa connessione SSH?\"],\"EHZxPj\":[\"Espandi\"],\"EL4oDO\":[\"Nuova Versione Disponibile\"],\"EPi4gT\":[\"Ordina per \",[\"field\"]],\"EWPtMO\":[\"Codice\"],\"EWX0mQ\":[\"Ungrouped\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Sconosciuto\"],\"EhADgB\":[\"Elimina colonna\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Sei aggiornato\"],\"Em6JFd\":[\"Conta righe\"],\"EnGiqG\":[[\"0\"],\" elementi\"],\"Ew1n5z\":[\"Cerca plugin…\"],\"F18WP3\":[\"Parametri\"],\"F3uc1x\":[\"Il file esportato conterrà le password del database e SSH in chiaro. Conservalo in modo sicuro.\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" righe\"],\"other\":[\"#\",\" righe\"]}]],\"F6pfE9\":[\"Attiva\"],\"F8tXg7\":[\"Anteprima Dati\"],\"F9-6yK\":[\"Formato di copia predefinito\"],\"F9lxfG\":[\"Rimuovi\"],\"F9nsa2\":[\"Il file di cronologia era corrotto ed è stato spostato in backup. Le nuove query verranno registrate normalmente. File di backup:\"],\"FF_oap\":[\"Default\"],\"FK8rlP\":[\"Nessuna connessione SSH configurata\"],\"FMRcH8\":[\"Prima riga come intestazione\"],\"FNvDMc\":[\"Questa Settimana\"],\"FQe1FI\":[\"Righe Stimate\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Operazione\"],\"Fa_cky\":[\"Schema: \",[\"tableName\"]],\"FpEL5o\":[\"Scegli un tema indipendente per l'editor SQL, oppure mantienilo sincronizzato con il tema dell'app.\"],\"FsvZQL\":[\"Modificata cella \",[\"n\"]],\"FtwKL9\":[\"Cambia tab\"],\"FznI3z\":[\"Eliminare la chiave esterna \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Anteprima fallita: \"],\"G8Q5Zq\":[\"Il namespace è obbligatorio\"],\"GAohqx\":[\"Elimina colonna\"],\"GJR99u\":[\"Eliminazione colonna fallita: \"],\"GKfzzM\":[\"Scegli una connessione...\"],\"GS-Mus\":[\"Esporta\"],\"GUaLUq\":[\"Caricamento schema fallito: \"],\"GXP-Iw\":[\"Aggiungi Cella SQL\"],\"Gj1mLb\":[\"Celle riordinate\"],\"GlbqG2\":[\"Ripristina predefinito\"],\"Gq1YzP\":[\"Eventi\"],\"Gs5AlY\":[\"Aperta\"],\"GtmO8_\":[\"da\"],\"GxkJXS\":[\"Caricamento in corso...\"],\"H-o4D2\":[\"Crea nuova colonna\"],\"H2B-KW\":[\"Scegli il formato predefinito per la copia delle righe con Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Ripeti\"],\"H7mlCc\":[\"/percorso/assoluto/db.sqlite\"],\"H86f9p\":[\"Riduci\"],\"H9HlDe\":[\"minutes\"],\"H9P8CD\":[\"aggiungi il primo filtro\"],\"HAQlGl\":[\"Attività AI\"],\"HKNZrs\":[\"Cond. Indice\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Elimina \",\"#\",\" righe\"],\"other\":[\"Elimina \",\"#\",\" righe\"]}]],\"HPuCiP\":[\"Percorso Cartella\"],\"HUs1R3\":[\"Nessuna scheda aperta per questa connessione.\"],\"HV4Isp\":[\"Inserisci password SSH\"],\"HVC8Hh\":[\"Copiato negli appunti\"],\"HWEpq8\":[\"Scrittura Disco/s\"],\"HY4nP5\":[\"Inline\"],\"HcmoWv\":[\"Salvataggio vista fallito: \"],\"He8v1Y\":[\"Deseleziona da Applica tutti\"],\"HehHP1\":[\"Layout Predefinito\"],\"HilYn4\":[\"Questo notebook è vuoto. Aggiungi una cella per iniziare.\"],\"HjxVK_\":[\"Test connessione rapido\"],\"HmMnRx\":[\"Modalità WKT\"],\"HoKCiI\":[\"L'app si riavvierà automaticamente dopo l'installazione\"],\"HpK_8d\":[\"Ricarica\"],\"Hpi4Jm\":[\"Entra subito\"],\"HuA3RU\":[\"Tab\"],\"I128p7\":[\"Pipe (|)\"],\"I3AgqA\":[\"Configura SSH Inline\"],\"I5VBsr\":[\"Come l'app\"],\"I8yrPb\":[\"Sostituisci tabella\"],\"I92BdB\":[\"Remove from Group\"],\"I92fr4\":[\"Ricordamelo Dopo\"],\"I99Miw\":[\"Costo\"],\"IETZIR\":[\"Modifica nome cella\"],\"IG9wzA\":[\"Inserimento riga fallito: \"],\"ILleOG\":[\"Il tipo di risorsa deve essere \\\"service\\\" o \\\"pod\\\"\"],\"IQ3gAw\":[\"Carica File\"],\"IUwGEM\":[\"Salva Modifiche\"],\"IUwmLq\":[\"Dipendenze dirette dichiarate in package.json e src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Librerie Open Source\"],\"I_43p6\":[\"Sicurezza\"],\"Iaizf4\":[\"Aspetto\"],\"Il3FBB\":[\"Pannello filtri strutturati\"],\"IniZRK\":[\"Download non disponibile - caricata solo anteprima\"],\"Isaozb\":[\"Rivedi e modifica\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"Le query attive e le connessioni attraverso questo plugin verranno interrotte.\"],\"J6v1s_\":[\"Modello Predefinito\"],\"JE-DVk\":[\"Interprete\"],\"JEGlfK\":[\"Inizio\"],\"JKDPqP\":[\"Seleziona prima un contesto\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Usa Tunnel SSH\"],\"JRz8tw\":[\"MySQL e MariaDB espongono metriche reali solo con le varianti supportate di EXPLAIN ANALYZE o ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP o SVG · max 512 KB\"],\"JY5Oyv\":[\"Database\"],\"JlFRIB\":[\"Fuso orario della sessione inviato a MySQL dopo la connessione.\"],\"JrOEip\":[\"Anteprima\"],\"JsY1p5\":[\"Negata\"],\"K3H9p5\":[\"Rimuovi\"],\"K5Dgu_\":[\"Database\"],\"K8IGKf\":[\"Tipo di Autenticazione\"],\"KAYNSW\":[\"Quanti log mantenere in memoria (1-10000)\"],\"KHTGbr\":[\"EXPLAIN preliminare\"],\"KHvda8\":[\"Not Null\"],\"KJKNaZ\":[\"Copia come `colonna`\"],\"KM5Kc8\":[\"Almeno una colonna deve essere selezionata\"],\"KSCnVQ\":[\"Tipo\"],\"KUjOb9\":[\"in esecuzione\"],\"KXBdwy\":[\"Aggiorna Routine\"],\"KXNyX7\":[\"Imposta DEFAULT\"],\"Kd70-v\":[\"Importa dagli Appunti...\"],\"KhI4oS\":[\"Apri la riga referenziata in \",[\"0\"]],\"KhgrNu\":[\"Integrazione Server MCP\"],\"KirERL\":[\"Timeout\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Eliminazione indice fallita: \"],\"KzeARD\":[\"Eliminazione tabella fallita: \"],\"L-rMC9\":[\"Ripristina predefinito\"],\"L3HXkQ\":[\"Correzioni Bug\"],\"LCZ7Dy\":[\"Copia nome\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"indici\"],\"LMeAoR\":[\"righe\"],\"LPCdc-\":[\"Prompt Nome Tab Query\"],\"LPFmga\":[\"Seleziona per Applica tutti\"],\"LYzbQ2\":[\"Strumento\"],\"Lbis_V\":[\"Navigatore rapido\"],\"Lcpbe2\":[\"Impossibile avviare il processo del plugin. Controlla i dettagli dell'errore.\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN è supportato solo per istruzioni DML (SELECT, INSERT, UPDATE, DELETE). Le istruzioni DDL come CREATE, DROP o ALTER non possono essere analizzate.\"],\"LnT0hQ\":[\"Aggiungi colonna\"],\"LvutiO\":[\"Suggerisci con AI\"],\"M-rHQO\":[\"Esci da Schermo Intero\"],\"M0XJba\":[\"Sei sicuro di voler cancellare tutta la cronologia delle query per questa connessione?\"],\"M1co_O\":[\"Configurato\"],\"M73whl\":[\"Contesto\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Emoji selezionato\"],\"MWB7fV\":[\"Mostra Tutto\"],\"MXdOwj\":[\"Separa Connessioni\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Seleziona connessione K8s\"],\"Mc1tjS\":[\"Abilita ANALYZE per ispezionare righe reali, tempi, cicli e buffer.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" righe in più\"],\"Mp0jQ_\":[\"Questo driver supporta le chiavi primarie solo in fase di creazione della tabella\"],\"MqpZwN\":[\"Processo Tabularis\"],\"MxIx43\":[\"↑↓ per navigare, Invio per aprire\"],\"MygtgQ\":[\"Aggiungi Cella Markdown\"],\"N40H-G\":[\"Tutti\"],\"N5UQxq\":[\"Ollama non rilevato sulla porta \",[\"0\"],\". È in esecuzione?\"],\"N6GBcC\":[\"Conferma eliminazione\"],\"N6aqHp\":[\"Query eseguite\"],\"N9_S15\":[\"Verrà creata una nuova tabella\"],\"NBdMa1\":[\"Step Più Lento\"],\"NC2AI2\":[\"Lunghezza\"],\"NCzNnx\":[\"Ordine crescente\"],\"NT4Ubs\":[\"Elimina chiave personalizzata e ripristina variabile d'ambiente (se presente)\"],\"NUjrCO\":[\"Nessun preferito corrisponde alla ricerca\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"Totale albero: \",[\"0\"]],\"Nc2VQn\":[\"Aggiungi a esistente\"],\"NgFERn\":[\"Aggiungi ai Preferiti\"],\"NktMHG\":[\"Nome database\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Test\"],\"Nq5QTk\":[\"analizza N-esima\"],\"O2STgu\":[\"Esportazione fallita: \"],\"O8SV8O\":[\"Download in corso...\"],\"O9_WW6\":[\"connection\"],\"OGEsKj\":[\"Esegui Tutte le Celle\"],\"OGWdBg\":[\"Nome Vista\"],\"OHqT6w\":[\"Premi la combinazione di tasti...\"],\"OXJsaG\":[\"Nome parametro non valido\"],\"OfhWJH\":[\"Ripristina\"],\"OlAl5i\":[\"Espandi tutto\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Unisciti su Discord\"],\"P1YGsb\":[\"Generazione SQL\"],\"P2m1xb\":[\"Ferma su Errore\"],\"P3Qlys\":[\"Nessun ID Connessione\"],\"P6Y3Yf\":[\"Esegui questo comando nel terminale, poi riavvia Claude Code.\"],\"PCdj-c\":[\"Deseleziona tutte\"],\"PMnFt9\":[\"Lettura Disco/s\"],\"PQU2Va\":[\"Accetta Suggerimento con Invio\"],\"PRnH8G\":[\"su \",[\"0\"]],\"PY8UF3\":[\"Parallelo commutato (cella \",[\"n\"],\")\"],\"PiH3UR\":[\"Copiato!\"],\"Pia95d\":[\"Il nome della colonna è richiesto\"],\"PrElXQ\":[\"Aggiorna\"],\"PrixCC\":[\"Le righe verranno aggiunte a una tabella esistente\"],\"Pujgbb\":[\"Configura destinazione\"],\"Pw_eQV\":[\"Plugin non avviato\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Nessuna query salvata\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Nessun processo figlio\"],\"QCxMC0\":[\"Controlla automaticamente nuove versioni all'avvio dell'app\"],\"QEazml\":[\"Elimina selezionate\"],\"QHcLEN\":[\"Connesso\"],\"QLHHFO\":[\"Modalità sola lettura\"],\"QOvAW3\":[\"Nuove Funzionalità\"],\"QULGRi\":[\"Nessuna query valida trovata\"],\"QZwllF\":[\"Sfoglia...\"],\"QbkSr_\":[\"EXPLAIN non disponibile per questa query.\"],\"QeHFYZ\":[\"EXPLAIN fallito: \",[\"0\"]],\"Qll2Tb\":[\"Decresc.\"],\"Qoq-GP\":[\"Leggi di più\"],\"Qu4Hog\":[\"Notebook importato con successo\"],\"R-A2Vd\":[\"Nessun dato da visualizzare\"],\"R0Hkb2\":[[\"0\"],\" database selezionato/i\"],\"R1nHhB\":[\"Esiste già\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"Converti in Console\"],\"R9Khdg\":[\"Auto\"],\"RDjuBN\":[\"Configurazione\"],\"RF-HyV\":[\"Scegli la tua lingua preferita. 'Auto' userà la lingua di sistema.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Copia nome\"],\"RI-HZc\":[\"Inserisci Chiave \",[\"0\"]],\"RJrE17\":[\"Sei sicuro di voler eliminare la vista \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Una stella aiuta gli altri a scoprire il progetto\"],\"Rb3Tdm\":[\"Nome del notebook\"],\"RcbKJ3\":[\"All'Update\"],\"RkefFq\":[\"Esegui un EXPLAIN della query prima di mostrare il modal di approvazione, così l'utente vede il piano di esecuzione.\"],\"RnF_hl\":[\"Caricamento registro plugin...\"],\"Rns7_C\":[\"Questa azione non può essere annullata immediatamente\"],\"RoKRqW\":[\"Plugin Disponibili\"],\"RphpKk\":[\"Aspetto\"],\"Rt8sHM\":[\"Rilevato lavoro di sort o temporaneo\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Abilitati\"],\"S1veKH\":[\"Ripristina selezionato\"],\"S5zeZU\":[\"Anteprima\"],\"S8Yqbl\":[\"Inserisci\"],\"SDND4q\":[\"Non configurato\"],\"SJRy3D\":[\"(Auto-generato)\"],\"SSwIjo\":[\"Imposta VUOTO\"],\"SgvA_r\":[\"Premi Esegui (Ctrl/Command+F5) per caricare i dati della tabella\"],\"SlfejT\":[\"Errore\"],\"SoATkx\":[\"Copia cella\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL Endpoint\"],\"T7w5CQ\":[\"Impossibile creare nuova riga: \"],\"T9947j\":[\"Valore (es. 'testo' o 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Passa a Layout Verticale\"],\"TK5oex\":[\"Salva Prompt\"],\"TKQ7K-\":[\"Installa\"],\"TKZreP\":[\"Richiesto\"],\"TMLAx2\":[\"Richiesto\"],\"TO08JI\":[\"chiavi esterne\"],\"TVKqvO\":[\"Modifica Riga\"],\"TYSdQ3\":[\"Esegui query SELECT\"],\"TfDFHS\":[\"Manda a capo le righe lunghe nell'editor invece di scorrere orizzontalmente.\"],\"Tibfjs\":[\"Nessuna connessione salvata — creane una qui sotto\"],\"Tj36Dr\":[\"Ripristina Predefinito\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"Blocca query\"],\"TpwXyg\":[\"Se il tempo manca, il server ha probabilmente restituito un piano solo stimato.\"],\"Tw2M1h\":[\"Installazione fallita\"],\"Ty-rm9\":[\"Connessioni SSH\"],\"Tz0i8g\":[\"Impostazioni\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Connessioni Kubernetes\"],\"U4uzyV\":[\"Novità\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"Ferma l'esecuzione quando una cella fallisce\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" su \",[\"1\"],\" — controlla e decidi prima dell'esecuzione.\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[\"Configurazione installata per \",[\"clientName\"],\"! Riavvia l'app per applicare.\"],\"URmyfc\":[\"Dettagli\"],\"UWQBvp\":[\"Genera modelli SQL\"],\"UawTKZ\":[\"Opzionale. Specifica l'eseguibile usato per avviare questo plugin (es. python3 su macOS/Linux, python o percorso completo su Windows). Lascia vuoto per usare il valore predefinito.\"],\"Ub8sf5\":[\"SQLite non supporta l'eliminazione di FK tramite ALTER TABLE.\"],\"UbbJ8j\":[\"Nessuna opzione trovata\"],\"Ubs68g\":[\"Generali\"],\"UftN8J\":[\"Queste connessioni rifiuteranno le scritture da MCP. Le altre si comportano normalmente.\"],\"UnQNah\":[\"Sei sicuro di voler eliminare la colonna \\\"\",[\"0\"],\"\\\" dalla tabella \\\"\",[\"tableName\"],\"\\\"?\\n\\nATTENZIONE: Questo eliminerà permanentemente tutti i dati in questa colonna. L'azione non può essere annullata.\"],\"UncTTh\":[\"Somma RSS dell'albero dei processi — può sovrastimare la memoria condivisa\"],\"UpjgFm\":[\"Parametri modificati\"],\"UsAnu1\":[\"ANALYZE esegue la query. Usare con cautela su istruzioni che modificano dati.\"],\"UxKoFf\":[\"Navigazione\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Dimensione Tab\"],\"UzWGWO\":[\"Passa all'input SQL WHERE\"],\"V-chk5\":[\"Frequenza con cui verificare se le connessioni attive sono ancora raggiungibili. Imposta 0 per disabilitare.\"],\"V-pw1j\":[\"Nome tabella\"],\"V2T0Uw\":[\"Nessun notebook salvato.\"],\"V3aNwx\":[\"Editor Dati\"],\"VGYp2r\":[\"Applica a tutto\"],\"VH8S7x\":[\"Colonna appunti\"],\"VIAEcS\":[\"Impossibile caricare i database. Verifica le credenziali.\"],\"VKdztF\":[\"Aggiungi righe\"],\"VLiHXI\":[\"Dati Analyze\"],\"VMbmXc\":[\"Sei sicuro di voler rimuovere \\\"\",[\"pluginName\"],\"\\\"? I file del plugin verranno eliminati.\"],\"VO3weF\":[\"Nessun file caricato\"],\"VOZlKc\":[\"Importazione Database\"],\"VPzsIz\":[\"Generazione nome...\"],\"VUul0v\":[\"La terminazione di\"],\"VW0GVQ\":[\"Clicca un altro emoji qui sotto per cambiarlo.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"Tutte le query\"],\"Vi2Pqx\":[\"di\"],\"Vl2zn2\":[\"arrestato\"],\"Vo4uBA\":[\"Si è verificato un errore durante l'installazione del plugin. Vedi i dettagli qui sotto.\"],\"VqqyOs\":[\"Esegui una query per vedere i risultati\"],\"VzhDFh\":[\"Blocca qualsiasi statement non-SELECT proveniente da MCP, salvo le connessioni esplicitamente abilitate.\"],\"W3uwpT\":[\"Chiudi tutte le schede\"],\"W4MKLh\":[\"es. Sembra rischiosa in produzione, conferma…\"],\"W60eXm\":[\"Tabella\"],\"WA8RND\":[\"Sei sicuro di voler eliminare la tabella \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Elimina tabella\"],\"WLnvCZ\":[\"Inserisci nome utente\"],\"WM-__8\":[\"Cerca connessioni...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe importate in \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"#\",\" righe importate in \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"Sei sicuro di voler eliminare la query \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"riuscite\"],\"WcF1uL\":[\"Group name\"],\"Weq9zb\":[\"Generali\"],\"WmPpB1\":[\"Caricamento del piano di esecuzione…\"],\"Wu7cK0\":[\"Nessun database trovato\"],\"WvoUQF\":[\"Eliminata cella \",[\"n\"]],\"Ww3pDD\":[\"COMANDO MANUALE\"],\"X-20AU\":[\"Inserisci prompt nome tab query...\"],\"X-U6_w\":[\"Famiglia Font\"],\"X5fs0g\":[\"Crea la tua prima connessione per iniziare.\"],\"X7Ayjp\":[\"Password salvata nel portachiavi di sistema\"],\"X9kySA\":[\"Preferiti\"],\"XJOV1Y\":[\"Attività\"],\"XMCLEL\":[\"Create New Trigger\"],\"XN_sSd\":[\"Automatic updates\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Spiegazione Query\"],\"XVF2Pf\":[\"Modifica Schemi\"],\"XW6OYF\":[\"Questo plugin potrebbe richiedere un interprete (es. Python). Usa le Impostazioni Plugin per configurare il percorso dell'interprete.\"],\"XZB6Xr\":[\"Numero massimo di log\"],\"Xcffv2\":[\"Mostra i pulsanti AI Assist ed Explain nell'editor\"],\"XeqTSh\":[\"Tipo Join\"],\"XmJfZT\":[\"nome\"],\"XoQfG1\":[\"Utente SSH\"],\"XwI0Vw\":[\"Auto (Sistema)\"],\"XyDlLX\":[\"Nome Indice\"],\"Y2P2aK\":[\"Seleziona gli schemi da caricare:\"],\"Y8HYw2\":[\"valore\"],\"Y8zX3R\":[\"Inserisci nell'Editor\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Cerca...\"],\"YWlnMZ\":[\"Porta Ollama\"],\"YYdC3A\":[\"Versione \",[\"0\"]],\"YYn8b5\":[\"Sfoglia e installa plugin dal registro.\"],\"Y_3yKT\":[\"Apri in Nuova Scheda\"],\"YiAQ_Q\":[\"Aggiorna Tabelle\"],\"Ysjr9Y\":[\"Anteprima SQL\"],\"YswNf7\":[\"Tutti i livelli\"],\"YtNwr6\":[\"Numero massimo di voci nella cronologia delle query salvate per connessione.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Caricamento...\"],\"Z7ZXbT\":[\"Approva\"],\"Z8JpBH\":[\"Esporta come Notebook\"],\"Z8fBIc\":[\"Le righe reali superano la stima\"],\"ZC2VJP\":[\"Esegui\"],\"ZCIS4k\":[\"nessun filtro attivo\"],\"ZF1_UT\":[\"Modalità SSL\"],\"ZGjBPa\":[\"Pulisci Log\"],\"ZHQTlM\":[\"Importazione da\"],\"ZIFDoJ\":[\"Seleziona almeno Struttura o Dati\"],\"ZIZA6o\":[\"Modifica prima di approvare\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" avvisi di parsing\"],\"other\":[\"#\",\" avvisi di parsing\"]}]],\"ZVn8p2\":[\"Visualizza i numeri di riga nel margine dell'editor.\"],\"ZYnwzF\":[\"Disconnesso\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Crea Chiave Esterna\"],\"Zf7LHg\":[\"Nessun contesto trovato (kubectl è installato?)\"],\"Zfotp5\":[\"Scostamenti elevati tra stima e reale indicano spesso statistiche non aggiornate o predicati difficili da modellare.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Caricamento degli schemi fallito\"],\"ZqXGPF\":[\"Eliminazione vista fallita: \"],\"ZuL73E\":[\"Crea una nuova vista database\"],\"_-bi4r\":[\"Tabella Riferita\"],\"_AEYGI\":[\"Nessuna cronologia di esecuzione\"],\"_FdpZc\":[\"Impossibile caricare la definizione della vista: \"],\"_FxSdi\":[\"Consulta le dipendenze open source dirette usate dall'app, dal backend e dalla toolchain.\"],\"_JyTG8\":[\"Inserisci prompt di spiegazione...\"],\"_Ltc_k\":[\"Extra\"],\"_Q2Wix\":[\"righe\"],\"_TK1zF\":[\"Connessione salvata\"],\"_bJFBE\":[\"Timeout Connessione\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Albero\"],\"_dqduX\":[\"Pagina successiva\"],\"_fwE6J\":[\"Precedenti\"],\"_n04sB\":[\"Termina\"],\"_otxbQ\":[\"File chiave\"],\"_pezIT\":[\"Impossibile connettersi a \",[\"0\"],\". Verifica le impostazioni o assicurati che il database sia in esecuzione.\"],\"_srfkj\":[\"Chiave personalizzata eliminata con successo\"],\"_t6aFo\":[\"MySQL e MariaDB possono ripiegare su EXPLAIN FORMAT=JSON o sull'EXPLAIN tabellare in base alla versione del server.\"],\"_xTbaM\":[\"colonne\"],\"_yxaaL\":[\"Indice Unico\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis è un progetto gratuito e open-source. Se lo trovi utile, considera di supportare il progetto e unirti alla community.\"],\"a9CASo\":[\"SQLite supporta solo la rinomina delle colonne. Altre modifiche richiedono la ricreazione manuale della tabella.\"],\"aAIQg2\":[\"Aspetto\"],\"aAURrV\":[\"Installato\"],\"aC_vCa\":[\"Genera nome con AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Seleziona un nodo per i dettagli\"],\"aHKcKc\":[\"Pagina precedente\"],\"aI-5wG\":[\"Verifica CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"Valore Predefinito\"],\"aScJP1\":[\"Esegui questa query\"],\"aVNbN8\":[\"Condizioni filtro\"],\"aWhdMQ\":[\"Usa Connessione SSH Esistente\"],\"aXYd8V\":[\"Timeout\"],\"aX_S_r\":[\"Pagina \",[\"0\"],\" di \",[\"totalPages\"]],\"agZcf8\":[\"SQL Generato: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [campi]\"],\"alplHn\":[\"Analisi del piano di esecuzione con AI...\"],\"anBcU3\":[\"Se ti piace tabularis e vuoi vedere nuove funzionalità, considera di supportare il progetto contribuendo al codice, segnalando bug o mettendo una stella su GitHub.\"],\"arHmj2\":[\"Sei sicuro di voler eliminare questa query dalla cronologia?\"],\"arKcqW\":[\"I server meno recenti possono ripiegare su piani stimati con meno metriche.\"],\"arcpYe\":[\"Approvazione richiesta\"],\"aurEkh\":[\"Caricamento processi…\"],\"avtdsd\":[\"Modalità SQL\"],\"az8lvo\":[\"Disattiva\"],\"b1Ah3z\":[\"Focus su\"],\"b392Dr\":[\"Espandi Tutto\"],\"b5S_PU\":[\"Nome Database\"],\"bAvovP\":[\"Sposta Giù\"],\"bH3JqY\":[\"Nessuna tabella trovata\"],\"bP5JOn\":[\"A Capo Automatico\"],\"bcOdok\":[\"Delete Group\"],\"bcqeas\":[\"Rendi tutte le query MCP di sola lettura\"],\"bmca5u\":[\"Solo scritture\"],\"bpCiBU\":[\"Consenti scritture da MCP\"],\"bqnhqW\":[\"La stima supera le righe reali\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"Errore\"],\"bw22Gk\":[\"Schema Colonne\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Punti Critici\"],\"cFCKYZ\":[\"Nega\"],\"cFGrCP\":[\"tabella\"],\"cGeFup\":[\"Dimensione Font\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Focus su Tabella\"],\"cM9NHc\":[\"Effettua downgrade a\"],\"cO9-2L\":[\"Disabilitato\"],\"cSev-j\":[\"Filtri\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Importa \",\"#\",\" righe\"],\"other\":[\"Importa \",\"#\",\" righe\"]}]],\"c_xoSn\":[\"Rinominata cella \",[\"n\"]],\"cd0XEW\":[\"Salva Query\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Gruppo Diviso\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" istruzioni\"],\"d34vwG\":[\"Carica Database\"],\"d6ynQ7\":[\"Ordine decrescente\"],\"d8_6_v\":[\"annulla\"],\"d8wc1_\":[\"Valori campione\"],\"dBXoCS\":[\"È presente una variabile d'ambiente, ma puoi sovrascriverla impostando una chiave qui sopra.\"],\"dD7NPy\":[\"Sommario\"],\"dEgA5A\":[\"Annulla\"],\"dMtLDE\":[\"a\"],\"dPJVhW\":[\"Installazione Fallita\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" sessione\"],\"other\":[\"#\",\" sessioni\"]}]],\"dTUzKm\":[\"Esegui selezionate (\",[\"0\"],\")\"],\"dU_iQN\":[\"Nessuna sessione corrisponde ai filtri.\"],\"dUh9QW\":[\"Pianificazione\"],\"dVoir2\":[\"Aggiunta cella Markdown \",[\"n\"]],\"dZ0d2O\":[\"Seleziona almeno una tabella\"],\"dhi13U\":[\"Scegli immagine…\"],\"dli1JX\":[\"Invia Modifiche\"],\"dmYV6f\":[\"Routine\"],\"dohZCo\":[\"Istruzioni per la generazione SQL tramite AI. Usa \",[\"SCHEMA\"],\" come segnaposto per la struttura del database.\"],\"dtxpK2\":[\"Analizza\"],\"dwW9nJ\":[\"Mostra Numeri di Riga\"],\"dwWVw_\":[\"Mostra schermata di benvenuto\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"Se esiste\"],\"dyN4j9\":[\"Clicca 'Esegui Anteprima' per vedere i risultati\"],\"e07Iz5\":[\"Apri Gestione Attività\"],\"e0NzXu\":[\"Questo progetto è un Work In Progress (WIP). Le funzioni principali sono stabili, ma abbiamo grandi piani.\"],\"e1UKxf\":[\"Salva questa query\"],\"e34gdU\":[\"Quanti secondi il processo MCP attende la decisione dell'utente prima di abortire.\"],\"e62LQd\":[\"Termina Forzatamente\"],\"e6QZsM\":[\"Tema dell'Editor\"],\"e8CirT\":[\"Esegui query\"],\"eD2kUP\":[\"Buffer Letti\"],\"eE0JZ4\":[\"Versione\"],\"eIDch7\":[\"Inserisci prompt analisi piano di esecuzione...\"],\"eIVolo\":[\"Disco L/S\"],\"eJOEBy\":[\"Esportazione in corso...\"],\"eKHY3W\":[\"Impostazioni Plugin\"],\"eMb6Ub\":[\"Scegli una risorsa...\"],\"ePK91l\":[\"Modifica\"],\"eXweu6\":[\"Espandi Cella\"],\"ecNsTE\":[\"Nessuna query corrisponde alla ricerca\"],\"ecUA8p\":[\"Oggi\"],\"ecpIZP\":[\"Inserisci passphrase se la chiave è cifrata\"],\"ejmeDY\":[\"Installati\"],\"esl-Tv\":[\"Tipo di risorsa\"],\"exyUec\":[\"Connessione\"],\"f2AJjl\":[\"Elimina riga\"],\"f4pD-j\":[\"Test connessione fallito\"],\"f7sXvi\":[\"Inserisci password\"],\"fAsxc0\":[\"Scansioni Sequenziali\"],\"fIeFs0\":[\"Seleziona valore...\"],\"fJm92A\":[\"Seleziona un file contenente un piano EXPLAIN (formato JSON o testo PostgreSQL) per visualizzarlo.\"],\"fOuPPd\":[\"Plugin\"],\"fXVIZq\":[\"Valori\"],\"f_b1TA\":[\"Cronologia Esecuzioni\"],\"fghnqP\":[\"Passa alla connessione 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Virgola (,)\"],\"fp711N\":[\"Bloccata (sola lettura)\"],\"fpzyLj\":[\"Pagina \",[\"0\"],\" di \",[\"1\"]],\"fuA6oy\":[\"Timeout Socket\"],\"fvImQM\":[[\"0\"],\" selezionate\"],\"fwr_nh\":[\"Installa estensioni, gestisci i driver dei plugin e tieni sotto controllo le impostazioni di runtime.\"],\"g0ZzK4\":[\"JSON valido\"],\"g11hAR\":[\"Nuova riga\"],\"g8VcMm\":[\"Il mio cluster K8s\"],\"gCFR_O\":[\"Esecuzione Parallela (Esegui Tutto)\"],\"gEjU98\":[\"Apri connessioni\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"È richiesta almeno una colonna\"],\"gSuQrG\":[\"Nessuna connessione corrisponde a \\\"\",[\"search\"],\"\\\"\"],\"gUypqb\":[\"Riesegui query\"],\"gZWMnn\":[\"Analisi AI\"],\"ghYd73\":[\"Scegli destinazione...\"],\"giAqEC\":[\"Crea Nuova Tabella\"],\"gnQS8X\":[\"Dimensione massima del pacchetto usata dal connettore MySQL.\"],\"gqV5VL\":[\"Integrata, non personalizzabile\"],\"gww_XE\":[\"Colonna Riferita\"],\"gxXPJ9\":[\"Configura Interprete\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"Massimizza\"],\"h-XNc9\":[\"Delimitatore CSV\"],\"h-kNAk\":[\"es. dati_vendite\"],\"h3Z_aK\":[\"Scrivi Markdown qui...\"],\"h7MgpO\":[\"Scorciatoie da tastiera\"],\"h7peZQ\":[\"Permetti\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" processo di sistema in esecuzione\"],\"other\":[\"#\",\" processi di sistema in esecuzione\"]}]],\"hEZrFh\":[\"Esegui File SQL...\"],\"hEipgW\":[\"Controlla Aggiornamenti Ora\"],\"hG89Ed\":[\"Immagine\"],\"hIHcBE\":[\"Esporta come CSV\"],\"hItdtk\":[\"Sfoglia cartella\"],\"hXFVjo\":[\"Il nome della tabella è richiesto\"],\"hZ6znB\":[\"Porta\"],\"h_huI6\":[\"Riesegui\"],\"hbz1rh\":[\"chiavi\"],\"hdsaJo\":[\"Importazione...\"],\"he3ygx\":[\"Copia\"],\"hfGimp\":[\"Scegli un namespace...\"],\"hjjSEi\":[\"Connessioni di sola lettura\"],\"hjwN_s\":[\"Nome risorsa\"],\"hlF1mD\":[\"Copia selezione\"],\"hnboBb\":[\"Analisi AI del Piano di Esecuzione\"],\"hnvu2p\":[\"Dettagli Errore\"],\"hq4-D2\":[\"La chiave API è salvata in modo sicuro nel portachiavi. Impostare una chiave qui sovrascrive la variabile d'ambiente.\"],\"hqjXdn\":[\"Eliminazione connessione SSH fallita\"],\"hqofAK\":[\"Copia SQL\"],\"hy6L14\":[\"Visualizza su GitHub\"],\"hyjACX\":[\"Celle compresse/espanse\"],\"hz1b5W\":[\"Nessun elemento corrispondente trovato\"],\"i1vAVM\":[\"Crea nuova tabella\"],\"i3S5T3\":[\"Cerca nei preferiti...\"],\"i4_LY_\":[\"Scrittura\"],\"i5HBWh\":[\"Cronologia query azzerata\"],\"i5zCt4\":[\"Tabella\"],\"iAVlge\":[\"Personalizza le istruzioni per la generazione AI del nome cella nei notebook. Il contenuto della cella (SQL o Markdown) viene inviato come messaggio utente.\"],\"iE1yAB\":[\"Filtra tabelle...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Connetti\"],\"iSryJ2\":[\"Il Mio Server SSH\"],\"iT7UeX\":[\"Aggiungi Indice\"],\"iUWwuR\":[\"Scarica e Installa\"],\"ia7i08\":[\"Seleziona prima contesto/namespace/tipo\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Salvato\"],\"igcsfY\":[\"Nessun plugin disponibile nel registro.\"],\"ij-Elv\":[\"Anteprima immagine\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query analizzabili trovate\"],\"other\":[\"#\",\" query analizzabili trovate\"]}]],\"ioL38P\":[\"Monitora i processi dei plugin, CPU, RAM e utilizzo disco in tempo reale\"],\"ixlL_e\":[\"File Chiave SSH (Opzionale)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Seleziona un modello\"],\"j3gyYH\":[\"Applica tutti\"],\"j5CWO4\":[\"Aggiornato\"],\"j9HPuI\":[\"Riga #\",[\"0\"]],\"jBtpMP\":[\"Tutti gli stati\"],\"jEu4bB\":[\"Colonne\"],\"jEyQIs\":[\"Nessuna routine trovata\"],\"jHc1By\":[\"Elimina Vista\"],\"jI6sj4\":[\"Costo, tempi e stime di righe spesso non sono disponibili come in PostgreSQL e MySQL.\"],\"jIxQCZ\":[\"Non disponibile per la tua piattaforma\"],\"jKIncn\":[\"Il nome del database è richiesto\"],\"jPSk57\":[\"Motivo (opzionale)\"],\"jUNY_d\":[\"vista\"],\"jVqjDo\":[\"Formato file notebook non valido\"],\"jWSZ-A\":[\"Solo anteprima - dati completi non caricati\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Timeout del socket in millisecondi.\"],\"jpeU_Z\":[\"Notebook\"],\"jpgB4Y\":[\"Il nome della connessione è richiesto\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"processo figlio\"],\"jx0t66\":[\"Comprimi processi figli\"],\"k-0mL-\":[\"Aggiungi Colonna\"],\"k-XiMX\":[\"Grezzo\"],\"k2UnVy\":[\"Cond. Hash\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"secondi\"],\"kBiBq7\":[\"Eliminare l'indice \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Mostra/Nascondi Grafico\"],\"kI1qVD\":[\"Formatta\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" righe · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" righe · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"Dettagli evento\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Registro\"],\"kY-q3P\":[[\"label\"],\" è obbligatorio\"],\"kexIdC\":[\"Usa Port-Forward Kubernetes\"],\"krksx_\":[\"Successo\"],\"ktYUe9\":[\"Esegui tutte\"],\"kwY6nh\":[\"Chiudi\"],\"kx0s-n\":[\"Risultati\"],\"kxUEfE\":[\"Impossibile recuperare la definizione della routine: \"],\"l2Op2p\":[\"Parametri Query\"],\"l9Ivba\":[\"Processi dei plugin e risorse di sistema\"],\"lBdPxu\":[\"Colore di accento\"],\"lCF0wC\":[\"Aggiorna\"],\"lEQRwq\":[\"Dati (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"Nuova tabella creata\"],\"lOekZ3\":[\"Passa a Layout Orizzontale\"],\"lUA1C1\":[\"Passphrase Chiave SSH (Opzionale)\"],\"lVeG20\":[\"Dipendenze Rust\"],\"lXAG6D\":[\"Istruzioni per la spiegazione delle query tramite AI. Usa \",[\"LANGUAGE\"],\" come segnaposto per la lingua di output.\"],\"lbbYjy\":[\"Modifica direttamente il file di configurazione grezzo. È necessario un riavvio per applicare le modifiche.\"],\"lhKW0m\":[\"Aggiunta cella SQL \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"Dimensione Pagina Risultati (Limite)\"],\"lkz6PL\":[\"Durata\"],\"lmVGeo\":[\"Aggiungi Chiave Esterna\"],\"lnnx3E\":[\"Connetti Tabularis a Claude Desktop, Cursor e altri\"],\"lpGiOh\":[\"Check interval\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Aggiungi\"],\"m2Q_r8\":[\"Rileva JSON nelle colonne di testo\"],\"m2tskz\":[\"Successo\"],\"mA-qpe\":[\"Esecuzione Completata\"],\"mBhhbA\":[\"Log esportati negli appunti\"],\"mCNdzH\":[\"Esegui Cella\"],\"mO95sp\":[\"Chiudi pannello\"],\"mP7dLi\":[\"Inserisci il nome del font sopra\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" bloccato\"],\"other\":[\"#\",\" bloccati\"]}]],\"mS74ir\":[\"Salvataggio connessione SSH fallito\"],\"mSqtw8\":[\"Esegui Anteprima\"],\"mURmfQ\":[\"Definizione Vista (SQL)\"],\"mX_isJ\":[\"Verticale\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Struttura (DDL)\"],\"mrk4Cf\":[\"Ordina per \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Abbiamo una community Discord dedicata a Tabularis: ricevi aiuto, scambia consigli e influenza la roadmap.\"],\"mtvVdV\":[\"Righe processate\"],\"mx4evv\":[\"Crea Tabella\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"Scarica\"],\"n7JDTx\":[\"Installa e abilita i plugin per vederli qui\"],\"nDDJir\":[\"Cerca sessione, client, connessione…\"],\"nHP-Kr\":[\"Nessuna sessione attiva. Seleziona una connessione.\"],\"nKhCjW\":[\"Seleziona Tabelle\"],\"nNwvm4\":[\"Errore\"],\"nOVim5\":[\"Salvataggio connessione fallito\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"Eventi\"],\"nf14vn\":[\"Richiede estensione: \",[\"0\"]],\"ngO6Pv\":[\"Permetti al tasto Invio (oltre a Tab) di accettare il suggerimento di autocompletamento attivo. Quando disattivato, Invio inserisce sempre una nuova riga.\"],\"nhmF3p\":[\"connections\"],\"noM5A_\":[\"Crea la tua prima connessione\"],\"nohy4m\":[\"Nessuna attività MCP registrata.\"],\"nr-axf\":[\"Rimuovi Plugin\"],\"nsPFX9\":[\"Apri in Visual Explain\"],\"nuBbBr\":[\"Grafico\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Esporta Database\"],\"o-XJ9D\":[\"Cambia\"],\"o21Y-P\":[\"voci\"],\"o3tP_A\":[\"Elimina indice\"],\"o45L8r\":[\"Inserisci il nome della connessione\"],\"o53XGh\":[\"Copia riga/righe selezionate\"],\"o7J4JM\":[\"Filtro\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Livello\"],\"oGiIL7\":[\"Provider Predefinito\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connessione Persa\"],\"oJlXF2\":[\"Importa Notebook\"],\"oMFv82\":[\"Dividi Verticale\"],\"oOFiQg\":[\"Limita il numero di righe caricate per query per prevenire problemi di performance. Imposta a 0 per disabilitare (non consigliato).\"],\"oT9ZD3\":[\"Nascondi panoramica\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Grafico cambiato (cella \",[\"n\"],\")\"],\"oWfclW\":[\"Mostra il visualizzatore JSON quando una cella di testo non tipizzata contiene un oggetto o un array JSON. Aggiunge un piccolo costo di analisi per cella.\"],\"obpbdz\":[\"File config non trovato (crealo manualmente)\"],\"odZgfC\":[\"CLIENT AI\"],\"ogZhXn\":[\"Scegli la direzione di default per i diagrammi ER\"],\"ohUJJM\":[\"Plugin\"],\"olAdaI\":[\"Righe Reali\"],\"olWzar\":[\"Termina Forzatamente il Processo\"],\"ovBPCi\":[\"Predefinito\"],\"owzTWN\":[\"Modelli AI aggiornati dai provider\"],\"oxYi6j\":[\"Regola la dimensione base del font usata nell'applicazione (10-20px).\"],\"p--hsQ\":[\"Una connessione al database è stata persa\"],\"p6NueD\":[\"NUOVA\"],\"pOYHox\":[\"Azioni\"],\"pR9bTR\":[\"Nessun dato BLOB\"],\"pS8S5q\":[\"es. utenti, ordini, prodotti\"],\"pSws_M\":[\"Nome Tabella\"],\"pVLbKZ\":[\"Vista creata con successo\"],\"pWT04I\":[\"Controllo...\"],\"pZJ_6D\":[\"Il nome dell'indice è richiesto\"],\"pddYFG\":[\"Inserisci prompt nome cella...\"],\"pm9Yb5\":[\"Translation updates\"],\"pnpyuD\":[\"Abilita Logging\"],\"pqKMPv\":[\"Creazione tabella fallita: \"],\"pqaP1h\":[\"Chiudi\"],\"pqarBu\":[\"Cresc.\"],\"ptuq35\":[\"es. Comic Sans MS\"],\"pzu7v4\":[\"Orizzontale\"],\"q-ch8m\":[\"Tutte le altre connessioni restano in sola lettura. Solo quelle selezionate possono eseguire scritture.\"],\"qA5jLs\":[\"Dettagli errore\"],\"qIrtcK\":[\"Aggiornamenti\"],\"qOqy8G\":[\"Verifica configurazione...\"],\"qWaVNs\":[\"Salva e Riavvia\"],\"qb3LPX\":[\"Visualizza Diagramma ER\"],\"qkK0vq\":[\"Il nome della vista è richiesto\"],\"qki9tG\":[\"Errore\"],\"qoIir-\":[\"L'URL base della tua API compatibile OpenAI. Esempi: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Comprimi tutto\"],\"r6ncaO\":[\"Chiudi tab\"],\"rAJlpP\":[\"Porta container\"],\"rG3WVm\":[\"Lettura\"],\"rGRCeK\":[\"Cancella Cronologia Query\"],\"rNIto7\":[\"Il nome della risorsa è obbligatorio\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Notebook esportato con successo\"],\"rY4sEV\":[\"Elimina FK\"],\"rbu0nO\":[\"Gestisci Connessioni SSH\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" connessione/i\"],\"other\":[\"#\",\" connessione/i\"]}]],\"rn2_2V\":[\"Rimuovi filtro\"],\"roABNH\":[\"Nessuna cronologia query\"],\"rtir7c\":[\"sconosciuto\"],\"ru0-2W\":[\"Nessuna connessione attiva\"],\"rvDPWO\":[\"Scostamento Stima\"],\"rwWjWg\":[\"Note di Rilascio\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Testa Connessione\"],\"sBOaim\":[\"Il file di configurazione è stato salvato. Riavviare ora per applicare le modifiche?\"],\"sCyv9B\":[\"Aggiorna Modelli\"],\"sSUqe4\":[\"Elimina\"],\"sUBkgN\":[\"Generazione SQL in corso...\"],\"sZZG3d\":[\"Sei sicuro di voler importare \\\"\",[\"0\"],\"\\\"?\\nQuesto potrebbe sovrascrivere i dati esistenti.\"],\"sbK5ck\":[\"Cerca nella cronologia...\"],\"sq_bS6\":[\"Al Delete\"],\"suW7-E\":[\"Timeout di connessione in millisecondi.\"],\"suqtBX\":[\"Esc per chiudere\"],\"t-R8-P\":[\"Esecuzione\"],\"t1OfVY\":[[\"totalLibraries\"],\" librerie\"],\"t2TMzs\":[\"Chiudi scheda\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Seleziona una tabella...\"],\"t7KRl1\":[\"Log di ogni chiamata MCP e delle query in attesa di approvazione. Tutto è salvato localmente.\"],\"t9NJIk\":[\"Rilevate operazioni con scansione pesante\"],\"tB7xof\":[\"Operazioni Temp o Sort\"],\"tBBXTO\":[\"Intervallo di Ping\"],\"tFrT3w\":[\"Aggiungi questo al file di configurazione del client manualmente se l'installazione automatica fallisce.\"],\"tJ7UbA\":[\"analizza selezionata\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Dividi Orizzontale\"],\"tQhW-D\":[\"Impostazioni Log\"],\"tT-BQX\":[\"Installati\"],\"tXFGEx\":[\"Nessuna connessione Kubernetes salvata. Clicca \\\"Aggiungi\\\" per crearne una.\"],\"tXLz_8\":[\"Elimina\"],\"tXpRby\":[\"Griglia dati\"],\"tbysEk\":[\"Azioni\"],\"tdta9X\":[\"Pagina \",[\"0\"]],\"tfDRzk\":[\"Salva\"],\"tfEioV\":[\"Esegui tutte le celle SQL dall'alto in basso\"],\"tiAIaJ\":[\"Password SSH mancante. Per favore reinseriscila.\"],\"tk22BR\":[\"Incolla dati strutturati e rivedi lo schema prima dell'importazione\"],\"tst44n\":[\"Eventi\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"File SQL eseguito con successo\"],\"u6QeR6\":[\"Riavvia Ora\"],\"uAQUqI\":[\"Stato\"],\"uBAxNB\":[\"Editor\"],\"uBI8D9\":[\"Esc per chiudere\"],\"uFViPK\":[\"Nessuna connessione SSH disponibile\"],\"uHUuhp\":[\"Analizza questa query\"],\"uHfFzS\":[\"Dimensione Font dell'Editor\"],\"uJ_3K5\":[\"Eliminare il notebook \\\"\",[\"0\"],\"\\\"? L'operazione non è reversibile.\"],\"uKaNJ3\":[\"Apri nell'editor JSON\"],\"uQBwTo\":[\"Schemi\"],\"ub54ff\":[\"Centro Plugin\"],\"ufFyBs\":[\"Database esportato con successo\"],\"upNmR2\":[\"Apri Barra Laterale\"],\"upwIY4\":[\"Definizione Vista\"],\"utMia3\":[\"Deseleziona Tutto\"],\"uyNaJg\":[\"1 elemento\"],\"v61dnS\":[\"Inserisci il nome esatto del modello per il tuo provider compatibile OpenAI.\"],\"v6oeyr\":[\"Installato\"],\"v75DGg\":[\"Sfoglia file\"],\"v99dO4\":[\"Chiave Primaria\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" query trovate\"],\"other\":[\"#\",\" query trovate\"]}]],\"vCSBPD\":[\"Aggiungi filtro\"],\"vH7uJj\":[\"Ordina per…\"],\"vUOA1-\":[\"Cerca modelli...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE include righe reali, tempi, cicli e contatori buffer quando disponibili.\"],\"vXIe7J\":[\"Lingua\"],\"vYf4Jm\":[\"Inserisci una funzione SQL completa (es: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Preferito\"],\"vditm4\":[\"Piano Query\"],\"vks_ls\":[\"Chiudi altre schede\"],\"vnAnIp\":[\"Modello \",[\"0\"],\" non trovato in \",[\"1\"],\". Potrebbe non funzionare correttamente.\"],\"vqoN5u\":[\"Struttura\"],\"vrAvbP\":[\"Are you sure you want to delete group \\\"\",[\"0\"],\"\\\"? Connections in this group will be moved to ungrouped.\"],\"vtJ2yO\":[\"Esplora\"],\"vujQJ5\":[\"Localizzazione\"],\"vvJPVL\":[\"Mostra panoramica\"],\"vwI5S4\":[\"Successo\"],\"vzH-7Z\":[\"Spiega\"],\"w7QmD_\":[\"Inserisci prompt di sistema...\"],\"w9eMXw\":[\"trigger\"],\"wCJFlW\":[\"Tempo trascorso\"],\"wCfv2R\":[\"Aggiungi Connessione\"],\"wGfc86\":[\"Cancella Tutta la Cronologia\"],\"wGwNv4\":[\"Database attivo\"],\"wJJ-Wy\":[\"Installazione in corso...\"],\"wMe2Qp\":[\"Namespace\"],\"wQiel_\":[\"Buffer Hit\"],\"wQn-RM\":[\"Aggiungi Colonna\"],\"wRXcR2\":[\"In uso l'icona predefinita del driver.\"],\"wTOwz-\":[\"Applicato\"],\"wTmVhm\":[\"Delete\"],\"wXx7W4\":[\"How often to check for new translations.\"],\"wZeIWq\":[\"Importa dagli Appunti\"],\"w_bY7R\":[\"Log\"],\"wc_8bA\":[\"In attesa\"],\"wckWOP\":[\"Gestisci\"],\"wdYcKH\":[\"Tab Aperte\"],\"wja8aL\":[\"Senza nome\"],\"wkOAzk\":[\"Nessun notebook corrisponde alla ricerca.\"],\"wp49Ao\":[\"Impossibile processare gli inserimenti: \"],\"wqG2hQ\":[\"Salta (non importare)\"],\"wwrAsK\":[\"Per favore compila tutti i campi obbligatori\"],\"wwu18a\":[\"Icona\"],\"x2fr_j\":[\"Grafo\"],\"xANKBj\":[\"Funzioni\"],\"xBwjck\":[\"È necessario un riavvio per applicare le modifiche.\"],\"xDAtGP\":[\"Messaggio\"],\"xECY01\":[\"Procedure\"],\"xGPNgZ\":[\"Personalizzazione Prompt\"],\"xNgtS-\":[\"Nessuna vista trovata\"],\"xOPa1b\":[\"La porta deve essere compresa tra 1 e 65535\"],\"xY9s5E\":[\"Timeout\"],\"xaVUr1\":[\"La volpe marrone salta sopra il cane pigro\"],\"xbvTzL\":[\"Percorso File\"],\"xlew5F\":[\"Svuota\"],\"xmNyKz\":[\"Test in corso...\"],\"xtuh6D\":[\"Espandi Explorer\"],\"y-Zdqj\":[\"Scegli un contesto...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"Apri visualizzatore JSON\"],\"yQXjG5\":[\"Deseleziona Tutti\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"Ieri\"],\"ygCKqB\":[\"Stop\"],\"ykCc6r\":[\"Database cambiato (cella \",[\"n\"],\")\"],\"ynVMSc\":[\"Seleziona tutte\"],\"ytdz1d\":[\"L'AI vuole eseguire una scrittura sul database\"],\"yyhzur\":[\"Crea tabella\"],\"yz7wBu\":[\"Chiudi\"],\"z0VdfR\":[\"routine\"],\"z407wX\":[\"Password SSH\"],\"z4oF5T\":[\"Esporta Database\"],\"z5kV0h\":[\"Connessioni\"],\"zBTMzx\":[\"Anteprima\"],\"zCaAKs\":[\"Errore Aggiornamento\"],\"zDAakK\":[\"Impossibile visualizzare il diagramma senza un ID connessione.\"],\"zGe21h\":[\"Questa chiave è caricata da una variabile d'ambiente\"],\"zGfL5t\":[\"valore\"],\"zL6-4A\":[\"Nessun processo plugin in esecuzione\"],\"zLZhCi\":[\"Nuova community Discord!\"],\"zLlCou\":[\"Copia nome colonna\"],\"zNEL34\":[\"Unisciti alla Community\"],\"zNgTlV\":[\"Chiudi schede a destra\"],\"zQz55p\":[\"Ispeziona struttura\"],\"zR0FfH\":[\"Esportato in \",[\"target\"]],\"zRZeOc\":[\"Cerca tabelle, viste, routine, trigger...\"],\"zUNMsr\":[\"Chiave SSH\"],\"zXMRzb\":[\"Porta SSH\"],\"zZgoXr\":[\"Nessuna tabella trovata\"],\"zaWbms\":[\"Annulla Modifiche\"],\"zgClmU\":[\"Installa Config\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"Inserisci valore...\"],\"zvzN4C\":[\"Imposta come attiva\"],\"zzDlyQ\":[\"Successo\"],\"zzMxrp\":[\"Modifica config.json\"],\"zz_Wd_\":[\"Modalità\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/ja/messages.po b/src/locales/ja/messages.po index a411c736..654c32c6 100644 --- a/src/locales/ja/messages.po +++ b/src/locales/ja/messages.po @@ -500,12 +500,10 @@ msgstr "この接続のクエリ履歴をすべて削除してもよろしいで #. placeholder {0}: column.name #: src/components/layout/sidebar/SidebarColumnItem.tsx -msgid "" -"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +msgid "Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" "\n" "WARNING: This will permanently delete all data in this column. This action cannot be undone." -msgstr "" -"テーブル「{tableName}」のカラム「{0}」を削除してもよろしいですか?\n" +msgstr "テーブル「{tableName}」のカラム「{0}」を削除してもよろしいですか?\n" "\n" "警告: このカラムのすべてのデータが完全に削除されます。この操作は取り消せません。" @@ -548,11 +546,9 @@ msgstr "ビュー「{0}」を削除してもよろしいですか?" #. placeholder {0}: file.split(/[\\/]/).pop() #: src/components/layout/ExplorerSidebar.tsx -msgid "" -"Are you sure you want to import \"{0}\"?\n" +msgid "Are you sure you want to import \"{0}\"?\n" "This may overwrite existing data." -msgstr "" -"「{0}」をインポートしてもよろしいですか?\n" +msgstr "「{0}」をインポートしてもよろしいですか?\n" "既存のデータが上書きされる可能性があります。" #: src/components/modals/ViewEditorModal.tsx @@ -601,6 +597,10 @@ msgstr "自動インクリメント" msgid "Auto paginated" msgstr "自動ページング" +#: src/components/settings/LocalizationTab.tsx +msgid "Automatic updates" +msgstr "" + #: src/components/settings/InfoTab.tsx msgid "Automatically check for new versions when the app launches" msgstr "アプリ起動時に自動で新しいバージョンを確認します" @@ -746,6 +746,10 @@ msgstr "今すぐアップデートを確認" msgid "Check for updates on startup" msgstr "起動時にアップデートを確認" +#: src/components/settings/LocalizationTab.tsx +msgid "Check interval" +msgstr "" + #: src/components/modals/McpModal.tsx #: src/pages/McpPage.tsx msgid "Checking configuration..." @@ -2297,6 +2301,10 @@ msgstr "失敗: " msgid "Favorites" msgstr "お気に入り" +#: src/components/settings/LocalizationTab.tsx +msgid "Fetch the latest translations from the cloud without waiting for an app update." +msgstr "" + #: src/components/modals/NewConnectionModal.tsx msgid "File Path" msgstr "ファイルパス" @@ -2520,6 +2528,10 @@ msgstr "MCP サブプロセスがリクエストをタイムアウトさせる msgid "How many logs to keep in memory (1-10000)" msgstr "メモリに保持するログの件数 (1〜10000)" +#: src/components/settings/LocalizationTab.tsx +msgid "How often to check for new translations." +msgstr "" + #: src/components/settings/GeneralTab.tsx msgid "How often to check if active connections are still alive. Set to 0 to disable." msgstr "アクティブな接続の生存確認を行う間隔です。0 にすると無効になります。" @@ -2971,6 +2983,10 @@ msgstr "メッセージ" msgid "Minimize" msgstr "最小化" +#: src/components/settings/LocalizationTab.tsx +msgid "minutes" +msgstr "" + #: src/components/modals/ClipboardImport/SchemaEditor.tsx msgid "Mixed types detected, defaulted to TEXT" msgstr "混在タイプを検出、TEXT にデフォルト設定" @@ -5022,6 +5038,10 @@ msgstr "主な問題" msgid "Total Cost" msgstr "総コスト" +#: src/components/settings/LocalizationTab.tsx +msgid "Translation updates" +msgstr "" + #: src/components/ui/JsonInput.tsx msgid "Tree" msgstr "" diff --git a/src/locales/ja/messages.ts b/src/locales/ja/messages.ts index 05a9cced..07aef233 100644 --- a/src/locales/ja/messages.ts +++ b/src/locales/ja/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"最大履歴件数\"],\"-6AWa-\":[\"接続をインポート\"],\"-6NyRG\":[\"クライアント\"],\"-K0AvT\":[\"切断\"],\"-PLZfh\":[\"モデルの更新に失敗しました\"],\"-T5W2e\":[\"ドライバ補足\"],\"-ZgeeE\":[\"編集履歴\"],\"-aYrdc\":[\"バージョン \",[\"0\"],\" が利用可能です\"],\"-fBGXl\":[\"最高コスト\"],\"-jIQDz\":[\"セルを折りたたむ\"],\"-u1eRo\":[\"データベースなし\"],\"-yoeVU\":[\"スキーマを読み込み中...\"],\"-zy2Nq\":[\"タイプ\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"承認 ID\"],\"0E5-gF\":[\"この接続を削除してもよろしいですか?\"],\"0HCubq\":[\"展開\"],\"0Kmdvy\":[\"カスタムフォント\"],\"0Nj13E\":[\"SQL を生成\"],\"0ROgz5\":[\"JSON を入力...\"],\"0SY9sU\":[\"データベースからの切断に失敗しました\"],\"0b3kL9\":[\"データベースを選択\"],\"0caMy7\":[\"履歴\"],\"0mx5ow\":[\"クエリ\"],\"0n9BtL\":[\"プレビュー\"],\"0pHB9N\":[\"table.column 形式でコピー\"],\"0sQzZK\":[\"データベースをフィルター...\"],\"0uPP9X\":[\"FK 名 (任意)\"],\"0wxuek\":[\"現在のバージョン\"],\"0x09Aw\":[\"エラー時に停止を切り替え\"],\"0yBP6v\":[\"開発をサポート\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"0yVAoD\":[\"行数をカウント\"],\"0zxJ87\":[\"ログがありません\"],\"1-ETbn\":[\"ビジュアル Explain\"],\"1133_z\":[\"ビューを編集\"],\"11fGJ6\":[\"クエリ\"],\"13hIUA\":[[\"0\"],\" API キー\"],\"14qNWF\":[\"SSH 接続を選択\"],\"17qHRP\":[\"新規接続\"],\"1Dn6bg\":[\"クリップボードからインポート\"],\"1Dnd0I\":[\"行数を読み込む\"],\"1FjTLW\":[\"例: python3\"],\"1GOvbo\":[\"Ollama に接続しました (\",[\"0\"],\" 個のモデルを検出)\"],\"1I6UoR\":[\"ビュー\"],\"1U7hS5\":[\"長さ\"],\"1UTmg5\":[\"最大許容パケットサイズ\"],\"1b7aSU\":[\"エディタのフォントファミリー\"],\"1ekzlY\":[\"プラグインプロセス\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"テーマ選択\"],\"1xVZkL\":[\"モデルが見つかりません\"],\"26Joci\":[[\"0\"],\" 行を取得しました\"],\"2Bf-Qe\":[\"新規コンソール\"],\"2CrSmP\":[\"Tabularis の成長をサポート\"],\"2D9F8_\":[\"接続の複製に失敗しました\"],\"2Eoi_a\":[\"詳細を表示\"],\"2F4pE5\":[\"Rust ビルド・テスト\"],\"2Fsd9r\":[\"今月\"],\"2JzKXI\":[\"GENERATED に設定\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"すべて選択\"],\"2SO5RM\":[\"このドライバーでは Kubernetes を使用できません。\"],\"2Uh5GA\":[\"Cargo エコシステム\"],\"2YylFp\":[\"新規ビジュアルクエリ\"],\"2luuSG\":[\"再試行\"],\"2wxgft\":[\"名前を変更\"],\"2yG2GC\":[\"書き込み(またはすべてのクエリ)を一時停止し、データベースに到達する前に Tabularis 内でユーザーに承認を求めます。\"],\"30-b5r\":[\"削除\"],\"31kwdN\":[\"フィルターを複製\"],\"34nxyb\":[\"トリガー\"],\"35148H\":[\"すべてのツール\"],\"3Am5DS\":[\"タブ表示\"],\"3FVg9_\":[\"ローカルカラム\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"実行\"],\"3L0HCz\":[\"検索に一致するプラグインがありません。\"],\"3Nv3JV\":[\"クエリを実行中...\"],\"3TSz9S\":[\"最小化\"],\"3UW8fG\":[\"アップデートは \",[\"0\"],\" によって管理されています\"],\"3YvS-c\":[\"新規タブ\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"ノートブックセル名プロンプト\"],\"3qkggm\":[\"フルスクリーン\"],\"3rBJ1T\":[\"スキーマを表示\"],\"3xZ-xV\":[\"現在のタイムスタンプを挿入\"],\"40Gx0U\":[\"タイムゾーン\"],\"41GP4f\":[\"行を CSV としてコピーまたはエクスポートする際のデフォルト区切り文字を選択します。\"],\"42iaEi\":[\"ANALYZE なしの PostgreSQL はプランナーの推定のみを表示します。\"],\"44cXI8\":[[\"colName\"],\" を昇順で並べ替え\"],\"4AF7FO\":[\"データベースを管理\"],\"4CK17g\":[\"ビュー「\",[\"name\"],\"」を変更してもよろしいですか?\"],\"4DDaw-\":[\"少なくとも 1 つのデータベースを選択してください\"],\"4D_Nvt\":[\"グループの作成に失敗しました\"],\"4RiR6c\":[\"HTML としてエクスポート\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 個の子プロセス\"],\"other\":[\"#\",\" 個の子プロセス\"]}]],\"4VyuY3\":[\"すべてのログを消去してもよろしいですか?\"],\"4WWqS3\":[\"Toggle inline JSON tree\"],\"4XAQdl\":[\"インデックスを作成\"],\"4cEClj\":[\"セッション\"],\"4cmfYp\":[\"行を複製\"],\"4hsr6d\":[\"ビューを作成\"],\"4lIZTB\":[\"フロントエンド開発依存\"],\"4oYjvJ\":[\"クエリを検索…\"],\"4tMxW4\":[\"関連レコードをプレビュー\"],\"4yJcjm\":[\"タイプを選択...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"フィルターパネルを閉じる (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"セミコロン (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のイベント\"],\"other\":[\"#\",\" 件のイベント\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"リスト表示\"],\"5To6Z6\":[\"クエリをコピー\"],\"5gqNQl\":[\"グリッド表示\"],\"5igIzr\":[\"インポートをキャンセルしました\"],\"5nTIup\":[\"ビューを編集中: \",[\"name\"]],\"5qIe8E\":[\"すべて実行\"],\"66bEht\":[\"プロジェクトの状態\"],\"6PIJVc\":[\"起動\"],\"6QvP0l\":[\"JSON としてエクスポート\"],\"6W41Xq\":[\"タスクマネージャ\"],\"6WngBH\":[\"NULL に設定\"],\"6YtxFj\":[\"名前\"],\"6_dCYd\":[\"概要\"],\"6dOBsk\":[\"ビューを作成\"],\"6gvoHP\":[\"エラーメッセージをコピー\"],\"6oCVzX\":[\"Kubernetes コンテキストは必須です\"],\"6wQO0f\":[\"データを表示\"],\"6z9W13\":[\"再起動\"],\"71agNy\":[\"AI で未命名セルの名前を生成\"],\"74J3FG\":[\"初期バージョン\"],\"75BWdo\":[\"トリガー定義の読み込みに失敗しました: \"],\"76d3Uz\":[\"イベント\"],\"76gPWk\":[\"了解\"],\"77nSMU\":[\"AI アクティビティ履歴をすべて削除しますか?この操作は元に戻せません。\"],\"7ABmyQ\":[\"再試行\"],\"7Ap0JP\":[[\"0\"],\" 件中 \",[\"activeFilterCount\"],\" 件が有効\"],\"7E864M\":[\"データベースの種類\"],\"7FqaG1\":[\"AI による EXPLAIN クエリ計画分析の指示をカスタマイズします。\",[\"LANGUAGE\"],\" を出力言語に使用します。\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"混在タイプを検出、TEXT にデフォルト設定\"],\"7RSQQd\":[\"パスワードをキーチェーンに保存\"],\"7VpPHA\":[\"確定\"],\"7e7bPs\":[\"トリガー本体 (SQL)\"],\"7eRaA9\":[\"トリガーを削除\"],\"7l15X4\":[\"失敗\"],\"7sMeHQ\":[\"キー\"],\"7sNhEz\":[\"ユーザー名\"],\"7tATh2\":[\"クエリを実行\"],\"7yb4gk\":[\"失敗: \"],\"8-4V8D\":[\"テーブル\"],\"82G-l5\":[\"Model Context Protocol (MCP) を使うと、AI アシスタント (Claude など) がローカルツールに接続できます。Tabularis は MCP サーバーを公開しており、AI がデータベーススキーマを読み取り、クエリを安全に実行できるようにします。\"],\"83VjWE\":[\"新規ノートブック\"],\"86IgoU\":[\"クエリを実行 (エディタ内)\"],\"86fCgf\":[\"AI によるクエリ結果タブ名生成の指示をカスタマイズします。SQL クエリがユーザーメッセージとして送信されます。\"],\"87a_t_\":[\"ラベル\"],\"87kWsr\":[\"接続をエクスポート\"],\"8CWirf\":[\"MCP サーバー\"],\"8S8aIX\":[\"接続ヘルスチェック\"],\"8TMaZI\":[\"タイムスタンプ\"],\"8Tg_JR\":[\"カスタム\"],\"8UFKYr\":[\"実行するクエリを選択\"],\"8VKSGV\":[\"SQL を生成\"],\"8Wjy6z\":[\"左側のタブを閉じる\"],\"8ZsakT\":[\"パスワード\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL エディタ\"],\"8bRgTe\":[\"AI プロバイダが未設定です。設定 > AI に移動してください。\"],\"8c_W0h\":[\"以前のバージョン\"],\"8guEQP\":[\"ビューを更新\"],\"8lm5qE\":[\"SQLite の EXPLAIN QUERY PLAN は軽量で、主に構造情報のみを提供します。\"],\"8q_sOc\":[\"削除\"],\"8t-akp\":[\"先頭 \",[\"MAX_PREVIEW_ROWS\"],\" 行を表示中\"],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"接続名\"],\"91gnWY\":[\"ログをエクスポート\"],\"91rtHL\":[\"ビューを新規作成\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"新規グループ\"],\"9DOfTQ\":[\"トリガーを編集中: \",[\"name\"]],\"9JdjEN\":[\"ビューを正常に更新しました\"],\"9NzDFn\":[\"アプリ起動時にウェルカム画面を表示します。\"],\"9OoUS3\":[\"新しい SSH 接続を作成\"],\"9QGRD5\":[\"対象カラム\"],\"9QTny9\":[\"クエリが失敗しました。\"],\"9S-fyV\":[\"プリフライト実行計画\"],\"9SJ_Sx\":[\"システムリソース\"],\"9UQ730\":[\"複製\"],\"9X6cky\":[\"いいえ\"],\"9XUV5V\":[\"クリップボードにデータが見つかりません\"],\"9hGjL2\":[\"インデックスを作成\"],\"9mMU1R\":[\"時間\"],\"9mvFo_\":[\"時刻\"],\"9npOH9\":[\"ファイルを開く\"],\"9uI_rE\":[\"元に戻す\"],\"9xUjzm\":[\"すべて選択\"],\"9y_02p\":[\"コミュニティとの交流、サポート、機能提案\"],\"A1pPcI\":[\"SSH ホスト\"],\"A1taO8\":[\"Search\"],\"A6C0pv\":[\"総コスト\"],\"A7WG0p\":[\"プラグインが無効\"],\"A7yRz3\":[\"ビュー定義は必須です\"],\"A9Uyp6\":[\"インポートに失敗しました: \"],\"ABEd-z\":[\"Tabularis のアップデートにはパッケージマネージャを使用してください。\"],\"AMdgKV\":[\"実行計画分析プロンプト\"],\"ANSTMe\":[\"現在のプランサマリに大きな問題は検出されませんでした。\"],\"ANzIr7\":[\"クエリ履歴\"],\"AOnaU7\":[\"スキップ\"],\"AVlZoM\":[\"環境変数\"],\"AXTVsE\":[\"完全検証\"],\"AXdRYR\":[\"現在のログ\"],\"Aa-YkQ\":[\"ノートブックをエクスポート\"],\"Ai2U7L\":[\"ホスト\"],\"AidayG\":[\"レベルでフィルター\"],\"AlPiMN\":[\"クリックでページ移動\"],\"An-1rA\":[\"取得行数\"],\"AnV8j-\":[\"カラムを変更\"],\"AvEr_L\":[\"新規コンソール\"],\"AvYbUL\":[\"GitHub でスター\"],\"Aw_eOs\":[\"Tabularis ≥ \",[\"minVersion\"],\" が必要です\"],\"AxPAXW\":[\"結果が見つかりません\"],\"B0mJGb\":[\"生出力\"],\"B1c58n\":[\"カラムを変更\"],\"B3toQF\":[\"オブジェクト\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"接続名は必須です\"],\"BAVvWJ\":[\"ER 図\"],\"BBtVak\":[\"すべて折りたたむ\"],\"BEVzjL\":[\"インポートに失敗しました\"],\"BHATjK\":[\"接続をエクスポート\"],\"BJe2lZ\":[\"サイドバーを切り替え\"],\"BK3WCj\":[\"レジストリの読み込みに失敗しました\"],\"BKbO3i\":[\"ノートブックを編集\"],\"BMB51y\":[\"コンソールで実行\"],\"BNW_Z4\":[\"例: active_users, order_summary\"],\"BPkXj7\":[\"外部キーを作成\"],\"BUO_JN\":[\"クエリをコピー\"],\"BYkhHY\":[\"起動時にアップデートを確認\"],\"BeSg6-\":[\"デバッグ用にアプリケーションログをメモリに収集します\"],\"BgAyQH\":[\"並べ替えを解除\"],\"BinTJI\":[\"npm エコシステム\"],\"BkFson\":[\"自動ページング\"],\"Bpglf1\":[\"上に移動\"],\"BrGo6h\":[\"ノートブックを検索\"],\"BxiAN_\":[\"クエリを削除\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"フロントエンド依存\"],\"CE-M2e\":[\"情報\"],\"CHIyL8\":[\"フィルターなし —\"],\"CJnUoU\":[\"トリガーを更新\"],\"CLWWRV\":[\"ダウンロード中...\"],\"CUxwxn\":[\"すべてのテーブルを表示\"],\"CWMXbw\":[\"のプロセスを強制的に停止します。このプラグインを使用しているアクティブなデータベース接続は、プラグインが再起動されるまで動作しなくなります。\"],\"CZt6BX\":[\"手動設定\"],\"Ca8ixZ\":[\"削除\"],\"CbJBQS\":[\"更新に失敗しました: \"],\"Cdz-YU\":[\"スタック表示\"],\"CpeQf9\":[\"ループ\"],\"D2wXBw\":[\"自動インクリメント\"],\"D6Ql0c\":[\"生成と説明に使用するモデルを選択します。\"],\"DB8zMK\":[\"適用\"],\"DDXf5E\":[\"SQL 関数\"],\"DEwnwi\":[\"削除\"],\"DNTvdl\":[\"エディタで開く\"],\"DPc2P9\":[\"セルを削除\"],\"DUY8Ba\":[\"破壊的変更\"],\"DVnBSM\":[\"行の高さ\"],\"Dd7YLj\":[\"あとで\"],\"Deej3j\":[\"無効な JSON\"],\"DfKhk_\":[\"更新\"],\"DiRiTz\":[\"パッケージページを開く\"],\"DlRHAD\":[\"EXPLAIN を実行中...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のエラー\"],\"other\":[\"#\",\" 件のエラー\"]}]],\"Dvdihe\":[[\"0\"],\" 上 — 実行前に確認して判断してください。\"],\"DzFLzw\":[\"はい\"],\"E-JUtQ\":[\"承認ゲート\"],\"E0kcnZ\":[\"一般\"],\"E2mje_\":[\"説明するクエリを選択\"],\"EDieyg\":[\"この SSH 接続を削除してもよろしいですか?\"],\"EHZxPj\":[\"Expand\"],\"EL4oDO\":[\"新しいバージョンが利用可能\"],\"EPi4gT\":[[\"field\"],\" で並び替え\"],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"未分類\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"不明\"],\"EhADgB\":[\"カラムを削除\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"最新の状態です\"],\"Em6JFd\":[\"行数をカウント\"],\"EnGiqG\":[[\"0\"],\"件\"],\"Ew1n5z\":[\"プラグインを検索…\"],\"F18WP3\":[\"パラメータ\"],\"F3uc1x\":[\"エクスポートされたファイルには、データベースおよび SSH のパスワードが平文で含まれます。安全な場所に保管してください。\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"F6pfE9\":[\"アクティブ\"],\"F8tXg7\":[\"データプレビュー\"],\"F9-6yK\":[\"デフォルトのコピー形式\"],\"F9lxfG\":[\"削除\"],\"F9nsa2\":[\"履歴ファイルが破損していたためバックアップに移動しました。新しいクエリは通常どおり記録されます。バックアップ ファイル:\"],\"FF_oap\":[\"デフォルト\"],\"FK8rlP\":[\"SSH 接続が設定されていません\"],\"FMRcH8\":[\"最初の行をヘッダーとして扱う\"],\"FNvDMc\":[\"今週\"],\"FQe1FI\":[\"推定行数\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"警告\"],\"FZg3wM\":[\"操作\"],\"Fa_cky\":[\"スキーマ: \",[\"tableName\"]],\"FpEL5o\":[\"SQL エディタに独立したテーマを選択するか、アプリのテーマと同期するかを選びます。\"],\"FsvZQL\":[\"セル \",[\"n\"],\" を編集\"],\"FtwKL9\":[\"タブを切り替え\"],\"FznI3z\":[\"外部キー「\",[\"name\"],\"」を削除しますか?\"],\"G6W8j1\":[\"プレビューに失敗しました: \"],\"G8Q5Zq\":[\"ネームスペースは必須です\"],\"GAohqx\":[\"カラムを削除\"],\"GJR99u\":[\"カラムの削除に失敗しました: \"],\"GKfzzM\":[\"接続を選択...\"],\"GS-Mus\":[\"エクスポート\"],\"GUaLUq\":[\"スキーマの読み込みに失敗しました: \"],\"GXP-Iw\":[\"SQL セルを追加\"],\"Gj1mLb\":[\"セルを並べ替え\"],\"GlbqG2\":[\"ドライバーの初期設定に戻す\"],\"Gq1YzP\":[\"イベント\"],\"Gs5AlY\":[\"開く\"],\"GtmO8_\":[\"開始\"],\"GxkJXS\":[\"アップロード中...\"],\"H-o4D2\":[\"新規カラムを作成\"],\"H2B-KW\":[\"Ctrl+C / Cmd+C で行をコピーする際のデフォルト形式を選択します。\"],\"H3oH0g\":[\"やり直す\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"折りたたむ\"],\"H9P8CD\":[\"最初のフィルターを追加\"],\"HAQlGl\":[\"AI アクティビティ\"],\"HKNZrs\":[\"インデックス条件\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"#\",\" 行を削除\"],\"other\":[\"#\",\" 行を削除\"]}]],\"HPuCiP\":[\"フォルダパス\"],\"HUs1R3\":[\"この接続に対して開いているタブはありません。\"],\"HV4Isp\":[\"SSH パスワードを入力\"],\"HVC8Hh\":[\"クリップボードにコピーしました\"],\"HWEpq8\":[\"ディスク書き込み/秒\"],\"HY4nP5\":[\"インライン\"],\"HcmoWv\":[\"ビューの保存に失敗しました: \"],\"He8v1Y\":[\"すべて適用から除外\"],\"HehHP1\":[\"デフォルトレイアウト\"],\"HilYn4\":[\"このノートブックは空です。セルを追加して始めましょう。\"],\"HjxVK_\":[\"簡易接続テスト\"],\"HmMnRx\":[\"WKT モード\"],\"HoKCiI\":[\"インストール後にアプリは自動的に再起動します\"],\"HpK_8d\":[\"再読み込み\"],\"Hpi4Jm\":[\"今すぐ参加\"],\"HuA3RU\":[\"タブ\"],\"I128p7\":[\"パイプ (|)\"],\"I3AgqA\":[\"SSH をインラインで設定\"],\"I5VBsr\":[\"アプリと同じ\"],\"I8yrPb\":[\"テーブルを置換\"],\"I92BdB\":[\"グループから削除\"],\"I92fr4\":[\"あとで通知\"],\"I99Miw\":[\"コスト\"],\"IETZIR\":[\"セル名を編集\"],\"IG9wzA\":[\"行の挿入に失敗しました: \"],\"ILleOG\":[\"リソースタイプは \\\"service\\\" または \\\"pod\\\" である必要があります\"],\"IQ3gAw\":[\"ファイルをアップロード\"],\"IUwGEM\":[\"変更を保存\"],\"IUwmLq\":[\"package.json および src-tauri/Cargo.toml に宣言された直接依存です。\"],\"IVrBTT\":[\"オープンソースライブラリ\"],\"I_43p6\":[\"セーフティ\"],\"Iaizf4\":[\"外観\"],\"Il3FBB\":[\"構造化フィルターパネルを切り替え\"],\"IniZRK\":[\"ダウンロード不可 - プレビューのみ読み込み済み\"],\"Isaozb\":[\"確認・調整\"],\"J17_9Z\":[\"トリガーの保存に失敗しました: \"],\"J2Cb95\":[\"このプラグインを経由するアクティブなクエリや接続は中断されます。\"],\"J6v1s_\":[\"デフォルトモデル\"],\"JE-DVk\":[\"インタプリタ\"],\"JEGlfK\":[\"開始\"],\"JKDPqP\":[\"先にコンテキストを選択してください\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"SSH トンネルを使用\"],\"JRz8tw\":[\"MySQL および MariaDB では、サポートされた EXPLAIN ANALYZE または ANALYZE FORMAT バリアントでのみ実測値が得られます。\"],\"JUICth\":[\"PNG、JPG、WebP または SVG · 最大 512 KB\"],\"JY5Oyv\":[\"データベース\"],\"JlFRIB\":[\"接続後に MySQL に送信するセッションタイムゾーンです。\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"拒否\"],\"K3H9p5\":[\"未設定\"],\"K5Dgu_\":[\"データベース\"],\"K8IGKf\":[\"認証方式\"],\"KAYNSW\":[\"メモリに保持するログの件数 (1〜10000)\"],\"KHTGbr\":[\"プリフライト EXPLAIN\"],\"KHvda8\":[\"NOT NULL\"],\"KJKNaZ\":[\"`column` 形式でコピー\"],\"KM5Kc8\":[\"少なくとも 1 つのカラムを選択してください\"],\"KSCnVQ\":[\"種別\"],\"KUjOb9\":[\"実行中\"],\"KXBdwy\":[\"ルーチンを更新\"],\"KXNyX7\":[\"DEFAULT に設定\"],\"Kd70-v\":[\"クリップボードからインポート...\"],\"KhI4oS\":[[\"0\"],\" で参照行を開く\"],\"KhgrNu\":[\"MCP サーバー連携\"],\"KirERL\":[\"タイムアウト\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"インデックスの削除に失敗しました: \"],\"KzeARD\":[\"テーブルの削除に失敗しました: \"],\"L-rMC9\":[\"デフォルトに戻す\"],\"L3HXkQ\":[\"バグ修正\"],\"LCZ7Dy\":[\"名前をコピー\"],\"LFDf6p\":[\"新しいデータベーストリガーを作成します\"],\"LK1m4W\":[\"インデックス\"],\"LMeAoR\":[\"行\"],\"LPCdc-\":[\"クエリタブ名プロンプト\"],\"LPFmga\":[\"すべて適用に含める\"],\"LYzbQ2\":[\"ツール\"],\"Lbis_V\":[\"クイックナビゲーター\"],\"Lcpbe2\":[\"プラグインプロセスを起動できませんでした。下記のエラー詳細を確認してください。\"],\"LhUHHO\":[\"生成 SQL プレビュー\"],\"LihabZ\":[\"EXPLAIN は DML ステートメント (SELECT, INSERT, UPDATE, DELETE) のみサポートされます。CREATE、DROP、ALTER などの DDL は説明できません。\"],\"LnT0hQ\":[\"カラムを追加\"],\"LvutiO\":[\"AI 提案\"],\"M-rHQO\":[\"フルスクリーンを終了\"],\"M0XJba\":[\"この接続のクエリ履歴をすべて削除してもよろしいですか?\"],\"M1co_O\":[\"設定済み\"],\"M73whl\":[\"コンテキスト\"],\"MDa5o0\":[\"例: before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"すべて表示\"],\"MXdOwj\":[\"接続を分離\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"K8s 接続を選択\"],\"Mc1tjS\":[\"ANALYZE を有効にすると、実行行数、時間、ループ、バッファを確認できます。\"],\"Mm4p0T\":[\"+\",[\"0\"],\" 行以上\"],\"Mp0jQ_\":[\"このドライバはテーブル作成時のみ主キーをサポートします\"],\"MqpZwN\":[\"Tabularis プロセス\"],\"MxIx43\":[\"↑↓で移動、Enterで開く\"],\"MygtgQ\":[\"Markdown セルを追加\"],\"N40H-G\":[\"すべて\"],\"N5UQxq\":[\"ポート \",[\"0\"],\" で Ollama を検出できませんでした。起動していますか?\"],\"N6GBcC\":[\"削除の確認\"],\"N6aqHp\":[\"実行クエリ\"],\"N9_S15\":[\"新規テーブルが作成されます\"],\"NBdMa1\":[\"最も遅いステップ\"],\"NC2AI2\":[\"長さ\"],\"NCzNnx\":[\"昇順で並び替え\"],\"NT4Ubs\":[\"カスタムキーを削除し、環境変数に戻します (存在する場合)\"],\"NUjrCO\":[\"検索に一致するお気に入りがありません\"],\"NWJrXh\":[\"トリガー SQL は必須です\"],\"NZUDnP\":[\"ツリー合計: \",[\"0\"]],\"Nc2VQn\":[\"既存に追加\"],\"NgFERn\":[\"お気に入りに追加\"],\"NktMHG\":[\"データベース名\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"テスト\"],\"Nq5QTk\":[\"N 番目を説明\"],\"O2STgu\":[\"エクスポートに失敗しました: \"],\"O8SV8O\":[\"ダウンロード中...\"],\"O9_WW6\":[\"接続\"],\"OGEsKj\":[\"すべてのセルを実行\"],\"OGWdBg\":[\"ビュー名\"],\"OHqT6w\":[\"キーの組み合わせを押してください...\"],\"OXJsaG\":[\"不正なパラメータ名です\"],\"OfhWJH\":[\"リセット\"],\"OlAl5i\":[\"すべて展開\"],\"Osn70z\":[\"デバッグ\"],\"Ou8b_n\":[\"Discord に参加\"],\"P1YGsb\":[\"SQL 生成\"],\"P2m1xb\":[\"エラー時に停止\"],\"P3Qlys\":[\"接続 ID がありません\"],\"P6Y3Yf\":[\"このコマンドをターミナルで実行し、Claude Code を再起動してください。\"],\"PCdj-c\":[\"すべて解除\"],\"PMnFt9\":[\"ディスク読み取り/秒\"],\"PQU2Va\":[\"Enter で候補を確定\"],\"PRnH8G\":[\"/ \",[\"0\"],\" 件中\"],\"PY8UF3\":[\"並列を切り替え(セル \",[\"n\"],\")\"],\"PiH3UR\":[\"コピーしました!\"],\"Pia95d\":[\"カラム名は必須です\"],\"PrElXQ\":[\"更新\"],\"PrixCC\":[\"既存テーブルに行が追加されます\"],\"Pujgbb\":[\"インポート先を設定\"],\"Pw_eQV\":[\"プラグインの起動に失敗\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"保存済みクエリはありません\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"子プロセスはありません\"],\"QCxMC0\":[\"アプリ起動時に自動で新しいバージョンを確認します\"],\"QEazml\":[\"選択を削除\"],\"QHcLEN\":[\"接続済み\"],\"QLHHFO\":[\"読み取り専用モード\"],\"QOvAW3\":[\"新機能\"],\"QULGRi\":[\"有効なクエリが見つかりません\"],\"QZwllF\":[\"参照...\"],\"QbkSr_\":[\"このクエリは EXPLAIN に対応していません。\"],\"QeHFYZ\":[\"EXPLAIN 失敗: \",[\"0\"]],\"Qll2Tb\":[\"降順\"],\"Qoq-GP\":[\"もっと読む\"],\"Qu4Hog\":[\"ノートブックを正常にインポートしました\"],\"R-A2Vd\":[\"表示するデータがありません\"],\"R0Hkb2\":[[\"0\"],\" 個のデータベースを選択中\"],\"R1nHhB\":[\"既に存在します\"],\"R2Iz3m\":[\"トリガー名\"],\"R6oBUl\":[\"コンソールに変換\"],\"R9Khdg\":[\"自動\"],\"RDjuBN\":[\"セットアップ\"],\"RF-HyV\":[\"使用する言語を選択します。「自動」はシステムの言語を使用します。\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"名前をコピー\"],\"RI-HZc\":[[\"0\"],\" キーを入力\"],\"RJrE17\":[\"ビュー「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"スターはプロジェクトを他の人に見つけてもらう助けになります\"],\"Rb3Tdm\":[\"ノートブック名\"],\"RcbKJ3\":[\"更新時\"],\"RkefFq\":[\"承認モーダルを表示する前にクエリに対して EXPLAIN を実行し、ユーザーに実行計画を表示します。\"],\"RnF_hl\":[\"プラグインレジストリを読み込み中...\"],\"Rns7_C\":[\"この操作はすぐには取り消せません\"],\"RoKRqW\":[\"利用可能なプラグイン\"],\"RphpKk\":[\"外観\"],\"Rt8sHM\":[\"ソートまたは一時処理を検出\"],\"RuSW0a\":[\"タイムスタンプの表示とエクスポートに使用するタイムゾーン。「自動」はシステムのタイムゾーンに従います。\"],\"RxzN1M\":[\"有効\"],\"S1veKH\":[\"選択を元に戻す\"],\"S5zeZU\":[\"プレビューを切り替え\"],\"S8Yqbl\":[\"挿入\"],\"SDND4q\":[\"未設定\"],\"SJRy3D\":[\"(自動生成)\"],\"SSwIjo\":[\"EMPTY に設定\"],\"SgvA_r\":[\"Run (Ctrl/Command+F5) を押してテーブルデータを読み込んでください\"],\"SlfejT\":[\"エラー\"],\"SoATkx\":[\"セルをコピー\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"エンドポイント URL\"],\"T7w5CQ\":[\"新規行の作成に失敗しました: \"],\"T9947j\":[\"値 (例: 'text' や 123)\"],\"TCizFv\":[\"タイムゾーンを検索...\"],\"TI33l7\":[\"垂直レイアウトに切り替え\"],\"TK5oex\":[\"プロンプトを保存\"],\"TKQ7K-\":[\"インストール\"],\"TKZreP\":[\"必須\"],\"TMLAx2\":[\"必須\"],\"TO08JI\":[\"外部キー\"],\"TVKqvO\":[\"行を編集\"],\"TYSdQ3\":[\"SELECTクエリを実行\"],\"TfDFHS\":[\"エディタ内の長い行を横スクロールせず折り返します。\"],\"Tibfjs\":[\"保存された接続がありません — 下で作成してください\"],\"Tj36Dr\":[\"デフォルトに戻す\"],\"Tjg925\":[\"トリガー定義を読み込み中...\"],\"TlZ7Ul\":[\"クエリをロック\"],\"TpwXyg\":[\"タイミングが欠落している場合、サーバーは推定のみのプランを返している可能性があります。\"],\"Tw2M1h\":[\"インストール失敗\"],\"Ty-rm9\":[\"SSH 接続\"],\"Tz0i8g\":[\"設定\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes 接続\"],\"U4uzyV\":[\"新機能\"],\"U8W7sX\":[\"トリガー定義の取得に失敗しました: \"],\"UB112k\":[\"セルが失敗したら実行を停止します\"],\"UCQiqt\":[[\"0\"],\" に対して\"],\"UECR2b\":[[\"0\"],\" が \",[\"1\"],\" 上 — 実行前に確認して判断してください。\"],\"UI85PB\":[\"条件に一致するトリガーがありません\"],\"UNKlAy\":[[\"clientName\"],\" の設定が正常にインストールされました。変更を反映するにはアプリを再起動してください。\"],\"URmyfc\":[\"詳細\"],\"UWQBvp\":[\"SQLテンプレートを生成\"],\"UawTKZ\":[\"任意。このプラグインの実行に使用する実行ファイルを指定します (例: macOS/Linux では python3、Windows では python またはフルパス)。空欄の場合はデフォルトが使用されます。\"],\"Ub8sf5\":[\"SQLite は ALTER TABLE による FK 削除をサポートしていません。\"],\"UbbJ8j\":[\"選択肢が見つかりません\"],\"Ubs68g\":[\"一般\"],\"UftN8J\":[\"これらの接続は MCP からの書き込みを拒否します。他の接続は通常通り動作します。\"],\"UnQNah\":[\"テーブル「\",[\"tableName\"],\"」のカラム「\",[\"0\"],\"」を削除してもよろしいですか?\\n\\n警告: このカラムのすべてのデータが完全に削除されます。この操作は取り消せません。\"],\"UncTTh\":[\"プロセスツリー全体の RSS 合計 — 共有メモリを重複して計算している可能性があります\"],\"UpjgFm\":[\"パラメータを変更\"],\"UsAnu1\":[\"ANALYZE はクエリを実行します。データを変更するステートメントでは注意して使用してください。\"],\"UxKoFf\":[\"ナビゲーション\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"タブサイズ\"],\"UzWGWO\":[\"SQL WHERE 入力に切り替え\"],\"V-chk5\":[\"アクティブな接続の生存確認を行う間隔です。0 にすると無効になります。\"],\"V-pw1j\":[\"テーブル名\"],\"V2T0Uw\":[\"保存されたノートブックはまだありません。\"],\"V3aNwx\":[\"データエディタ\"],\"VGYp2r\":[\"すべてに適用\"],\"VH8S7x\":[\"クリップボードのカラム\"],\"VIAEcS\":[\"データベースの読み込みに失敗しました。認証情報を確認してください。\"],\"VKdztF\":[\"行を追加\"],\"VLiHXI\":[\"分析データ\"],\"VMbmXc\":[\"「\",[\"pluginName\"],\"」を削除してもよろしいですか?プラグインファイルが削除されます。\"],\"VO3weF\":[\"ファイルが読み込まれていません\"],\"VOZlKc\":[\"データベースをインポート\"],\"VPzsIz\":[\"名前を生成中...\"],\"VUul0v\":[\"強制終了中:\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"トリガーの削除に失敗しました: \"],\"VfOb_W\":[\"トリガーが見つかりません\"],\"Vgy9LX\":[\"すべてのクエリ\"],\"Vi2Pqx\":[\"作成者:\"],\"Vl2zn2\":[\"停止\"],\"Vo4uBA\":[\"プラグインのインストール中にエラーが発生しました。詳細は下記を参照してください。\"],\"VqqyOs\":[\"クエリを実行すると結果が表示されます\"],\"VzhDFh\":[\"下記で明示的に許可されていない限り、MCP 経由の SELECT 以外のステートメントをブロックします。\"],\"W3uwpT\":[\"すべてのタブを閉じる\"],\"W4MKLh\":[\"例: 本番環境でリスクがありそう、確認お願いします…\"],\"W60eXm\":[\"テーブル\"],\"WA8RND\":[\"テーブル「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"WG8Qgt\":[\"テーブルを削除\"],\"WLnvCZ\":[\"ユーザー名を入力\"],\"WM-__8\":[\"接続を検索...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行を「\",[\"tableName\"],\"」にインポートしました\"],\"other\":[\"#\",\" 行を「\",[\"tableName\"],\"」にインポートしました\"]}]],\"WTfntM\":[\"クエリ「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"WarTN_\":[\"成功\"],\"WcF1uL\":[\"グループ名\"],\"Weq9zb\":[\"一般\"],\"WmPpB1\":[\"実行計画を読み込み中…\"],\"Wu7cK0\":[\"データベースが見つかりません\"],\"WvoUQF\":[\"セル \",[\"n\"],\" を削除\"],\"Ww3pDD\":[\"手動コマンド\"],\"X-20AU\":[\"クエリタブ名プロンプトを入力...\"],\"X-U6_w\":[\"フォントファミリー\"],\"X5fs0g\":[\"最初の接続を作成して始めましょう。\"],\"X7Ayjp\":[\"パスワードをシステムのキーチェーンに保存しました\"],\"X9kySA\":[\"お気に入り\"],\"XJOV1Y\":[\"アクティビティ\"],\"XMCLEL\":[\"トリガーを新規作成\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"クエリ説明\"],\"XVF2Pf\":[\"スキーマを編集\"],\"XW6OYF\":[\"このプラグインにはインタプリタ (例: Python) が必要な場合があります。プラグイン設定からインタプリタのパスを設定してください。\"],\"XZB6Xr\":[\"最大ログエントリ数\"],\"Xcffv2\":[\"エディタに AI Assist と Explain ボタンを表示します\"],\"XeqTSh\":[\"結合タイプ\"],\"XmJfZT\":[\"名前\"],\"XoQfG1\":[\"SSH ユーザー\"],\"XwI0Vw\":[\"自動 (システム)\"],\"XyDlLX\":[\"インデックス名\"],\"Y2P2aK\":[\"読み込むスキーマを選択:\"],\"Y8HYw2\":[\"値\"],\"Y8zX3R\":[\"エディタに挿入\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"検索...\"],\"YWlnMZ\":[\"Ollama ポート\"],\"YYdC3A\":[\"バージョン \",[\"0\"]],\"YYn8b5\":[\"レジストリからプラグインを閲覧・インストールします。\"],\"Y_3yKT\":[\"新しいタブで開く\"],\"YiAQ_Q\":[\"テーブルを更新\"],\"Ysjr9Y\":[\"SQL プレビュー\"],\"YswNf7\":[\"すべてのレベル\"],\"YtNwr6\":[\"接続ごとに保存されるクエリ履歴の最大件数です。\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"読み込み中...\"],\"Z7ZXbT\":[\"承認\"],\"Z8JpBH\":[\"ノートブックとしてエクスポート\"],\"Z8fBIc\":[\"実行行数が推定を超過\"],\"ZC2VJP\":[\"実行\"],\"ZCIS4k\":[\"有効なフィルターなし\"],\"ZF1_UT\":[\"SSL モード\"],\"ZGjBPa\":[\"ログを消去\"],\"ZHQTlM\":[\"インポート元\"],\"ZIFDoJ\":[\"構造かデータのいずれかを選択してください\"],\"ZIZA6o\":[\"承認前に編集\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件の解析警告\"],\"other\":[\"#\",\" 件の解析警告\"]}]],\"ZVn8p2\":[\"エディタの左端に行番号を表示します。\"],\"ZYnwzF\":[\"切断済み\"],\"Za3_fO\":[\"エラー\"],\"ZcOxO1\":[\"外部キーを作成\"],\"Zf7LHg\":[\"コンテキストが見つかりません(kubectl はインストールされていますか?)\"],\"Zfotp5\":[\"大きな推定乖離は通常、古い統計やプランナーがモデル化しきれない述語を示します。\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"スキーマの読み込みに失敗しました\"],\"ZqXGPF\":[\"ビューの削除に失敗しました: \"],\"ZuL73E\":[\"新しいデータベースビューを作成します\"],\"_-bi4r\":[\"参照テーブル\"],\"_AEYGI\":[\"実行履歴はまだありません\"],\"_FdpZc\":[\"ビュー定義の読み込みに失敗しました: \"],\"_FxSdi\":[\"アプリ、バックエンド、ツールで使用している直接依存のオープンソースを閲覧できます。\"],\"_JyTG8\":[\"説明プロンプトを入力...\"],\"_Ltc_k\":[\"詳細\"],\"_Q2Wix\":[\"行\"],\"_TK1zF\":[\"保存された接続\"],\"_bJFBE\":[\"接続タイムアウト\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Tree\"],\"_dqduX\":[\"次のページ\"],\"_fwE6J\":[\"それ以前\"],\"_n04sB\":[\"停止\"],\"_otxbQ\":[\"鍵ファイル\"],\"_pezIT\":[[\"0\"],\" への接続に失敗しました。設定を確認するか、データベースが稼働していることを確認してください。\"],\"_srfkj\":[\"カスタムキーを正常に削除しました\"],\"_t6aFo\":[\"MySQL および MariaDB はサーバーのバージョンに応じて EXPLAIN FORMAT=JSON または表形式 EXPLAIN にフォールバックする場合があります。\"],\"_xTbaM\":[\"カラム\"],\"_yxaaL\":[\"ユニークインデックス\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis は無料のオープンソースプロジェクトです。便利だと感じたら、プロジェクトのサポートやコミュニティへの参加をご検討ください。\"],\"a9CASo\":[\"SQLite はカラムの名前変更のみサポートします。その他の変更にはテーブルの再作成が必要です。\"],\"aAIQg2\":[\"外観\"],\"aAURrV\":[\"インストール済み\"],\"aC_vCa\":[\"AI で名前を生成\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"ノードを選択して詳細を表示\"],\"aHKcKc\":[\"前のページ\"],\"aI-5wG\":[\"CAを検証\"],\"aJJySV\":[\"例: users\"],\"aQ8swY\":[\"デフォルト値\"],\"aScJP1\":[\"このクエリを実行\"],\"aVNbN8\":[\"フィルター条件\"],\"aWhdMQ\":[\"既存の SSH 接続を使用\"],\"aXYd8V\":[\"タイムアウト\"],\"aX_S_r\":[[\"0\"],\" / \",[\"totalPages\"],\" ページ\"],\"agZcf8\":[\"生成された SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [フィールド]\"],\"alplHn\":[\"AI でクエリ計画を分析中...\"],\"anBcU3\":[\"Tabularis を気に入っていただけたら、コードへの貢献、バグ報告、リポジトリへのスターなどでプロジェクトのサポートをご検討ください。\"],\"arHmj2\":[\"このクエリを履歴から削除してもよろしいですか?\"],\"arKcqW\":[\"古いサーバーでは、指標の少ない推定プランにフォールバックする場合があります。\"],\"arcpYe\":[\"承認が必要\"],\"aurEkh\":[\"プロセスを読み込み中…\"],\"avtdsd\":[\"SQL モード\"],\"az8lvo\":[\"オフ\"],\"b1Ah3z\":[\"フォーカス中\"],\"b392Dr\":[\"すべて展開\"],\"b5S_PU\":[\"データベース名\"],\"bAvovP\":[\"下に移動\"],\"bH3JqY\":[\"テーブルが見つかりません\"],\"bP5JOn\":[\"ワードラップ\"],\"bcOdok\":[\"グループを削除\"],\"bcqeas\":[\"MCP クエリをすべて読み取り専用にする\"],\"bmca5u\":[\"書き込みのみ\"],\"bpCiBU\":[\"MCP からの書き込みを許可\"],\"bqnhqW\":[\"推定が実行行数を超過\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"エラーで失敗\"],\"bw22Gk\":[\"カラムスキーマ\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"主な問題\"],\"cFCKYZ\":[\"拒否\"],\"cFGrCP\":[\"テーブル\"],\"cGeFup\":[\"フォントサイズ\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"テーブルにフォーカス\"],\"cM9NHc\":[\"ダウングレード:\"],\"cO9-2L\":[\"無効\"],\"cSev-j\":[\"フィルター\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行をインポート\"],\"other\":[\"#\",\" 行をインポート\"]}]],\"c_xoSn\":[\"セル \",[\"n\"],\" の名前を変更\"],\"cd0XEW\":[\"クエリを保存\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"グループを分割\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" ステートメント\"],\"d34vwG\":[\"データベースを読み込み\"],\"d6ynQ7\":[\"降順で並び替え\"],\"d8_6_v\":[\"キャンセル\"],\"d8wc1_\":[\"サンプル値\"],\"dBXoCS\":[\"環境変数が検出されていますが、上でキーを設定すれば上書きできます。\"],\"dD7NPy\":[\"アウトライン\"],\"dEgA5A\":[\"キャンセル\"],\"dMtLDE\":[\"終了\"],\"dPJVhW\":[\"インストール失敗\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のセッション\"],\"other\":[\"#\",\" 件のセッション\"]}]],\"dTUzKm\":[\"選択したものを実行 (\",[\"0\"],\")\"],\"dU_iQN\":[\"現在のフィルタに一致するセッションがありません。\"],\"dUh9QW\":[\"プランニング\"],\"dVoir2\":[\"Markdown セル \",[\"n\"],\" を追加\"],\"dZ0d2O\":[\"少なくとも 1 つのテーブルを選択してください\"],\"dhi13U\":[\"画像を選択…\"],\"dli1JX\":[\"変更を送信\"],\"dmYV6f\":[\"ルーチン\"],\"dohZCo\":[\"AI による SQL 生成の指示です。\",[\"SCHEMA\"],\" をデータベース構造のプレースホルダーとして使用します。\"],\"dtxpK2\":[\"分析\"],\"dwW9nJ\":[\"行番号を表示\"],\"dwWVw_\":[\"ウェルカム画面を表示\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"既存時の動作\"],\"dyN4j9\":[\"「プレビューを実行」をクリックすると結果が表示されます\"],\"e07Iz5\":[\"タスクマネージャを開く\"],\"e0NzXu\":[\"このプロジェクトは現在開発中 (WIP) です。主要機能は安定していますが、より大きな構想も進めています。\"],\"e1UKxf\":[\"このクエリを保存\"],\"e34gdU\":[\"MCP サブプロセスがリクエストをタイムアウトさせる前にユーザーの判断を待つ時間。\"],\"e62LQd\":[\"強制終了\"],\"e6QZsM\":[\"エディタテーマ\"],\"e8CirT\":[\"クエリを実行\"],\"eD2kUP\":[\"バッファ読み込み\"],\"eE0JZ4\":[\"バージョン\"],\"eIDch7\":[\"実行計画分析プロンプトを入力...\"],\"eIVolo\":[\"ディスク R/W\"],\"eJOEBy\":[\"エクスポート中...\"],\"eKHY3W\":[\"プラグイン設定\"],\"eMb6Ub\":[\"リソースを選択...\"],\"ePK91l\":[\"編集\"],\"eXweu6\":[\"セルを展開\"],\"ecNsTE\":[\"検索に一致するクエリがありません\"],\"ecUA8p\":[\"今日\"],\"ecpIZP\":[\"鍵が暗号化されている場合はパスフレーズを入力\"],\"ejmeDY\":[\"インストール済み\"],\"esl-Tv\":[\"リソースタイプ\"],\"exyUec\":[\"接続\"],\"f2AJjl\":[\"行を削除\"],\"f4pD-j\":[\"接続テストに失敗しました\"],\"f7sXvi\":[\"パスワードを入力\"],\"fAsxc0\":[\"シーケンシャルスキャン\"],\"fIeFs0\":[\"値を選択...\"],\"fJm92A\":[\"EXPLAIN プランを含むファイル (Postgres JSON またはテキスト形式) を選択して可視化します。\"],\"fOuPPd\":[\"プラグイン\"],\"fXVIZq\":[\"値\"],\"f_b1TA\":[\"実行履歴\"],\"fghnqP\":[\"接続 1〜9 に切り替え\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"カンマ (,)\"],\"fp711N\":[\"ブロック (読み取り専用)\"],\"fpzyLj\":[[\"0\"],\" / \",[\"1\"],\" ページ\"],\"fuA6oy\":[\"ソケットタイムアウト\"],\"fvImQM\":[[\"0\"],\" 件選択中\"],\"fwr_nh\":[\"拡張機能のインストール、プラグインドライバの管理、実行時設定のコントロールを行います。\"],\"g0ZzK4\":[\"有効な JSON\"],\"g11hAR\":[\"新規行\"],\"g8VcMm\":[\"マイ K8s クラスター\"],\"gCFR_O\":[\"並列実行 (すべて実行)\"],\"gEjU98\":[\"接続を開く\"],\"gPQ8z1\":[\"NULL 許可\"],\"gShKPx\":[\"少なくとも 1 つのカラムが必要です\"],\"gSuQrG\":[\"「\",[\"search\"],\"」に一致する接続はありません\"],\"gUypqb\":[\"クエリを再実行\"],\"gZWMnn\":[\"AI 分析\"],\"ghYd73\":[\"対象を選択...\"],\"giAqEC\":[\"新規テーブルを作成\"],\"gnQS8X\":[\"MySQL コネクタが使用する最大パケットサイズです。\"],\"gqV5VL\":[\"組み込み、カスタマイズ不可\"],\"gww_XE\":[\"参照カラム\"],\"gxXPJ9\":[\"インタプリタを設定\"],\"gxutEv\":[\"トリガーを正常に更新しました\"],\"gz6UQ3\":[\"最大化\"],\"h-XNc9\":[\"CSV 区切り文字\"],\"h-kNAk\":[\"例: sales_data\"],\"h3Z_aK\":[\"ここに Markdown を記述...\"],\"h7MgpO\":[\"キーボードショートカット\"],\"h7peZQ\":[\"許可\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 個のシステムプロセスが実行中\"],\"other\":[\"#\",\" 個のシステムプロセスが実行中\"]}]],\"hEZrFh\":[\"SQL ファイルを実行...\"],\"hEipgW\":[\"今すぐアップデートを確認\"],\"hG89Ed\":[\"画像\"],\"hIHcBE\":[\"CSV としてエクスポート\"],\"hItdtk\":[\"フォルダを参照\"],\"hXFVjo\":[\"テーブル名は必須です\"],\"hZ6znB\":[\"ポート\"],\"h_huI6\":[\"再実行\"],\"hbz1rh\":[\"キー\"],\"hdsaJo\":[\"インポート中...\"],\"he3ygx\":[\"コピー\"],\"hfGimp\":[\"ネームスペースを選択...\"],\"hjjSEi\":[\"読み取り専用接続\"],\"hjwN_s\":[\"リソース名\"],\"hlF1mD\":[\"選択範囲をコピー\"],\"hnboBb\":[\"AI によるクエリ計画分析\"],\"hnvu2p\":[\"エラーの詳細\"],\"hq4-D2\":[\"API キーはシステムのキーチェーンに安全に保管されます。ここでキーを設定すると環境変数より優先されます。\"],\"hqjXdn\":[\"SSH 接続の削除に失敗しました\"],\"hqofAK\":[\"SQL をコピー\"],\"hy6L14\":[\"GitHub で表示\"],\"hyjACX\":[\"セルを折りたたみ/展開\"],\"hz1b5W\":[\"一致する要素が見つかりません\"],\"i1vAVM\":[\"新規テーブルを作成\"],\"i3S5T3\":[\"お気に入りを検索...\"],\"i4_LY_\":[\"書き込み\"],\"i5HBWh\":[\"クエリ履歴をリセットしました\"],\"i5zCt4\":[\"テーブル\"],\"iAVlge\":[\"AI によるノートブックセル名生成の指示をカスタマイズします。セルの内容 (SQL または Markdown) がユーザーメッセージとして送信されます。\"],\"iE1yAB\":[\"テーブルをフィルター...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"接続\"],\"iSryJ2\":[\"My SSH Server\"],\"iT7UeX\":[\"インデックスを追加\"],\"iUWwuR\":[\"ダウンロードしてインストール\"],\"ia7i08\":[\"先にコンテキスト/ネームスペース/タイプを選択してください\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"保存しました\"],\"igcsfY\":[\"レジストリに利用可能なプラグインがありません。\"],\"ij-Elv\":[\"画像プレビュー\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"説明可能なクエリが \",\"#\",\" 件見つかりました\"],\"other\":[\"説明可能なクエリが \",\"#\",\" 件見つかりました\"]}]],\"ioL38P\":[\"プラグインプロセス、CPU、RAM、ディスク使用量をリアルタイムで監視します\"],\"ixlL_e\":[\"SSH 鍵ファイル (任意)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"モデルを選択\"],\"j3gyYH\":[\"すべて適用\"],\"j5CWO4\":[\"最新\"],\"j9HPuI\":[\"行 #\",[\"0\"]],\"jBtpMP\":[\"すべてのステータス\"],\"jEu4bB\":[\"カラム\"],\"jEyQIs\":[\"ルーチンが見つかりません\"],\"jHc1By\":[\"ビューを削除\"],\"jI6sj4\":[\"コスト、タイミング、行数推定は PostgreSQL や MySQL と比べて得られないことが多いです。\"],\"jIxQCZ\":[\"お使いのプラットフォームでは利用できません\"],\"jKIncn\":[\"データベース名は必須です\"],\"jPSk57\":[\"理由 (任意)\"],\"jUNY_d\":[\"ビュー\"],\"jVqjDo\":[\"不正なノートブックファイル形式です\"],\"jWSZ-A\":[\"プレビューのみ - 完全なデータは読み込まれていません\"],\"jgjIDU\":[\"既存のトリガーの削除に失敗しました: \"],\"jnhuWy\":[\"ソケットタイムアウト (ミリ秒)。\"],\"jpeU_Z\":[\"ノートブック\"],\"jpgB4Y\":[\"接続名は必須です\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"子プロセス\"],\"jx0t66\":[\"子プロセスを折りたたむ\"],\"k-0mL-\":[\"カラムを追加\"],\"k-XiMX\":[\"Raw\"],\"k2UnVy\":[\"ハッシュ条件\"],\"k5UUX3\":[\"トリガーを正常に作成しました\"],\"kALwhk\":[\"秒\"],\"kBiBq7\":[\"インデックス「\",[\"name\"],\"」を削除しますか?\"],\"kEYasw\":[\"チャートを切り替え\"],\"kI1qVD\":[\"整形\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行 · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" 行 · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"イベントの詳細\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"レジストリ\"],\"kY-q3P\":[[\"label\"],\" は必須です\"],\"kexIdC\":[\"Kubernetes ポートフォワードを使用\"],\"krksx_\":[\"成功\"],\"ktYUe9\":[\"すべて実行\"],\"kwY6nh\":[\"閉じる\"],\"kx0s-n\":[\"結果\"],\"kxUEfE\":[\"ルーチン定義の取得に失敗しました: \"],\"l2Op2p\":[\"クエリパラメータ\"],\"l9Ivba\":[\"プラグインプロセスとシステムリソース\"],\"lBdPxu\":[\"アクセントカラー\"],\"lCF0wC\":[\"更新\"],\"lEQRwq\":[\"データ (INSERT)\"],\"lIvS11\":[\"トリガーを再作成\"],\"lKS0ce\":[\"新規テーブルを作成しました\"],\"lOekZ3\":[\"水平レイアウトに切り替え\"],\"lUA1C1\":[\"SSH 鍵のパスフレーズ (任意)\"],\"lVeG20\":[\"Rust 依存\"],\"lXAG6D\":[\"AI によるクエリ説明の指示です。\",[\"LANGUAGE\"],\" を出力言語のプレースホルダーとして使用します。\"],\"lbbYjy\":[\"生の設定ファイルを直接編集します。変更を反映するには再起動が必要です。\"],\"lhKW0m\":[\"SQL セル \",[\"n\"],\" を追加\"],\"lk-wOz\":[\"トリガーを絞り込み...\"],\"lk0x32\":[\"結果ページサイズ (上限)\"],\"lkz6PL\":[\"所要時間\"],\"lmVGeo\":[\"外部キーを追加\"],\"lnnx3E\":[\"Tabularis を Claude Desktop、Cursor などに接続\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"追加\"],\"m2Q_r8\":[\"Detect JSON in text columns\"],\"m2tskz\":[\"成功\"],\"mA-qpe\":[\"すべての実行が完了\"],\"mBhhbA\":[\"ログをクリップボードにエクスポートしました\"],\"mCNdzH\":[\"セルを実行\"],\"mO95sp\":[\"パネルを閉じる\"],\"mP7dLi\":[\"上にフォント名を入力してください\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件ブロック\"],\"other\":[\"#\",\" 件ブロック\"]}]],\"mS74ir\":[\"SSH 接続の保存に失敗しました\"],\"mSqtw8\":[\"プレビューを実行\"],\"mURmfQ\":[\"ビュー定義 (SQL)\"],\"mX_isJ\":[\"垂直\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"構造 (DDL)\"],\"mrk4Cf\":[[\"colName\"],\" を降順で並べ替え\"],\"msJ8t1\":[\"Tabularis ユーザー専用のコミュニティを立ち上げました。質問・情報交換・ロードマップへのフィードバックをお寄せください。\"],\"mtvVdV\":[\"処理行数\"],\"mx4evv\":[\"テーブルを作成\"],\"myXGZW\":[\"ガイド\"],\"mzI_c-\":[\"ダウンロード\"],\"n7JDTx\":[\"プラグインをインストールして有効化するとここに表示されます\"],\"nDDJir\":[\"セッション、クライアント、接続を検索…\"],\"nHP-Kr\":[\"アクティブなセッションがありません。接続を選択してください。\"],\"nKhCjW\":[\"テーブルを選択\"],\"nNwvm4\":[\"エラー\"],\"nOVim5\":[\"接続の保存に失敗しました\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"イベント\"],\"nf14vn\":[\"拡張機能が必要: \",[\"0\"]],\"ngO6Pv\":[\"Tab に加えて Enter でもオートコンプリートの候補を確定できるようにします。オフの場合、Enter は常に改行を挿入します。\"],\"nhmF3p\":[\"接続\"],\"noM5A_\":[\"最初の接続を作成\"],\"nohy4m\":[\"MCP アクティビティはまだありません。\"],\"nr-axf\":[\"プラグインを削除\"],\"nsPFX9\":[\"Visual Explain で開く\"],\"nuBbBr\":[\"チャート\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"データベースをダンプ\"],\"o-XJ9D\":[\"変更\"],\"o21Y-P\":[\"件\"],\"o3tP_A\":[\"インデックスを削除\"],\"o45L8r\":[\"接続名を入力\"],\"o53XGh\":[\"選択した行をコピー\"],\"o7J4JM\":[\"フィルター\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"レベル\"],\"oGiIL7\":[\"デフォルトプロバイダ\"],\"oH8GS6\":[\"定義を表示\"],\"oJ4rAm\":[\"接続が失われました\"],\"oJlXF2\":[\"ノートブックをインポート\"],\"oMFv82\":[\"垂直分割\"],\"oOFiQg\":[\"パフォーマンス問題を避けるため、クエリごとに取得する行数を制限します。0 に設定すると無効化されます (非推奨)。\"],\"oT9ZD3\":[\"概要を非表示\"],\"oUzLtx\":[\"トリガーを編集するには、いったん削除して再作成する必要があります。「\",[\"name\"],\"」の変更を続行しますか?\"],\"oVRbyk\":[\"チャートを変更(セル \",[\"n\"],\")\"],\"oWfclW\":[\"Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.\"],\"obpbdz\":[\"設定ファイルが見つかりません (手動で作成してください)\"],\"odZgfC\":[\"AI クライアント\"],\"ogZhXn\":[\"ER 図のデフォルトのレイアウト方向を選択します\"],\"ohUJJM\":[\"プラグイン\"],\"olAdaI\":[\"実行行数\"],\"olWzar\":[\"プラグインプロセスを強制終了\"],\"ovBPCi\":[\"デフォルト\"],\"owzTWN\":[\"プロバイダから AI モデルを更新しました\"],\"oxYi6j\":[\"アプリケーション全体で使用される基本フォントサイズを調整します (10〜20px)。\"],\"p--hsQ\":[\"データベース接続が失われました\"],\"p6NueD\":[\"NEW\"],\"pOYHox\":[\"アクション\"],\"pR9bTR\":[\"BLOB データなし\"],\"pS8S5q\":[\"例: users, orders, products\"],\"pSws_M\":[\"テーブル名\"],\"pVLbKZ\":[\"ビューを正常に作成しました\"],\"pWT04I\":[\"確認中...\"],\"pZJ_6D\":[\"インデックス名は必須です\"],\"pddYFG\":[\"ノートブックセル名プロンプトを入力...\"],\"pnpyuD\":[\"ログを有効化\"],\"pqKMPv\":[\"テーブルの作成に失敗しました: \"],\"pqaP1h\":[\"閉じる\"],\"pqarBu\":[\"昇順\"],\"ptuq35\":[\"例: Comic Sans MS\"],\"pzu7v4\":[\"水平\"],\"q-ch8m\":[\"他のすべての接続は読み取り専用のままです。ここでチェックされた接続のみ書き込みを実行できます。\"],\"qA5jLs\":[\"エラーの詳細\"],\"qIrtcK\":[\"アップデート\"],\"qOqy8G\":[\"設定を確認中...\"],\"qWaVNs\":[\"保存して再起動\"],\"qb3LPX\":[\"ER 図を表示\"],\"qkK0vq\":[\"ビュー名は必須です\"],\"qki9tG\":[\"エラー\"],\"qoIir-\":[\"OpenAI 互換 API のベース URL です。例: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"すべて折りたたむ\"],\"r6ncaO\":[\"タブを閉じる\"],\"rAJlpP\":[\"コンテナポート\"],\"rG3WVm\":[\"SELECT\"],\"rGRCeK\":[\"クエリ履歴を削除\"],\"rNIto7\":[\"リソース名は必須です\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"ノートブックを正常にエクスポートしました\"],\"rY4sEV\":[\"FK を削除\"],\"rbu0nO\":[\"SSH 接続を管理\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件の接続\"],\"other\":[\"#\",\" 件の接続\"]}]],\"rn2_2V\":[\"フィルターを削除\"],\"roABNH\":[\"クエリ履歴はありません\"],\"rtir7c\":[\"不明\"],\"ru0-2W\":[\"アクティブな接続はありません\"],\"rvDPWO\":[\"推定の乖離\"],\"rwWjWg\":[\"リリースノート\"],\"s6m9gy\":[\"トリガー「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"s7uMvM\":[\"接続テスト\"],\"sBOaim\":[\"設定ファイルを保存しました。変更を反映するために今すぐ再起動しますか?\"],\"sCyv9B\":[\"モデルを更新\"],\"sSUqe4\":[\"削除\"],\"sUBkgN\":[\"SQL を生成中...\"],\"sZZG3d\":[\"「\",[\"0\"],\"」をインポートしてもよろしいですか?\\n既存のデータが上書きされる可能性があります。\"],\"sbK5ck\":[\"履歴を検索...\"],\"sq_bS6\":[\"削除時\"],\"suW7-E\":[\"接続タイムアウト (ミリ秒)。\"],\"suqtBX\":[\"Escで閉じる\"],\"t-R8-P\":[\"実行\"],\"t1OfVY\":[[\"totalLibraries\"],\" 個のライブラリ\"],\"t2TMzs\":[\"タブを閉じる\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"テーブルを選択...\"],\"t7KRl1\":[\"すべての MCP ツール呼び出しの監査ログと、承認待ちのクエリ。ローカルに保存され、外部には送信されません。\"],\"t9NJIk\":[\"スキャンの多い操作を検出\"],\"tB7xof\":[\"一時またはソート操作\"],\"tBBXTO\":[\"Ping 間隔\"],\"tFrT3w\":[\"自動インストールが失敗する場合は、これをクライアントの設定ファイルに手動で追加してください。\"],\"tJ7UbA\":[\"フォーカス中のものを説明\"],\"tKlWWY\":[\"絵文字\"],\"tMFzq-\":[\"水平分割\"],\"tQhW-D\":[\"ログ設定\"],\"tT-BQX\":[\"インストール済み\"],\"tXFGEx\":[\"保存された Kubernetes 接続がありません。「追加」をクリックして作成してください。\"],\"tXLz_8\":[\"削除\"],\"tXpRby\":[\"データグリッド\"],\"tbysEk\":[\"操作\"],\"tdta9X\":[[\"0\"],\" ページ\"],\"tfDRzk\":[\"保存\"],\"tfEioV\":[\"上から下へすべての SQL セルを実行\"],\"tiAIaJ\":[\"SSH パスワードが未入力です。再入力してください。\"],\"tk22BR\":[\"構造化データを貼り付け、インポート前にスキーマをプレビューします\"],\"tst44n\":[\"イベント\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL ファイルを正常に実行しました\"],\"u6QeR6\":[\"今すぐ再起動\"],\"uAQUqI\":[\"ステータス\"],\"uBAxNB\":[\"エディタ\"],\"uBI8D9\":[\"Esc で閉じる\"],\"uFViPK\":[\"利用可能な SSH 接続がありません\"],\"uHUuhp\":[\"このクエリを説明\"],\"uHfFzS\":[\"エディタのフォントサイズ\"],\"uJ_3K5\":[\"ノートブック「\",[\"0\"],\"」を削除しますか?この操作は元に戻せません。\"],\"uKaNJ3\":[\"Open in JSON Editor\"],\"uQBwTo\":[\"スキーマ\"],\"ub54ff\":[\"プラグインセンター\"],\"ufFyBs\":[\"データベースを正常にエクスポートしました\"],\"upNmR2\":[\"サイドバーエディタで開く\"],\"upwIY4\":[\"ビュー定義\"],\"utMia3\":[\"すべて解除\"],\"uyNaJg\":[\"1件\"],\"v61dnS\":[\"OpenAI 互換プロバイダの正確なモデル名を入力してください。\"],\"v6oeyr\":[\"インストール済み\"],\"v75DGg\":[\"ファイルを参照\"],\"v99dO4\":[\"主キー\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のクエリが見つかりました\"],\"other\":[\"#\",\" 件のクエリが見つかりました\"]}]],\"vCSBPD\":[\"フィルターを追加\"],\"vH7uJj\":[\"並び替え…\"],\"vUOA1-\":[\"モデルを検索...\"],\"vWcB0p\":[\"PostgreSQL の ANALYZE では、利用可能な場合は実行行数、時間、ループ、バッファカウンタが含まれます。\"],\"vXIe7J\":[\"言語\"],\"vYf4Jm\":[\"完全な SQL 関数を入力してください (例: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"優先\"],\"vditm4\":[\"実行計画\"],\"vks_ls\":[\"他のタブを閉じる\"],\"vnAnIp\":[\"\",[\"1\"],\" ではモデル \",[\"0\"],\" が見つかりません。正しく動作しない可能性があります。\"],\"vqoN5u\":[\"構造\"],\"vrAvbP\":[\"グループ「\",[\"0\"],\"」を削除してもよろしいですか?このグループ内の接続は未分類に移動されます。\"],\"vtJ2yO\":[\"エクスプローラー\"],\"vujQJ5\":[\"ローカライズ\"],\"vvJPVL\":[\"概要を表示\"],\"vwI5S4\":[\"成功\"],\"vzH-7Z\":[\"Explain\"],\"w7QmD_\":[\"システムプロンプトを入力...\"],\"w9eMXw\":[\"トリガー\"],\"wCJFlW\":[\"経過時間\"],\"wCfv2R\":[\"接続を追加\"],\"wGfc86\":[\"すべての履歴を削除\"],\"wGwNv4\":[\"アクティブなデータベース\"],\"wJJ-Wy\":[\"インストール中...\"],\"wMe2Qp\":[\"ネームスペース\"],\"wQiel_\":[\"バッファヒット\"],\"wQn-RM\":[\"カラムを追加\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"適用済み\"],\"wTmVhm\":[\"削除\"],\"wZeIWq\":[\"クリップボードからインポート\"],\"w_bY7R\":[\"ログ\"],\"wc_8bA\":[\"承認待ち\"],\"wckWOP\":[\"管理\"],\"wdYcKH\":[\"開いているタブ\"],\"wja8aL\":[\"無題\"],\"wkOAzk\":[\"一致するノートブックがありません。\"],\"wp49Ao\":[\"挿入の処理に失敗しました: \"],\"wqG2hQ\":[\"スキップ (インポートしない)\"],\"wwrAsK\":[\"必須項目をすべて入力してください\"],\"wwu18a\":[\"アイコン\"],\"x2fr_j\":[\"グラフ\"],\"xANKBj\":[\"関数\"],\"xBwjck\":[\"変更を反映するには再起動が必要です。\"],\"xDAtGP\":[\"メッセージ\"],\"xECY01\":[\"プロシージャ\"],\"xGPNgZ\":[\"プロンプトのカスタマイズ\"],\"xNgtS-\":[\"ビューが見つかりません\"],\"xOPa1b\":[\"ポートは 1 から 65535 の範囲で指定してください\"],\"xY9s5E\":[\"タイムアウト\"],\"xaVUr1\":[\"いろはにほへと ちりぬるを わかよたれそ つねならむ\"],\"xbvTzL\":[\"ファイルパス\"],\"xlew5F\":[\"クリア\"],\"xmNyKz\":[\"テスト中...\"],\"xtuh6D\":[\"エクスプローラーを展開\"],\"y-Zdqj\":[\"コンテキストを選択...\"],\"y3HaQk\":[\"タイミング\"],\"yLFey_\":[\"トリガーを作成\"],\"yLianM\":[\"Open JSON viewer\"],\"yQXjG5\":[\"すべて解除\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"トリガーを編集\"],\"y_0uwd\":[\"昨日\"],\"ygCKqB\":[\"停止\"],\"ykCc6r\":[\"データベースを変更(セル \",[\"n\"],\")\"],\"ynVMSc\":[\"すべて選択\"],\"ytdz1d\":[\"AI がデータベース書き込みを要求しています\"],\"yyhzur\":[\"テーブル作成\"],\"yz7wBu\":[\"閉じる\"],\"z0VdfR\":[\"ルーチン\"],\"z407wX\":[\"SSH パスワード\"],\"z4oF5T\":[\"データベースをダンプ\"],\"z5kV0h\":[\"接続\"],\"zBTMzx\":[\"プレビュー\"],\"zCaAKs\":[\"アップデートエラー\"],\"zDAakK\":[\"接続 ID がないため、図を表示できません。\"],\"zGe21h\":[\"このキーは環境変数から読み込まれています\"],\"zGfL5t\":[\"値\"],\"zL6-4A\":[\"実行中のプラグインプロセスはありません\"],\"zLZhCi\":[\"Discord コミュニティが新登場!\"],\"zLlCou\":[\"カラム名をコピー\"],\"zNEL34\":[\"コミュニティに参加\"],\"zNgTlV\":[\"右側のタブを閉じる\"],\"zQz55p\":[\"構造を表示\"],\"zR0FfH\":[[\"target\"],\" にエクスポートしました\"],\"zRZeOc\":[\"テーブル、ビュー、ルーチン、トリガーを検索...\"],\"zUNMsr\":[\"SSH 鍵\"],\"zXMRzb\":[\"SSH ポート\"],\"zZgoXr\":[\"一致するテーブルがありません\"],\"zaWbms\":[\"変更をロールバック\"],\"zgClmU\":[\"設定をインストール\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"値を入力...\"],\"zvzN4C\":[\"アクティブに設定\"],\"zzDlyQ\":[\"成功\"],\"zzMxrp\":[\"config.json を編集\"],\"zz_Wd_\":[\"モード\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"最大履歴件数\"],\"-6AWa-\":[\"接続をインポート\"],\"-6NyRG\":[\"クライアント\"],\"-K0AvT\":[\"切断\"],\"-PLZfh\":[\"モデルの更新に失敗しました\"],\"-T5W2e\":[\"ドライバ補足\"],\"-ZgeeE\":[\"編集履歴\"],\"-aYrdc\":[\"バージョン \",[\"0\"],\" が利用可能です\"],\"-fBGXl\":[\"最高コスト\"],\"-jIQDz\":[\"セルを折りたたむ\"],\"-u1eRo\":[\"データベースなし\"],\"-yoeVU\":[\"スキーマを読み込み中...\"],\"-zy2Nq\":[\"タイプ\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"承認 ID\"],\"0E5-gF\":[\"この接続を削除してもよろしいですか?\"],\"0HCubq\":[\"展開\"],\"0Kmdvy\":[\"カスタムフォント\"],\"0Nj13E\":[\"SQL を生成\"],\"0ROgz5\":[\"JSON を入力...\"],\"0SY9sU\":[\"データベースからの切断に失敗しました\"],\"0b3kL9\":[\"データベースを選択\"],\"0caMy7\":[\"履歴\"],\"0mx5ow\":[\"クエリ\"],\"0n9BtL\":[\"プレビュー\"],\"0pHB9N\":[\"table.column 形式でコピー\"],\"0sQzZK\":[\"データベースをフィルター...\"],\"0uPP9X\":[\"FK 名 (任意)\"],\"0wxuek\":[\"現在のバージョン\"],\"0x09Aw\":[\"エラー時に停止を切り替え\"],\"0yBP6v\":[\"開発をサポート\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"0yVAoD\":[\"行数をカウント\"],\"0zxJ87\":[\"ログがありません\"],\"1-ETbn\":[\"ビジュアル Explain\"],\"1133_z\":[\"ビューを編集\"],\"11fGJ6\":[\"クエリ\"],\"13hIUA\":[[\"0\"],\" API キー\"],\"14qNWF\":[\"SSH 接続を選択\"],\"17qHRP\":[\"新規接続\"],\"1Dn6bg\":[\"クリップボードからインポート\"],\"1Dnd0I\":[\"行数を読み込む\"],\"1FjTLW\":[\"例: python3\"],\"1GOvbo\":[\"Ollama に接続しました (\",[\"0\"],\" 個のモデルを検出)\"],\"1I6UoR\":[\"ビュー\"],\"1U7hS5\":[\"長さ\"],\"1UTmg5\":[\"最大許容パケットサイズ\"],\"1b7aSU\":[\"エディタのフォントファミリー\"],\"1ekzlY\":[\"プラグインプロセス\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"テーマ選択\"],\"1xVZkL\":[\"モデルが見つかりません\"],\"26Joci\":[[\"0\"],\" 行を取得しました\"],\"2Bf-Qe\":[\"新規コンソール\"],\"2CrSmP\":[\"Tabularis の成長をサポート\"],\"2D9F8_\":[\"接続の複製に失敗しました\"],\"2Eoi_a\":[\"詳細を表示\"],\"2F4pE5\":[\"Rust ビルド・テスト\"],\"2Fsd9r\":[\"今月\"],\"2JzKXI\":[\"GENERATED に設定\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"すべて選択\"],\"2SO5RM\":[\"このドライバーでは Kubernetes を使用できません。\"],\"2Uh5GA\":[\"Cargo エコシステム\"],\"2YylFp\":[\"新規ビジュアルクエリ\"],\"2luuSG\":[\"再試行\"],\"2wxgft\":[\"名前を変更\"],\"2yG2GC\":[\"書き込み(またはすべてのクエリ)を一時停止し、データベースに到達する前に Tabularis 内でユーザーに承認を求めます。\"],\"30-b5r\":[\"削除\"],\"31kwdN\":[\"フィルターを複製\"],\"34nxyb\":[\"トリガー\"],\"35148H\":[\"すべてのツール\"],\"3Am5DS\":[\"タブ表示\"],\"3FVg9_\":[\"ローカルカラム\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"実行\"],\"3L0HCz\":[\"検索に一致するプラグインがありません。\"],\"3Nv3JV\":[\"クエリを実行中...\"],\"3TSz9S\":[\"最小化\"],\"3UW8fG\":[\"アップデートは \",[\"0\"],\" によって管理されています\"],\"3YvS-c\":[\"新規タブ\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"ノートブックセル名プロンプト\"],\"3qkggm\":[\"フルスクリーン\"],\"3rBJ1T\":[\"スキーマを表示\"],\"3xZ-xV\":[\"現在のタイムスタンプを挿入\"],\"40Gx0U\":[\"タイムゾーン\"],\"41GP4f\":[\"行を CSV としてコピーまたはエクスポートする際のデフォルト区切り文字を選択します。\"],\"42iaEi\":[\"ANALYZE なしの PostgreSQL はプランナーの推定のみを表示します。\"],\"44cXI8\":[[\"colName\"],\" を昇順で並べ替え\"],\"4AF7FO\":[\"データベースを管理\"],\"4CK17g\":[\"ビュー「\",[\"name\"],\"」を変更してもよろしいですか?\"],\"4DDaw-\":[\"少なくとも 1 つのデータベースを選択してください\"],\"4D_Nvt\":[\"グループの作成に失敗しました\"],\"4RiR6c\":[\"HTML としてエクスポート\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 個の子プロセス\"],\"other\":[\"#\",\" 個の子プロセス\"]}]],\"4TtbAT\":[\"Fetch the latest translations from the cloud without waiting for an app update.\"],\"4VyuY3\":[\"すべてのログを消去してもよろしいですか?\"],\"4WWqS3\":[\"Toggle inline JSON tree\"],\"4XAQdl\":[\"インデックスを作成\"],\"4cEClj\":[\"セッション\"],\"4cmfYp\":[\"行を複製\"],\"4hsr6d\":[\"ビューを作成\"],\"4lIZTB\":[\"フロントエンド開発依存\"],\"4oYjvJ\":[\"クエリを検索…\"],\"4tMxW4\":[\"関連レコードをプレビュー\"],\"4yJcjm\":[\"タイプを選択...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"フィルターパネルを閉じる (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"セミコロン (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のイベント\"],\"other\":[\"#\",\" 件のイベント\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"リスト表示\"],\"5To6Z6\":[\"クエリをコピー\"],\"5gqNQl\":[\"グリッド表示\"],\"5igIzr\":[\"インポートをキャンセルしました\"],\"5nTIup\":[\"ビューを編集中: \",[\"name\"]],\"5qIe8E\":[\"すべて実行\"],\"66bEht\":[\"プロジェクトの状態\"],\"6PIJVc\":[\"起動\"],\"6QvP0l\":[\"JSON としてエクスポート\"],\"6W41Xq\":[\"タスクマネージャ\"],\"6WngBH\":[\"NULL に設定\"],\"6YtxFj\":[\"名前\"],\"6_dCYd\":[\"概要\"],\"6dOBsk\":[\"ビューを作成\"],\"6gvoHP\":[\"エラーメッセージをコピー\"],\"6oCVzX\":[\"Kubernetes コンテキストは必須です\"],\"6wQO0f\":[\"データを表示\"],\"6z9W13\":[\"再起動\"],\"71agNy\":[\"AI で未命名セルの名前を生成\"],\"74J3FG\":[\"初期バージョン\"],\"75BWdo\":[\"トリガー定義の読み込みに失敗しました: \"],\"76d3Uz\":[\"イベント\"],\"76gPWk\":[\"了解\"],\"77nSMU\":[\"AI アクティビティ履歴をすべて削除しますか?この操作は元に戻せません。\"],\"7ABmyQ\":[\"再試行\"],\"7Ap0JP\":[[\"0\"],\" 件中 \",[\"activeFilterCount\"],\" 件が有効\"],\"7E864M\":[\"データベースの種類\"],\"7FqaG1\":[\"AI による EXPLAIN クエリ計画分析の指示をカスタマイズします。\",[\"LANGUAGE\"],\" を出力言語に使用します。\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"混在タイプを検出、TEXT にデフォルト設定\"],\"7RSQQd\":[\"パスワードをキーチェーンに保存\"],\"7VpPHA\":[\"確定\"],\"7e7bPs\":[\"トリガー本体 (SQL)\"],\"7eRaA9\":[\"トリガーを削除\"],\"7l15X4\":[\"失敗\"],\"7sMeHQ\":[\"キー\"],\"7sNhEz\":[\"ユーザー名\"],\"7tATh2\":[\"クエリを実行\"],\"7yb4gk\":[\"失敗: \"],\"8-4V8D\":[\"テーブル\"],\"82G-l5\":[\"Model Context Protocol (MCP) を使うと、AI アシスタント (Claude など) がローカルツールに接続できます。Tabularis は MCP サーバーを公開しており、AI がデータベーススキーマを読み取り、クエリを安全に実行できるようにします。\"],\"83VjWE\":[\"新規ノートブック\"],\"86IgoU\":[\"クエリを実行 (エディタ内)\"],\"86fCgf\":[\"AI によるクエリ結果タブ名生成の指示をカスタマイズします。SQL クエリがユーザーメッセージとして送信されます。\"],\"87a_t_\":[\"ラベル\"],\"87kWsr\":[\"接続をエクスポート\"],\"8CWirf\":[\"MCP サーバー\"],\"8S8aIX\":[\"接続ヘルスチェック\"],\"8TMaZI\":[\"タイムスタンプ\"],\"8Tg_JR\":[\"カスタム\"],\"8UFKYr\":[\"実行するクエリを選択\"],\"8VKSGV\":[\"SQL を生成\"],\"8Wjy6z\":[\"左側のタブを閉じる\"],\"8ZsakT\":[\"パスワード\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL エディタ\"],\"8bRgTe\":[\"AI プロバイダが未設定です。設定 > AI に移動してください。\"],\"8c_W0h\":[\"以前のバージョン\"],\"8guEQP\":[\"ビューを更新\"],\"8lm5qE\":[\"SQLite の EXPLAIN QUERY PLAN は軽量で、主に構造情報のみを提供します。\"],\"8q_sOc\":[\"削除\"],\"8t-akp\":[\"先頭 \",[\"MAX_PREVIEW_ROWS\"],\" 行を表示中\"],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"接続名\"],\"91gnWY\":[\"ログをエクスポート\"],\"91rtHL\":[\"ビューを新規作成\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"新規グループ\"],\"9DOfTQ\":[\"トリガーを編集中: \",[\"name\"]],\"9JdjEN\":[\"ビューを正常に更新しました\"],\"9NzDFn\":[\"アプリ起動時にウェルカム画面を表示します。\"],\"9OoUS3\":[\"新しい SSH 接続を作成\"],\"9QGRD5\":[\"対象カラム\"],\"9QTny9\":[\"クエリが失敗しました。\"],\"9S-fyV\":[\"プリフライト実行計画\"],\"9SJ_Sx\":[\"システムリソース\"],\"9UQ730\":[\"複製\"],\"9X6cky\":[\"いいえ\"],\"9XUV5V\":[\"クリップボードにデータが見つかりません\"],\"9hGjL2\":[\"インデックスを作成\"],\"9mMU1R\":[\"時間\"],\"9mvFo_\":[\"時刻\"],\"9npOH9\":[\"ファイルを開く\"],\"9uI_rE\":[\"元に戻す\"],\"9xUjzm\":[\"すべて選択\"],\"9y_02p\":[\"コミュニティとの交流、サポート、機能提案\"],\"A1pPcI\":[\"SSH ホスト\"],\"A1taO8\":[\"Search\"],\"A6C0pv\":[\"総コスト\"],\"A7WG0p\":[\"プラグインが無効\"],\"A7yRz3\":[\"ビュー定義は必須です\"],\"A9Uyp6\":[\"インポートに失敗しました: \"],\"ABEd-z\":[\"Tabularis のアップデートにはパッケージマネージャを使用してください。\"],\"AMdgKV\":[\"実行計画分析プロンプト\"],\"ANSTMe\":[\"現在のプランサマリに大きな問題は検出されませんでした。\"],\"ANzIr7\":[\"クエリ履歴\"],\"AOnaU7\":[\"スキップ\"],\"AVlZoM\":[\"環境変数\"],\"AXTVsE\":[\"完全検証\"],\"AXdRYR\":[\"現在のログ\"],\"Aa-YkQ\":[\"ノートブックをエクスポート\"],\"Ai2U7L\":[\"ホスト\"],\"AidayG\":[\"レベルでフィルター\"],\"AlPiMN\":[\"クリックでページ移動\"],\"An-1rA\":[\"取得行数\"],\"AnV8j-\":[\"カラムを変更\"],\"AvEr_L\":[\"新規コンソール\"],\"AvYbUL\":[\"GitHub でスター\"],\"Aw_eOs\":[\"Tabularis ≥ \",[\"minVersion\"],\" が必要です\"],\"AxPAXW\":[\"結果が見つかりません\"],\"B0mJGb\":[\"生出力\"],\"B1c58n\":[\"カラムを変更\"],\"B3toQF\":[\"オブジェクト\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"接続名は必須です\"],\"BAVvWJ\":[\"ER 図\"],\"BBtVak\":[\"すべて折りたたむ\"],\"BEVzjL\":[\"インポートに失敗しました\"],\"BHATjK\":[\"接続をエクスポート\"],\"BJe2lZ\":[\"サイドバーを切り替え\"],\"BK3WCj\":[\"レジストリの読み込みに失敗しました\"],\"BKbO3i\":[\"ノートブックを編集\"],\"BMB51y\":[\"コンソールで実行\"],\"BNW_Z4\":[\"例: active_users, order_summary\"],\"BPkXj7\":[\"外部キーを作成\"],\"BUO_JN\":[\"クエリをコピー\"],\"BYkhHY\":[\"起動時にアップデートを確認\"],\"BeSg6-\":[\"デバッグ用にアプリケーションログをメモリに収集します\"],\"BgAyQH\":[\"並べ替えを解除\"],\"BinTJI\":[\"npm エコシステム\"],\"BkFson\":[\"自動ページング\"],\"Bpglf1\":[\"上に移動\"],\"BrGo6h\":[\"ノートブックを検索\"],\"BxiAN_\":[\"クエリを削除\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"フロントエンド依存\"],\"CE-M2e\":[\"情報\"],\"CHIyL8\":[\"フィルターなし —\"],\"CJnUoU\":[\"トリガーを更新\"],\"CLWWRV\":[\"ダウンロード中...\"],\"CUxwxn\":[\"すべてのテーブルを表示\"],\"CWMXbw\":[\"のプロセスを強制的に停止します。このプラグインを使用しているアクティブなデータベース接続は、プラグインが再起動されるまで動作しなくなります。\"],\"CZt6BX\":[\"手動設定\"],\"Ca8ixZ\":[\"削除\"],\"CbJBQS\":[\"更新に失敗しました: \"],\"Cdz-YU\":[\"スタック表示\"],\"CpeQf9\":[\"ループ\"],\"D2wXBw\":[\"自動インクリメント\"],\"D6Ql0c\":[\"生成と説明に使用するモデルを選択します。\"],\"DB8zMK\":[\"適用\"],\"DDXf5E\":[\"SQL 関数\"],\"DEwnwi\":[\"削除\"],\"DNTvdl\":[\"エディタで開く\"],\"DPc2P9\":[\"セルを削除\"],\"DUY8Ba\":[\"破壊的変更\"],\"DVnBSM\":[\"行の高さ\"],\"Dd7YLj\":[\"あとで\"],\"Deej3j\":[\"無効な JSON\"],\"DfKhk_\":[\"更新\"],\"DiRiTz\":[\"パッケージページを開く\"],\"DlRHAD\":[\"EXPLAIN を実行中...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のエラー\"],\"other\":[\"#\",\" 件のエラー\"]}]],\"Dvdihe\":[[\"0\"],\" 上 — 実行前に確認して判断してください。\"],\"DzFLzw\":[\"はい\"],\"E-JUtQ\":[\"承認ゲート\"],\"E0kcnZ\":[\"一般\"],\"E2mje_\":[\"説明するクエリを選択\"],\"EDieyg\":[\"この SSH 接続を削除してもよろしいですか?\"],\"EHZxPj\":[\"Expand\"],\"EL4oDO\":[\"新しいバージョンが利用可能\"],\"EPi4gT\":[[\"field\"],\" で並び替え\"],\"EWPtMO\":[\"Code\"],\"EWX0mQ\":[\"未分類\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"不明\"],\"EhADgB\":[\"カラムを削除\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"最新の状態です\"],\"Em6JFd\":[\"行数をカウント\"],\"EnGiqG\":[[\"0\"],\"件\"],\"Ew1n5z\":[\"プラグインを検索…\"],\"F18WP3\":[\"パラメータ\"],\"F3uc1x\":[\"エクスポートされたファイルには、データベースおよび SSH のパスワードが平文で含まれます。安全な場所に保管してください。\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"F6pfE9\":[\"アクティブ\"],\"F8tXg7\":[\"データプレビュー\"],\"F9-6yK\":[\"デフォルトのコピー形式\"],\"F9lxfG\":[\"削除\"],\"F9nsa2\":[\"履歴ファイルが破損していたためバックアップに移動しました。新しいクエリは通常どおり記録されます。バックアップ ファイル:\"],\"FF_oap\":[\"デフォルト\"],\"FK8rlP\":[\"SSH 接続が設定されていません\"],\"FMRcH8\":[\"最初の行をヘッダーとして扱う\"],\"FNvDMc\":[\"今週\"],\"FQe1FI\":[\"推定行数\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"警告\"],\"FZg3wM\":[\"操作\"],\"Fa_cky\":[\"スキーマ: \",[\"tableName\"]],\"FpEL5o\":[\"SQL エディタに独立したテーマを選択するか、アプリのテーマと同期するかを選びます。\"],\"FsvZQL\":[\"セル \",[\"n\"],\" を編集\"],\"FtwKL9\":[\"タブを切り替え\"],\"FznI3z\":[\"外部キー「\",[\"name\"],\"」を削除しますか?\"],\"G6W8j1\":[\"プレビューに失敗しました: \"],\"G8Q5Zq\":[\"ネームスペースは必須です\"],\"GAohqx\":[\"カラムを削除\"],\"GJR99u\":[\"カラムの削除に失敗しました: \"],\"GKfzzM\":[\"接続を選択...\"],\"GS-Mus\":[\"エクスポート\"],\"GUaLUq\":[\"スキーマの読み込みに失敗しました: \"],\"GXP-Iw\":[\"SQL セルを追加\"],\"Gj1mLb\":[\"セルを並べ替え\"],\"GlbqG2\":[\"ドライバーの初期設定に戻す\"],\"Gq1YzP\":[\"イベント\"],\"Gs5AlY\":[\"開く\"],\"GtmO8_\":[\"開始\"],\"GxkJXS\":[\"アップロード中...\"],\"H-o4D2\":[\"新規カラムを作成\"],\"H2B-KW\":[\"Ctrl+C / Cmd+C で行をコピーする際のデフォルト形式を選択します。\"],\"H3oH0g\":[\"やり直す\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"折りたたむ\"],\"H9HlDe\":[\"minutes\"],\"H9P8CD\":[\"最初のフィルターを追加\"],\"HAQlGl\":[\"AI アクティビティ\"],\"HKNZrs\":[\"インデックス条件\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"#\",\" 行を削除\"],\"other\":[\"#\",\" 行を削除\"]}]],\"HPuCiP\":[\"フォルダパス\"],\"HUs1R3\":[\"この接続に対して開いているタブはありません。\"],\"HV4Isp\":[\"SSH パスワードを入力\"],\"HVC8Hh\":[\"クリップボードにコピーしました\"],\"HWEpq8\":[\"ディスク書き込み/秒\"],\"HY4nP5\":[\"インライン\"],\"HcmoWv\":[\"ビューの保存に失敗しました: \"],\"He8v1Y\":[\"すべて適用から除外\"],\"HehHP1\":[\"デフォルトレイアウト\"],\"HilYn4\":[\"このノートブックは空です。セルを追加して始めましょう。\"],\"HjxVK_\":[\"簡易接続テスト\"],\"HmMnRx\":[\"WKT モード\"],\"HoKCiI\":[\"インストール後にアプリは自動的に再起動します\"],\"HpK_8d\":[\"再読み込み\"],\"Hpi4Jm\":[\"今すぐ参加\"],\"HuA3RU\":[\"タブ\"],\"I128p7\":[\"パイプ (|)\"],\"I3AgqA\":[\"SSH をインラインで設定\"],\"I5VBsr\":[\"アプリと同じ\"],\"I8yrPb\":[\"テーブルを置換\"],\"I92BdB\":[\"グループから削除\"],\"I92fr4\":[\"あとで通知\"],\"I99Miw\":[\"コスト\"],\"IETZIR\":[\"セル名を編集\"],\"IG9wzA\":[\"行の挿入に失敗しました: \"],\"ILleOG\":[\"リソースタイプは \\\"service\\\" または \\\"pod\\\" である必要があります\"],\"IQ3gAw\":[\"ファイルをアップロード\"],\"IUwGEM\":[\"変更を保存\"],\"IUwmLq\":[\"package.json および src-tauri/Cargo.toml に宣言された直接依存です。\"],\"IVrBTT\":[\"オープンソースライブラリ\"],\"I_43p6\":[\"セーフティ\"],\"Iaizf4\":[\"外観\"],\"Il3FBB\":[\"構造化フィルターパネルを切り替え\"],\"IniZRK\":[\"ダウンロード不可 - プレビューのみ読み込み済み\"],\"Isaozb\":[\"確認・調整\"],\"J17_9Z\":[\"トリガーの保存に失敗しました: \"],\"J2Cb95\":[\"このプラグインを経由するアクティブなクエリや接続は中断されます。\"],\"J6v1s_\":[\"デフォルトモデル\"],\"JE-DVk\":[\"インタプリタ\"],\"JEGlfK\":[\"開始\"],\"JKDPqP\":[\"先にコンテキストを選択してください\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"SSH トンネルを使用\"],\"JRz8tw\":[\"MySQL および MariaDB では、サポートされた EXPLAIN ANALYZE または ANALYZE FORMAT バリアントでのみ実測値が得られます。\"],\"JUICth\":[\"PNG、JPG、WebP または SVG · 最大 512 KB\"],\"JY5Oyv\":[\"データベース\"],\"JlFRIB\":[\"接続後に MySQL に送信するセッションタイムゾーンです。\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"拒否\"],\"K3H9p5\":[\"未設定\"],\"K5Dgu_\":[\"データベース\"],\"K8IGKf\":[\"認証方式\"],\"KAYNSW\":[\"メモリに保持するログの件数 (1〜10000)\"],\"KHTGbr\":[\"プリフライト EXPLAIN\"],\"KHvda8\":[\"NOT NULL\"],\"KJKNaZ\":[\"`column` 形式でコピー\"],\"KM5Kc8\":[\"少なくとも 1 つのカラムを選択してください\"],\"KSCnVQ\":[\"種別\"],\"KUjOb9\":[\"実行中\"],\"KXBdwy\":[\"ルーチンを更新\"],\"KXNyX7\":[\"DEFAULT に設定\"],\"Kd70-v\":[\"クリップボードからインポート...\"],\"KhI4oS\":[[\"0\"],\" で参照行を開く\"],\"KhgrNu\":[\"MCP サーバー連携\"],\"KirERL\":[\"タイムアウト\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"インデックスの削除に失敗しました: \"],\"KzeARD\":[\"テーブルの削除に失敗しました: \"],\"L-rMC9\":[\"デフォルトに戻す\"],\"L3HXkQ\":[\"バグ修正\"],\"LCZ7Dy\":[\"名前をコピー\"],\"LFDf6p\":[\"新しいデータベーストリガーを作成します\"],\"LK1m4W\":[\"インデックス\"],\"LMeAoR\":[\"行\"],\"LPCdc-\":[\"クエリタブ名プロンプト\"],\"LPFmga\":[\"すべて適用に含める\"],\"LYzbQ2\":[\"ツール\"],\"Lbis_V\":[\"クイックナビゲーター\"],\"Lcpbe2\":[\"プラグインプロセスを起動できませんでした。下記のエラー詳細を確認してください。\"],\"LhUHHO\":[\"生成 SQL プレビュー\"],\"LihabZ\":[\"EXPLAIN は DML ステートメント (SELECT, INSERT, UPDATE, DELETE) のみサポートされます。CREATE、DROP、ALTER などの DDL は説明できません。\"],\"LnT0hQ\":[\"カラムを追加\"],\"LvutiO\":[\"AI 提案\"],\"M-rHQO\":[\"フルスクリーンを終了\"],\"M0XJba\":[\"この接続のクエリ履歴をすべて削除してもよろしいですか?\"],\"M1co_O\":[\"設定済み\"],\"M73whl\":[\"コンテキスト\"],\"MDa5o0\":[\"例: before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"すべて表示\"],\"MXdOwj\":[\"接続を分離\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"K8s 接続を選択\"],\"Mc1tjS\":[\"ANALYZE を有効にすると、実行行数、時間、ループ、バッファを確認できます。\"],\"Mm4p0T\":[\"+\",[\"0\"],\" 行以上\"],\"Mp0jQ_\":[\"このドライバはテーブル作成時のみ主キーをサポートします\"],\"MqpZwN\":[\"Tabularis プロセス\"],\"MxIx43\":[\"↑↓で移動、Enterで開く\"],\"MygtgQ\":[\"Markdown セルを追加\"],\"N40H-G\":[\"すべて\"],\"N5UQxq\":[\"ポート \",[\"0\"],\" で Ollama を検出できませんでした。起動していますか?\"],\"N6GBcC\":[\"削除の確認\"],\"N6aqHp\":[\"実行クエリ\"],\"N9_S15\":[\"新規テーブルが作成されます\"],\"NBdMa1\":[\"最も遅いステップ\"],\"NC2AI2\":[\"長さ\"],\"NCzNnx\":[\"昇順で並び替え\"],\"NT4Ubs\":[\"カスタムキーを削除し、環境変数に戻します (存在する場合)\"],\"NUjrCO\":[\"検索に一致するお気に入りがありません\"],\"NWJrXh\":[\"トリガー SQL は必須です\"],\"NZUDnP\":[\"ツリー合計: \",[\"0\"]],\"Nc2VQn\":[\"既存に追加\"],\"NgFERn\":[\"お気に入りに追加\"],\"NktMHG\":[\"データベース名\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"テスト\"],\"Nq5QTk\":[\"N 番目を説明\"],\"O2STgu\":[\"エクスポートに失敗しました: \"],\"O8SV8O\":[\"ダウンロード中...\"],\"O9_WW6\":[\"接続\"],\"OGEsKj\":[\"すべてのセルを実行\"],\"OGWdBg\":[\"ビュー名\"],\"OHqT6w\":[\"キーの組み合わせを押してください...\"],\"OXJsaG\":[\"不正なパラメータ名です\"],\"OfhWJH\":[\"リセット\"],\"OlAl5i\":[\"すべて展開\"],\"Osn70z\":[\"デバッグ\"],\"Ou8b_n\":[\"Discord に参加\"],\"P1YGsb\":[\"SQL 生成\"],\"P2m1xb\":[\"エラー時に停止\"],\"P3Qlys\":[\"接続 ID がありません\"],\"P6Y3Yf\":[\"このコマンドをターミナルで実行し、Claude Code を再起動してください。\"],\"PCdj-c\":[\"すべて解除\"],\"PMnFt9\":[\"ディスク読み取り/秒\"],\"PQU2Va\":[\"Enter で候補を確定\"],\"PRnH8G\":[\"/ \",[\"0\"],\" 件中\"],\"PY8UF3\":[\"並列を切り替え(セル \",[\"n\"],\")\"],\"PiH3UR\":[\"コピーしました!\"],\"Pia95d\":[\"カラム名は必須です\"],\"PrElXQ\":[\"更新\"],\"PrixCC\":[\"既存テーブルに行が追加されます\"],\"Pujgbb\":[\"インポート先を設定\"],\"Pw_eQV\":[\"プラグインの起動に失敗\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"保存済みクエリはありません\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"子プロセスはありません\"],\"QCxMC0\":[\"アプリ起動時に自動で新しいバージョンを確認します\"],\"QEazml\":[\"選択を削除\"],\"QHcLEN\":[\"接続済み\"],\"QLHHFO\":[\"読み取り専用モード\"],\"QOvAW3\":[\"新機能\"],\"QULGRi\":[\"有効なクエリが見つかりません\"],\"QZwllF\":[\"参照...\"],\"QbkSr_\":[\"このクエリは EXPLAIN に対応していません。\"],\"QeHFYZ\":[\"EXPLAIN 失敗: \",[\"0\"]],\"Qll2Tb\":[\"降順\"],\"Qoq-GP\":[\"もっと読む\"],\"Qu4Hog\":[\"ノートブックを正常にインポートしました\"],\"R-A2Vd\":[\"表示するデータがありません\"],\"R0Hkb2\":[[\"0\"],\" 個のデータベースを選択中\"],\"R1nHhB\":[\"既に存在します\"],\"R2Iz3m\":[\"トリガー名\"],\"R6oBUl\":[\"コンソールに変換\"],\"R9Khdg\":[\"自動\"],\"RDjuBN\":[\"セットアップ\"],\"RF-HyV\":[\"使用する言語を選択します。「自動」はシステムの言語を使用します。\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"名前をコピー\"],\"RI-HZc\":[[\"0\"],\" キーを入力\"],\"RJrE17\":[\"ビュー「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"スターはプロジェクトを他の人に見つけてもらう助けになります\"],\"Rb3Tdm\":[\"ノートブック名\"],\"RcbKJ3\":[\"更新時\"],\"RkefFq\":[\"承認モーダルを表示する前にクエリに対して EXPLAIN を実行し、ユーザーに実行計画を表示します。\"],\"RnF_hl\":[\"プラグインレジストリを読み込み中...\"],\"Rns7_C\":[\"この操作はすぐには取り消せません\"],\"RoKRqW\":[\"利用可能なプラグイン\"],\"RphpKk\":[\"外観\"],\"Rt8sHM\":[\"ソートまたは一時処理を検出\"],\"RuSW0a\":[\"タイムスタンプの表示とエクスポートに使用するタイムゾーン。「自動」はシステムのタイムゾーンに従います。\"],\"RxzN1M\":[\"有効\"],\"S1veKH\":[\"選択を元に戻す\"],\"S5zeZU\":[\"プレビューを切り替え\"],\"S8Yqbl\":[\"挿入\"],\"SDND4q\":[\"未設定\"],\"SJRy3D\":[\"(自動生成)\"],\"SSwIjo\":[\"EMPTY に設定\"],\"SgvA_r\":[\"Run (Ctrl/Command+F5) を押してテーブルデータを読み込んでください\"],\"SlfejT\":[\"エラー\"],\"SoATkx\":[\"セルをコピー\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"エンドポイント URL\"],\"T7w5CQ\":[\"新規行の作成に失敗しました: \"],\"T9947j\":[\"値 (例: 'text' や 123)\"],\"TCizFv\":[\"タイムゾーンを検索...\"],\"TI33l7\":[\"垂直レイアウトに切り替え\"],\"TK5oex\":[\"プロンプトを保存\"],\"TKQ7K-\":[\"インストール\"],\"TKZreP\":[\"必須\"],\"TMLAx2\":[\"必須\"],\"TO08JI\":[\"外部キー\"],\"TVKqvO\":[\"行を編集\"],\"TYSdQ3\":[\"SELECTクエリを実行\"],\"TfDFHS\":[\"エディタ内の長い行を横スクロールせず折り返します。\"],\"Tibfjs\":[\"保存された接続がありません — 下で作成してください\"],\"Tj36Dr\":[\"デフォルトに戻す\"],\"Tjg925\":[\"トリガー定義を読み込み中...\"],\"TlZ7Ul\":[\"クエリをロック\"],\"TpwXyg\":[\"タイミングが欠落している場合、サーバーは推定のみのプランを返している可能性があります。\"],\"Tw2M1h\":[\"インストール失敗\"],\"Ty-rm9\":[\"SSH 接続\"],\"Tz0i8g\":[\"設定\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes 接続\"],\"U4uzyV\":[\"新機能\"],\"U8W7sX\":[\"トリガー定義の取得に失敗しました: \"],\"UB112k\":[\"セルが失敗したら実行を停止します\"],\"UCQiqt\":[[\"0\"],\" に対して\"],\"UECR2b\":[[\"0\"],\" が \",[\"1\"],\" 上 — 実行前に確認して判断してください。\"],\"UI85PB\":[\"条件に一致するトリガーがありません\"],\"UNKlAy\":[[\"clientName\"],\" の設定が正常にインストールされました。変更を反映するにはアプリを再起動してください。\"],\"URmyfc\":[\"詳細\"],\"UWQBvp\":[\"SQLテンプレートを生成\"],\"UawTKZ\":[\"任意。このプラグインの実行に使用する実行ファイルを指定します (例: macOS/Linux では python3、Windows では python またはフルパス)。空欄の場合はデフォルトが使用されます。\"],\"Ub8sf5\":[\"SQLite は ALTER TABLE による FK 削除をサポートしていません。\"],\"UbbJ8j\":[\"選択肢が見つかりません\"],\"Ubs68g\":[\"一般\"],\"UftN8J\":[\"これらの接続は MCP からの書き込みを拒否します。他の接続は通常通り動作します。\"],\"UnQNah\":[\"テーブル「\",[\"tableName\"],\"」のカラム「\",[\"0\"],\"」を削除してもよろしいですか?\\n\\n警告: このカラムのすべてのデータが完全に削除されます。この操作は取り消せません。\"],\"UncTTh\":[\"プロセスツリー全体の RSS 合計 — 共有メモリを重複して計算している可能性があります\"],\"UpjgFm\":[\"パラメータを変更\"],\"UsAnu1\":[\"ANALYZE はクエリを実行します。データを変更するステートメントでは注意して使用してください。\"],\"UxKoFf\":[\"ナビゲーション\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"タブサイズ\"],\"UzWGWO\":[\"SQL WHERE 入力に切り替え\"],\"V-chk5\":[\"アクティブな接続の生存確認を行う間隔です。0 にすると無効になります。\"],\"V-pw1j\":[\"テーブル名\"],\"V2T0Uw\":[\"保存されたノートブックはまだありません。\"],\"V3aNwx\":[\"データエディタ\"],\"VGYp2r\":[\"すべてに適用\"],\"VH8S7x\":[\"クリップボードのカラム\"],\"VIAEcS\":[\"データベースの読み込みに失敗しました。認証情報を確認してください。\"],\"VKdztF\":[\"行を追加\"],\"VLiHXI\":[\"分析データ\"],\"VMbmXc\":[\"「\",[\"pluginName\"],\"」を削除してもよろしいですか?プラグインファイルが削除されます。\"],\"VO3weF\":[\"ファイルが読み込まれていません\"],\"VOZlKc\":[\"データベースをインポート\"],\"VPzsIz\":[\"名前を生成中...\"],\"VUul0v\":[\"強制終了中:\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"トリガーの削除に失敗しました: \"],\"VfOb_W\":[\"トリガーが見つかりません\"],\"Vgy9LX\":[\"すべてのクエリ\"],\"Vi2Pqx\":[\"作成者:\"],\"Vl2zn2\":[\"停止\"],\"Vo4uBA\":[\"プラグインのインストール中にエラーが発生しました。詳細は下記を参照してください。\"],\"VqqyOs\":[\"クエリを実行すると結果が表示されます\"],\"VzhDFh\":[\"下記で明示的に許可されていない限り、MCP 経由の SELECT 以外のステートメントをブロックします。\"],\"W3uwpT\":[\"すべてのタブを閉じる\"],\"W4MKLh\":[\"例: 本番環境でリスクがありそう、確認お願いします…\"],\"W60eXm\":[\"テーブル\"],\"WA8RND\":[\"テーブル「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"WG8Qgt\":[\"テーブルを削除\"],\"WLnvCZ\":[\"ユーザー名を入力\"],\"WM-__8\":[\"接続を検索...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行を「\",[\"tableName\"],\"」にインポートしました\"],\"other\":[\"#\",\" 行を「\",[\"tableName\"],\"」にインポートしました\"]}]],\"WTfntM\":[\"クエリ「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"WarTN_\":[\"成功\"],\"WcF1uL\":[\"グループ名\"],\"Weq9zb\":[\"一般\"],\"WmPpB1\":[\"実行計画を読み込み中…\"],\"Wu7cK0\":[\"データベースが見つかりません\"],\"WvoUQF\":[\"セル \",[\"n\"],\" を削除\"],\"Ww3pDD\":[\"手動コマンド\"],\"X-20AU\":[\"クエリタブ名プロンプトを入力...\"],\"X-U6_w\":[\"フォントファミリー\"],\"X5fs0g\":[\"最初の接続を作成して始めましょう。\"],\"X7Ayjp\":[\"パスワードをシステムのキーチェーンに保存しました\"],\"X9kySA\":[\"お気に入り\"],\"XJOV1Y\":[\"アクティビティ\"],\"XMCLEL\":[\"トリガーを新規作成\"],\"XN_sSd\":[\"Automatic updates\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"クエリ説明\"],\"XVF2Pf\":[\"スキーマを編集\"],\"XW6OYF\":[\"このプラグインにはインタプリタ (例: Python) が必要な場合があります。プラグイン設定からインタプリタのパスを設定してください。\"],\"XZB6Xr\":[\"最大ログエントリ数\"],\"Xcffv2\":[\"エディタに AI Assist と Explain ボタンを表示します\"],\"XeqTSh\":[\"結合タイプ\"],\"XmJfZT\":[\"名前\"],\"XoQfG1\":[\"SSH ユーザー\"],\"XwI0Vw\":[\"自動 (システム)\"],\"XyDlLX\":[\"インデックス名\"],\"Y2P2aK\":[\"読み込むスキーマを選択:\"],\"Y8HYw2\":[\"値\"],\"Y8zX3R\":[\"エディタに挿入\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"検索...\"],\"YWlnMZ\":[\"Ollama ポート\"],\"YYdC3A\":[\"バージョン \",[\"0\"]],\"YYn8b5\":[\"レジストリからプラグインを閲覧・インストールします。\"],\"Y_3yKT\":[\"新しいタブで開く\"],\"YiAQ_Q\":[\"テーブルを更新\"],\"Ysjr9Y\":[\"SQL プレビュー\"],\"YswNf7\":[\"すべてのレベル\"],\"YtNwr6\":[\"接続ごとに保存されるクエリ履歴の最大件数です。\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"読み込み中...\"],\"Z7ZXbT\":[\"承認\"],\"Z8JpBH\":[\"ノートブックとしてエクスポート\"],\"Z8fBIc\":[\"実行行数が推定を超過\"],\"ZC2VJP\":[\"実行\"],\"ZCIS4k\":[\"有効なフィルターなし\"],\"ZF1_UT\":[\"SSL モード\"],\"ZGjBPa\":[\"ログを消去\"],\"ZHQTlM\":[\"インポート元\"],\"ZIFDoJ\":[\"構造かデータのいずれかを選択してください\"],\"ZIZA6o\":[\"承認前に編集\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件の解析警告\"],\"other\":[\"#\",\" 件の解析警告\"]}]],\"ZVn8p2\":[\"エディタの左端に行番号を表示します。\"],\"ZYnwzF\":[\"切断済み\"],\"Za3_fO\":[\"エラー\"],\"ZcOxO1\":[\"外部キーを作成\"],\"Zf7LHg\":[\"コンテキストが見つかりません(kubectl はインストールされていますか?)\"],\"Zfotp5\":[\"大きな推定乖離は通常、古い統計やプランナーがモデル化しきれない述語を示します。\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"スキーマの読み込みに失敗しました\"],\"ZqXGPF\":[\"ビューの削除に失敗しました: \"],\"ZuL73E\":[\"新しいデータベースビューを作成します\"],\"_-bi4r\":[\"参照テーブル\"],\"_AEYGI\":[\"実行履歴はまだありません\"],\"_FdpZc\":[\"ビュー定義の読み込みに失敗しました: \"],\"_FxSdi\":[\"アプリ、バックエンド、ツールで使用している直接依存のオープンソースを閲覧できます。\"],\"_JyTG8\":[\"説明プロンプトを入力...\"],\"_Ltc_k\":[\"詳細\"],\"_Q2Wix\":[\"行\"],\"_TK1zF\":[\"保存された接続\"],\"_bJFBE\":[\"接続タイムアウト\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Tree\"],\"_dqduX\":[\"次のページ\"],\"_fwE6J\":[\"それ以前\"],\"_n04sB\":[\"停止\"],\"_otxbQ\":[\"鍵ファイル\"],\"_pezIT\":[[\"0\"],\" への接続に失敗しました。設定を確認するか、データベースが稼働していることを確認してください。\"],\"_srfkj\":[\"カスタムキーを正常に削除しました\"],\"_t6aFo\":[\"MySQL および MariaDB はサーバーのバージョンに応じて EXPLAIN FORMAT=JSON または表形式 EXPLAIN にフォールバックする場合があります。\"],\"_xTbaM\":[\"カラム\"],\"_yxaaL\":[\"ユニークインデックス\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis は無料のオープンソースプロジェクトです。便利だと感じたら、プロジェクトのサポートやコミュニティへの参加をご検討ください。\"],\"a9CASo\":[\"SQLite はカラムの名前変更のみサポートします。その他の変更にはテーブルの再作成が必要です。\"],\"aAIQg2\":[\"外観\"],\"aAURrV\":[\"インストール済み\"],\"aC_vCa\":[\"AI で名前を生成\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"ノードを選択して詳細を表示\"],\"aHKcKc\":[\"前のページ\"],\"aI-5wG\":[\"CAを検証\"],\"aJJySV\":[\"例: users\"],\"aQ8swY\":[\"デフォルト値\"],\"aScJP1\":[\"このクエリを実行\"],\"aVNbN8\":[\"フィルター条件\"],\"aWhdMQ\":[\"既存の SSH 接続を使用\"],\"aXYd8V\":[\"タイムアウト\"],\"aX_S_r\":[[\"0\"],\" / \",[\"totalPages\"],\" ページ\"],\"agZcf8\":[\"生成された SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [フィールド]\"],\"alplHn\":[\"AI でクエリ計画を分析中...\"],\"anBcU3\":[\"Tabularis を気に入っていただけたら、コードへの貢献、バグ報告、リポジトリへのスターなどでプロジェクトのサポートをご検討ください。\"],\"arHmj2\":[\"このクエリを履歴から削除してもよろしいですか?\"],\"arKcqW\":[\"古いサーバーでは、指標の少ない推定プランにフォールバックする場合があります。\"],\"arcpYe\":[\"承認が必要\"],\"aurEkh\":[\"プロセスを読み込み中…\"],\"avtdsd\":[\"SQL モード\"],\"az8lvo\":[\"オフ\"],\"b1Ah3z\":[\"フォーカス中\"],\"b392Dr\":[\"すべて展開\"],\"b5S_PU\":[\"データベース名\"],\"bAvovP\":[\"下に移動\"],\"bH3JqY\":[\"テーブルが見つかりません\"],\"bP5JOn\":[\"ワードラップ\"],\"bcOdok\":[\"グループを削除\"],\"bcqeas\":[\"MCP クエリをすべて読み取り専用にする\"],\"bmca5u\":[\"書き込みのみ\"],\"bpCiBU\":[\"MCP からの書き込みを許可\"],\"bqnhqW\":[\"推定が実行行数を超過\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"エラーで失敗\"],\"bw22Gk\":[\"カラムスキーマ\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"主な問題\"],\"cFCKYZ\":[\"拒否\"],\"cFGrCP\":[\"テーブル\"],\"cGeFup\":[\"フォントサイズ\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"テーブルにフォーカス\"],\"cM9NHc\":[\"ダウングレード:\"],\"cO9-2L\":[\"無効\"],\"cSev-j\":[\"フィルター\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行をインポート\"],\"other\":[\"#\",\" 行をインポート\"]}]],\"c_xoSn\":[\"セル \",[\"n\"],\" の名前を変更\"],\"cd0XEW\":[\"クエリを保存\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"グループを分割\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" ステートメント\"],\"d34vwG\":[\"データベースを読み込み\"],\"d6ynQ7\":[\"降順で並び替え\"],\"d8_6_v\":[\"キャンセル\"],\"d8wc1_\":[\"サンプル値\"],\"dBXoCS\":[\"環境変数が検出されていますが、上でキーを設定すれば上書きできます。\"],\"dD7NPy\":[\"アウトライン\"],\"dEgA5A\":[\"キャンセル\"],\"dMtLDE\":[\"終了\"],\"dPJVhW\":[\"インストール失敗\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のセッション\"],\"other\":[\"#\",\" 件のセッション\"]}]],\"dTUzKm\":[\"選択したものを実行 (\",[\"0\"],\")\"],\"dU_iQN\":[\"現在のフィルタに一致するセッションがありません。\"],\"dUh9QW\":[\"プランニング\"],\"dVoir2\":[\"Markdown セル \",[\"n\"],\" を追加\"],\"dZ0d2O\":[\"少なくとも 1 つのテーブルを選択してください\"],\"dhi13U\":[\"画像を選択…\"],\"dli1JX\":[\"変更を送信\"],\"dmYV6f\":[\"ルーチン\"],\"dohZCo\":[\"AI による SQL 生成の指示です。\",[\"SCHEMA\"],\" をデータベース構造のプレースホルダーとして使用します。\"],\"dtxpK2\":[\"分析\"],\"dwW9nJ\":[\"行番号を表示\"],\"dwWVw_\":[\"ウェルカム画面を表示\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"既存時の動作\"],\"dyN4j9\":[\"「プレビューを実行」をクリックすると結果が表示されます\"],\"e07Iz5\":[\"タスクマネージャを開く\"],\"e0NzXu\":[\"このプロジェクトは現在開発中 (WIP) です。主要機能は安定していますが、より大きな構想も進めています。\"],\"e1UKxf\":[\"このクエリを保存\"],\"e34gdU\":[\"MCP サブプロセスがリクエストをタイムアウトさせる前にユーザーの判断を待つ時間。\"],\"e62LQd\":[\"強制終了\"],\"e6QZsM\":[\"エディタテーマ\"],\"e8CirT\":[\"クエリを実行\"],\"eD2kUP\":[\"バッファ読み込み\"],\"eE0JZ4\":[\"バージョン\"],\"eIDch7\":[\"実行計画分析プロンプトを入力...\"],\"eIVolo\":[\"ディスク R/W\"],\"eJOEBy\":[\"エクスポート中...\"],\"eKHY3W\":[\"プラグイン設定\"],\"eMb6Ub\":[\"リソースを選択...\"],\"ePK91l\":[\"編集\"],\"eXweu6\":[\"セルを展開\"],\"ecNsTE\":[\"検索に一致するクエリがありません\"],\"ecUA8p\":[\"今日\"],\"ecpIZP\":[\"鍵が暗号化されている場合はパスフレーズを入力\"],\"ejmeDY\":[\"インストール済み\"],\"esl-Tv\":[\"リソースタイプ\"],\"exyUec\":[\"接続\"],\"f2AJjl\":[\"行を削除\"],\"f4pD-j\":[\"接続テストに失敗しました\"],\"f7sXvi\":[\"パスワードを入力\"],\"fAsxc0\":[\"シーケンシャルスキャン\"],\"fIeFs0\":[\"値を選択...\"],\"fJm92A\":[\"EXPLAIN プランを含むファイル (Postgres JSON またはテキスト形式) を選択して可視化します。\"],\"fOuPPd\":[\"プラグイン\"],\"fXVIZq\":[\"値\"],\"f_b1TA\":[\"実行履歴\"],\"fghnqP\":[\"接続 1〜9 に切り替え\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"カンマ (,)\"],\"fp711N\":[\"ブロック (読み取り専用)\"],\"fpzyLj\":[[\"0\"],\" / \",[\"1\"],\" ページ\"],\"fuA6oy\":[\"ソケットタイムアウト\"],\"fvImQM\":[[\"0\"],\" 件選択中\"],\"fwr_nh\":[\"拡張機能のインストール、プラグインドライバの管理、実行時設定のコントロールを行います。\"],\"g0ZzK4\":[\"有効な JSON\"],\"g11hAR\":[\"新規行\"],\"g8VcMm\":[\"マイ K8s クラスター\"],\"gCFR_O\":[\"並列実行 (すべて実行)\"],\"gEjU98\":[\"接続を開く\"],\"gPQ8z1\":[\"NULL 許可\"],\"gShKPx\":[\"少なくとも 1 つのカラムが必要です\"],\"gSuQrG\":[\"「\",[\"search\"],\"」に一致する接続はありません\"],\"gUypqb\":[\"クエリを再実行\"],\"gZWMnn\":[\"AI 分析\"],\"ghYd73\":[\"対象を選択...\"],\"giAqEC\":[\"新規テーブルを作成\"],\"gnQS8X\":[\"MySQL コネクタが使用する最大パケットサイズです。\"],\"gqV5VL\":[\"組み込み、カスタマイズ不可\"],\"gww_XE\":[\"参照カラム\"],\"gxXPJ9\":[\"インタプリタを設定\"],\"gxutEv\":[\"トリガーを正常に更新しました\"],\"gz6UQ3\":[\"最大化\"],\"h-XNc9\":[\"CSV 区切り文字\"],\"h-kNAk\":[\"例: sales_data\"],\"h3Z_aK\":[\"ここに Markdown を記述...\"],\"h7MgpO\":[\"キーボードショートカット\"],\"h7peZQ\":[\"許可\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 個のシステムプロセスが実行中\"],\"other\":[\"#\",\" 個のシステムプロセスが実行中\"]}]],\"hEZrFh\":[\"SQL ファイルを実行...\"],\"hEipgW\":[\"今すぐアップデートを確認\"],\"hG89Ed\":[\"画像\"],\"hIHcBE\":[\"CSV としてエクスポート\"],\"hItdtk\":[\"フォルダを参照\"],\"hXFVjo\":[\"テーブル名は必須です\"],\"hZ6znB\":[\"ポート\"],\"h_huI6\":[\"再実行\"],\"hbz1rh\":[\"キー\"],\"hdsaJo\":[\"インポート中...\"],\"he3ygx\":[\"コピー\"],\"hfGimp\":[\"ネームスペースを選択...\"],\"hjjSEi\":[\"読み取り専用接続\"],\"hjwN_s\":[\"リソース名\"],\"hlF1mD\":[\"選択範囲をコピー\"],\"hnboBb\":[\"AI によるクエリ計画分析\"],\"hnvu2p\":[\"エラーの詳細\"],\"hq4-D2\":[\"API キーはシステムのキーチェーンに安全に保管されます。ここでキーを設定すると環境変数より優先されます。\"],\"hqjXdn\":[\"SSH 接続の削除に失敗しました\"],\"hqofAK\":[\"SQL をコピー\"],\"hy6L14\":[\"GitHub で表示\"],\"hyjACX\":[\"セルを折りたたみ/展開\"],\"hz1b5W\":[\"一致する要素が見つかりません\"],\"i1vAVM\":[\"新規テーブルを作成\"],\"i3S5T3\":[\"お気に入りを検索...\"],\"i4_LY_\":[\"書き込み\"],\"i5HBWh\":[\"クエリ履歴をリセットしました\"],\"i5zCt4\":[\"テーブル\"],\"iAVlge\":[\"AI によるノートブックセル名生成の指示をカスタマイズします。セルの内容 (SQL または Markdown) がユーザーメッセージとして送信されます。\"],\"iE1yAB\":[\"テーブルをフィルター...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"接続\"],\"iSryJ2\":[\"My SSH Server\"],\"iT7UeX\":[\"インデックスを追加\"],\"iUWwuR\":[\"ダウンロードしてインストール\"],\"ia7i08\":[\"先にコンテキスト/ネームスペース/タイプを選択してください\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"保存しました\"],\"igcsfY\":[\"レジストリに利用可能なプラグインがありません。\"],\"ij-Elv\":[\"画像プレビュー\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"説明可能なクエリが \",\"#\",\" 件見つかりました\"],\"other\":[\"説明可能なクエリが \",\"#\",\" 件見つかりました\"]}]],\"ioL38P\":[\"プラグインプロセス、CPU、RAM、ディスク使用量をリアルタイムで監視します\"],\"ixlL_e\":[\"SSH 鍵ファイル (任意)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"モデルを選択\"],\"j3gyYH\":[\"すべて適用\"],\"j5CWO4\":[\"最新\"],\"j9HPuI\":[\"行 #\",[\"0\"]],\"jBtpMP\":[\"すべてのステータス\"],\"jEu4bB\":[\"カラム\"],\"jEyQIs\":[\"ルーチンが見つかりません\"],\"jHc1By\":[\"ビューを削除\"],\"jI6sj4\":[\"コスト、タイミング、行数推定は PostgreSQL や MySQL と比べて得られないことが多いです。\"],\"jIxQCZ\":[\"お使いのプラットフォームでは利用できません\"],\"jKIncn\":[\"データベース名は必須です\"],\"jPSk57\":[\"理由 (任意)\"],\"jUNY_d\":[\"ビュー\"],\"jVqjDo\":[\"不正なノートブックファイル形式です\"],\"jWSZ-A\":[\"プレビューのみ - 完全なデータは読み込まれていません\"],\"jgjIDU\":[\"既存のトリガーの削除に失敗しました: \"],\"jnhuWy\":[\"ソケットタイムアウト (ミリ秒)。\"],\"jpeU_Z\":[\"ノートブック\"],\"jpgB4Y\":[\"接続名は必須です\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"子プロセス\"],\"jx0t66\":[\"子プロセスを折りたたむ\"],\"k-0mL-\":[\"カラムを追加\"],\"k-XiMX\":[\"Raw\"],\"k2UnVy\":[\"ハッシュ条件\"],\"k5UUX3\":[\"トリガーを正常に作成しました\"],\"kALwhk\":[\"秒\"],\"kBiBq7\":[\"インデックス「\",[\"name\"],\"」を削除しますか?\"],\"kEYasw\":[\"チャートを切り替え\"],\"kI1qVD\":[\"整形\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行 · \",[\"1\"],\"ms\"],\"other\":[\"#\",\" 行 · \",[\"2\"],\"ms\"]}]],\"kJDmsI\":[\"イベントの詳細\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"レジストリ\"],\"kY-q3P\":[[\"label\"],\" は必須です\"],\"kexIdC\":[\"Kubernetes ポートフォワードを使用\"],\"krksx_\":[\"成功\"],\"ktYUe9\":[\"すべて実行\"],\"kwY6nh\":[\"閉じる\"],\"kx0s-n\":[\"結果\"],\"kxUEfE\":[\"ルーチン定義の取得に失敗しました: \"],\"l2Op2p\":[\"クエリパラメータ\"],\"l9Ivba\":[\"プラグインプロセスとシステムリソース\"],\"lBdPxu\":[\"アクセントカラー\"],\"lCF0wC\":[\"更新\"],\"lEQRwq\":[\"データ (INSERT)\"],\"lIvS11\":[\"トリガーを再作成\"],\"lKS0ce\":[\"新規テーブルを作成しました\"],\"lOekZ3\":[\"水平レイアウトに切り替え\"],\"lUA1C1\":[\"SSH 鍵のパスフレーズ (任意)\"],\"lVeG20\":[\"Rust 依存\"],\"lXAG6D\":[\"AI によるクエリ説明の指示です。\",[\"LANGUAGE\"],\" を出力言語のプレースホルダーとして使用します。\"],\"lbbYjy\":[\"生の設定ファイルを直接編集します。変更を反映するには再起動が必要です。\"],\"lhKW0m\":[\"SQL セル \",[\"n\"],\" を追加\"],\"lk-wOz\":[\"トリガーを絞り込み...\"],\"lk0x32\":[\"結果ページサイズ (上限)\"],\"lkz6PL\":[\"所要時間\"],\"lmVGeo\":[\"外部キーを追加\"],\"lnnx3E\":[\"Tabularis を Claude Desktop、Cursor などに接続\"],\"lpGiOh\":[\"Check interval\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"追加\"],\"m2Q_r8\":[\"Detect JSON in text columns\"],\"m2tskz\":[\"成功\"],\"mA-qpe\":[\"すべての実行が完了\"],\"mBhhbA\":[\"ログをクリップボードにエクスポートしました\"],\"mCNdzH\":[\"セルを実行\"],\"mO95sp\":[\"パネルを閉じる\"],\"mP7dLi\":[\"上にフォント名を入力してください\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件ブロック\"],\"other\":[\"#\",\" 件ブロック\"]}]],\"mS74ir\":[\"SSH 接続の保存に失敗しました\"],\"mSqtw8\":[\"プレビューを実行\"],\"mURmfQ\":[\"ビュー定義 (SQL)\"],\"mX_isJ\":[\"垂直\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"構造 (DDL)\"],\"mrk4Cf\":[[\"colName\"],\" を降順で並べ替え\"],\"msJ8t1\":[\"Tabularis ユーザー専用のコミュニティを立ち上げました。質問・情報交換・ロードマップへのフィードバックをお寄せください。\"],\"mtvVdV\":[\"処理行数\"],\"mx4evv\":[\"テーブルを作成\"],\"myXGZW\":[\"ガイド\"],\"mzI_c-\":[\"ダウンロード\"],\"n7JDTx\":[\"プラグインをインストールして有効化するとここに表示されます\"],\"nDDJir\":[\"セッション、クライアント、接続を検索…\"],\"nHP-Kr\":[\"アクティブなセッションがありません。接続を選択してください。\"],\"nKhCjW\":[\"テーブルを選択\"],\"nNwvm4\":[\"エラー\"],\"nOVim5\":[\"接続の保存に失敗しました\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"イベント\"],\"nf14vn\":[\"拡張機能が必要: \",[\"0\"]],\"ngO6Pv\":[\"Tab に加えて Enter でもオートコンプリートの候補を確定できるようにします。オフの場合、Enter は常に改行を挿入します。\"],\"nhmF3p\":[\"接続\"],\"noM5A_\":[\"最初の接続を作成\"],\"nohy4m\":[\"MCP アクティビティはまだありません。\"],\"nr-axf\":[\"プラグインを削除\"],\"nsPFX9\":[\"Visual Explain で開く\"],\"nuBbBr\":[\"チャート\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"データベースをダンプ\"],\"o-XJ9D\":[\"変更\"],\"o21Y-P\":[\"件\"],\"o3tP_A\":[\"インデックスを削除\"],\"o45L8r\":[\"接続名を入力\"],\"o53XGh\":[\"選択した行をコピー\"],\"o7J4JM\":[\"フィルター\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"レベル\"],\"oGiIL7\":[\"デフォルトプロバイダ\"],\"oH8GS6\":[\"定義を表示\"],\"oJ4rAm\":[\"接続が失われました\"],\"oJlXF2\":[\"ノートブックをインポート\"],\"oMFv82\":[\"垂直分割\"],\"oOFiQg\":[\"パフォーマンス問題を避けるため、クエリごとに取得する行数を制限します。0 に設定すると無効化されます (非推奨)。\"],\"oT9ZD3\":[\"概要を非表示\"],\"oUzLtx\":[\"トリガーを編集するには、いったん削除して再作成する必要があります。「\",[\"name\"],\"」の変更を続行しますか?\"],\"oVRbyk\":[\"チャートを変更(セル \",[\"n\"],\")\"],\"oWfclW\":[\"Show the JSON viewer affordance when a non-typed text cell contains a JSON object or array. Adds a small per-cell parse cost.\"],\"obpbdz\":[\"設定ファイルが見つかりません (手動で作成してください)\"],\"odZgfC\":[\"AI クライアント\"],\"ogZhXn\":[\"ER 図のデフォルトのレイアウト方向を選択します\"],\"ohUJJM\":[\"プラグイン\"],\"olAdaI\":[\"実行行数\"],\"olWzar\":[\"プラグインプロセスを強制終了\"],\"ovBPCi\":[\"デフォルト\"],\"owzTWN\":[\"プロバイダから AI モデルを更新しました\"],\"oxYi6j\":[\"アプリケーション全体で使用される基本フォントサイズを調整します (10〜20px)。\"],\"p--hsQ\":[\"データベース接続が失われました\"],\"p6NueD\":[\"NEW\"],\"pOYHox\":[\"アクション\"],\"pR9bTR\":[\"BLOB データなし\"],\"pS8S5q\":[\"例: users, orders, products\"],\"pSws_M\":[\"テーブル名\"],\"pVLbKZ\":[\"ビューを正常に作成しました\"],\"pWT04I\":[\"確認中...\"],\"pZJ_6D\":[\"インデックス名は必須です\"],\"pddYFG\":[\"ノートブックセル名プロンプトを入力...\"],\"pm9Yb5\":[\"Translation updates\"],\"pnpyuD\":[\"ログを有効化\"],\"pqKMPv\":[\"テーブルの作成に失敗しました: \"],\"pqaP1h\":[\"閉じる\"],\"pqarBu\":[\"昇順\"],\"ptuq35\":[\"例: Comic Sans MS\"],\"pzu7v4\":[\"水平\"],\"q-ch8m\":[\"他のすべての接続は読み取り専用のままです。ここでチェックされた接続のみ書き込みを実行できます。\"],\"qA5jLs\":[\"エラーの詳細\"],\"qIrtcK\":[\"アップデート\"],\"qOqy8G\":[\"設定を確認中...\"],\"qWaVNs\":[\"保存して再起動\"],\"qb3LPX\":[\"ER 図を表示\"],\"qkK0vq\":[\"ビュー名は必須です\"],\"qki9tG\":[\"エラー\"],\"qoIir-\":[\"OpenAI 互換 API のベース URL です。例: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"すべて折りたたむ\"],\"r6ncaO\":[\"タブを閉じる\"],\"rAJlpP\":[\"コンテナポート\"],\"rG3WVm\":[\"SELECT\"],\"rGRCeK\":[\"クエリ履歴を削除\"],\"rNIto7\":[\"リソース名は必須です\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"ノートブックを正常にエクスポートしました\"],\"rY4sEV\":[\"FK を削除\"],\"rbu0nO\":[\"SSH 接続を管理\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件の接続\"],\"other\":[\"#\",\" 件の接続\"]}]],\"rn2_2V\":[\"フィルターを削除\"],\"roABNH\":[\"クエリ履歴はありません\"],\"rtir7c\":[\"不明\"],\"ru0-2W\":[\"アクティブな接続はありません\"],\"rvDPWO\":[\"推定の乖離\"],\"rwWjWg\":[\"リリースノート\"],\"s6m9gy\":[\"トリガー「\",[\"0\"],\"」を削除してもよろしいですか?\"],\"s7uMvM\":[\"接続テスト\"],\"sBOaim\":[\"設定ファイルを保存しました。変更を反映するために今すぐ再起動しますか?\"],\"sCyv9B\":[\"モデルを更新\"],\"sSUqe4\":[\"削除\"],\"sUBkgN\":[\"SQL を生成中...\"],\"sZZG3d\":[\"「\",[\"0\"],\"」をインポートしてもよろしいですか?\\n既存のデータが上書きされる可能性があります。\"],\"sbK5ck\":[\"履歴を検索...\"],\"sq_bS6\":[\"削除時\"],\"suW7-E\":[\"接続タイムアウト (ミリ秒)。\"],\"suqtBX\":[\"Escで閉じる\"],\"t-R8-P\":[\"実行\"],\"t1OfVY\":[[\"totalLibraries\"],\" 個のライブラリ\"],\"t2TMzs\":[\"タブを閉じる\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"テーブルを選択...\"],\"t7KRl1\":[\"すべての MCP ツール呼び出しの監査ログと、承認待ちのクエリ。ローカルに保存され、外部には送信されません。\"],\"t9NJIk\":[\"スキャンの多い操作を検出\"],\"tB7xof\":[\"一時またはソート操作\"],\"tBBXTO\":[\"Ping 間隔\"],\"tFrT3w\":[\"自動インストールが失敗する場合は、これをクライアントの設定ファイルに手動で追加してください。\"],\"tJ7UbA\":[\"フォーカス中のものを説明\"],\"tKlWWY\":[\"絵文字\"],\"tMFzq-\":[\"水平分割\"],\"tQhW-D\":[\"ログ設定\"],\"tT-BQX\":[\"インストール済み\"],\"tXFGEx\":[\"保存された Kubernetes 接続がありません。「追加」をクリックして作成してください。\"],\"tXLz_8\":[\"削除\"],\"tXpRby\":[\"データグリッド\"],\"tbysEk\":[\"操作\"],\"tdta9X\":[[\"0\"],\" ページ\"],\"tfDRzk\":[\"保存\"],\"tfEioV\":[\"上から下へすべての SQL セルを実行\"],\"tiAIaJ\":[\"SSH パスワードが未入力です。再入力してください。\"],\"tk22BR\":[\"構造化データを貼り付け、インポート前にスキーマをプレビューします\"],\"tst44n\":[\"イベント\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL ファイルを正常に実行しました\"],\"u6QeR6\":[\"今すぐ再起動\"],\"uAQUqI\":[\"ステータス\"],\"uBAxNB\":[\"エディタ\"],\"uBI8D9\":[\"Esc で閉じる\"],\"uFViPK\":[\"利用可能な SSH 接続がありません\"],\"uHUuhp\":[\"このクエリを説明\"],\"uHfFzS\":[\"エディタのフォントサイズ\"],\"uJ_3K5\":[\"ノートブック「\",[\"0\"],\"」を削除しますか?この操作は元に戻せません。\"],\"uKaNJ3\":[\"Open in JSON Editor\"],\"uQBwTo\":[\"スキーマ\"],\"ub54ff\":[\"プラグインセンター\"],\"ufFyBs\":[\"データベースを正常にエクスポートしました\"],\"upNmR2\":[\"サイドバーエディタで開く\"],\"upwIY4\":[\"ビュー定義\"],\"utMia3\":[\"すべて解除\"],\"uyNaJg\":[\"1件\"],\"v61dnS\":[\"OpenAI 互換プロバイダの正確なモデル名を入力してください。\"],\"v6oeyr\":[\"インストール済み\"],\"v75DGg\":[\"ファイルを参照\"],\"v99dO4\":[\"主キー\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のクエリが見つかりました\"],\"other\":[\"#\",\" 件のクエリが見つかりました\"]}]],\"vCSBPD\":[\"フィルターを追加\"],\"vH7uJj\":[\"並び替え…\"],\"vUOA1-\":[\"モデルを検索...\"],\"vWcB0p\":[\"PostgreSQL の ANALYZE では、利用可能な場合は実行行数、時間、ループ、バッファカウンタが含まれます。\"],\"vXIe7J\":[\"言語\"],\"vYf4Jm\":[\"完全な SQL 関数を入力してください (例: ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"優先\"],\"vditm4\":[\"実行計画\"],\"vks_ls\":[\"他のタブを閉じる\"],\"vnAnIp\":[\"\",[\"1\"],\" ではモデル \",[\"0\"],\" が見つかりません。正しく動作しない可能性があります。\"],\"vqoN5u\":[\"構造\"],\"vrAvbP\":[\"グループ「\",[\"0\"],\"」を削除してもよろしいですか?このグループ内の接続は未分類に移動されます。\"],\"vtJ2yO\":[\"エクスプローラー\"],\"vujQJ5\":[\"ローカライズ\"],\"vvJPVL\":[\"概要を表示\"],\"vwI5S4\":[\"成功\"],\"vzH-7Z\":[\"Explain\"],\"w7QmD_\":[\"システムプロンプトを入力...\"],\"w9eMXw\":[\"トリガー\"],\"wCJFlW\":[\"経過時間\"],\"wCfv2R\":[\"接続を追加\"],\"wGfc86\":[\"すべての履歴を削除\"],\"wGwNv4\":[\"アクティブなデータベース\"],\"wJJ-Wy\":[\"インストール中...\"],\"wMe2Qp\":[\"ネームスペース\"],\"wQiel_\":[\"バッファヒット\"],\"wQn-RM\":[\"カラムを追加\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"適用済み\"],\"wTmVhm\":[\"削除\"],\"wXx7W4\":[\"How often to check for new translations.\"],\"wZeIWq\":[\"クリップボードからインポート\"],\"w_bY7R\":[\"ログ\"],\"wc_8bA\":[\"承認待ち\"],\"wckWOP\":[\"管理\"],\"wdYcKH\":[\"開いているタブ\"],\"wja8aL\":[\"無題\"],\"wkOAzk\":[\"一致するノートブックがありません。\"],\"wp49Ao\":[\"挿入の処理に失敗しました: \"],\"wqG2hQ\":[\"スキップ (インポートしない)\"],\"wwrAsK\":[\"必須項目をすべて入力してください\"],\"wwu18a\":[\"アイコン\"],\"x2fr_j\":[\"グラフ\"],\"xANKBj\":[\"関数\"],\"xBwjck\":[\"変更を反映するには再起動が必要です。\"],\"xDAtGP\":[\"メッセージ\"],\"xECY01\":[\"プロシージャ\"],\"xGPNgZ\":[\"プロンプトのカスタマイズ\"],\"xNgtS-\":[\"ビューが見つかりません\"],\"xOPa1b\":[\"ポートは 1 から 65535 の範囲で指定してください\"],\"xY9s5E\":[\"タイムアウト\"],\"xaVUr1\":[\"いろはにほへと ちりぬるを わかよたれそ つねならむ\"],\"xbvTzL\":[\"ファイルパス\"],\"xlew5F\":[\"クリア\"],\"xmNyKz\":[\"テスト中...\"],\"xtuh6D\":[\"エクスプローラーを展開\"],\"y-Zdqj\":[\"コンテキストを選択...\"],\"y3HaQk\":[\"タイミング\"],\"yLFey_\":[\"トリガーを作成\"],\"yLianM\":[\"Open JSON viewer\"],\"yQXjG5\":[\"すべて解除\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"トリガーを編集\"],\"y_0uwd\":[\"昨日\"],\"ygCKqB\":[\"停止\"],\"ykCc6r\":[\"データベースを変更(セル \",[\"n\"],\")\"],\"ynVMSc\":[\"すべて選択\"],\"ytdz1d\":[\"AI がデータベース書き込みを要求しています\"],\"yyhzur\":[\"テーブル作成\"],\"yz7wBu\":[\"閉じる\"],\"z0VdfR\":[\"ルーチン\"],\"z407wX\":[\"SSH パスワード\"],\"z4oF5T\":[\"データベースをダンプ\"],\"z5kV0h\":[\"接続\"],\"zBTMzx\":[\"プレビュー\"],\"zCaAKs\":[\"アップデートエラー\"],\"zDAakK\":[\"接続 ID がないため、図を表示できません。\"],\"zGe21h\":[\"このキーは環境変数から読み込まれています\"],\"zGfL5t\":[\"値\"],\"zL6-4A\":[\"実行中のプラグインプロセスはありません\"],\"zLZhCi\":[\"Discord コミュニティが新登場!\"],\"zLlCou\":[\"カラム名をコピー\"],\"zNEL34\":[\"コミュニティに参加\"],\"zNgTlV\":[\"右側のタブを閉じる\"],\"zQz55p\":[\"構造を表示\"],\"zR0FfH\":[[\"target\"],\" にエクスポートしました\"],\"zRZeOc\":[\"テーブル、ビュー、ルーチン、トリガーを検索...\"],\"zUNMsr\":[\"SSH 鍵\"],\"zXMRzb\":[\"SSH ポート\"],\"zZgoXr\":[\"一致するテーブルがありません\"],\"zaWbms\":[\"変更をロールバック\"],\"zgClmU\":[\"設定をインストール\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"値を入力...\"],\"zvzN4C\":[\"アクティブに設定\"],\"zzDlyQ\":[\"成功\"],\"zzMxrp\":[\"config.json を編集\"],\"zz_Wd_\":[\"モード\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/ru/messages.po b/src/locales/ru/messages.po index b3e5aefe..c4fda691 100644 --- a/src/locales/ru/messages.po +++ b/src/locales/ru/messages.po @@ -500,12 +500,10 @@ msgstr "Очистить всю историю запросов для этог #. placeholder {0}: column.name #: src/components/layout/sidebar/SidebarColumnItem.tsx -msgid "" -"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +msgid "Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" "\n" "WARNING: This will permanently delete all data in this column. This action cannot be undone." -msgstr "" -"Удалить столбец \"{0}\" из таблицы \"{tableName}\"?\n" +msgstr "Удалить столбец \"{0}\" из таблицы \"{tableName}\"?\n" "\n" "ВНИМАНИЕ: Все данные в этом столбце будут безвозвратно удалены. Действие необратимо." @@ -548,11 +546,9 @@ msgstr "Удалить представление \"{0}\"?" #. placeholder {0}: file.split(/[\\/]/).pop() #: src/components/layout/ExplorerSidebar.tsx -msgid "" -"Are you sure you want to import \"{0}\"?\n" +msgid "Are you sure you want to import \"{0}\"?\n" "This may overwrite existing data." -msgstr "" -"Импортировать \"{0}\"?\n" +msgstr "Импортировать \"{0}\"?\n" "Существующие данные могут быть перезаписаны." #: src/components/modals/ViewEditorModal.tsx @@ -601,6 +597,10 @@ msgstr "Автоинкремент" msgid "Auto paginated" msgstr "Автопостраничный вывод" +#: src/components/settings/LocalizationTab.tsx +msgid "Automatic updates" +msgstr "" + #: src/components/settings/InfoTab.tsx msgid "Automatically check for new versions when the app launches" msgstr "Автоматически проверять новые версии при запуске приложения" @@ -746,6 +746,10 @@ msgstr "Проверить обновления сейчас" msgid "Check for updates on startup" msgstr "Проверять обновления при запуске" +#: src/components/settings/LocalizationTab.tsx +msgid "Check interval" +msgstr "" + #: src/components/modals/McpModal.tsx #: src/pages/McpPage.tsx msgid "Checking configuration..." @@ -2297,6 +2301,10 @@ msgstr "Ошибка: " msgid "Favorites" msgstr "Избранное" +#: src/components/settings/LocalizationTab.tsx +msgid "Fetch the latest translations from the cloud without waiting for an app update." +msgstr "" + #: src/components/modals/NewConnectionModal.tsx msgid "File Path" msgstr "Путь к файлу" @@ -2520,6 +2528,10 @@ msgstr "Сколько времени MCP-процесс ожидает реше msgid "How many logs to keep in memory (1-10000)" msgstr "Количество логов, хранимых в памяти (1–10000)" +#: src/components/settings/LocalizationTab.tsx +msgid "How often to check for new translations." +msgstr "" + #: src/components/settings/GeneralTab.tsx msgid "How often to check if active connections are still alive. Set to 0 to disable." msgstr "Как часто проверять активные подключения. Установите 0 для отключения." @@ -2971,6 +2983,10 @@ msgstr "Сообщение" msgid "Minimize" msgstr "Свернуть" +#: src/components/settings/LocalizationTab.tsx +msgid "minutes" +msgstr "" + #: src/components/modals/ClipboardImport/SchemaEditor.tsx msgid "Mixed types detected, defaulted to TEXT" msgstr "Обнаружены смешанные типы, использован TEXT" @@ -5022,6 +5038,10 @@ msgstr "Основные проблемы" msgid "Total Cost" msgstr "Общая стоимость" +#: src/components/settings/LocalizationTab.tsx +msgid "Translation updates" +msgstr "" + #: src/components/ui/JsonInput.tsx msgid "Tree" msgstr "Дерево" diff --git a/src/locales/ru/messages.ts b/src/locales/ru/messages.ts index 6e78d75e..6afb0b48 100644 --- a/src/locales/ru/messages.ts +++ b/src/locales/ru/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Максимум записей в истории\"],\"-6AWa-\":[\"Импортировать подключения\"],\"-6NyRG\":[\"Клиент\"],\"-K0AvT\":[\"Отключиться\"],\"-PLZfh\":[\"Не удалось обновить модели\"],\"-T5W2e\":[\"Примечания драйвера\"],\"-ZgeeE\":[\"История изменений\"],\"-aYrdc\":[\"Доступна версия \",[\"0\"]],\"-fBGXl\":[\"Наибольшая стоимость\"],\"-jIQDz\":[\"Свернуть ячейку\"],\"-u1eRo\":[\"Нет базы данных\"],\"-yoeVU\":[\"Загрузка схемы...\"],\"-zy2Nq\":[\"Тип\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID подтверждения\"],\"0E5-gF\":[\"Удалить это подключение?\"],\"0HCubq\":[\"Развернуть\"],\"0Kmdvy\":[\"Пользовательский шрифт\"],\"0Nj13E\":[\"Сгенерировать SQL\"],\"0ROgz5\":[\"Введите JSON...\"],\"0SY9sU\":[\"Не удалось отключиться от базы данных\"],\"0b3kL9\":[\"Выберите базу данных\"],\"0caMy7\":[\"История\"],\"0mx5ow\":[\"Запрос\"],\"0n9BtL\":[\"Предпросмотр\"],\"0pHB9N\":[\"Копировать как table.column\"],\"0sQzZK\":[\"Фильтр баз данных...\"],\"0uPP9X\":[\"Имя внешнего ключа (необязательно)\"],\"0wxuek\":[\"Текущая версия\"],\"0x09Aw\":[\"Переключён останов при ошибке\"],\"0yBP6v\":[\"Поддержать разработку\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка\"],\"few\":[\"#\",\" строки\"],\"many\":[\"#\",\" строк\"],\"other\":[\"#\",\" строки\"]}]],\"0yVAoD\":[\"Подсчитать строки\"],\"0zxJ87\":[\"Логи отсутствуют\"],\"1-ETbn\":[\"Визуальный Explain\"],\"1133_z\":[\"Изменить представление\"],\"11fGJ6\":[\"Запросы\"],\"13hIUA\":[\"API-ключ \",[\"0\"]],\"14qNWF\":[\"Выбрать SSH-подключение\"],\"17qHRP\":[\"Новое подключение\"],\"1Dn6bg\":[\"Импортировать из буфера обмена\"],\"1Dnd0I\":[\"Загрузить количество строк\"],\"1FjTLW\":[\"например, python3\"],\"1GOvbo\":[\"Ollama подключён (найдено моделей: \",[\"0\"],\")\"],\"1I6UoR\":[\"Представления\"],\"1U7hS5\":[\"Длина\"],\"1UTmg5\":[\"Максимальный размер пакета\"],\"1b7aSU\":[\"Шрифт редактора\"],\"1ekzlY\":[\"Процессы плагинов\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Выбор темы\"],\"1xVZkL\":[\"Модели не найдены\"],\"26Joci\":[\"Строк: \",[\"0\"]],\"2Bf-Qe\":[\"Новая консоль\"],\"2CrSmP\":[\"Помогите Tabularis развиваться\"],\"2D9F8_\":[\"Не удалось дублировать подключение\"],\"2Eoi_a\":[\"Подробности\"],\"2F4pE5\":[\"Сборка и тесты Rust\"],\"2Fsd9r\":[\"В этом месяце\"],\"2JzKXI\":[\"Установить GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Выбрать все\"],\"2SO5RM\":[\"Kubernetes недоступен для этого драйвера.\"],\"2Uh5GA\":[\"Экосистема Cargo\"],\"2YylFp\":[\"Новый визуальный запрос\"],\"2luuSG\":[\"Повторить\"],\"2wxgft\":[\"Переименовать\"],\"2yG2GC\":[\"Приостанавливать запись (или любой запрос) и запрашивать подтверждение в Tabularis перед отправкой в базу данных.\"],\"30-b5r\":[\"Удалить\"],\"31kwdN\":[\"Дублировать фильтр\"],\"34nxyb\":[\"Триггеры\"],\"35148H\":[\"Все инструменты\"],\"3Am5DS\":[\"Вкладки\"],\"3FVg9_\":[\"Локальный столбец\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Запустить\"],\"3L0HCz\":[\"Плагины не найдены.\"],\"3Nv3JV\":[\"Выполнение запроса...\"],\"3TSz9S\":[\"Свернуть\"],\"3UW8fG\":[\"Обновления управляются через \",[\"0\"]],\"3YvS-c\":[\"Новая вкладка\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Промпт для названия ячейки ноутбука\"],\"3qkggm\":[\"На весь экран\"],\"3rBJ1T\":[\"Просмотреть схему\"],\"3xZ-xV\":[\"Вставить текущую метку времени\"],\"40Gx0U\":[\"Часовой пояс\"],\"41GP4f\":[\"Разделитель по умолчанию при копировании или экспорте строк в формате CSV.\"],\"42iaEi\":[\"PostgreSQL без ANALYZE показывает только оценки планировщика.\"],\"44cXI8\":[\"Сортировать по \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Управление базами данных\"],\"4CK17g\":[\"Изменить представление \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Выберите хотя бы одну базу данных\"],\"4D_Nvt\":[\"Не удалось создать группу\"],\"4RiR6c\":[\"Экспортировать как HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" дочерний процесс\"],\"few\":[\"#\",\" дочерних процесса\"],\"many\":[\"#\",\" дочерних процессов\"],\"other\":[\"#\",\" дочерних процессов\"]}]],\"4VyuY3\":[\"Очистить все логи?\"],\"4WWqS3\":[\"Показать/скрыть JSON-дерево\"],\"4XAQdl\":[\"Создать индекс\"],\"4cEClj\":[\"Сессии\"],\"4cmfYp\":[\"Дублировать строку\"],\"4hsr6d\":[\"Создать представление\"],\"4lIZTB\":[\"Dev-зависимости фронтенда\"],\"4oYjvJ\":[\"Поиск запроса…\"],\"4tMxW4\":[\"Preview related record\"],\"4yJcjm\":[\"Выберите тип...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Закрыть панель фильтров (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Точка с запятой (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" событие\"],\"few\":[\"#\",\" события\"],\"many\":[\"#\",\" событий\"],\"other\":[\"#\",\" событий\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"Список\"],\"5To6Z6\":[\"Копировать запрос\"],\"5gqNQl\":[\"Сетка\"],\"5igIzr\":[\"Импорт отменён\"],\"5nTIup\":[\"Редактирование представления: \",[\"name\"]],\"5qIe8E\":[\"Запустить все\"],\"66bEht\":[\"Статус проекта\"],\"6PIJVc\":[\"Запуск\"],\"6QvP0l\":[\"Экспортировать как JSON\"],\"6W41Xq\":[\"Диспетчер задач\"],\"6WngBH\":[\"Установить NULL\"],\"6YtxFj\":[\"Имя\"],\"6_dCYd\":[\"Обзор\"],\"6dOBsk\":[\"Создать представление\"],\"6gvoHP\":[\"Скопировать сообщение об ошибке\"],\"6oCVzX\":[\"Контекст Kubernetes обязателен\"],\"6wQO0f\":[\"Показать данные\"],\"6z9W13\":[\"Перезапустить\"],\"71agNy\":[\"Сгенерировать названия для безымянных ячеек с помощью AI\"],\"74J3FG\":[\"Начальная версия\"],\"75BWdo\":[\"Не удалось загрузить определение триггера: \"],\"76d3Uz\":[\"События\"],\"76gPWk\":[\"Понятно\"],\"77nSMU\":[\"Удалить всю историю активности AI? Это действие необратимо.\"],\"7ABmyQ\":[\"Попробовать снова\"],\"7Ap0JP\":[\"Активно \",[\"activeFilterCount\"],\" из \",[\"0\"]],\"7E864M\":[\"Тип базы данных\"],\"7FqaG1\":[\"Настройте инструкции для AI-анализа планов EXPLAIN. Используйте \",[\"LANGUAGE\"],\" для языка вывода.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Обнаружены смешанные типы, использован TEXT\"],\"7RSQQd\":[\"Сохранять пароли в Keychain\"],\"7VpPHA\":[\"Подтвердить\"],\"7e7bPs\":[\"Тело триггера (SQL)\"],\"7eRaA9\":[\"Удалить триггер\"],\"7l15X4\":[\"с ошибкой\"],\"7sMeHQ\":[\"Ключ\"],\"7sNhEz\":[\"Пользователь\"],\"7tATh2\":[\"Выполнить запрос\"],\"7yb4gk\":[\"Ошибка: \"],\"8-4V8D\":[\"Таблицы\"],\"82G-l5\":[\"Model Context Protocol (MCP) позволяет AI-ассистентам (например, Claude) подключаться к локальным инструментам. Tabularis предоставляет MCP-сервер, через который AI читает схему базы данных и выполняет запросы.\"],\"83VjWE\":[\"Новый ноутбук\"],\"86IgoU\":[\"Выполнить запрос (в редакторе)\"],\"86fCgf\":[\"Настройте инструкции для AI-генерации названий вкладок с результатами. SQL-запрос передаётся как сообщение пользователя.\"],\"87a_t_\":[\"Метка\"],\"87kWsr\":[\"Экспорт подключений\"],\"8CWirf\":[\"MCP-сервер\"],\"8S8aIX\":[\"Проверка состояния подключения\"],\"8TMaZI\":[\"Время\"],\"8Tg_JR\":[\"Custom\"],\"8UFKYr\":[\"Выбрать запрос для выполнения\"],\"8VKSGV\":[\"Сгенерировать SQL\"],\"8Wjy6z\":[\"Закрыть вкладки слева\"],\"8ZsakT\":[\"Пароль\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL-редактор\"],\"8bRgTe\":[\"AI-провайдер не настроен. Перейдите в Настройки > AI.\"],\"8c_W0h\":[\"Старые версии\"],\"8guEQP\":[\"Обновить представления\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN — лёгкий инструмент преимущественно для анализа структуры.\"],\"8q_sOc\":[\"Remove\"],\"8t-akp\":[\"показаны первые \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Показать/скрыть текстовый редактор\"],\"8zfThY\":[\"Название подключения\"],\"91gnWY\":[\"Экспортировать логи\"],\"91rtHL\":[\"Создать новое представление\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Новая группа\"],\"9DOfTQ\":[\"Редактирование триггера: \",[\"name\"]],\"9JdjEN\":[\"Представление обновлено\"],\"9NzDFn\":[\"Показывать экран приветствия при запуске приложения.\"],\"9OoUS3\":[\"Создать новое SSH-подключение\"],\"9QGRD5\":[\"Целевой столбец\"],\"9QTny9\":[\"Ошибка выполнения запроса.\"],\"9S-fyV\":[\"Предварительный план выполнения\"],\"9SJ_Sx\":[\"Системные ресурсы\"],\"9UQ730\":[\"Клонировать\"],\"9X6cky\":[\"Нет\"],\"9XUV5V\":[\"В буфере обмена нет данных\"],\"9hGjL2\":[\"Создать индекс\"],\"9mMU1R\":[\"Время\"],\"9mvFo_\":[\"Время\"],\"9npOH9\":[\"Открыть файл\"],\"9uI_rE\":[\"Отменить\"],\"9xUjzm\":[\"Выбрать все\"],\"9y_02p\":[\"Общайтесь с сообществом, получайте помощь, предлагайте функции\"],\"A1pPcI\":[\"SSH-хост\"],\"A1taO8\":[\"Поиск\"],\"A6C0pv\":[\"Общая стоимость\"],\"A7WG0p\":[\"Плагин отключён\"],\"A7yRz3\":[\"Определение представления обязательно\"],\"A9Uyp6\":[\"Ошибка импорта: \"],\"ABEd-z\":[\"Для обновления Tabularis используйте менеджер пакетов.\"],\"AMdgKV\":[\"Промпт для анализа плана выполнения\"],\"ANSTMe\":[\"Серьёзных проблем в текущем плане не обнаружено.\"],\"ANzIr7\":[\"История запросов\"],\"AOnaU7\":[\"пропущено\"],\"AVlZoM\":[\"Окружение\"],\"AXTVsE\":[\"Verify Full\"],\"AXdRYR\":[\"Текущие логи\"],\"Aa-YkQ\":[\"Экспортировать ноутбук\"],\"Ai2U7L\":[\"Хост\"],\"AidayG\":[\"Фильтр по уровню\"],\"AlPiMN\":[\"Нажмите для перехода на страницу\"],\"An-1rA\":[\"Возвращено строк\"],\"AnV8j-\":[\"Изменить столбец\"],\"AvEr_L\":[\"Новая консоль\"],\"AvYbUL\":[\"Поставить звезду на GitHub\"],\"Aw_eOs\":[\"Требуется Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Ничего не найдено\"],\"B0mJGb\":[\"Сырой вывод\"],\"B1c58n\":[\"Изменить столбец\"],\"B3toQF\":[\"Объекты\"],\"B5nKny\":[\"/абсолютный/путь/к/папке\"],\"B5xevr\":[\"Имя подключения обязательно\"],\"BAVvWJ\":[\"ER-диаграмма\"],\"BBtVak\":[\"Свернуть все\"],\"BEVzjL\":[\"Импорт не удался\"],\"BHATjK\":[\"Экспортировать подключения\"],\"BJe2lZ\":[\"Показать/скрыть боковую панель\"],\"BK3WCj\":[\"Не удалось загрузить реестр\"],\"BKbO3i\":[\"Блокнот изменён\"],\"BMB51y\":[\"Запустить в консоли\"],\"BNW_Z4\":[\"например, active_users, order_summary\"],\"BPkXj7\":[\"Создать внешний ключ\"],\"BUO_JN\":[\"Копировать запрос\"],\"BYkhHY\":[\"Проверять обновления при запуске\"],\"BeSg6-\":[\"Собирать логи приложения в памяти для отладки\"],\"BgAyQH\":[\"Сбросить сортировку\"],\"BinTJI\":[\"экосистема npm\"],\"BkFson\":[\"Автопостраничный вывод\"],\"Bpglf1\":[\"Переместить вверх\"],\"BrGo6h\":[\"Поиск блокнотов\"],\"BxiAN_\":[\"Удалить запрос\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Зависимости фронтенда\"],\"CE-M2e\":[\"Информация\"],\"CHIyL8\":[\"Нет фильтров —\"],\"CJnUoU\":[\"Обновить триггеры\"],\"CLWWRV\":[\"Скачивание...\"],\"CUxwxn\":[\"Показать все таблицы\"],\"CWMXbw\":[\"принудительно остановит процесс. Все активные подключения к базе данных через этот плагин перестанут работать до его перезапуска.\"],\"CZt6BX\":[\"РУЧНАЯ НАСТРОЙКА\"],\"Ca8ixZ\":[\"Удалить\"],\"CbJBQS\":[\"Ошибка обновления: \"],\"Cdz-YU\":[\"Список\"],\"CpeQf9\":[\"Итерации\"],\"D2wXBw\":[\"Автоинкремент\"],\"D6Ql0c\":[\"Выберите модель для генерации и объяснения запросов.\"],\"DB8zMK\":[\"Применить\"],\"DDXf5E\":[\"SQL-функции\"],\"DEwnwi\":[\"Удалить\"],\"DNTvdl\":[\"Открыть в редакторе\"],\"DPc2P9\":[\"Удалить ячейку\"],\"DUY8Ba\":[\"Критические изменения\"],\"DVnBSM\":[\"Межстрочный интервал\"],\"Dd7YLj\":[\"Может быть позже\"],\"Deej3j\":[\"Некорректный JSON\"],\"DfKhk_\":[\"Обновить\"],\"DiRiTz\":[\"Открыть страницу пакета\"],\"DlRHAD\":[\"Выполнение EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" ошибка\"],\"few\":[\"#\",\" ошибки\"],\"many\":[\"#\",\" ошибок\"],\"other\":[\"#\",\" ошибок\"]}]],\"Dvdihe\":[\"На \",[\"0\"],\" — проверьте запрос перед выполнением.\"],\"DzFLzw\":[\"Да\"],\"E-JUtQ\":[\"Подтверждение операций\"],\"E0kcnZ\":[\"Общее\"],\"E2mje_\":[\"Выбрать запрос для объяснения\"],\"EDieyg\":[\"Удалить это SSH-подключение?\"],\"EHZxPj\":[\"Развернуть\"],\"EL4oDO\":[\"Доступна новая версия\"],\"EPi4gT\":[\"Сортировать по \",[\"field\"]],\"EWPtMO\":[\"Код\"],\"EWX0mQ\":[\"Без группы\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Неизвестно\"],\"EhADgB\":[\"Удалить столбец\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Используется актуальная версия\"],\"Em6JFd\":[\"Подсчитать строки\"],\"EnGiqG\":[[\"0\"],\" элементов\"],\"Ew1n5z\":[\"Поиск плагинов…\"],\"F18WP3\":[\"Параметры\"],\"F3uc1x\":[\"Экспортируемый файл будет содержать пароли к базам данных и SSH в открытом виде. Храните его в надёжном месте!\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" строка\"],\"few\":[\"#\",\" строки\"],\"many\":[\"#\",\" строк\"],\"other\":[\"#\",\" строки\"]}]],\"F6pfE9\":[\"Активно\"],\"F8tXg7\":[\"Предпросмотр данных\"],\"F9-6yK\":[\"Формат копирования по умолчанию\"],\"F9lxfG\":[\"Удалить\"],\"F9nsa2\":[\"Файл истории был повреждён и перенесён в резервную копию. Новые запросы будут записываться как обычно. Резервный файл:\"],\"FF_oap\":[\"По умолчанию\"],\"FK8rlP\":[\"SSH-подключения не настроены\"],\"FMRcH8\":[\"Первая строка как заголовок\"],\"FNvDMc\":[\"На этой неделе\"],\"FQe1FI\":[\"Оценка строк\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Операция\"],\"Fa_cky\":[\"Схема: \",[\"tableName\"]],\"FpEL5o\":[\"Выберите отдельную тему для SQL-редактора или синхронизируйте её с темой приложения.\"],\"FsvZQL\":[\"Изменена ячейка \",[\"n\"]],\"FtwKL9\":[\"Переключить вкладку\"],\"FznI3z\":[\"Удалить внешний ключ \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Ошибка предпросмотра: \"],\"G8Q5Zq\":[\"Пространство имён обязательно\"],\"GAohqx\":[\"Удалить столбец\"],\"GJR99u\":[\"Не удалось удалить столбец: \"],\"GKfzzM\":[\"Выберите подключение...\"],\"GS-Mus\":[\"Экспортировать\"],\"GUaLUq\":[\"Не удалось загрузить схему: \"],\"GXP-Iw\":[\"Добавить SQL-ячейку\"],\"Gj1mLb\":[\"Ячейки переупорядочены\"],\"GlbqG2\":[\"Reset to driver default\"],\"Gq1YzP\":[\"События\"],\"Gs5AlY\":[\"Открыть\"],\"GtmO8_\":[\"от\"],\"GxkJXS\":[\"Загрузка...\"],\"H-o4D2\":[\"Создать новый столбец\"],\"H2B-KW\":[\"Формат по умолчанию при копировании строк через Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Повторить\"],\"H7mlCc\":[\"/абсолютный/путь/к/db.sqlite\"],\"H86f9p\":[\"Свернуть\"],\"H9P8CD\":[\"добавить первый фильтр\"],\"HAQlGl\":[\"Активность AI\"],\"HKNZrs\":[\"Условие индекса\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Удалить \",\"#\",\" строку\"],\"few\":[\"Удалить \",\"#\",\" строки\"],\"many\":[\"Удалить \",\"#\",\" строк\"],\"other\":[\"Удалить \",\"#\",\" строки\"]}]],\"HPuCiP\":[\"Путь к папке\"],\"HUs1R3\":[\"Нет открытых вкладок для этого подключения.\"],\"HV4Isp\":[\"Введите SSH-пароль\"],\"HVC8Hh\":[\"Скопировано в буфер обмена\"],\"HWEpq8\":[\"Запись на диск/с\"],\"HY4nP5\":[\"Встроенно\"],\"HcmoWv\":[\"Не удалось сохранить представление: \"],\"He8v1Y\":[\"Убрать из «Применить все»\"],\"HehHP1\":[\"Расположение по умолчанию\"],\"HilYn4\":[\"Ноутбук пуст. Добавьте ячейку для начала работы.\"],\"HjxVK_\":[\"Быстрая проверка подключения\"],\"HmMnRx\":[\"Режим WKT\"],\"HoKCiI\":[\"Приложение автоматически перезапустится после установки\"],\"HpK_8d\":[\"Перезагрузить\"],\"Hpi4Jm\":[\"Вступить сейчас\"],\"HuA3RU\":[\"Табуляция\"],\"I128p7\":[\"Вертикальная черта (|)\"],\"I3AgqA\":[\"Настроить SSH вручную\"],\"I5VBsr\":[\"Как в приложении\"],\"I8yrPb\":[\"Заменить таблицу\"],\"I92BdB\":[\"Убрать из группы\"],\"I92fr4\":[\"Напомнить позже\"],\"I99Miw\":[\"Стоимость\"],\"IETZIR\":[\"Изменить название ячейки\"],\"IG9wzA\":[\"Не удалось добавить строку: \"],\"ILleOG\":[\"Тип ресурса должен быть \\\"service\\\" или \\\"pod\\\"\"],\"IQ3gAw\":[\"Загрузить файл\"],\"IUwGEM\":[\"Сохранить изменения\"],\"IUwmLq\":[\"Прямые зависимости из package.json и src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Библиотеки с открытым исходным кодом\"],\"I_43p6\":[\"Безопасность\"],\"Iaizf4\":[\"Appearance\"],\"Il3FBB\":[\"Открыть/закрыть панель фильтров\"],\"IniZRK\":[\"Загрузка недоступна — загружен только предпросмотр\"],\"Isaozb\":[\"Проверить и настроить\"],\"J17_9Z\":[\"Не удалось сохранить триггер: \"],\"J2Cb95\":[\"Активные запросы и подключения через этот плагин будут прерваны.\"],\"J6v1s_\":[\"Модель по умолчанию\"],\"JE-DVk\":[\"Интерпретатор\"],\"JEGlfK\":[\"Начало\"],\"JKDPqP\":[\"Сначала выберите контекст\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Использовать SSH-туннель\"],\"JRz8tw\":[\"MySQL и MariaDB предоставляют реальные метрики только в поддерживаемых вариантах EXPLAIN ANALYZE или ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP or SVG · max 512 KB\"],\"JY5Oyv\":[\"База данных\"],\"JlFRIB\":[\"Часовой пояс сессии, отправляемый в MySQL после подключения.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Отклонено\"],\"K3H9p5\":[\"Не задано\"],\"K5Dgu_\":[\"Базы данных\"],\"K8IGKf\":[\"Тип аутентификации\"],\"KAYNSW\":[\"Количество логов, хранимых в памяти (1–10000)\"],\"KHTGbr\":[\"Предварительный EXPLAIN\"],\"KHvda8\":[\"Не null\"],\"KJKNaZ\":[\"Копировать как `column`\"],\"KM5Kc8\":[\"Выберите хотя бы один столбец\"],\"KSCnVQ\":[\"Тип\"],\"KUjOb9\":[\"работает\"],\"KXBdwy\":[\"Обновить подпрограммы\"],\"KXNyX7\":[\"Установить DEFAULT\"],\"Kd70-v\":[\"Импортировать из буфера обмена...\"],\"KhI4oS\":[\"Открыть связанную строку в \",[\"0\"]],\"KhgrNu\":[\"Интеграция MCP-сервера\"],\"KirERL\":[\"Таймаут\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Не удалось удалить индекс: \"],\"KzeARD\":[\"Не удалось удалить таблицу: \"],\"L-rMC9\":[\"Сбросить по умолчанию\"],\"L3HXkQ\":[\"Исправления ошибок\"],\"LCZ7Dy\":[\"Копировать имя\"],\"LFDf6p\":[\"Создать новый триггер базы данных\"],\"LK1m4W\":[\"индексы\"],\"LMeAoR\":[\"строки\"],\"LPCdc-\":[\"Промпт для названия вкладки запроса\"],\"LPFmga\":[\"Добавить в «Применить все»\"],\"LYzbQ2\":[\"Инструмент\"],\"Lbis_V\":[\"Быстрый навигатор\"],\"Lcpbe2\":[\"Процесс плагина не удалось запустить. Подробности ниже.\"],\"LhUHHO\":[\"Предпросмотр сгенерированного SQL\"],\"LihabZ\":[\"EXPLAIN поддерживается только для DML-запросов (SELECT, INSERT, UPDATE, DELETE). DDL-запросы (CREATE, DROP, ALTER) не поддерживаются.\"],\"LnT0hQ\":[\"Добавить столбец\"],\"LvutiO\":[\"Предложить (AI)\"],\"M-rHQO\":[\"Выйти из полноэкранного режима\"],\"M0XJba\":[\"Очистить всю историю запросов для этого подключения?\"],\"M1co_O\":[\"Настроено\"],\"M73whl\":[\"Контекст\"],\"MDa5o0\":[\"например, before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Показать все\"],\"MXdOwj\":[\"Отдельные подключения\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Выберите подключение K8s\"],\"Mc1tjS\":[\"Включите ANALYZE для просмотра реальных строк, времени, итераций и буферов.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" строк\"],\"Mp0jQ_\":[\"Этот драйвер поддерживает первичные ключи только при создании таблицы\"],\"MqpZwN\":[\"Процесс Tabularis\"],\"MxIx43\":[\"↑↓ для навигации, Enter для открытия\"],\"MygtgQ\":[\"Добавить Markdown-ячейку\"],\"N40H-G\":[\"Все\"],\"N5UQxq\":[\"Ollama не обнаружен на порту \",[\"0\"],\". Запущен ли он?\"],\"N6GBcC\":[\"Подтверждение удаления\"],\"N6aqHp\":[\"Запросы\"],\"N9_S15\":[\"Будет создана новая таблица\"],\"NBdMa1\":[\"Самый медленный шаг\"],\"NC2AI2\":[\"Длина\"],\"NCzNnx\":[\"Сортировать по возрастанию\"],\"NT4Ubs\":[\"Удалить пользовательский ключ и вернуться к переменной окружения (если задана)\"],\"NUjrCO\":[\"Ничего не найдено в избранном\"],\"NWJrXh\":[\"SQL триггера обязателен\"],\"NZUDnP\":[\"Итого по дереву: \",[\"0\"]],\"Nc2VQn\":[\"Добавить в существующую\"],\"NgFERn\":[\"Добавить в избранное\"],\"NktMHG\":[\"Имя базы данных\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Проверить\"],\"Nq5QTk\":[\"объяснить N-й\"],\"O2STgu\":[\"Ошибка экспорта: \"],\"O8SV8O\":[\"Загрузка...\"],\"O9_WW6\":[\"подключение\"],\"OGEsKj\":[\"Выполнить все ячейки\"],\"OGWdBg\":[\"Название представления\"],\"OHqT6w\":[\"Нажмите сочетание клавиш...\"],\"OXJsaG\":[\"Недопустимое имя параметра\"],\"OfhWJH\":[\"Сбросить\"],\"OlAl5i\":[\"Развернуть все\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Присоединиться к Discord\"],\"P1YGsb\":[\"Генерация SQL\"],\"P2m1xb\":[\"Остановить при ошибке\"],\"P3Qlys\":[\"Нет ID подключения\"],\"P6Y3Yf\":[\"Выполните эту команду в терминале, затем перезапустите Claude Code.\"],\"PCdj-c\":[\"Снять выбор\"],\"PMnFt9\":[\"Чтение с диска/с\"],\"PQU2Va\":[\"Принимать подсказку по Enter\"],\"PRnH8G\":[\"из \",[\"0\"]],\"PY8UF3\":[\"Переключён параллельный режим (ячейка \",[\"n\"],\")\"],\"PiH3UR\":[\"Скопировано!\"],\"Pia95d\":[\"Имя столбца обязательно\"],\"PrElXQ\":[\"Обновить\"],\"PrixCC\":[\"Строки будут добавлены в существующую таблицу\"],\"Pujgbb\":[\"Настроить назначение\"],\"Pw_eQV\":[\"Плагин не запустился\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Нет сохранённых запросов\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Нет дочерних процессов\"],\"QCxMC0\":[\"Автоматически проверять новые версии при запуске приложения\"],\"QEazml\":[\"Удалить выбранные\"],\"QHcLEN\":[\"Подключено\"],\"QLHHFO\":[\"Режим только для чтения\"],\"QOvAW3\":[\"Новые функции\"],\"QULGRi\":[\"Допустимые запросы не найдены\"],\"QZwllF\":[\"Обзор...\"],\"QbkSr_\":[\"EXPLAIN недоступен для этого запроса.\"],\"QeHFYZ\":[\"EXPLAIN завершился с ошибкой: \",[\"0\"]],\"Qll2Tb\":[\"По убыв.\"],\"Qoq-GP\":[\"Подробнее\"],\"Qu4Hog\":[\"Ноутбук импортирован\"],\"R-A2Vd\":[\"Нет данных для отображения\"],\"R0Hkb2\":[\"Выбрано баз данных: \",[\"0\"]],\"R1nHhB\":[\"Уже существует\"],\"R2Iz3m\":[\"Название триггера\"],\"R6oBUl\":[\"Преобразовать в консоль\"],\"R9Khdg\":[\"Авто\"],\"RDjuBN\":[\"Настройка\"],\"RF-HyV\":[\"Выберите язык интерфейса. «Авто» использует язык системы.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Скопировать имя\"],\"RI-HZc\":[\"Введите ключ \",[\"0\"]],\"RJrE17\":[\"Удалить представление \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Звезда помогает другим найти проект\"],\"Rb3Tdm\":[\"Имя блокнота\"],\"RcbKJ3\":[\"При обновлении\"],\"RkefFq\":[\"Выполнить EXPLAIN перед показом окна подтверждения, чтобы пользователь видел план выполнения.\"],\"RnF_hl\":[\"Загрузка реестра плагинов...\"],\"Rns7_C\":[\"Это действие нельзя немедленно отменить\"],\"RoKRqW\":[\"Доступные плагины\"],\"RphpKk\":[\"Внешний вид\"],\"Rt8sHM\":[\"Обнаружена сортировка или временные операции\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Включено\"],\"S1veKH\":[\"Отменить выбранные изменения\"],\"S5zeZU\":[\"Переключить предпросмотр\"],\"S8Yqbl\":[\"Вставить\"],\"SDND4q\":[\"Не настроено\"],\"SJRy3D\":[\"(Генерируется автоматически)\"],\"SSwIjo\":[\"Установить EMPTY\"],\"SgvA_r\":[\"Нажмите «Запустить» (Ctrl/Command+F5) для загрузки данных таблицы\"],\"SlfejT\":[\"Ошибка\"],\"SoATkx\":[\"Копировать ячейку\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL эндпоинта\"],\"T7w5CQ\":[\"Не удалось создать новую строку: \"],\"T9947j\":[\"Значение (например, 'текст' или 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Переключить на вертикальное расположение\"],\"TK5oex\":[\"Сохранить промпт\"],\"TKQ7K-\":[\"Установить\"],\"TKZreP\":[\"Обязательный\"],\"TMLAx2\":[\"Обязательно\"],\"TO08JI\":[\"внешние ключи\"],\"TVKqvO\":[\"Изменить строку\"],\"TYSdQ3\":[\"Выполнить SELECT-запрос\"],\"TfDFHS\":[\"Переносить длинные строки в редакторе вместо горизонтальной прокрутки.\"],\"Tibfjs\":[\"Нет сохранённых подключений — создайте ниже\"],\"Tj36Dr\":[\"Сбросить по умолчанию\"],\"Tjg925\":[\"Загрузка определения триггера...\"],\"TlZ7Ul\":[\"Заблокировать запрос\"],\"TpwXyg\":[\"Если время отсутствует, сервер вернул только оценочный план.\"],\"Tw2M1h\":[\"Ошибка установки\"],\"Ty-rm9\":[\"SSH-подключения\"],\"Tz0i8g\":[\"Настройки\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Подключения Kubernetes\"],\"U4uzyV\":[\"Что нового\"],\"U8W7sX\":[\"Не удалось получить определение триггера: \"],\"UB112k\":[\"Прекратить выполнение при ошибке в ячейке\"],\"UCQiqt\":[\"на \",[\"0\"]],\"UECR2b\":[[\"0\"],\" на \",[\"1\"],\" — проверьте запрос перед выполнением.\"],\"UI85PB\":[\"Ни один триггер не соответствует фильтру\"],\"UNKlAy\":[\"Настройки для \",[\"clientName\"],\" установлены. Перезапустите приложение.\"],\"URmyfc\":[\"Подробности\"],\"UWQBvp\":[\"Сгенерировать SQL-шаблоны\"],\"UawTKZ\":[\"Необязательно. Укажите исполняемый файл для запуска плагина (например, python3 на macOS/Linux или python либо полный путь на Windows). Оставьте пустым, чтобы использовать значение по умолчанию.\"],\"Ub8sf5\":[\"SQLite не поддерживает удаление внешних ключей через ALTER TABLE.\"],\"UbbJ8j\":[\"Варианты не найдены\"],\"Ubs68g\":[\"Общие\"],\"UftN8J\":[\"Отметьте подключения, которые должны быть только для чтения. Остальные работают как обычно.\"],\"UnQNah\":[\"Удалить столбец \\\"\",[\"0\"],\"\\\" из таблицы \\\"\",[\"tableName\"],\"\\\"?\\n\\nВНИМАНИЕ: Все данные в этом столбце будут безвозвратно удалены. Действие необратимо.\"],\"UncTTh\":[\"Сумма RSS по дереву процессов — общая память может учитываться несколько раз\"],\"UpjgFm\":[\"Изменены параметры\"],\"UsAnu1\":[\"ANALYZE выполняет запрос. Осторожно с операторами изменения данных.\"],\"UxKoFf\":[\"Навигация\"],\"Uy4iQO\":[\"Рядом\"],\"UzFX5x\":[\"Размер отступа\"],\"UzWGWO\":[\"Перейти к вводу SQL WHERE\"],\"V-chk5\":[\"Как часто проверять активные подключения. Установите 0 для отключения.\"],\"V-pw1j\":[\"Название таблицы\"],\"V2T0Uw\":[\"Сохранённых блокнотов пока нет.\"],\"V3aNwx\":[\"Редактор данных\"],\"VGYp2r\":[\"Применить ко всем\"],\"VH8S7x\":[\"Столбец из буфера обмена\"],\"VIAEcS\":[\"Не удалось загрузить базы данных. Проверьте учётные данные.\"],\"VKdztF\":[\"Добавить строки\"],\"VLiHXI\":[\"Данные ANALYZE\"],\"VMbmXc\":[\"Удалить «\",[\"pluginName\"],\"»? Файлы плагина будут удалены.\"],\"VO3weF\":[\"Файл не загружен\"],\"VOZlKc\":[\"Импорт базы данных\"],\"VPzsIz\":[\"Генерация названия...\"],\"VUul0v\":[\"Завершение\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Не удалось удалить триггер: \"],\"VfOb_W\":[\"Триггеры не найдены\"],\"Vgy9LX\":[\"Все запросы\"],\"Vi2Pqx\":[\"от\"],\"Vl2zn2\":[\"остановлен\"],\"Vo4uBA\":[\"Ошибка при установке плагина. Подробности ниже.\"],\"VqqyOs\":[\"Выполните запрос, чтобы увидеть результаты\"],\"VzhDFh\":[\"Блокировать любые не-SELECT запросы через MCP, если подключение явно не разрешено ниже.\"],\"W3uwpT\":[\"Закрыть все вкладки\"],\"W4MKLh\":[\"например: Выглядит рискованно на проде, нужно подтверждение…\"],\"W60eXm\":[\"Таблица\"],\"WA8RND\":[\"Удалить таблицу \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Удалить таблицу\"],\"WLnvCZ\":[\"Введите имя пользователя\"],\"WM-__8\":[\"Поиск подключений...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка импортирована в «\",[\"tableName\"],\"»\"],\"few\":[\"#\",\" строки импортированы в «\",[\"tableName\"],\"»\"],\"many\":[\"#\",\" строк импортировано в «\",[\"tableName\"],\"»\"],\"other\":[\"#\",\" строки импортированы в «\",[\"tableName\"],\"»\"]}]],\"WTfntM\":[\"Удалить запрос \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"успешно\"],\"WcF1uL\":[\"Название группы\"],\"Weq9zb\":[\"Общие\"],\"WmPpB1\":[\"Загрузка плана выполнения…\"],\"Wu7cK0\":[\"Базы данных не найдены\"],\"WvoUQF\":[\"Удалена ячейка \",[\"n\"]],\"Ww3pDD\":[\"РУЧНАЯ КОМАНДА\"],\"X-20AU\":[\"Введите промпт для названия вкладки...\"],\"X-U6_w\":[\"Шрифт\"],\"X5fs0g\":[\"Создайте первое подключение, чтобы начать работу.\"],\"X7Ayjp\":[\"Пароль сохранён в системном хранилище ключей\"],\"X9kySA\":[\"Избранное\"],\"XJOV1Y\":[\"Активность\"],\"XMCLEL\":[\"Создать новый триггер\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Объяснение запроса\"],\"XVF2Pf\":[\"Изменить схемы\"],\"XW6OYF\":[\"Для этого плагина может потребоваться интерпретатор (например, Python). Укажите путь к нему в настройках плагина.\"],\"XZB6Xr\":[\"Максимум записей в логе\"],\"Xcffv2\":[\"Показывать кнопки AI-помощи и объяснения в редакторе\"],\"XeqTSh\":[\"Тип соединения\"],\"XmJfZT\":[\"имя\"],\"XoQfG1\":[\"SSH-пользователь\"],\"XwI0Vw\":[\"Авто (системный)\"],\"XyDlLX\":[\"Название индекса\"],\"Y2P2aK\":[\"Выберите схемы для загрузки:\"],\"Y8HYw2\":[\"значение\"],\"Y8zX3R\":[\"Вставить в редактор\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Поиск...\"],\"YWlnMZ\":[\"Порт Ollama\"],\"YYdC3A\":[\"Версия \",[\"0\"]],\"YYn8b5\":[\"Просмотр и установка плагинов из реестра.\"],\"Y_3yKT\":[\"Открыть в новой вкладке\"],\"YiAQ_Q\":[\"Обновить таблицы\"],\"Ysjr9Y\":[\"Предпросмотр SQL\"],\"YswNf7\":[\"Все уровни\"],\"YtNwr6\":[\"Максимальное количество записей истории запросов для одного подключения.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Загрузка...\"],\"Z7ZXbT\":[\"Подтвердить\"],\"Z8JpBH\":[\"Экспортировать как ноутбук\"],\"Z8fBIc\":[\"Реальных строк больше оценки\"],\"ZC2VJP\":[\"Выполнить\"],\"ZCIS4k\":[\"нет активных фильтров\"],\"ZF1_UT\":[\"Режим SSL\"],\"ZGjBPa\":[\"Очистить логи\"],\"ZHQTlM\":[\"Импорт из\"],\"ZIFDoJ\":[\"Выберите хотя бы структуру или данные\"],\"ZIZA6o\":[\"Изменить перед подтверждением\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" предупреждение при разборе\"],\"few\":[\"#\",\" предупреждения при разборе\"],\"many\":[\"#\",\" предупреждений при разборе\"],\"other\":[\"#\",\" предупреждения при разборе\"]}]],\"ZVn8p2\":[\"Отображать номера строк на полях редактора.\"],\"ZYnwzF\":[\"Отключено\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Создать внешний ключ\"],\"Zf7LHg\":[\"Контексты не найдены (установлен ли kubectl?)\"],\"Zfotp5\":[\"Большие расхождения в оценках обычно указывают на устаревшую статистику или предикаты, которые планировщик не может смоделировать точно.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Не удалось загрузить схемы\"],\"ZqXGPF\":[\"Не удалось удалить представление: \"],\"ZuL73E\":[\"Создать новое представление базы данных\"],\"_-bi4r\":[\"Ссылочная таблица\"],\"_AEYGI\":[\"История выполнения пуста\"],\"_FdpZc\":[\"Не удалось загрузить определение представления: \"],\"_FxSdi\":[\"Прямые зависимости приложения, бэкенда и инструментов с открытым исходным кодом.\"],\"_JyTG8\":[\"Введите промпт для объяснения...\"],\"_Ltc_k\":[\"Дополнительно\"],\"_Q2Wix\":[\"строк\"],\"_TK1zF\":[\"Сохранённое подключение\"],\"_bJFBE\":[\"Таймаут подключения\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Дерево\"],\"_dqduX\":[\"Следующая страница\"],\"_fwE6J\":[\"Ранее\"],\"_n04sB\":[\"Завершить\"],\"_otxbQ\":[\"Файл ключа\"],\"_pezIT\":[\"Не удалось подключиться к \",[\"0\"],\". Проверьте настройки или убедитесь, что база данных запущена.\"],\"_srfkj\":[\"Пользовательский ключ удалён\"],\"_t6aFo\":[\"MySQL и MariaDB могут возвращать EXPLAIN FORMAT=JSON или табличный EXPLAIN в зависимости от версии сервера.\"],\"_xTbaM\":[\"столбцы\"],\"_yxaaL\":[\"Уникальный индекс\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis — бесплатный проект с открытым исходным кодом. Если он вам полезен, поддержите проект и присоединяйтесь к сообществу.\"],\"a9CASo\":[\"SQLite поддерживает только переименование столбцов. Другие изменения требуют пересоздания таблицы вручную.\"],\"aAIQg2\":[\"Внешний вид\"],\"aAURrV\":[\"Установлено\"],\"aC_vCa\":[\"Сгенерировать название с помощью AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Выберите узел для просмотра подробностей\"],\"aHKcKc\":[\"Предыдущая страница\"],\"aI-5wG\":[\"Verify CA\"],\"aJJySV\":[\"например, users\"],\"aQ8swY\":[\"Значение по умолчанию\"],\"aScJP1\":[\"Запустить этот запрос\"],\"aVNbN8\":[\"Условия фильтрации\"],\"aWhdMQ\":[\"Использовать существующее SSH-подключение\"],\"aXYd8V\":[\"Таймаут\"],\"aX_S_r\":[\"Страница \",[\"0\"],\" из \",[\"totalPages\"]],\"agZcf8\":[\"Сгенерированный SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [поля]\"],\"alplHn\":[\"Анализ плана запроса с помощью AI...\"],\"anBcU3\":[\"Если Tabularis вам полезен и вы хотите видеть больше возможностей — поддержите проект: вносите вклад в код, сообщайте об ошибках или поставьте звезду репозиторию.\"],\"arHmj2\":[\"Удалить этот запрос из истории?\"],\"arKcqW\":[\"Старые серверы могут возвращать только оценочные планы с меньшим количеством метрик.\"],\"arcpYe\":[\"Требовать подтверждение\"],\"aurEkh\":[\"Загрузка процессов…\"],\"avtdsd\":[\"Режим SQL\"],\"az8lvo\":[\"Выключено\"],\"b1Ah3z\":[\"Фокус на\"],\"b392Dr\":[\"Развернуть все\"],\"b5S_PU\":[\"Имя базы данных\"],\"bAvovP\":[\"Переместить вниз\"],\"bH3JqY\":[\"Таблицы не найдены\"],\"bP5JOn\":[\"Перенос строк\"],\"bcOdok\":[\"Удалить группу\"],\"bcqeas\":[\"Все MCP-запросы только для чтения\"],\"bmca5u\":[\"Только запись\"],\"bpCiBU\":[\"Разрешить запись из MCP\"],\"bqnhqW\":[\"Оценка превышает реальное количество строк\"],\"bspG20\":[\"Сравнение\"],\"bu5X4V\":[\"Завершить с ошибкой\"],\"bw22Gk\":[\"Схема столбцов\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Основные проблемы\"],\"cFCKYZ\":[\"Отклонить\"],\"cFGrCP\":[\"таблица\"],\"cGeFup\":[\"Размер шрифта\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Фокус на таблице\"],\"cM9NHc\":[\"Откатить до\"],\"cO9-2L\":[\"Отключён\"],\"cSev-j\":[\"Фильтры\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Импортировать \",\"#\",\" строку\"],\"few\":[\"Импортировать \",\"#\",\" строки\"],\"many\":[\"Импортировать \",\"#\",\" строк\"],\"other\":[\"Импортировать \",\"#\",\" строки\"]}]],\"c_xoSn\":[\"Переименована ячейка \",[\"n\"]],\"cd0XEW\":[\"Сохранить запрос\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Разделить группу\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" операторов\"],\"d34vwG\":[\"Загрузить базы данных\"],\"d6ynQ7\":[\"Сортировать по убыванию\"],\"d8_6_v\":[\"отменить\"],\"d8wc1_\":[\"Примеры значений\"],\"dBXoCS\":[\"Обнаружена переменная окружения, но её можно переопределить, указав ключ выше.\"],\"dD7NPy\":[\"Структура\"],\"dEgA5A\":[\"Отменить\"],\"dMtLDE\":[\"до\"],\"dPJVhW\":[\"Ошибка установки\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" сессия\"],\"few\":[\"#\",\" сессии\"],\"many\":[\"#\",\" сессий\"],\"other\":[\"#\",\" сессий\"]}]],\"dTUzKm\":[\"Запустить выбранные (\",[\"0\"],\")\"],\"dU_iQN\":[\"Сессии не соответствуют текущим фильтрам.\"],\"dUh9QW\":[\"Планирование\"],\"dVoir2\":[\"Добавлена Markdown-ячейка \",[\"n\"]],\"dZ0d2O\":[\"Выберите хотя бы одну таблицу\"],\"dhi13U\":[\"Choose image…\"],\"dli1JX\":[\"Применить изменения\"],\"dmYV6f\":[\"Подпрограммы\"],\"dohZCo\":[\"Инструкции для AI-генерации SQL. Используйте \",[\"SCHEMA\"],\" как заполнитель структуры базы данных.\"],\"dtxpK2\":[\"Анализ\"],\"dwW9nJ\":[\"Показывать номера строк\"],\"dwWVw_\":[\"Показывать экран приветствия\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" вкладка\"],\"few\":[\"#\",\" вкладки\"],\"many\":[\"#\",\" вкладок\"],\"other\":[\"#\",\" вкладки\"]}]],\"dxxY9r\":[\"При совпадении\"],\"dyN4j9\":[\"Нажмите «Запустить предпросмотр», чтобы увидеть результаты\"],\"e07Iz5\":[\"Открыть диспетчер задач\"],\"e0NzXu\":[\"Проект находится в активной разработке (WIP). Основные функции стабильны, впереди много интересного.\"],\"e1UKxf\":[\"Сохранить этот запрос\"],\"e34gdU\":[\"Сколько времени MCP-процесс ожидает решения пользователя перед отменой запроса.\"],\"e62LQd\":[\"Завершить принудительно\"],\"e6QZsM\":[\"Тема редактора\"],\"e8CirT\":[\"Выполнить запрос\"],\"eD2kUP\":[\"Чтений буфера\"],\"eE0JZ4\":[\"Версия\"],\"eIDch7\":[\"Введите промпт для анализа плана выполнения...\"],\"eIVolo\":[\"Диск R/W\"],\"eJOEBy\":[\"Экспорт...\"],\"eKHY3W\":[\"Настройки плагина\"],\"eMb6Ub\":[\"Выберите ресурс...\"],\"ePK91l\":[\"Изменить\"],\"eXweu6\":[\"Развернуть ячейку\"],\"ecNsTE\":[\"Запросы не найдены\"],\"ecUA8p\":[\"Сегодня\"],\"ecpIZP\":[\"Введите пароль, если ключ зашифрован\"],\"ejmeDY\":[\"Установлено\"],\"esl-Tv\":[\"Тип ресурса\"],\"exyUec\":[\"Подключение\"],\"f2AJjl\":[\"Удалить строку\"],\"f4pD-j\":[\"Проверка подключения не удалась\"],\"f7sXvi\":[\"Введите пароль\"],\"fAsxc0\":[\"Последовательные сканирования\"],\"fIeFs0\":[\"Выберите значение...\"],\"fJm92A\":[\"Выберите файл с планом EXPLAIN (Postgres JSON или текст) для визуализации.\"],\"fOuPPd\":[\"Плагин\"],\"fXVIZq\":[\"Значения\"],\"f_b1TA\":[\"История выполнения\"],\"fghnqP\":[\"Переключиться на подключение 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Запятая (,)\"],\"fp711N\":[\"Заблокировано (только чтение)\"],\"fpzyLj\":[\"Страница \",[\"0\"],\" из \",[\"1\"]],\"fuA6oy\":[\"Таймаут сокета\"],\"fvImQM\":[\"Выбрано: \",[\"0\"]],\"fwr_nh\":[\"Устанавливайте расширения, управляйте драйверами плагинов и настройками среды выполнения.\"],\"g0ZzK4\":[\"Корректный JSON\"],\"g11hAR\":[\"Новая строка\"],\"g8VcMm\":[\"Мой кластер K8s\"],\"gCFR_O\":[\"Параллельное выполнение (Запустить все)\"],\"gEjU98\":[\"Открыть подключения\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Требуется хотя бы один столбец\"],\"gSuQrG\":[\"Подключения по запросу \\\"\",[\"search\"],\"\\\" не найдены\"],\"gUypqb\":[\"Перезапустить запрос\"],\"gZWMnn\":[\"AI-анализ\"],\"ghYd73\":[\"Выберите цель...\"],\"giAqEC\":[\"Создать новую таблицу\"],\"gnQS8X\":[\"Максимальный размер пакета для MySQL-коннектора.\"],\"gqV5VL\":[\"Встроенное, не настраивается\"],\"gww_XE\":[\"Ссылочный столбец\"],\"gxXPJ9\":[\"Настроить интерпретатор\"],\"gxutEv\":[\"Триггер обновлён\"],\"gz6UQ3\":[\"Развернуть\"],\"h-XNc9\":[\"Разделитель CSV\"],\"h-kNAk\":[\"например, sales_data\"],\"h3Z_aK\":[\"Введите Markdown...\"],\"h7MgpO\":[\"Горячие клавиши\"],\"h7peZQ\":[\"Разрешён\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" системный процесс\"],\"few\":[\"#\",\" системных процесса\"],\"many\":[\"#\",\" системных процессов\"],\"other\":[\"#\",\" системных процессов\"]}]],\"hEZrFh\":[\"Выполнить SQL-файл...\"],\"hEipgW\":[\"Проверить обновления сейчас\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Экспортировать как CSV\"],\"hItdtk\":[\"Выбрать папку\"],\"hXFVjo\":[\"Название таблицы обязательно\"],\"hZ6znB\":[\"Порт\"],\"h_huI6\":[\"Перезапустить\"],\"hbz1rh\":[\"ключи\"],\"hdsaJo\":[\"Импорт...\"],\"he3ygx\":[\"Копировать\"],\"hfGimp\":[\"Выберите пространство имён...\"],\"hjjSEi\":[\"Подключения только для чтения\"],\"hjwN_s\":[\"Имя ресурса\"],\"hlF1mD\":[\"Копировать выделение\"],\"hnboBb\":[\"AI-анализ плана запроса\"],\"hnvu2p\":[\"Подробности ошибки\"],\"hq4-D2\":[\"API-ключ хранится в системном хранилище ключей. Указанный здесь ключ имеет приоритет над переменной окружения.\"],\"hqjXdn\":[\"Не удалось удалить SSH-подключение\"],\"hqofAK\":[\"Копировать SQL\"],\"hy6L14\":[\"Открыть на GitHub\"],\"hyjACX\":[\"Ячейки свёрнуты/развёрнуты\"],\"hz1b5W\":[\"Совпадающие элементы не найдены\"],\"i1vAVM\":[\"Создать новую таблицу\"],\"i3S5T3\":[\"Поиск в избранном...\"],\"i4_LY_\":[\"Запись\"],\"i5HBWh\":[\"История запросов сброшена\"],\"i5zCt4\":[\"Таблица\"],\"iAVlge\":[\"Настройте инструкции для AI-генерации названий ячеек ноутбука. Содержимое ячейки (SQL или Markdown) передаётся как сообщение пользователя.\"],\"iE1yAB\":[\"Фильтр таблиц...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Подключиться\"],\"iSryJ2\":[\"Мой SSH-сервер\"],\"iT7UeX\":[\"Добавить индекс\"],\"iUWwuR\":[\"Скачать и установить\"],\"ia7i08\":[\"Сначала выберите контекст/пространство имён/тип\"],\"ibepZK\":[\"Сырой SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Сохранено\"],\"igcsfY\":[\"В реестре нет доступных плагинов.\"],\"ij-Elv\":[\"Предпросмотр изображения\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" запрос\"],\"few\":[\"#\",\" запроса\"],\"many\":[\"#\",\" запросов\"],\"other\":[\"#\",\" запроса\"]}]],\"ioL38P\":[\"Мониторинг процессов плагинов, CPU, RAM и диска в реальном времени\"],\"ixlL_e\":[\"SSH-ключ (необязательно)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Выберите модель\"],\"j3gyYH\":[\"Применить все\"],\"j5CWO4\":[\"Актуально\"],\"j9HPuI\":[\"Строка #\",[\"0\"]],\"jBtpMP\":[\"Все статусы\"],\"jEu4bB\":[\"Столбцы\"],\"jEyQIs\":[\"Подпрограммы не найдены\"],\"jHc1By\":[\"Удалить представление\"],\"jI6sj4\":[\"Стоимость, время и оценки строк зачастую недоступны по сравнению с PostgreSQL и MySQL.\"],\"jIxQCZ\":[\"Недоступно для вашей платформы\"],\"jKIncn\":[\"Название базы данных обязательно\"],\"jPSk57\":[\"Причина (необязательно)\"],\"jUNY_d\":[\"представление\"],\"jVqjDo\":[\"Недопустимый формат файла ноутбука\"],\"jWSZ-A\":[\"Только предпросмотр — полные данные не загружены\"],\"jgjIDU\":[\"Не удалось удалить существующий триггер: \"],\"jnhuWy\":[\"Таймаут сокета в миллисекундах.\"],\"jpeU_Z\":[\"Блокноты\"],\"jpgB4Y\":[\"Название подключения обязательно\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"дочерний процесс\"],\"jx0t66\":[\"Свернуть дочерние процессы\"],\"k-0mL-\":[\"Добавить столбец\"],\"k-XiMX\":[\"Сырой\"],\"k2UnVy\":[\"Условие хеша\"],\"k5UUX3\":[\"Триггер создан\"],\"kALwhk\":[\"секунд\"],\"kBiBq7\":[\"Удалить индекс \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Показать/скрыть график\"],\"kI1qVD\":[\"Форматировать\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка · \",[\"1\"],\"мс\"],\"few\":[\"#\",\" строки · \",[\"2\"],\"мс\"],\"many\":[\"#\",\" строк · \",[\"2\"],\"мс\"],\"other\":[\"#\",\" строки · \",[\"2\"],\"мс\"]}]],\"kJDmsI\":[\"Подробности события\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Реестр\"],\"kY-q3P\":[[\"label\"],\" обязательно\"],\"kexIdC\":[\"Использовать проброс портов Kubernetes\"],\"krksx_\":[\"Готово\"],\"ktYUe9\":[\"Запустить все\"],\"kwY6nh\":[\"Закрыть\"],\"kx0s-n\":[\"Результаты\"],\"kxUEfE\":[\"Не удалось получить определение подпрограммы: \"],\"l2Op2p\":[\"Параметры запроса\"],\"l9Ivba\":[\"Процессы плагинов и системные ресурсы\"],\"lBdPxu\":[\"Accent color\"],\"lCF0wC\":[\"Обновить\"],\"lEQRwq\":[\"Данные (INSERT)\"],\"lIvS11\":[\"Пересоздать триггер\"],\"lKS0ce\":[\"Новая таблица создана\"],\"lOekZ3\":[\"Переключить на горизонтальное расположение\"],\"lUA1C1\":[\"Пароль SSH-ключа (необязательно)\"],\"lVeG20\":[\"Зависимости Rust\"],\"lXAG6D\":[\"Инструкции для AI-объяснения запросов. Используйте \",[\"LANGUAGE\"],\" как заполнитель языка вывода.\"],\"lbbYjy\":[\"Прямое редактирование файла конфигурации. Изменения вступят в силу после перезапуска.\"],\"lhKW0m\":[\"Добавлена SQL-ячейка \",[\"n\"]],\"lk-wOz\":[\"Фильтр триггеров...\"],\"lk0x32\":[\"Размер страницы результатов (Limit)\"],\"lkz6PL\":[\"Длительность\"],\"lmVGeo\":[\"Добавить внешний ключ\"],\"lnnx3E\":[\"Подключить Tabularis к Claude Desktop, Cursor и другим клиентам\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Добавить\"],\"m2Q_r8\":[\"Определять JSON в текстовых столбцах\"],\"m2tskz\":[\"Успешно\"],\"mA-qpe\":[\"Выполнение завершено\"],\"mBhhbA\":[\"Логи скопированы в буфер обмена\"],\"mCNdzH\":[\"Запустить ячейку\"],\"mO95sp\":[\"Закрыть панель\"],\"mP7dLi\":[\"Введите название шрифта выше\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" заблокированное\"],\"few\":[\"#\",\" заблокированных\"],\"many\":[\"#\",\" заблокированных\"],\"other\":[\"#\",\" заблокированных\"]}]],\"mS74ir\":[\"Не удалось сохранить SSH-подключение\"],\"mSqtw8\":[\"Запустить предпросмотр\"],\"mURmfQ\":[\"Определение представления (SQL)\"],\"mX_isJ\":[\"Вертикально\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Структура (DDL)\"],\"mrk4Cf\":[\"Сортировать по \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Мы только что открыли отдельное место для пользователей Tabularis. Получайте помощь, делитесь советами, участвуйте в формировании дорожной карты.\"],\"mtvVdV\":[\"Обработано строк\"],\"mx4evv\":[\"Создать таблицу\"],\"myXGZW\":[\"Пошаговый\"],\"mzI_c-\":[\"Скачать\"],\"n7JDTx\":[\"Установите и включите плагины, чтобы увидеть их здесь\"],\"nDDJir\":[\"Поиск по сессии, клиенту, подключению…\"],\"nHP-Kr\":[\"Нет активной сессии. Выберите подключение.\"],\"nKhCjW\":[\"Выбрать таблицы\"],\"nNwvm4\":[\"Ошибка\"],\"nOVim5\":[\"Не удалось сохранить подключение\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"События\"],\"nf14vn\":[\"Требуется расширение: \",[\"0\"]],\"ngO6Pv\":[\"Разрешить Enter (в дополнение к Tab) для принятия активной подсказки автодополнения. При отключении Enter всегда вставляет новую строку.\"],\"nhmF3p\":[\"подключений\"],\"noM5A_\":[\"Создайте первое подключение\"],\"nohy4m\":[\"Нет активности MCP.\"],\"nr-axf\":[\"Удалить плагин\"],\"nsPFX9\":[\"Открыть в Visual Explain\"],\"nuBbBr\":[\"График\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Экспортировать базу данных\"],\"o-XJ9D\":[\"Изменить\"],\"o21Y-P\":[\"записей\"],\"o3tP_A\":[\"Удалить индекс\"],\"o45L8r\":[\"Введите название подключения\"],\"o53XGh\":[\"Копировать выбранные строки\"],\"o7J4JM\":[\"Фильтр\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Уровень\"],\"oGiIL7\":[\"Провайдер по умолчанию\"],\"oH8GS6\":[\"Просмотреть определение\"],\"oJ4rAm\":[\"Подключение потеряно\"],\"oJlXF2\":[\"Импортировать ноутбук\"],\"oMFv82\":[\"Разделить вертикально\"],\"oOFiQg\":[\"Ограничивает количество строк, получаемых за один запрос, во избежание проблем с производительностью. Установите 0, чтобы отключить (не рекомендуется).\"],\"oT9ZD3\":[\"Скрыть обзор\"],\"oUzLtx\":[\"Редактирование триггера требует его удаления и повторного создания. Продолжить изменение \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Изменён график (ячейка \",[\"n\"],\")\"],\"oWfclW\":[\"Показывать просмотрщик JSON, когда нетипизированная текстовая ячейка содержит объект или массив JSON. Создаёт небольшие издержки на разбор каждой ячейки.\"],\"obpbdz\":[\"Файл конфигурации не найден (создайте вручную)\"],\"odZgfC\":[\"AI-КЛИЕНТЫ\"],\"ogZhXn\":[\"Направление по умолчанию для ER-диаграмм\"],\"ohUJJM\":[\"Плагины\"],\"olAdaI\":[\"Реальных строк\"],\"olWzar\":[\"Принудительно завершить процесс плагина\"],\"ovBPCi\":[\"Default\"],\"owzTWN\":[\"Список моделей AI обновлён\"],\"oxYi6j\":[\"Базовый размер шрифта во всём приложении (10–20 пикселей).\"],\"p--hsQ\":[\"Соединение с базой данных прервано\"],\"p6NueD\":[\"НОВАЯ\"],\"pOYHox\":[\"Действия\"],\"pR9bTR\":[\"Нет данных BLOB\"],\"pS8S5q\":[\"например, users, orders, products\"],\"pSws_M\":[\"Название таблицы\"],\"pVLbKZ\":[\"Представление создано\"],\"pWT04I\":[\"Проверка...\"],\"pZJ_6D\":[\"Название индекса обязательно\"],\"pddYFG\":[\"Введите промпт для названия ячейки...\"],\"pnpyuD\":[\"Включить логирование\"],\"pqKMPv\":[\"Не удалось создать таблицу: \"],\"pqaP1h\":[\"Закрыть\"],\"pqarBu\":[\"По возр.\"],\"ptuq35\":[\"например, Comic Sans MS\"],\"pzu7v4\":[\"Горизонтально\"],\"q-ch8m\":[\"Отметьте подключения, которым разрешена запись. Остальные — только для чтения.\"],\"qA5jLs\":[\"Подробности ошибки\"],\"qIrtcK\":[\"Обновления\"],\"qOqy8G\":[\"Проверка конфигурации...\"],\"qWaVNs\":[\"Сохранить и перезапустить\"],\"qb3LPX\":[\"Открыть ER-диаграмму\"],\"qkK0vq\":[\"Название представления обязательно\"],\"qki9tG\":[\"Ошибка\"],\"qoIir-\":[\"Базовый URL OpenAI-совместимого API. Примеры: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Свернуть все\"],\"r6ncaO\":[\"Закрыть вкладку\"],\"rAJlpP\":[\"Порт контейнера\"],\"rG3WVm\":[\"Чтение\"],\"rGRCeK\":[\"Очистить историю запросов\"],\"rNIto7\":[\"Имя ресурса обязательно\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Ноутбук экспортирован\"],\"rY4sEV\":[\"Удалить внешний ключ\"],\"rbu0nO\":[\"Управление SSH-подключениями\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" подключение\"],\"few\":[\"#\",\" подключения\"],\"many\":[\"#\",\" подключений\"],\"other\":[\"#\",\" подключения\"]}]],\"rn2_2V\":[\"Удалить фильтр\"],\"roABNH\":[\"История запросов пуста\"],\"rtir7c\":[\"неизвестно\"],\"ru0-2W\":[\"Нет активных подключений\"],\"rvDPWO\":[\"Разрыв оценки\"],\"rwWjWg\":[\"Что нового\"],\"s6m9gy\":[\"Удалить триггер \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Проверить подключение\"],\"sBOaim\":[\"Файл конфигурации сохранён. Перезапустить сейчас?\"],\"sCyv9B\":[\"Обновить модели\"],\"sSUqe4\":[\"Удалить\"],\"sUBkgN\":[\"Генерация SQL...\"],\"sZZG3d\":[\"Импортировать \\\"\",[\"0\"],\"\\\"?\\nСуществующие данные могут быть перезаписаны.\"],\"sbK5ck\":[\"Поиск в истории...\"],\"sq_bS6\":[\"При удалении\"],\"suW7-E\":[\"Таймаут подключения в миллисекундах.\"],\"suqtBX\":[\"Esc для закрытия\"],\"t-R8-P\":[\"Выполнение\"],\"t1OfVY\":[[\"totalLibraries\"],\" библиотек\"],\"t2TMzs\":[\"Закрыть вкладку\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Выберите таблицу...\"],\"t7KRl1\":[\"Журнал всех вызовов MCP-инструментов и запросов, ожидающих подтверждения. Хранится локально — никуда не отправляется.\"],\"t9NJIk\":[\"Обнаружены интенсивные сканирования\"],\"tB7xof\":[\"Временные операции или сортировка\"],\"tBBXTO\":[\"Интервал пинга\"],\"tFrT3w\":[\"Добавьте этот фрагмент в файл конфигурации клиента вручную, если автоматическая установка не сработала.\"],\"tJ7UbA\":[\"объяснить активный\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Разделить горизонтально\"],\"tQhW-D\":[\"Настройки логирования\"],\"tT-BQX\":[\"Установленные\"],\"tXFGEx\":[\"Нет сохранённых подключений Kubernetes. Нажмите «Добавить», чтобы создать.\"],\"tXLz_8\":[\"Удалить\"],\"tXpRby\":[\"Таблица данных\"],\"tbysEk\":[\"Действия\"],\"tdta9X\":[\"Страница \",[\"0\"]],\"tfDRzk\":[\"Сохранить\"],\"tfEioV\":[\"Выполнить все SQL-ячейки сверху вниз\"],\"tiAIaJ\":[\"SSH-пароль отсутствует. Введите заново.\"],\"tk22BR\":[\"Вставьте структурированные данные и проверьте схему перед импортом\"],\"tst44n\":[\"События\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL-файл выполнен\"],\"u6QeR6\":[\"Перезапустить сейчас\"],\"uAQUqI\":[\"Статус\"],\"uBAxNB\":[\"Редактор\"],\"uBI8D9\":[\"Esc для закрытия\"],\"uFViPK\":[\"Нет доступных SSH-подключений\"],\"uHUuhp\":[\"Объяснить этот запрос\"],\"uHfFzS\":[\"Размер шрифта редактора\"],\"uJ_3K5\":[\"Удалить блокнот «\",[\"0\"],\"»? Это действие нельзя отменить.\"],\"uKaNJ3\":[\"Открыть в JSON-редакторе\"],\"uQBwTo\":[\"Схемы\"],\"ub54ff\":[\"Центр плагинов\"],\"ufFyBs\":[\"База данных экспортирована\"],\"upNmR2\":[\"Открыть в боковом редакторе\"],\"upwIY4\":[\"Определение представления\"],\"utMia3\":[\"Снять выбор\"],\"uyNaJg\":[\"1 элемент\"],\"v61dnS\":[\"Укажите точное название модели вашего OpenAI-совместимого провайдера.\"],\"v6oeyr\":[\"Установлено\"],\"v75DGg\":[\"Выбрать файл\"],\"v99dO4\":[\"Первичный ключ\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" запрос\"],\"few\":[\"#\",\" запроса\"],\"many\":[\"#\",\" запросов\"],\"other\":[\"#\",\" запроса\"]}]],\"vCSBPD\":[\"Добавить фильтр\"],\"vH7uJj\":[\"Сортировать по…\"],\"vUOA1-\":[\"Поиск моделей...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE включает реальные строки, время, итерации и счётчики буферов при наличии.\"],\"vXIe7J\":[\"Язык\"],\"vYf4Jm\":[\"Введите полную SQL-функцию (например, ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Предпочтительный\"],\"vditm4\":[\"План выполнения\"],\"vks_ls\":[\"Закрыть остальные вкладки\"],\"vnAnIp\":[\"Модель \",[\"0\"],\" не найдена у провайдера \",[\"1\"],\". Она может работать некорректно.\"],\"vqoN5u\":[\"Структура\"],\"vrAvbP\":[\"Удалить группу «\",[\"0\"],\"»? Подключения переместятся в раздел без группы.\"],\"vtJ2yO\":[\"Проводник\"],\"vujQJ5\":[\"Локализация\"],\"vvJPVL\":[\"Показать обзор\"],\"vwI5S4\":[\"Готово\"],\"vzH-7Z\":[\"Объяснить\"],\"w7QmD_\":[\"Введите системный промпт...\"],\"w9eMXw\":[\"триггер\"],\"wCJFlW\":[\"Прошло времени\"],\"wCfv2R\":[\"Добавить подключение\"],\"wGfc86\":[\"Очистить всю историю\"],\"wGwNv4\":[\"Активная база данных\"],\"wJJ-Wy\":[\"Установка...\"],\"wMe2Qp\":[\"Пространство имён\"],\"wQiel_\":[\"Попаданий в буфер\"],\"wQn-RM\":[\"Добавить столбец\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Применено\"],\"wTmVhm\":[\"Удалить\"],\"wZeIWq\":[\"Импорт из буфера обмена\"],\"w_bY7R\":[\"Логи\"],\"wc_8bA\":[\"Ожидает подтверждения\"],\"wckWOP\":[\"Управление\"],\"wdYcKH\":[\"Открытые вкладки\"],\"wja8aL\":[\"Без названия\"],\"wkOAzk\":[\"Нет блокнотов, соответствующих запросу.\"],\"wp49Ao\":[\"Не удалось обработать вставки: \"],\"wqG2hQ\":[\"Пропустить (не импортировать)\"],\"wwrAsK\":[\"Заполните все обязательные поля\"],\"wwu18a\":[\"Icon\"],\"x2fr_j\":[\"Граф\"],\"xANKBj\":[\"Функции\"],\"xBwjck\":[\"Изменения вступят в силу после перезапуска.\"],\"xDAtGP\":[\"Сообщение\"],\"xECY01\":[\"Хранимые процедуры\"],\"xGPNgZ\":[\"Настройка промптов\"],\"xNgtS-\":[\"Представления не найдены\"],\"xOPa1b\":[\"Порт должен быть в диапазоне от 1 до 65535\"],\"xY9s5E\":[\"Таймаут\"],\"xaVUr1\":[\"Съешь же ещё этих мягких французских булок, да выпей чаю\"],\"xbvTzL\":[\"Путь к файлу\"],\"xlew5F\":[\"Очистить\"],\"xmNyKz\":[\"Проверка...\"],\"xtuh6D\":[\"Развернуть проводник\"],\"y-Zdqj\":[\"Выберите контекст...\"],\"y3HaQk\":[\"Момент срабатывания\"],\"yLFey_\":[\"Создать триггер\"],\"yLianM\":[\"Открыть просмотрщик JSON\"],\"yQXjG5\":[\"Снять выбор\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Изменить триггер\"],\"y_0uwd\":[\"Вчера\"],\"ygCKqB\":[\"Остановить\"],\"ykCc6r\":[\"Изменена база данных (ячейка \",[\"n\"],\")\"],\"ynVMSc\":[\"Выбрать все\"],\"ytdz1d\":[\"AI запрашивает запись в базу данных\"],\"yyhzur\":[\"Создать таблицу\"],\"yz7wBu\":[\"Закрыть\"],\"z0VdfR\":[\"процедура\"],\"z407wX\":[\"SSH-пароль\"],\"z4oF5T\":[\"Экспорт базы данных\"],\"z5kV0h\":[\"Подключения\"],\"zBTMzx\":[\"Предпросмотр\"],\"zCaAKs\":[\"Ошибка обновления\"],\"zDAakK\":[\"Отображение диаграммы невозможно без ID подключения.\"],\"zGe21h\":[\"Этот ключ загружен из переменной окружения\"],\"zGfL5t\":[\"значение\"],\"zL6-4A\":[\"Нет запущенных процессов плагинов\"],\"zLZhCi\":[\"Новое сообщество в Discord!\"],\"zLlCou\":[\"Копировать имя столбца\"],\"zNEL34\":[\"Присоединяйтесь к сообществу\"],\"zNgTlV\":[\"Закрыть вкладки справа\"],\"zQz55p\":[\"Показать структуру\"],\"zR0FfH\":[\"Экспортировано в \",[\"target\"]],\"zRZeOc\":[\"Поиск таблиц, представлений, процедур, триггеров...\"],\"zUNMsr\":[\"SSH-ключ\"],\"zXMRzb\":[\"SSH-порт\"],\"zZgoXr\":[\"Таблицы не найдены\"],\"zaWbms\":[\"Откатить изменения\"],\"zgClmU\":[\"Установить конфигурацию\"],\"zga9sT\":[\"ОК\"],\"zgk5iK\":[\"Введите значение...\"],\"zvzN4C\":[\"Сделать активным\"],\"zzDlyQ\":[\"Успешно\"],\"zzMxrp\":[\"Изменить config.json\"],\"zz_Wd_\":[\"Режим\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"Максимум записей в истории\"],\"-6AWa-\":[\"Импортировать подключения\"],\"-6NyRG\":[\"Клиент\"],\"-K0AvT\":[\"Отключиться\"],\"-PLZfh\":[\"Не удалось обновить модели\"],\"-T5W2e\":[\"Примечания драйвера\"],\"-ZgeeE\":[\"История изменений\"],\"-aYrdc\":[\"Доступна версия \",[\"0\"]],\"-fBGXl\":[\"Наибольшая стоимость\"],\"-jIQDz\":[\"Свернуть ячейку\"],\"-u1eRo\":[\"Нет базы данных\"],\"-yoeVU\":[\"Загрузка схемы...\"],\"-zy2Nq\":[\"Тип\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"ID подтверждения\"],\"0E5-gF\":[\"Удалить это подключение?\"],\"0HCubq\":[\"Развернуть\"],\"0Kmdvy\":[\"Пользовательский шрифт\"],\"0Nj13E\":[\"Сгенерировать SQL\"],\"0ROgz5\":[\"Введите JSON...\"],\"0SY9sU\":[\"Не удалось отключиться от базы данных\"],\"0b3kL9\":[\"Выберите базу данных\"],\"0caMy7\":[\"История\"],\"0mx5ow\":[\"Запрос\"],\"0n9BtL\":[\"Предпросмотр\"],\"0pHB9N\":[\"Копировать как table.column\"],\"0sQzZK\":[\"Фильтр баз данных...\"],\"0uPP9X\":[\"Имя внешнего ключа (необязательно)\"],\"0wxuek\":[\"Текущая версия\"],\"0x09Aw\":[\"Переключён останов при ошибке\"],\"0yBP6v\":[\"Поддержать разработку\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка\"],\"few\":[\"#\",\" строки\"],\"many\":[\"#\",\" строк\"],\"other\":[\"#\",\" строки\"]}]],\"0yVAoD\":[\"Подсчитать строки\"],\"0zxJ87\":[\"Логи отсутствуют\"],\"1-ETbn\":[\"Визуальный Explain\"],\"1133_z\":[\"Изменить представление\"],\"11fGJ6\":[\"Запросы\"],\"13hIUA\":[\"API-ключ \",[\"0\"]],\"14qNWF\":[\"Выбрать SSH-подключение\"],\"17qHRP\":[\"Новое подключение\"],\"1Dn6bg\":[\"Импортировать из буфера обмена\"],\"1Dnd0I\":[\"Загрузить количество строк\"],\"1FjTLW\":[\"например, python3\"],\"1GOvbo\":[\"Ollama подключён (найдено моделей: \",[\"0\"],\")\"],\"1I6UoR\":[\"Представления\"],\"1U7hS5\":[\"Длина\"],\"1UTmg5\":[\"Максимальный размер пакета\"],\"1b7aSU\":[\"Шрифт редактора\"],\"1ekzlY\":[\"Процессы плагинов\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"Выбор темы\"],\"1xVZkL\":[\"Модели не найдены\"],\"26Joci\":[\"Строк: \",[\"0\"]],\"2Bf-Qe\":[\"Новая консоль\"],\"2CrSmP\":[\"Помогите Tabularis развиваться\"],\"2D9F8_\":[\"Не удалось дублировать подключение\"],\"2Eoi_a\":[\"Подробности\"],\"2F4pE5\":[\"Сборка и тесты Rust\"],\"2Fsd9r\":[\"В этом месяце\"],\"2JzKXI\":[\"Установить GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"Выбрать все\"],\"2SO5RM\":[\"Kubernetes недоступен для этого драйвера.\"],\"2Uh5GA\":[\"Экосистема Cargo\"],\"2YylFp\":[\"Новый визуальный запрос\"],\"2luuSG\":[\"Повторить\"],\"2wxgft\":[\"Переименовать\"],\"2yG2GC\":[\"Приостанавливать запись (или любой запрос) и запрашивать подтверждение в Tabularis перед отправкой в базу данных.\"],\"30-b5r\":[\"Удалить\"],\"31kwdN\":[\"Дублировать фильтр\"],\"34nxyb\":[\"Триггеры\"],\"35148H\":[\"Все инструменты\"],\"3Am5DS\":[\"Вкладки\"],\"3FVg9_\":[\"Локальный столбец\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"Запустить\"],\"3L0HCz\":[\"Плагины не найдены.\"],\"3Nv3JV\":[\"Выполнение запроса...\"],\"3TSz9S\":[\"Свернуть\"],\"3UW8fG\":[\"Обновления управляются через \",[\"0\"]],\"3YvS-c\":[\"Новая вкладка\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Промпт для названия ячейки ноутбука\"],\"3qkggm\":[\"На весь экран\"],\"3rBJ1T\":[\"Просмотреть схему\"],\"3xZ-xV\":[\"Вставить текущую метку времени\"],\"40Gx0U\":[\"Часовой пояс\"],\"41GP4f\":[\"Разделитель по умолчанию при копировании или экспорте строк в формате CSV.\"],\"42iaEi\":[\"PostgreSQL без ANALYZE показывает только оценки планировщика.\"],\"44cXI8\":[\"Сортировать по \",[\"colName\"],\" ASC\"],\"4AF7FO\":[\"Управление базами данных\"],\"4CK17g\":[\"Изменить представление \\\"\",[\"name\"],\"\\\"?\"],\"4DDaw-\":[\"Выберите хотя бы одну базу данных\"],\"4D_Nvt\":[\"Не удалось создать группу\"],\"4RiR6c\":[\"Экспортировать как HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" дочерний процесс\"],\"few\":[\"#\",\" дочерних процесса\"],\"many\":[\"#\",\" дочерних процессов\"],\"other\":[\"#\",\" дочерних процессов\"]}]],\"4TtbAT\":[\"Fetch the latest translations from the cloud without waiting for an app update.\"],\"4VyuY3\":[\"Очистить все логи?\"],\"4WWqS3\":[\"Показать/скрыть JSON-дерево\"],\"4XAQdl\":[\"Создать индекс\"],\"4cEClj\":[\"Сессии\"],\"4cmfYp\":[\"Дублировать строку\"],\"4hsr6d\":[\"Создать представление\"],\"4lIZTB\":[\"Dev-зависимости фронтенда\"],\"4oYjvJ\":[\"Поиск запроса…\"],\"4tMxW4\":[\"Preview related record\"],\"4yJcjm\":[\"Выберите тип...\"],\"52O82A\":[\"NN\"],\"570t6W\":[\"Закрыть панель фильтров (ESC)\"],\"592-gw\":[\"AI\"],\"5FvuZv\":[\"Точка с запятой (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"one\":[\"#\",\" событие\"],\"few\":[\"#\",\" события\"],\"many\":[\"#\",\" событий\"],\"other\":[\"#\",\" событий\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"Список\"],\"5To6Z6\":[\"Копировать запрос\"],\"5gqNQl\":[\"Сетка\"],\"5igIzr\":[\"Импорт отменён\"],\"5nTIup\":[\"Редактирование представления: \",[\"name\"]],\"5qIe8E\":[\"Запустить все\"],\"66bEht\":[\"Статус проекта\"],\"6PIJVc\":[\"Запуск\"],\"6QvP0l\":[\"Экспортировать как JSON\"],\"6W41Xq\":[\"Диспетчер задач\"],\"6WngBH\":[\"Установить NULL\"],\"6YtxFj\":[\"Имя\"],\"6_dCYd\":[\"Обзор\"],\"6dOBsk\":[\"Создать представление\"],\"6gvoHP\":[\"Скопировать сообщение об ошибке\"],\"6oCVzX\":[\"Контекст Kubernetes обязателен\"],\"6wQO0f\":[\"Показать данные\"],\"6z9W13\":[\"Перезапустить\"],\"71agNy\":[\"Сгенерировать названия для безымянных ячеек с помощью AI\"],\"74J3FG\":[\"Начальная версия\"],\"75BWdo\":[\"Не удалось загрузить определение триггера: \"],\"76d3Uz\":[\"События\"],\"76gPWk\":[\"Понятно\"],\"77nSMU\":[\"Удалить всю историю активности AI? Это действие необратимо.\"],\"7ABmyQ\":[\"Попробовать снова\"],\"7Ap0JP\":[\"Активно \",[\"activeFilterCount\"],\" из \",[\"0\"]],\"7E864M\":[\"Тип базы данных\"],\"7FqaG1\":[\"Настройте инструкции для AI-анализа планов EXPLAIN. Используйте \",[\"LANGUAGE\"],\" для языка вывода.\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"Обнаружены смешанные типы, использован TEXT\"],\"7RSQQd\":[\"Сохранять пароли в Keychain\"],\"7VpPHA\":[\"Подтвердить\"],\"7e7bPs\":[\"Тело триггера (SQL)\"],\"7eRaA9\":[\"Удалить триггер\"],\"7l15X4\":[\"с ошибкой\"],\"7sMeHQ\":[\"Ключ\"],\"7sNhEz\":[\"Пользователь\"],\"7tATh2\":[\"Выполнить запрос\"],\"7yb4gk\":[\"Ошибка: \"],\"8-4V8D\":[\"Таблицы\"],\"82G-l5\":[\"Model Context Protocol (MCP) позволяет AI-ассистентам (например, Claude) подключаться к локальным инструментам. Tabularis предоставляет MCP-сервер, через который AI читает схему базы данных и выполняет запросы.\"],\"83VjWE\":[\"Новый ноутбук\"],\"86IgoU\":[\"Выполнить запрос (в редакторе)\"],\"86fCgf\":[\"Настройте инструкции для AI-генерации названий вкладок с результатами. SQL-запрос передаётся как сообщение пользователя.\"],\"87a_t_\":[\"Метка\"],\"87kWsr\":[\"Экспорт подключений\"],\"8CWirf\":[\"MCP-сервер\"],\"8S8aIX\":[\"Проверка состояния подключения\"],\"8TMaZI\":[\"Время\"],\"8Tg_JR\":[\"Custom\"],\"8UFKYr\":[\"Выбрать запрос для выполнения\"],\"8VKSGV\":[\"Сгенерировать SQL\"],\"8Wjy6z\":[\"Закрыть вкладки слева\"],\"8ZsakT\":[\"Пароль\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL-редактор\"],\"8bRgTe\":[\"AI-провайдер не настроен. Перейдите в Настройки > AI.\"],\"8c_W0h\":[\"Старые версии\"],\"8guEQP\":[\"Обновить представления\"],\"8lm5qE\":[\"SQLite EXPLAIN QUERY PLAN — лёгкий инструмент преимущественно для анализа структуры.\"],\"8q_sOc\":[\"Remove\"],\"8t-akp\":[\"показаны первые \",[\"MAX_PREVIEW_ROWS\"]],\"8y-ljb\":[\"Показать/скрыть текстовый редактор\"],\"8zfThY\":[\"Название подключения\"],\"91gnWY\":[\"Экспортировать логи\"],\"91rtHL\":[\"Создать новое представление\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"Новая группа\"],\"9DOfTQ\":[\"Редактирование триггера: \",[\"name\"]],\"9JdjEN\":[\"Представление обновлено\"],\"9NzDFn\":[\"Показывать экран приветствия при запуске приложения.\"],\"9OoUS3\":[\"Создать новое SSH-подключение\"],\"9QGRD5\":[\"Целевой столбец\"],\"9QTny9\":[\"Ошибка выполнения запроса.\"],\"9S-fyV\":[\"Предварительный план выполнения\"],\"9SJ_Sx\":[\"Системные ресурсы\"],\"9UQ730\":[\"Клонировать\"],\"9X6cky\":[\"Нет\"],\"9XUV5V\":[\"В буфере обмена нет данных\"],\"9hGjL2\":[\"Создать индекс\"],\"9mMU1R\":[\"Время\"],\"9mvFo_\":[\"Время\"],\"9npOH9\":[\"Открыть файл\"],\"9uI_rE\":[\"Отменить\"],\"9xUjzm\":[\"Выбрать все\"],\"9y_02p\":[\"Общайтесь с сообществом, получайте помощь, предлагайте функции\"],\"A1pPcI\":[\"SSH-хост\"],\"A1taO8\":[\"Поиск\"],\"A6C0pv\":[\"Общая стоимость\"],\"A7WG0p\":[\"Плагин отключён\"],\"A7yRz3\":[\"Определение представления обязательно\"],\"A9Uyp6\":[\"Ошибка импорта: \"],\"ABEd-z\":[\"Для обновления Tabularis используйте менеджер пакетов.\"],\"AMdgKV\":[\"Промпт для анализа плана выполнения\"],\"ANSTMe\":[\"Серьёзных проблем в текущем плане не обнаружено.\"],\"ANzIr7\":[\"История запросов\"],\"AOnaU7\":[\"пропущено\"],\"AVlZoM\":[\"Окружение\"],\"AXTVsE\":[\"Verify Full\"],\"AXdRYR\":[\"Текущие логи\"],\"Aa-YkQ\":[\"Экспортировать ноутбук\"],\"Ai2U7L\":[\"Хост\"],\"AidayG\":[\"Фильтр по уровню\"],\"AlPiMN\":[\"Нажмите для перехода на страницу\"],\"An-1rA\":[\"Возвращено строк\"],\"AnV8j-\":[\"Изменить столбец\"],\"AvEr_L\":[\"Новая консоль\"],\"AvYbUL\":[\"Поставить звезду на GitHub\"],\"Aw_eOs\":[\"Требуется Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"Ничего не найдено\"],\"B0mJGb\":[\"Сырой вывод\"],\"B1c58n\":[\"Изменить столбец\"],\"B3toQF\":[\"Объекты\"],\"B5nKny\":[\"/абсолютный/путь/к/папке\"],\"B5xevr\":[\"Имя подключения обязательно\"],\"BAVvWJ\":[\"ER-диаграмма\"],\"BBtVak\":[\"Свернуть все\"],\"BEVzjL\":[\"Импорт не удался\"],\"BHATjK\":[\"Экспортировать подключения\"],\"BJe2lZ\":[\"Показать/скрыть боковую панель\"],\"BK3WCj\":[\"Не удалось загрузить реестр\"],\"BKbO3i\":[\"Блокнот изменён\"],\"BMB51y\":[\"Запустить в консоли\"],\"BNW_Z4\":[\"например, active_users, order_summary\"],\"BPkXj7\":[\"Создать внешний ключ\"],\"BUO_JN\":[\"Копировать запрос\"],\"BYkhHY\":[\"Проверять обновления при запуске\"],\"BeSg6-\":[\"Собирать логи приложения в памяти для отладки\"],\"BgAyQH\":[\"Сбросить сортировку\"],\"BinTJI\":[\"экосистема npm\"],\"BkFson\":[\"Автопостраничный вывод\"],\"Bpglf1\":[\"Переместить вверх\"],\"BrGo6h\":[\"Поиск блокнотов\"],\"BxiAN_\":[\"Удалить запрос\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"Зависимости фронтенда\"],\"CE-M2e\":[\"Информация\"],\"CHIyL8\":[\"Нет фильтров —\"],\"CJnUoU\":[\"Обновить триггеры\"],\"CLWWRV\":[\"Скачивание...\"],\"CUxwxn\":[\"Показать все таблицы\"],\"CWMXbw\":[\"принудительно остановит процесс. Все активные подключения к базе данных через этот плагин перестанут работать до его перезапуска.\"],\"CZt6BX\":[\"РУЧНАЯ НАСТРОЙКА\"],\"Ca8ixZ\":[\"Удалить\"],\"CbJBQS\":[\"Ошибка обновления: \"],\"Cdz-YU\":[\"Список\"],\"CpeQf9\":[\"Итерации\"],\"D2wXBw\":[\"Автоинкремент\"],\"D6Ql0c\":[\"Выберите модель для генерации и объяснения запросов.\"],\"DB8zMK\":[\"Применить\"],\"DDXf5E\":[\"SQL-функции\"],\"DEwnwi\":[\"Удалить\"],\"DNTvdl\":[\"Открыть в редакторе\"],\"DPc2P9\":[\"Удалить ячейку\"],\"DUY8Ba\":[\"Критические изменения\"],\"DVnBSM\":[\"Межстрочный интервал\"],\"Dd7YLj\":[\"Может быть позже\"],\"Deej3j\":[\"Некорректный JSON\"],\"DfKhk_\":[\"Обновить\"],\"DiRiTz\":[\"Открыть страницу пакета\"],\"DlRHAD\":[\"Выполнение EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" ошибка\"],\"few\":[\"#\",\" ошибки\"],\"many\":[\"#\",\" ошибок\"],\"other\":[\"#\",\" ошибок\"]}]],\"Dvdihe\":[\"На \",[\"0\"],\" — проверьте запрос перед выполнением.\"],\"DzFLzw\":[\"Да\"],\"E-JUtQ\":[\"Подтверждение операций\"],\"E0kcnZ\":[\"Общее\"],\"E2mje_\":[\"Выбрать запрос для объяснения\"],\"EDieyg\":[\"Удалить это SSH-подключение?\"],\"EHZxPj\":[\"Развернуть\"],\"EL4oDO\":[\"Доступна новая версия\"],\"EPi4gT\":[\"Сортировать по \",[\"field\"]],\"EWPtMO\":[\"Код\"],\"EWX0mQ\":[\"Без группы\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"Неизвестно\"],\"EhADgB\":[\"Удалить столбец\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"Используется актуальная версия\"],\"Em6JFd\":[\"Подсчитать строки\"],\"EnGiqG\":[[\"0\"],\" элементов\"],\"Ew1n5z\":[\"Поиск плагинов…\"],\"F18WP3\":[\"Параметры\"],\"F3uc1x\":[\"Экспортируемый файл будет содержать пароли к базам данных и SSH в открытом виде. Храните его в надёжном месте!\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" строка\"],\"few\":[\"#\",\" строки\"],\"many\":[\"#\",\" строк\"],\"other\":[\"#\",\" строки\"]}]],\"F6pfE9\":[\"Активно\"],\"F8tXg7\":[\"Предпросмотр данных\"],\"F9-6yK\":[\"Формат копирования по умолчанию\"],\"F9lxfG\":[\"Удалить\"],\"F9nsa2\":[\"Файл истории был повреждён и перенесён в резервную копию. Новые запросы будут записываться как обычно. Резервный файл:\"],\"FF_oap\":[\"По умолчанию\"],\"FK8rlP\":[\"SSH-подключения не настроены\"],\"FMRcH8\":[\"Первая строка как заголовок\"],\"FNvDMc\":[\"На этой неделе\"],\"FQe1FI\":[\"Оценка строк\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"Warn\"],\"FZg3wM\":[\"Операция\"],\"Fa_cky\":[\"Схема: \",[\"tableName\"]],\"FpEL5o\":[\"Выберите отдельную тему для SQL-редактора или синхронизируйте её с темой приложения.\"],\"FsvZQL\":[\"Изменена ячейка \",[\"n\"]],\"FtwKL9\":[\"Переключить вкладку\"],\"FznI3z\":[\"Удалить внешний ключ \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"Ошибка предпросмотра: \"],\"G8Q5Zq\":[\"Пространство имён обязательно\"],\"GAohqx\":[\"Удалить столбец\"],\"GJR99u\":[\"Не удалось удалить столбец: \"],\"GKfzzM\":[\"Выберите подключение...\"],\"GS-Mus\":[\"Экспортировать\"],\"GUaLUq\":[\"Не удалось загрузить схему: \"],\"GXP-Iw\":[\"Добавить SQL-ячейку\"],\"Gj1mLb\":[\"Ячейки переупорядочены\"],\"GlbqG2\":[\"Reset to driver default\"],\"Gq1YzP\":[\"События\"],\"Gs5AlY\":[\"Открыть\"],\"GtmO8_\":[\"от\"],\"GxkJXS\":[\"Загрузка...\"],\"H-o4D2\":[\"Создать новый столбец\"],\"H2B-KW\":[\"Формат по умолчанию при копировании строк через Ctrl+C / Cmd+C.\"],\"H3oH0g\":[\"Повторить\"],\"H7mlCc\":[\"/абсолютный/путь/к/db.sqlite\"],\"H86f9p\":[\"Свернуть\"],\"H9HlDe\":[\"minutes\"],\"H9P8CD\":[\"добавить первый фильтр\"],\"HAQlGl\":[\"Активность AI\"],\"HKNZrs\":[\"Условие индекса\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"Удалить \",\"#\",\" строку\"],\"few\":[\"Удалить \",\"#\",\" строки\"],\"many\":[\"Удалить \",\"#\",\" строк\"],\"other\":[\"Удалить \",\"#\",\" строки\"]}]],\"HPuCiP\":[\"Путь к папке\"],\"HUs1R3\":[\"Нет открытых вкладок для этого подключения.\"],\"HV4Isp\":[\"Введите SSH-пароль\"],\"HVC8Hh\":[\"Скопировано в буфер обмена\"],\"HWEpq8\":[\"Запись на диск/с\"],\"HY4nP5\":[\"Встроенно\"],\"HcmoWv\":[\"Не удалось сохранить представление: \"],\"He8v1Y\":[\"Убрать из «Применить все»\"],\"HehHP1\":[\"Расположение по умолчанию\"],\"HilYn4\":[\"Ноутбук пуст. Добавьте ячейку для начала работы.\"],\"HjxVK_\":[\"Быстрая проверка подключения\"],\"HmMnRx\":[\"Режим WKT\"],\"HoKCiI\":[\"Приложение автоматически перезапустится после установки\"],\"HpK_8d\":[\"Перезагрузить\"],\"Hpi4Jm\":[\"Вступить сейчас\"],\"HuA3RU\":[\"Табуляция\"],\"I128p7\":[\"Вертикальная черта (|)\"],\"I3AgqA\":[\"Настроить SSH вручную\"],\"I5VBsr\":[\"Как в приложении\"],\"I8yrPb\":[\"Заменить таблицу\"],\"I92BdB\":[\"Убрать из группы\"],\"I92fr4\":[\"Напомнить позже\"],\"I99Miw\":[\"Стоимость\"],\"IETZIR\":[\"Изменить название ячейки\"],\"IG9wzA\":[\"Не удалось добавить строку: \"],\"ILleOG\":[\"Тип ресурса должен быть \\\"service\\\" или \\\"pod\\\"\"],\"IQ3gAw\":[\"Загрузить файл\"],\"IUwGEM\":[\"Сохранить изменения\"],\"IUwmLq\":[\"Прямые зависимости из package.json и src-tauri/Cargo.toml.\"],\"IVrBTT\":[\"Библиотеки с открытым исходным кодом\"],\"I_43p6\":[\"Безопасность\"],\"Iaizf4\":[\"Appearance\"],\"Il3FBB\":[\"Открыть/закрыть панель фильтров\"],\"IniZRK\":[\"Загрузка недоступна — загружен только предпросмотр\"],\"Isaozb\":[\"Проверить и настроить\"],\"J17_9Z\":[\"Не удалось сохранить триггер: \"],\"J2Cb95\":[\"Активные запросы и подключения через этот плагин будут прерваны.\"],\"J6v1s_\":[\"Модель по умолчанию\"],\"JE-DVk\":[\"Интерпретатор\"],\"JEGlfK\":[\"Начало\"],\"JKDPqP\":[\"Сначала выберите контекст\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"Использовать SSH-туннель\"],\"JRz8tw\":[\"MySQL и MariaDB предоставляют реальные метрики только в поддерживаемых вариантах EXPLAIN ANALYZE или ANALYZE FORMAT.\"],\"JUICth\":[\"PNG, JPG, WebP or SVG · max 512 KB\"],\"JY5Oyv\":[\"База данных\"],\"JlFRIB\":[\"Часовой пояс сессии, отправляемый в MySQL после подключения.\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"Отклонено\"],\"K3H9p5\":[\"Не задано\"],\"K5Dgu_\":[\"Базы данных\"],\"K8IGKf\":[\"Тип аутентификации\"],\"KAYNSW\":[\"Количество логов, хранимых в памяти (1–10000)\"],\"KHTGbr\":[\"Предварительный EXPLAIN\"],\"KHvda8\":[\"Не null\"],\"KJKNaZ\":[\"Копировать как `column`\"],\"KM5Kc8\":[\"Выберите хотя бы один столбец\"],\"KSCnVQ\":[\"Тип\"],\"KUjOb9\":[\"работает\"],\"KXBdwy\":[\"Обновить подпрограммы\"],\"KXNyX7\":[\"Установить DEFAULT\"],\"Kd70-v\":[\"Импортировать из буфера обмена...\"],\"KhI4oS\":[\"Открыть связанную строку в \",[\"0\"]],\"KhgrNu\":[\"Интеграция MCP-сервера\"],\"KirERL\":[\"Таймаут\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"Не удалось удалить индекс: \"],\"KzeARD\":[\"Не удалось удалить таблицу: \"],\"L-rMC9\":[\"Сбросить по умолчанию\"],\"L3HXkQ\":[\"Исправления ошибок\"],\"LCZ7Dy\":[\"Копировать имя\"],\"LFDf6p\":[\"Создать новый триггер базы данных\"],\"LK1m4W\":[\"индексы\"],\"LMeAoR\":[\"строки\"],\"LPCdc-\":[\"Промпт для названия вкладки запроса\"],\"LPFmga\":[\"Добавить в «Применить все»\"],\"LYzbQ2\":[\"Инструмент\"],\"Lbis_V\":[\"Быстрый навигатор\"],\"Lcpbe2\":[\"Процесс плагина не удалось запустить. Подробности ниже.\"],\"LhUHHO\":[\"Предпросмотр сгенерированного SQL\"],\"LihabZ\":[\"EXPLAIN поддерживается только для DML-запросов (SELECT, INSERT, UPDATE, DELETE). DDL-запросы (CREATE, DROP, ALTER) не поддерживаются.\"],\"LnT0hQ\":[\"Добавить столбец\"],\"LvutiO\":[\"Предложить (AI)\"],\"M-rHQO\":[\"Выйти из полноэкранного режима\"],\"M0XJba\":[\"Очистить всю историю запросов для этого подключения?\"],\"M1co_O\":[\"Настроено\"],\"M73whl\":[\"Контекст\"],\"MDa5o0\":[\"например, before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"Показать все\"],\"MXdOwj\":[\"Отдельные подключения\"],\"MZ4T5z\":[\"PK\"],\"MZX6eL\":[\"Выберите подключение K8s\"],\"Mc1tjS\":[\"Включите ANALYZE для просмотра реальных строк, времени, итераций и буферов.\"],\"Mm4p0T\":[\"+\",[\"0\"],\" строк\"],\"Mp0jQ_\":[\"Этот драйвер поддерживает первичные ключи только при создании таблицы\"],\"MqpZwN\":[\"Процесс Tabularis\"],\"MxIx43\":[\"↑↓ для навигации, Enter для открытия\"],\"MygtgQ\":[\"Добавить Markdown-ячейку\"],\"N40H-G\":[\"Все\"],\"N5UQxq\":[\"Ollama не обнаружен на порту \",[\"0\"],\". Запущен ли он?\"],\"N6GBcC\":[\"Подтверждение удаления\"],\"N6aqHp\":[\"Запросы\"],\"N9_S15\":[\"Будет создана новая таблица\"],\"NBdMa1\":[\"Самый медленный шаг\"],\"NC2AI2\":[\"Длина\"],\"NCzNnx\":[\"Сортировать по возрастанию\"],\"NT4Ubs\":[\"Удалить пользовательский ключ и вернуться к переменной окружения (если задана)\"],\"NUjrCO\":[\"Ничего не найдено в избранном\"],\"NWJrXh\":[\"SQL триггера обязателен\"],\"NZUDnP\":[\"Итого по дереву: \",[\"0\"]],\"Nc2VQn\":[\"Добавить в существующую\"],\"NgFERn\":[\"Добавить в избранное\"],\"NktMHG\":[\"Имя базы данных\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"Проверить\"],\"Nq5QTk\":[\"объяснить N-й\"],\"O2STgu\":[\"Ошибка экспорта: \"],\"O8SV8O\":[\"Загрузка...\"],\"O9_WW6\":[\"подключение\"],\"OGEsKj\":[\"Выполнить все ячейки\"],\"OGWdBg\":[\"Название представления\"],\"OHqT6w\":[\"Нажмите сочетание клавиш...\"],\"OXJsaG\":[\"Недопустимое имя параметра\"],\"OfhWJH\":[\"Сбросить\"],\"OlAl5i\":[\"Развернуть все\"],\"Osn70z\":[\"Debug\"],\"Ou8b_n\":[\"Присоединиться к Discord\"],\"P1YGsb\":[\"Генерация SQL\"],\"P2m1xb\":[\"Остановить при ошибке\"],\"P3Qlys\":[\"Нет ID подключения\"],\"P6Y3Yf\":[\"Выполните эту команду в терминале, затем перезапустите Claude Code.\"],\"PCdj-c\":[\"Снять выбор\"],\"PMnFt9\":[\"Чтение с диска/с\"],\"PQU2Va\":[\"Принимать подсказку по Enter\"],\"PRnH8G\":[\"из \",[\"0\"]],\"PY8UF3\":[\"Переключён параллельный режим (ячейка \",[\"n\"],\")\"],\"PiH3UR\":[\"Скопировано!\"],\"Pia95d\":[\"Имя столбца обязательно\"],\"PrElXQ\":[\"Обновить\"],\"PrixCC\":[\"Строки будут добавлены в существующую таблицу\"],\"Pujgbb\":[\"Настроить назначение\"],\"Pw_eQV\":[\"Плагин не запустился\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"Нет сохранённых запросов\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"Нет дочерних процессов\"],\"QCxMC0\":[\"Автоматически проверять новые версии при запуске приложения\"],\"QEazml\":[\"Удалить выбранные\"],\"QHcLEN\":[\"Подключено\"],\"QLHHFO\":[\"Режим только для чтения\"],\"QOvAW3\":[\"Новые функции\"],\"QULGRi\":[\"Допустимые запросы не найдены\"],\"QZwllF\":[\"Обзор...\"],\"QbkSr_\":[\"EXPLAIN недоступен для этого запроса.\"],\"QeHFYZ\":[\"EXPLAIN завершился с ошибкой: \",[\"0\"]],\"Qll2Tb\":[\"По убыв.\"],\"Qoq-GP\":[\"Подробнее\"],\"Qu4Hog\":[\"Ноутбук импортирован\"],\"R-A2Vd\":[\"Нет данных для отображения\"],\"R0Hkb2\":[\"Выбрано баз данных: \",[\"0\"]],\"R1nHhB\":[\"Уже существует\"],\"R2Iz3m\":[\"Название триггера\"],\"R6oBUl\":[\"Преобразовать в консоль\"],\"R9Khdg\":[\"Авто\"],\"RDjuBN\":[\"Настройка\"],\"RF-HyV\":[\"Выберите язык интерфейса. «Авто» использует язык системы.\"],\"RGhYAo\":[\"RAM\"],\"RGpZyz\":[\"Скопировать имя\"],\"RI-HZc\":[\"Введите ключ \",[\"0\"]],\"RJrE17\":[\"Удалить представление \\\"\",[\"0\"],\"\\\"?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"Звезда помогает другим найти проект\"],\"Rb3Tdm\":[\"Имя блокнота\"],\"RcbKJ3\":[\"При обновлении\"],\"RkefFq\":[\"Выполнить EXPLAIN перед показом окна подтверждения, чтобы пользователь видел план выполнения.\"],\"RnF_hl\":[\"Загрузка реестра плагинов...\"],\"Rns7_C\":[\"Это действие нельзя немедленно отменить\"],\"RoKRqW\":[\"Доступные плагины\"],\"RphpKk\":[\"Внешний вид\"],\"Rt8sHM\":[\"Обнаружена сортировка или временные операции\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"Включено\"],\"S1veKH\":[\"Отменить выбранные изменения\"],\"S5zeZU\":[\"Переключить предпросмотр\"],\"S8Yqbl\":[\"Вставить\"],\"SDND4q\":[\"Не настроено\"],\"SJRy3D\":[\"(Генерируется автоматически)\"],\"SSwIjo\":[\"Установить EMPTY\"],\"SgvA_r\":[\"Нажмите «Запустить» (Ctrl/Command+F5) для загрузки данных таблицы\"],\"SlfejT\":[\"Ошибка\"],\"SoATkx\":[\"Копировать ячейку\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"URL эндпоинта\"],\"T7w5CQ\":[\"Не удалось создать новую строку: \"],\"T9947j\":[\"Значение (например, 'текст' или 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"Переключить на вертикальное расположение\"],\"TK5oex\":[\"Сохранить промпт\"],\"TKQ7K-\":[\"Установить\"],\"TKZreP\":[\"Обязательный\"],\"TMLAx2\":[\"Обязательно\"],\"TO08JI\":[\"внешние ключи\"],\"TVKqvO\":[\"Изменить строку\"],\"TYSdQ3\":[\"Выполнить SELECT-запрос\"],\"TfDFHS\":[\"Переносить длинные строки в редакторе вместо горизонтальной прокрутки.\"],\"Tibfjs\":[\"Нет сохранённых подключений — создайте ниже\"],\"Tj36Dr\":[\"Сбросить по умолчанию\"],\"Tjg925\":[\"Загрузка определения триггера...\"],\"TlZ7Ul\":[\"Заблокировать запрос\"],\"TpwXyg\":[\"Если время отсутствует, сервер вернул только оценочный план.\"],\"Tw2M1h\":[\"Ошибка установки\"],\"Ty-rm9\":[\"SSH-подключения\"],\"Tz0i8g\":[\"Настройки\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Подключения Kubernetes\"],\"U4uzyV\":[\"Что нового\"],\"U8W7sX\":[\"Не удалось получить определение триггера: \"],\"UB112k\":[\"Прекратить выполнение при ошибке в ячейке\"],\"UCQiqt\":[\"на \",[\"0\"]],\"UECR2b\":[[\"0\"],\" на \",[\"1\"],\" — проверьте запрос перед выполнением.\"],\"UI85PB\":[\"Ни один триггер не соответствует фильтру\"],\"UNKlAy\":[\"Настройки для \",[\"clientName\"],\" установлены. Перезапустите приложение.\"],\"URmyfc\":[\"Подробности\"],\"UWQBvp\":[\"Сгенерировать SQL-шаблоны\"],\"UawTKZ\":[\"Необязательно. Укажите исполняемый файл для запуска плагина (например, python3 на macOS/Linux или python либо полный путь на Windows). Оставьте пустым, чтобы использовать значение по умолчанию.\"],\"Ub8sf5\":[\"SQLite не поддерживает удаление внешних ключей через ALTER TABLE.\"],\"UbbJ8j\":[\"Варианты не найдены\"],\"Ubs68g\":[\"Общие\"],\"UftN8J\":[\"Отметьте подключения, которые должны быть только для чтения. Остальные работают как обычно.\"],\"UnQNah\":[\"Удалить столбец \\\"\",[\"0\"],\"\\\" из таблицы \\\"\",[\"tableName\"],\"\\\"?\\n\\nВНИМАНИЕ: Все данные в этом столбце будут безвозвратно удалены. Действие необратимо.\"],\"UncTTh\":[\"Сумма RSS по дереву процессов — общая память может учитываться несколько раз\"],\"UpjgFm\":[\"Изменены параметры\"],\"UsAnu1\":[\"ANALYZE выполняет запрос. Осторожно с операторами изменения данных.\"],\"UxKoFf\":[\"Навигация\"],\"Uy4iQO\":[\"Рядом\"],\"UzFX5x\":[\"Размер отступа\"],\"UzWGWO\":[\"Перейти к вводу SQL WHERE\"],\"V-chk5\":[\"Как часто проверять активные подключения. Установите 0 для отключения.\"],\"V-pw1j\":[\"Название таблицы\"],\"V2T0Uw\":[\"Сохранённых блокнотов пока нет.\"],\"V3aNwx\":[\"Редактор данных\"],\"VGYp2r\":[\"Применить ко всем\"],\"VH8S7x\":[\"Столбец из буфера обмена\"],\"VIAEcS\":[\"Не удалось загрузить базы данных. Проверьте учётные данные.\"],\"VKdztF\":[\"Добавить строки\"],\"VLiHXI\":[\"Данные ANALYZE\"],\"VMbmXc\":[\"Удалить «\",[\"pluginName\"],\"»? Файлы плагина будут удалены.\"],\"VO3weF\":[\"Файл не загружен\"],\"VOZlKc\":[\"Импорт базы данных\"],\"VPzsIz\":[\"Генерация названия...\"],\"VUul0v\":[\"Завершение\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Не удалось удалить триггер: \"],\"VfOb_W\":[\"Триггеры не найдены\"],\"Vgy9LX\":[\"Все запросы\"],\"Vi2Pqx\":[\"от\"],\"Vl2zn2\":[\"остановлен\"],\"Vo4uBA\":[\"Ошибка при установке плагина. Подробности ниже.\"],\"VqqyOs\":[\"Выполните запрос, чтобы увидеть результаты\"],\"VzhDFh\":[\"Блокировать любые не-SELECT запросы через MCP, если подключение явно не разрешено ниже.\"],\"W3uwpT\":[\"Закрыть все вкладки\"],\"W4MKLh\":[\"например: Выглядит рискованно на проде, нужно подтверждение…\"],\"W60eXm\":[\"Таблица\"],\"WA8RND\":[\"Удалить таблицу \\\"\",[\"0\"],\"\\\"?\"],\"WG8Qgt\":[\"Удалить таблицу\"],\"WLnvCZ\":[\"Введите имя пользователя\"],\"WM-__8\":[\"Поиск подключений...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка импортирована в «\",[\"tableName\"],\"»\"],\"few\":[\"#\",\" строки импортированы в «\",[\"tableName\"],\"»\"],\"many\":[\"#\",\" строк импортировано в «\",[\"tableName\"],\"»\"],\"other\":[\"#\",\" строки импортированы в «\",[\"tableName\"],\"»\"]}]],\"WTfntM\":[\"Удалить запрос \\\"\",[\"0\"],\"\\\"?\"],\"WarTN_\":[\"успешно\"],\"WcF1uL\":[\"Название группы\"],\"Weq9zb\":[\"Общие\"],\"WmPpB1\":[\"Загрузка плана выполнения…\"],\"Wu7cK0\":[\"Базы данных не найдены\"],\"WvoUQF\":[\"Удалена ячейка \",[\"n\"]],\"Ww3pDD\":[\"РУЧНАЯ КОМАНДА\"],\"X-20AU\":[\"Введите промпт для названия вкладки...\"],\"X-U6_w\":[\"Шрифт\"],\"X5fs0g\":[\"Создайте первое подключение, чтобы начать работу.\"],\"X7Ayjp\":[\"Пароль сохранён в системном хранилище ключей\"],\"X9kySA\":[\"Избранное\"],\"XJOV1Y\":[\"Активность\"],\"XMCLEL\":[\"Создать новый триггер\"],\"XN_sSd\":[\"Automatic updates\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"Объяснение запроса\"],\"XVF2Pf\":[\"Изменить схемы\"],\"XW6OYF\":[\"Для этого плагина может потребоваться интерпретатор (например, Python). Укажите путь к нему в настройках плагина.\"],\"XZB6Xr\":[\"Максимум записей в логе\"],\"Xcffv2\":[\"Показывать кнопки AI-помощи и объяснения в редакторе\"],\"XeqTSh\":[\"Тип соединения\"],\"XmJfZT\":[\"имя\"],\"XoQfG1\":[\"SSH-пользователь\"],\"XwI0Vw\":[\"Авто (системный)\"],\"XyDlLX\":[\"Название индекса\"],\"Y2P2aK\":[\"Выберите схемы для загрузки:\"],\"Y8HYw2\":[\"значение\"],\"Y8zX3R\":[\"Вставить в редактор\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"Поиск...\"],\"YWlnMZ\":[\"Порт Ollama\"],\"YYdC3A\":[\"Версия \",[\"0\"]],\"YYn8b5\":[\"Просмотр и установка плагинов из реестра.\"],\"Y_3yKT\":[\"Открыть в новой вкладке\"],\"YiAQ_Q\":[\"Обновить таблицы\"],\"Ysjr9Y\":[\"Предпросмотр SQL\"],\"YswNf7\":[\"Все уровни\"],\"YtNwr6\":[\"Максимальное количество записей истории запросов для одного подключения.\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"Загрузка...\"],\"Z7ZXbT\":[\"Подтвердить\"],\"Z8JpBH\":[\"Экспортировать как ноутбук\"],\"Z8fBIc\":[\"Реальных строк больше оценки\"],\"ZC2VJP\":[\"Выполнить\"],\"ZCIS4k\":[\"нет активных фильтров\"],\"ZF1_UT\":[\"Режим SSL\"],\"ZGjBPa\":[\"Очистить логи\"],\"ZHQTlM\":[\"Импорт из\"],\"ZIFDoJ\":[\"Выберите хотя бы структуру или данные\"],\"ZIZA6o\":[\"Изменить перед подтверждением\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" предупреждение при разборе\"],\"few\":[\"#\",\" предупреждения при разборе\"],\"many\":[\"#\",\" предупреждений при разборе\"],\"other\":[\"#\",\" предупреждения при разборе\"]}]],\"ZVn8p2\":[\"Отображать номера строк на полях редактора.\"],\"ZYnwzF\":[\"Отключено\"],\"Za3_fO\":[\"Error\"],\"ZcOxO1\":[\"Создать внешний ключ\"],\"Zf7LHg\":[\"Контексты не найдены (установлен ли kubectl?)\"],\"Zfotp5\":[\"Большие расхождения в оценках обычно указывают на устаревшую статистику или предикаты, которые планировщик не может смоделировать точно.\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"Не удалось загрузить схемы\"],\"ZqXGPF\":[\"Не удалось удалить представление: \"],\"ZuL73E\":[\"Создать новое представление базы данных\"],\"_-bi4r\":[\"Ссылочная таблица\"],\"_AEYGI\":[\"История выполнения пуста\"],\"_FdpZc\":[\"Не удалось загрузить определение представления: \"],\"_FxSdi\":[\"Прямые зависимости приложения, бэкенда и инструментов с открытым исходным кодом.\"],\"_JyTG8\":[\"Введите промпт для объяснения...\"],\"_Ltc_k\":[\"Дополнительно\"],\"_Q2Wix\":[\"строк\"],\"_TK1zF\":[\"Сохранённое подключение\"],\"_bJFBE\":[\"Таймаут подключения\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"Дерево\"],\"_dqduX\":[\"Следующая страница\"],\"_fwE6J\":[\"Ранее\"],\"_n04sB\":[\"Завершить\"],\"_otxbQ\":[\"Файл ключа\"],\"_pezIT\":[\"Не удалось подключиться к \",[\"0\"],\". Проверьте настройки или убедитесь, что база данных запущена.\"],\"_srfkj\":[\"Пользовательский ключ удалён\"],\"_t6aFo\":[\"MySQL и MariaDB могут возвращать EXPLAIN FORMAT=JSON или табличный EXPLAIN в зависимости от версии сервера.\"],\"_xTbaM\":[\"столбцы\"],\"_yxaaL\":[\"Уникальный индекс\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis — бесплатный проект с открытым исходным кодом. Если он вам полезен, поддержите проект и присоединяйтесь к сообществу.\"],\"a9CASo\":[\"SQLite поддерживает только переименование столбцов. Другие изменения требуют пересоздания таблицы вручную.\"],\"aAIQg2\":[\"Внешний вид\"],\"aAURrV\":[\"Установлено\"],\"aC_vCa\":[\"Сгенерировать название с помощью AI\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"Выберите узел для просмотра подробностей\"],\"aHKcKc\":[\"Предыдущая страница\"],\"aI-5wG\":[\"Verify CA\"],\"aJJySV\":[\"например, users\"],\"aQ8swY\":[\"Значение по умолчанию\"],\"aScJP1\":[\"Запустить этот запрос\"],\"aVNbN8\":[\"Условия фильтрации\"],\"aWhdMQ\":[\"Использовать существующее SSH-подключение\"],\"aXYd8V\":[\"Таймаут\"],\"aX_S_r\":[\"Страница \",[\"0\"],\" из \",[\"totalPages\"]],\"agZcf8\":[\"Сгенерированный SQL: \",[\"tableName\"]],\"ajqPzi\":[\"SELECT [поля]\"],\"alplHn\":[\"Анализ плана запроса с помощью AI...\"],\"anBcU3\":[\"Если Tabularis вам полезен и вы хотите видеть больше возможностей — поддержите проект: вносите вклад в код, сообщайте об ошибках или поставьте звезду репозиторию.\"],\"arHmj2\":[\"Удалить этот запрос из истории?\"],\"arKcqW\":[\"Старые серверы могут возвращать только оценочные планы с меньшим количеством метрик.\"],\"arcpYe\":[\"Требовать подтверждение\"],\"aurEkh\":[\"Загрузка процессов…\"],\"avtdsd\":[\"Режим SQL\"],\"az8lvo\":[\"Выключено\"],\"b1Ah3z\":[\"Фокус на\"],\"b392Dr\":[\"Развернуть все\"],\"b5S_PU\":[\"Имя базы данных\"],\"bAvovP\":[\"Переместить вниз\"],\"bH3JqY\":[\"Таблицы не найдены\"],\"bP5JOn\":[\"Перенос строк\"],\"bcOdok\":[\"Удалить группу\"],\"bcqeas\":[\"Все MCP-запросы только для чтения\"],\"bmca5u\":[\"Только запись\"],\"bpCiBU\":[\"Разрешить запись из MCP\"],\"bqnhqW\":[\"Оценка превышает реальное количество строк\"],\"bspG20\":[\"Сравнение\"],\"bu5X4V\":[\"Завершить с ошибкой\"],\"bw22Gk\":[\"Схема столбцов\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"Основные проблемы\"],\"cFCKYZ\":[\"Отклонить\"],\"cFGrCP\":[\"таблица\"],\"cGeFup\":[\"Размер шрифта\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"Фокус на таблице\"],\"cM9NHc\":[\"Откатить до\"],\"cO9-2L\":[\"Отключён\"],\"cSev-j\":[\"Фильтры\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"Импортировать \",\"#\",\" строку\"],\"few\":[\"Импортировать \",\"#\",\" строки\"],\"many\":[\"Импортировать \",\"#\",\" строк\"],\"other\":[\"Импортировать \",\"#\",\" строки\"]}]],\"c_xoSn\":[\"Переименована ячейка \",[\"n\"]],\"cd0XEW\":[\"Сохранить запрос\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"Разделить группу\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" операторов\"],\"d34vwG\":[\"Загрузить базы данных\"],\"d6ynQ7\":[\"Сортировать по убыванию\"],\"d8_6_v\":[\"отменить\"],\"d8wc1_\":[\"Примеры значений\"],\"dBXoCS\":[\"Обнаружена переменная окружения, но её можно переопределить, указав ключ выше.\"],\"dD7NPy\":[\"Структура\"],\"dEgA5A\":[\"Отменить\"],\"dMtLDE\":[\"до\"],\"dPJVhW\":[\"Ошибка установки\"],\"dQvGiF\":[[\"0\",\"plural\",{\"one\":[\"#\",\" сессия\"],\"few\":[\"#\",\" сессии\"],\"many\":[\"#\",\" сессий\"],\"other\":[\"#\",\" сессий\"]}]],\"dTUzKm\":[\"Запустить выбранные (\",[\"0\"],\")\"],\"dU_iQN\":[\"Сессии не соответствуют текущим фильтрам.\"],\"dUh9QW\":[\"Планирование\"],\"dVoir2\":[\"Добавлена Markdown-ячейка \",[\"n\"]],\"dZ0d2O\":[\"Выберите хотя бы одну таблицу\"],\"dhi13U\":[\"Choose image…\"],\"dli1JX\":[\"Применить изменения\"],\"dmYV6f\":[\"Подпрограммы\"],\"dohZCo\":[\"Инструкции для AI-генерации SQL. Используйте \",[\"SCHEMA\"],\" как заполнитель структуры базы данных.\"],\"dtxpK2\":[\"Анализ\"],\"dwW9nJ\":[\"Показывать номера строк\"],\"dwWVw_\":[\"Показывать экран приветствия\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" вкладка\"],\"few\":[\"#\",\" вкладки\"],\"many\":[\"#\",\" вкладок\"],\"other\":[\"#\",\" вкладки\"]}]],\"dxxY9r\":[\"При совпадении\"],\"dyN4j9\":[\"Нажмите «Запустить предпросмотр», чтобы увидеть результаты\"],\"e07Iz5\":[\"Открыть диспетчер задач\"],\"e0NzXu\":[\"Проект находится в активной разработке (WIP). Основные функции стабильны, впереди много интересного.\"],\"e1UKxf\":[\"Сохранить этот запрос\"],\"e34gdU\":[\"Сколько времени MCP-процесс ожидает решения пользователя перед отменой запроса.\"],\"e62LQd\":[\"Завершить принудительно\"],\"e6QZsM\":[\"Тема редактора\"],\"e8CirT\":[\"Выполнить запрос\"],\"eD2kUP\":[\"Чтений буфера\"],\"eE0JZ4\":[\"Версия\"],\"eIDch7\":[\"Введите промпт для анализа плана выполнения...\"],\"eIVolo\":[\"Диск R/W\"],\"eJOEBy\":[\"Экспорт...\"],\"eKHY3W\":[\"Настройки плагина\"],\"eMb6Ub\":[\"Выберите ресурс...\"],\"ePK91l\":[\"Изменить\"],\"eXweu6\":[\"Развернуть ячейку\"],\"ecNsTE\":[\"Запросы не найдены\"],\"ecUA8p\":[\"Сегодня\"],\"ecpIZP\":[\"Введите пароль, если ключ зашифрован\"],\"ejmeDY\":[\"Установлено\"],\"esl-Tv\":[\"Тип ресурса\"],\"exyUec\":[\"Подключение\"],\"f2AJjl\":[\"Удалить строку\"],\"f4pD-j\":[\"Проверка подключения не удалась\"],\"f7sXvi\":[\"Введите пароль\"],\"fAsxc0\":[\"Последовательные сканирования\"],\"fIeFs0\":[\"Выберите значение...\"],\"fJm92A\":[\"Выберите файл с планом EXPLAIN (Postgres JSON или текст) для визуализации.\"],\"fOuPPd\":[\"Плагин\"],\"fXVIZq\":[\"Значения\"],\"f_b1TA\":[\"История выполнения\"],\"fghnqP\":[\"Переключиться на подключение 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"Запятая (,)\"],\"fp711N\":[\"Заблокировано (только чтение)\"],\"fpzyLj\":[\"Страница \",[\"0\"],\" из \",[\"1\"]],\"fuA6oy\":[\"Таймаут сокета\"],\"fvImQM\":[\"Выбрано: \",[\"0\"]],\"fwr_nh\":[\"Устанавливайте расширения, управляйте драйверами плагинов и настройками среды выполнения.\"],\"g0ZzK4\":[\"Корректный JSON\"],\"g11hAR\":[\"Новая строка\"],\"g8VcMm\":[\"Мой кластер K8s\"],\"gCFR_O\":[\"Параллельное выполнение (Запустить все)\"],\"gEjU98\":[\"Открыть подключения\"],\"gPQ8z1\":[\"Nullable\"],\"gShKPx\":[\"Требуется хотя бы один столбец\"],\"gSuQrG\":[\"Подключения по запросу \\\"\",[\"search\"],\"\\\" не найдены\"],\"gUypqb\":[\"Перезапустить запрос\"],\"gZWMnn\":[\"AI-анализ\"],\"ghYd73\":[\"Выберите цель...\"],\"giAqEC\":[\"Создать новую таблицу\"],\"gnQS8X\":[\"Максимальный размер пакета для MySQL-коннектора.\"],\"gqV5VL\":[\"Встроенное, не настраивается\"],\"gww_XE\":[\"Ссылочный столбец\"],\"gxXPJ9\":[\"Настроить интерпретатор\"],\"gxutEv\":[\"Триггер обновлён\"],\"gz6UQ3\":[\"Развернуть\"],\"h-XNc9\":[\"Разделитель CSV\"],\"h-kNAk\":[\"например, sales_data\"],\"h3Z_aK\":[\"Введите Markdown...\"],\"h7MgpO\":[\"Горячие клавиши\"],\"h7peZQ\":[\"Разрешён\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" системный процесс\"],\"few\":[\"#\",\" системных процесса\"],\"many\":[\"#\",\" системных процессов\"],\"other\":[\"#\",\" системных процессов\"]}]],\"hEZrFh\":[\"Выполнить SQL-файл...\"],\"hEipgW\":[\"Проверить обновления сейчас\"],\"hG89Ed\":[\"Image\"],\"hIHcBE\":[\"Экспортировать как CSV\"],\"hItdtk\":[\"Выбрать папку\"],\"hXFVjo\":[\"Название таблицы обязательно\"],\"hZ6znB\":[\"Порт\"],\"h_huI6\":[\"Перезапустить\"],\"hbz1rh\":[\"ключи\"],\"hdsaJo\":[\"Импорт...\"],\"he3ygx\":[\"Копировать\"],\"hfGimp\":[\"Выберите пространство имён...\"],\"hjjSEi\":[\"Подключения только для чтения\"],\"hjwN_s\":[\"Имя ресурса\"],\"hlF1mD\":[\"Копировать выделение\"],\"hnboBb\":[\"AI-анализ плана запроса\"],\"hnvu2p\":[\"Подробности ошибки\"],\"hq4-D2\":[\"API-ключ хранится в системном хранилище ключей. Указанный здесь ключ имеет приоритет над переменной окружения.\"],\"hqjXdn\":[\"Не удалось удалить SSH-подключение\"],\"hqofAK\":[\"Копировать SQL\"],\"hy6L14\":[\"Открыть на GitHub\"],\"hyjACX\":[\"Ячейки свёрнуты/развёрнуты\"],\"hz1b5W\":[\"Совпадающие элементы не найдены\"],\"i1vAVM\":[\"Создать новую таблицу\"],\"i3S5T3\":[\"Поиск в избранном...\"],\"i4_LY_\":[\"Запись\"],\"i5HBWh\":[\"История запросов сброшена\"],\"i5zCt4\":[\"Таблица\"],\"iAVlge\":[\"Настройте инструкции для AI-генерации названий ячеек ноутбука. Содержимое ячейки (SQL или Markdown) передаётся как сообщение пользователя.\"],\"iE1yAB\":[\"Фильтр таблиц...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"Подключиться\"],\"iSryJ2\":[\"Мой SSH-сервер\"],\"iT7UeX\":[\"Добавить индекс\"],\"iUWwuR\":[\"Скачать и установить\"],\"ia7i08\":[\"Сначала выберите контекст/пространство имён/тип\"],\"ibepZK\":[\"Сырой SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"Сохранено\"],\"igcsfY\":[\"В реестре нет доступных плагинов.\"],\"ij-Elv\":[\"Предпросмотр изображения\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" запрос\"],\"few\":[\"#\",\" запроса\"],\"many\":[\"#\",\" запросов\"],\"other\":[\"#\",\" запроса\"]}]],\"ioL38P\":[\"Мониторинг процессов плагинов, CPU, RAM и диска в реальном времени\"],\"ixlL_e\":[\"SSH-ключ (необязательно)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"Выберите модель\"],\"j3gyYH\":[\"Применить все\"],\"j5CWO4\":[\"Актуально\"],\"j9HPuI\":[\"Строка #\",[\"0\"]],\"jBtpMP\":[\"Все статусы\"],\"jEu4bB\":[\"Столбцы\"],\"jEyQIs\":[\"Подпрограммы не найдены\"],\"jHc1By\":[\"Удалить представление\"],\"jI6sj4\":[\"Стоимость, время и оценки строк зачастую недоступны по сравнению с PostgreSQL и MySQL.\"],\"jIxQCZ\":[\"Недоступно для вашей платформы\"],\"jKIncn\":[\"Название базы данных обязательно\"],\"jPSk57\":[\"Причина (необязательно)\"],\"jUNY_d\":[\"представление\"],\"jVqjDo\":[\"Недопустимый формат файла ноутбука\"],\"jWSZ-A\":[\"Только предпросмотр — полные данные не загружены\"],\"jgjIDU\":[\"Не удалось удалить существующий триггер: \"],\"jnhuWy\":[\"Таймаут сокета в миллисекундах.\"],\"jpeU_Z\":[\"Блокноты\"],\"jpgB4Y\":[\"Название подключения обязательно\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"дочерний процесс\"],\"jx0t66\":[\"Свернуть дочерние процессы\"],\"k-0mL-\":[\"Добавить столбец\"],\"k-XiMX\":[\"Сырой\"],\"k2UnVy\":[\"Условие хеша\"],\"k5UUX3\":[\"Триггер создан\"],\"kALwhk\":[\"секунд\"],\"kBiBq7\":[\"Удалить индекс \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"Показать/скрыть график\"],\"kI1qVD\":[\"Форматировать\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" строка · \",[\"1\"],\"мс\"],\"few\":[\"#\",\" строки · \",[\"2\"],\"мс\"],\"many\":[\"#\",\" строк · \",[\"2\"],\"мс\"],\"other\":[\"#\",\" строки · \",[\"2\"],\"мс\"]}]],\"kJDmsI\":[\"Подробности события\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"Реестр\"],\"kY-q3P\":[[\"label\"],\" обязательно\"],\"kexIdC\":[\"Использовать проброс портов Kubernetes\"],\"krksx_\":[\"Готово\"],\"ktYUe9\":[\"Запустить все\"],\"kwY6nh\":[\"Закрыть\"],\"kx0s-n\":[\"Результаты\"],\"kxUEfE\":[\"Не удалось получить определение подпрограммы: \"],\"l2Op2p\":[\"Параметры запроса\"],\"l9Ivba\":[\"Процессы плагинов и системные ресурсы\"],\"lBdPxu\":[\"Accent color\"],\"lCF0wC\":[\"Обновить\"],\"lEQRwq\":[\"Данные (INSERT)\"],\"lIvS11\":[\"Пересоздать триггер\"],\"lKS0ce\":[\"Новая таблица создана\"],\"lOekZ3\":[\"Переключить на горизонтальное расположение\"],\"lUA1C1\":[\"Пароль SSH-ключа (необязательно)\"],\"lVeG20\":[\"Зависимости Rust\"],\"lXAG6D\":[\"Инструкции для AI-объяснения запросов. Используйте \",[\"LANGUAGE\"],\" как заполнитель языка вывода.\"],\"lbbYjy\":[\"Прямое редактирование файла конфигурации. Изменения вступят в силу после перезапуска.\"],\"lhKW0m\":[\"Добавлена SQL-ячейка \",[\"n\"]],\"lk-wOz\":[\"Фильтр триггеров...\"],\"lk0x32\":[\"Размер страницы результатов (Limit)\"],\"lkz6PL\":[\"Длительность\"],\"lmVGeo\":[\"Добавить внешний ключ\"],\"lnnx3E\":[\"Подключить Tabularis к Claude Desktop, Cursor и другим клиентам\"],\"lpGiOh\":[\"Check interval\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"Добавить\"],\"m2Q_r8\":[\"Определять JSON в текстовых столбцах\"],\"m2tskz\":[\"Успешно\"],\"mA-qpe\":[\"Выполнение завершено\"],\"mBhhbA\":[\"Логи скопированы в буфер обмена\"],\"mCNdzH\":[\"Запустить ячейку\"],\"mO95sp\":[\"Закрыть панель\"],\"mP7dLi\":[\"Введите название шрифта выше\"],\"mQCWzt\":[[\"0\",\"plural\",{\"one\":[\"#\",\" заблокированное\"],\"few\":[\"#\",\" заблокированных\"],\"many\":[\"#\",\" заблокированных\"],\"other\":[\"#\",\" заблокированных\"]}]],\"mS74ir\":[\"Не удалось сохранить SSH-подключение\"],\"mSqtw8\":[\"Запустить предпросмотр\"],\"mURmfQ\":[\"Определение представления (SQL)\"],\"mX_isJ\":[\"Вертикально\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"Структура (DDL)\"],\"mrk4Cf\":[\"Сортировать по \",[\"colName\"],\" DESC\"],\"msJ8t1\":[\"Мы только что открыли отдельное место для пользователей Tabularis. Получайте помощь, делитесь советами, участвуйте в формировании дорожной карты.\"],\"mtvVdV\":[\"Обработано строк\"],\"mx4evv\":[\"Создать таблицу\"],\"myXGZW\":[\"Пошаговый\"],\"mzI_c-\":[\"Скачать\"],\"n7JDTx\":[\"Установите и включите плагины, чтобы увидеть их здесь\"],\"nDDJir\":[\"Поиск по сессии, клиенту, подключению…\"],\"nHP-Kr\":[\"Нет активной сессии. Выберите подключение.\"],\"nKhCjW\":[\"Выбрать таблицы\"],\"nNwvm4\":[\"Ошибка\"],\"nOVim5\":[\"Не удалось сохранить подключение\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"События\"],\"nf14vn\":[\"Требуется расширение: \",[\"0\"]],\"ngO6Pv\":[\"Разрешить Enter (в дополнение к Tab) для принятия активной подсказки автодополнения. При отключении Enter всегда вставляет новую строку.\"],\"nhmF3p\":[\"подключений\"],\"noM5A_\":[\"Создайте первое подключение\"],\"nohy4m\":[\"Нет активности MCP.\"],\"nr-axf\":[\"Удалить плагин\"],\"nsPFX9\":[\"Открыть в Visual Explain\"],\"nuBbBr\":[\"График\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"Экспортировать базу данных\"],\"o-XJ9D\":[\"Изменить\"],\"o21Y-P\":[\"записей\"],\"o3tP_A\":[\"Удалить индекс\"],\"o45L8r\":[\"Введите название подключения\"],\"o53XGh\":[\"Копировать выбранные строки\"],\"o7J4JM\":[\"Фильтр\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"Уровень\"],\"oGiIL7\":[\"Провайдер по умолчанию\"],\"oH8GS6\":[\"Просмотреть определение\"],\"oJ4rAm\":[\"Подключение потеряно\"],\"oJlXF2\":[\"Импортировать ноутбук\"],\"oMFv82\":[\"Разделить вертикально\"],\"oOFiQg\":[\"Ограничивает количество строк, получаемых за один запрос, во избежание проблем с производительностью. Установите 0, чтобы отключить (не рекомендуется).\"],\"oT9ZD3\":[\"Скрыть обзор\"],\"oUzLtx\":[\"Редактирование триггера требует его удаления и повторного создания. Продолжить изменение \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"Изменён график (ячейка \",[\"n\"],\")\"],\"oWfclW\":[\"Показывать просмотрщик JSON, когда нетипизированная текстовая ячейка содержит объект или массив JSON. Создаёт небольшие издержки на разбор каждой ячейки.\"],\"obpbdz\":[\"Файл конфигурации не найден (создайте вручную)\"],\"odZgfC\":[\"AI-КЛИЕНТЫ\"],\"ogZhXn\":[\"Направление по умолчанию для ER-диаграмм\"],\"ohUJJM\":[\"Плагины\"],\"olAdaI\":[\"Реальных строк\"],\"olWzar\":[\"Принудительно завершить процесс плагина\"],\"ovBPCi\":[\"Default\"],\"owzTWN\":[\"Список моделей AI обновлён\"],\"oxYi6j\":[\"Базовый размер шрифта во всём приложении (10–20 пикселей).\"],\"p--hsQ\":[\"Соединение с базой данных прервано\"],\"p6NueD\":[\"НОВАЯ\"],\"pOYHox\":[\"Действия\"],\"pR9bTR\":[\"Нет данных BLOB\"],\"pS8S5q\":[\"например, users, orders, products\"],\"pSws_M\":[\"Название таблицы\"],\"pVLbKZ\":[\"Представление создано\"],\"pWT04I\":[\"Проверка...\"],\"pZJ_6D\":[\"Название индекса обязательно\"],\"pddYFG\":[\"Введите промпт для названия ячейки...\"],\"pm9Yb5\":[\"Translation updates\"],\"pnpyuD\":[\"Включить логирование\"],\"pqKMPv\":[\"Не удалось создать таблицу: \"],\"pqaP1h\":[\"Закрыть\"],\"pqarBu\":[\"По возр.\"],\"ptuq35\":[\"например, Comic Sans MS\"],\"pzu7v4\":[\"Горизонтально\"],\"q-ch8m\":[\"Отметьте подключения, которым разрешена запись. Остальные — только для чтения.\"],\"qA5jLs\":[\"Подробности ошибки\"],\"qIrtcK\":[\"Обновления\"],\"qOqy8G\":[\"Проверка конфигурации...\"],\"qWaVNs\":[\"Сохранить и перезапустить\"],\"qb3LPX\":[\"Открыть ER-диаграмму\"],\"qkK0vq\":[\"Название представления обязательно\"],\"qki9tG\":[\"Ошибка\"],\"qoIir-\":[\"Базовый URL OpenAI-совместимого API. Примеры: https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Свернуть все\"],\"r6ncaO\":[\"Закрыть вкладку\"],\"rAJlpP\":[\"Порт контейнера\"],\"rG3WVm\":[\"Чтение\"],\"rGRCeK\":[\"Очистить историю запросов\"],\"rNIto7\":[\"Имя ресурса обязательно\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"Ноутбук экспортирован\"],\"rY4sEV\":[\"Удалить внешний ключ\"],\"rbu0nO\":[\"Управление SSH-подключениями\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" подключение\"],\"few\":[\"#\",\" подключения\"],\"many\":[\"#\",\" подключений\"],\"other\":[\"#\",\" подключения\"]}]],\"rn2_2V\":[\"Удалить фильтр\"],\"roABNH\":[\"История запросов пуста\"],\"rtir7c\":[\"неизвестно\"],\"ru0-2W\":[\"Нет активных подключений\"],\"rvDPWO\":[\"Разрыв оценки\"],\"rwWjWg\":[\"Что нового\"],\"s6m9gy\":[\"Удалить триггер \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"Проверить подключение\"],\"sBOaim\":[\"Файл конфигурации сохранён. Перезапустить сейчас?\"],\"sCyv9B\":[\"Обновить модели\"],\"sSUqe4\":[\"Удалить\"],\"sUBkgN\":[\"Генерация SQL...\"],\"sZZG3d\":[\"Импортировать \\\"\",[\"0\"],\"\\\"?\\nСуществующие данные могут быть перезаписаны.\"],\"sbK5ck\":[\"Поиск в истории...\"],\"sq_bS6\":[\"При удалении\"],\"suW7-E\":[\"Таймаут подключения в миллисекундах.\"],\"suqtBX\":[\"Esc для закрытия\"],\"t-R8-P\":[\"Выполнение\"],\"t1OfVY\":[[\"totalLibraries\"],\" библиотек\"],\"t2TMzs\":[\"Закрыть вкладку\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"Выберите таблицу...\"],\"t7KRl1\":[\"Журнал всех вызовов MCP-инструментов и запросов, ожидающих подтверждения. Хранится локально — никуда не отправляется.\"],\"t9NJIk\":[\"Обнаружены интенсивные сканирования\"],\"tB7xof\":[\"Временные операции или сортировка\"],\"tBBXTO\":[\"Интервал пинга\"],\"tFrT3w\":[\"Добавьте этот фрагмент в файл конфигурации клиента вручную, если автоматическая установка не сработала.\"],\"tJ7UbA\":[\"объяснить активный\"],\"tKlWWY\":[\"Emoji\"],\"tMFzq-\":[\"Разделить горизонтально\"],\"tQhW-D\":[\"Настройки логирования\"],\"tT-BQX\":[\"Установленные\"],\"tXFGEx\":[\"Нет сохранённых подключений Kubernetes. Нажмите «Добавить», чтобы создать.\"],\"tXLz_8\":[\"Удалить\"],\"tXpRby\":[\"Таблица данных\"],\"tbysEk\":[\"Действия\"],\"tdta9X\":[\"Страница \",[\"0\"]],\"tfDRzk\":[\"Сохранить\"],\"tfEioV\":[\"Выполнить все SQL-ячейки сверху вниз\"],\"tiAIaJ\":[\"SSH-пароль отсутствует. Введите заново.\"],\"tk22BR\":[\"Вставьте структурированные данные и проверьте схему перед импортом\"],\"tst44n\":[\"События\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL-файл выполнен\"],\"u6QeR6\":[\"Перезапустить сейчас\"],\"uAQUqI\":[\"Статус\"],\"uBAxNB\":[\"Редактор\"],\"uBI8D9\":[\"Esc для закрытия\"],\"uFViPK\":[\"Нет доступных SSH-подключений\"],\"uHUuhp\":[\"Объяснить этот запрос\"],\"uHfFzS\":[\"Размер шрифта редактора\"],\"uJ_3K5\":[\"Удалить блокнот «\",[\"0\"],\"»? Это действие нельзя отменить.\"],\"uKaNJ3\":[\"Открыть в JSON-редакторе\"],\"uQBwTo\":[\"Схемы\"],\"ub54ff\":[\"Центр плагинов\"],\"ufFyBs\":[\"База данных экспортирована\"],\"upNmR2\":[\"Открыть в боковом редакторе\"],\"upwIY4\":[\"Определение представления\"],\"utMia3\":[\"Снять выбор\"],\"uyNaJg\":[\"1 элемент\"],\"v61dnS\":[\"Укажите точное название модели вашего OpenAI-совместимого провайдера.\"],\"v6oeyr\":[\"Установлено\"],\"v75DGg\":[\"Выбрать файл\"],\"v99dO4\":[\"Первичный ключ\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"#\",\" запрос\"],\"few\":[\"#\",\" запроса\"],\"many\":[\"#\",\" запросов\"],\"other\":[\"#\",\" запроса\"]}]],\"vCSBPD\":[\"Добавить фильтр\"],\"vH7uJj\":[\"Сортировать по…\"],\"vUOA1-\":[\"Поиск моделей...\"],\"vWcB0p\":[\"PostgreSQL ANALYZE включает реальные строки, время, итерации и счётчики буферов при наличии.\"],\"vXIe7J\":[\"Язык\"],\"vYf4Jm\":[\"Введите полную SQL-функцию (например, ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"Предпочтительный\"],\"vditm4\":[\"План выполнения\"],\"vks_ls\":[\"Закрыть остальные вкладки\"],\"vnAnIp\":[\"Модель \",[\"0\"],\" не найдена у провайдера \",[\"1\"],\". Она может работать некорректно.\"],\"vqoN5u\":[\"Структура\"],\"vrAvbP\":[\"Удалить группу «\",[\"0\"],\"»? Подключения переместятся в раздел без группы.\"],\"vtJ2yO\":[\"Проводник\"],\"vujQJ5\":[\"Локализация\"],\"vvJPVL\":[\"Показать обзор\"],\"vwI5S4\":[\"Готово\"],\"vzH-7Z\":[\"Объяснить\"],\"w7QmD_\":[\"Введите системный промпт...\"],\"w9eMXw\":[\"триггер\"],\"wCJFlW\":[\"Прошло времени\"],\"wCfv2R\":[\"Добавить подключение\"],\"wGfc86\":[\"Очистить всю историю\"],\"wGwNv4\":[\"Активная база данных\"],\"wJJ-Wy\":[\"Установка...\"],\"wMe2Qp\":[\"Пространство имён\"],\"wQiel_\":[\"Попаданий в буфер\"],\"wQn-RM\":[\"Добавить столбец\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"Применено\"],\"wTmVhm\":[\"Удалить\"],\"wXx7W4\":[\"How often to check for new translations.\"],\"wZeIWq\":[\"Импорт из буфера обмена\"],\"w_bY7R\":[\"Логи\"],\"wc_8bA\":[\"Ожидает подтверждения\"],\"wckWOP\":[\"Управление\"],\"wdYcKH\":[\"Открытые вкладки\"],\"wja8aL\":[\"Без названия\"],\"wkOAzk\":[\"Нет блокнотов, соответствующих запросу.\"],\"wp49Ao\":[\"Не удалось обработать вставки: \"],\"wqG2hQ\":[\"Пропустить (не импортировать)\"],\"wwrAsK\":[\"Заполните все обязательные поля\"],\"wwu18a\":[\"Icon\"],\"x2fr_j\":[\"Граф\"],\"xANKBj\":[\"Функции\"],\"xBwjck\":[\"Изменения вступят в силу после перезапуска.\"],\"xDAtGP\":[\"Сообщение\"],\"xECY01\":[\"Хранимые процедуры\"],\"xGPNgZ\":[\"Настройка промптов\"],\"xNgtS-\":[\"Представления не найдены\"],\"xOPa1b\":[\"Порт должен быть в диапазоне от 1 до 65535\"],\"xY9s5E\":[\"Таймаут\"],\"xaVUr1\":[\"Съешь же ещё этих мягких французских булок, да выпей чаю\"],\"xbvTzL\":[\"Путь к файлу\"],\"xlew5F\":[\"Очистить\"],\"xmNyKz\":[\"Проверка...\"],\"xtuh6D\":[\"Развернуть проводник\"],\"y-Zdqj\":[\"Выберите контекст...\"],\"y3HaQk\":[\"Момент срабатывания\"],\"yLFey_\":[\"Создать триггер\"],\"yLianM\":[\"Открыть просмотрщик JSON\"],\"yQXjG5\":[\"Снять выбор\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Изменить триггер\"],\"y_0uwd\":[\"Вчера\"],\"ygCKqB\":[\"Остановить\"],\"ykCc6r\":[\"Изменена база данных (ячейка \",[\"n\"],\")\"],\"ynVMSc\":[\"Выбрать все\"],\"ytdz1d\":[\"AI запрашивает запись в базу данных\"],\"yyhzur\":[\"Создать таблицу\"],\"yz7wBu\":[\"Закрыть\"],\"z0VdfR\":[\"процедура\"],\"z407wX\":[\"SSH-пароль\"],\"z4oF5T\":[\"Экспорт базы данных\"],\"z5kV0h\":[\"Подключения\"],\"zBTMzx\":[\"Предпросмотр\"],\"zCaAKs\":[\"Ошибка обновления\"],\"zDAakK\":[\"Отображение диаграммы невозможно без ID подключения.\"],\"zGe21h\":[\"Этот ключ загружен из переменной окружения\"],\"zGfL5t\":[\"значение\"],\"zL6-4A\":[\"Нет запущенных процессов плагинов\"],\"zLZhCi\":[\"Новое сообщество в Discord!\"],\"zLlCou\":[\"Копировать имя столбца\"],\"zNEL34\":[\"Присоединяйтесь к сообществу\"],\"zNgTlV\":[\"Закрыть вкладки справа\"],\"zQz55p\":[\"Показать структуру\"],\"zR0FfH\":[\"Экспортировано в \",[\"target\"]],\"zRZeOc\":[\"Поиск таблиц, представлений, процедур, триггеров...\"],\"zUNMsr\":[\"SSH-ключ\"],\"zXMRzb\":[\"SSH-порт\"],\"zZgoXr\":[\"Таблицы не найдены\"],\"zaWbms\":[\"Откатить изменения\"],\"zgClmU\":[\"Установить конфигурацию\"],\"zga9sT\":[\"ОК\"],\"zgk5iK\":[\"Введите значение...\"],\"zvzN4C\":[\"Сделать активным\"],\"zzDlyQ\":[\"Успешно\"],\"zzMxrp\":[\"Изменить config.json\"],\"zz_Wd_\":[\"Режим\"]}")as Messages; \ No newline at end of file diff --git a/src/locales/zh/messages.po b/src/locales/zh/messages.po index 4787b48c..a639619f 100644 --- a/src/locales/zh/messages.po +++ b/src/locales/zh/messages.po @@ -500,12 +500,10 @@ msgstr "确定要清除此连接的所有查询历史吗?" #. placeholder {0}: column.name #: src/components/layout/sidebar/SidebarColumnItem.tsx -msgid "" -"Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" +msgid "Are you sure you want to delete column \"{0}\" from table \"{tableName}\"?\n" "\n" "WARNING: This will permanently delete all data in this column. This action cannot be undone." -msgstr "" -"确定要从表 \"{tableName}\" 中删除列 \"{0}\" 吗?\n" +msgstr "确定要从表 \"{tableName}\" 中删除列 \"{0}\" 吗?\n" "\n" "警告:这将永久删除此列中的所有数据。此操作无法撤销。" @@ -548,11 +546,9 @@ msgstr "确定要删除视图 \"{0}\" 吗?" #. placeholder {0}: file.split(/[\\/]/).pop() #: src/components/layout/ExplorerSidebar.tsx -msgid "" -"Are you sure you want to import \"{0}\"?\n" +msgid "Are you sure you want to import \"{0}\"?\n" "This may overwrite existing data." -msgstr "" -"确定要导入 \"{0}\" 吗?\n" +msgstr "确定要导入 \"{0}\" 吗?\n" "这可能会覆盖现有数据。" #: src/components/modals/ViewEditorModal.tsx @@ -601,6 +597,10 @@ msgstr "自增" msgid "Auto paginated" msgstr "自动分页" +#: src/components/settings/LocalizationTab.tsx +msgid "Automatic updates" +msgstr "" + #: src/components/settings/InfoTab.tsx msgid "Automatically check for new versions when the app launches" msgstr "应用启动时自动检查新版本" @@ -746,6 +746,10 @@ msgstr "立即检查更新" msgid "Check for updates on startup" msgstr "启动时检查更新" +#: src/components/settings/LocalizationTab.tsx +msgid "Check interval" +msgstr "" + #: src/components/modals/McpModal.tsx #: src/pages/McpPage.tsx msgid "Checking configuration..." @@ -2297,6 +2301,10 @@ msgstr "失败:" msgid "Favorites" msgstr "收藏" +#: src/components/settings/LocalizationTab.tsx +msgid "Fetch the latest translations from the cloud without waiting for an app update." +msgstr "" + #: src/components/modals/NewConnectionModal.tsx msgid "File Path" msgstr "文件路径" @@ -2520,6 +2528,10 @@ msgstr "MCP 子进程等待用户决定的时间。" msgid "How many logs to keep in memory (1-10000)" msgstr "在内存中保留的日志数量(1-10000)" +#: src/components/settings/LocalizationTab.tsx +msgid "How often to check for new translations." +msgstr "" + #: src/components/settings/GeneralTab.tsx msgid "How often to check if active connections are still alive. Set to 0 to disable." msgstr "" @@ -2971,6 +2983,10 @@ msgstr "消息" msgid "Minimize" msgstr "最小化" +#: src/components/settings/LocalizationTab.tsx +msgid "minutes" +msgstr "" + #: src/components/modals/ClipboardImport/SchemaEditor.tsx msgid "Mixed types detected, defaulted to TEXT" msgstr "检测到混合类型,默认为 TEXT" @@ -5022,6 +5038,10 @@ msgstr "关键问题" msgid "Total Cost" msgstr "总成本" +#: src/components/settings/LocalizationTab.tsx +msgid "Translation updates" +msgstr "" + #: src/components/ui/JsonInput.tsx msgid "Tree" msgstr "树形" diff --git a/src/locales/zh/messages.ts b/src/locales/zh/messages.ts index 2fc984ba..bc477dff 100644 --- a/src/locales/zh/messages.ts +++ b/src/locales/zh/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"最大历史条目\"],\"-6AWa-\":[\"导入连接\"],\"-6NyRG\":[\"客户端\"],\"-K0AvT\":[\"断开连接\"],\"-PLZfh\":[\"刷新模型失败\"],\"-T5W2e\":[\"驱动说明\"],\"-ZgeeE\":[\"编辑历史\"],\"-aYrdc\":[\"版本 \",[\"0\"],\" 可用\"],\"-fBGXl\":[\"最高成本\"],\"-jIQDz\":[\"折叠单元格\"],\"-u1eRo\":[\"无数据库\"],\"-yoeVU\":[\"加载模式中...\"],\"-zy2Nq\":[\"类型\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"审批 ID\"],\"0E5-gF\":[\"确定要删除此连接吗?\"],\"0HCubq\":[\"展开\"],\"0Kmdvy\":[\"自定义字体\"],\"0Nj13E\":[\"生成 SQL\"],\"0ROgz5\":[\"输入 JSON...\"],\"0SY9sU\":[\"断开数据库连接失败\"],\"0b3kL9\":[\"选择一个数据库\"],\"0caMy7\":[\"历史\"],\"0mx5ow\":[\"查询\"],\"0n9BtL\":[\"预览\"],\"0pHB9N\":[\"复制为 表.列\"],\"0sQzZK\":[\"筛选数据库...\"],\"0uPP9X\":[\"FK 名称(可选)\"],\"0wxuek\":[\"当前版本\"],\"0x09Aw\":[\"切换了出错时停止\"],\"0yBP6v\":[\"支持开发\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"0yVAoD\":[\"统计行数\"],\"0zxJ87\":[\"无日志可用\"],\"1-ETbn\":[\"可视化执行计划\"],\"1133_z\":[\"编辑视图\"],\"11fGJ6\":[\"查询\"],\"13hIUA\":[[\"0\"],\" API 密钥\"],\"14qNWF\":[\"选择 SSH 连接\"],\"17qHRP\":[\"新建连接\"],\"1Dn6bg\":[\"Import from Clipboard\"],\"1Dnd0I\":[\"加载行数\"],\"1FjTLW\":[\"例如:python3\"],\"1GOvbo\":[\"Ollama 已连接(找到 \",[\"0\"],\" 个模型)\"],\"1I6UoR\":[\"视图\"],\"1U7hS5\":[\"长度\"],\"1UTmg5\":[\"最大允许数据包\"],\"1b7aSU\":[\"Editor Font Family\"],\"1ekzlY\":[\"插件进程\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"主题选择\"],\"1xVZkL\":[\"未找到模型\"],\"26Joci\":[\"已检索 \",[\"0\"],\" 行\"],\"2Bf-Qe\":[\"新建控制台\"],\"2CrSmP\":[\"帮助 Tabularis 成长\"],\"2D9F8_\":[\"复制连接失败\"],\"2Eoi_a\":[\"查看详情\"],\"2F4pE5\":[\"Rust 构建与测试\"],\"2Fsd9r\":[\"本月\"],\"2JzKXI\":[\"设为 GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"全选\"],\"2SO5RM\":[\"此驱动不支持 Kubernetes。\"],\"2Uh5GA\":[\"Cargo 生态\"],\"2YylFp\":[\"新建可视化查询\"],\"2luuSG\":[\"重试\"],\"2wxgft\":[\"重命名\"],\"2yG2GC\":[\"在执行前暂停写入(或所有查询)并要求用户在 Tabularis 中批准。\"],\"30-b5r\":[\"删除\"],\"31kwdN\":[\"复制筛选器\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"所有工具\"],\"3Am5DS\":[\"Tab view\"],\"3FVg9_\":[\"本地列\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"运行\"],\"3L0HCz\":[\"没有匹配的插件。\"],\"3Nv3JV\":[\"执行查询中...\"],\"3TSz9S\":[\"最小化\"],\"3UW8fG\":[\"更新由 \",[\"0\"],\" 管理\"],\"3YvS-c\":[\"新建标签\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook 单元格名称提示词\"],\"3qkggm\":[\"全屏\"],\"3rBJ1T\":[\"查看模式\"],\"3xZ-xV\":[\"插入当前时间戳\"],\"40Gx0U\":[\"时区\"],\"41GP4f\":[\"选择复制或导出行为 CSV 时使用的默认分隔符。\"],\"42iaEi\":[\"未启用 ANALYZE 的 PostgreSQL 仅显示规划器估算值。\"],\"44cXI8\":[\"按 \",[\"colName\"],\" 升序排序\"],\"4AF7FO\":[\"管理数据库\"],\"4CK17g\":[\"确定要修改视图 \\\"\",[\"name\"],\"\\\" 吗?\"],\"4DDaw-\":[\"请至少选择一个数据库\"],\"4D_Nvt\":[\"创建分组失败\"],\"4RiR6c\":[\"导出为 HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个子进程\"],\"other\":[\"#\",\" 个子进程\"]}]],\"4VyuY3\":[\"确定要清除所有日志吗?\"],\"4WWqS3\":[\"展开/收起 JSON 树\"],\"4XAQdl\":[\"创建索引\"],\"4cEClj\":[\"会话\"],\"4cmfYp\":[\"复制行\"],\"4hsr6d\":[\"创建视图\"],\"4lIZTB\":[\"前端开发依赖\"],\"4oYjvJ\":[\"搜索查询…\"],\"4tMxW4\":[\"预览相关记录\"],\"4yJcjm\":[\"选择类型...\"],\"52O82A\":[\"非空\"],\"570t6W\":[\"关闭筛选面板 (ESC)\"],\"592-gw\":[\"自增\"],\"5FvuZv\":[\"分号 (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个事件\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"列表视图\"],\"5To6Z6\":[\"复制查询\"],\"5gqNQl\":[\"网格视图\"],\"5igIzr\":[\"导入已取消\"],\"5nTIup\":[\"正在编辑视图:\",[\"name\"]],\"5qIe8E\":[\"全部运行\"],\"66bEht\":[\"项目状态\"],\"6PIJVc\":[\"启动\"],\"6QvP0l\":[\"导出为 JSON\"],\"6W41Xq\":[\"任务管理器\"],\"6WngBH\":[\"设为 NULL\"],\"6YtxFj\":[\"名称\"],\"6_dCYd\":[\"概览\"],\"6dOBsk\":[\"创建视图\"],\"6gvoHP\":[\"复制错误信息\"],\"6oCVzX\":[\"Kubernetes 上下文为必填项\"],\"6wQO0f\":[\"显示数据\"],\"6z9W13\":[\"重启\"],\"71agNy\":[\"使用 AI 为未命名单元格生成名称\"],\"74J3FG\":[\"初始版本\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"知道了\"],\"77nSMU\":[\"删除全部 AI 活动历史?此操作不可撤销。\"],\"7ABmyQ\":[\"重试\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" / \",[\"0\"],\" 已激活\"],\"7E864M\":[\"数据库类型\"],\"7FqaG1\":[\"自定义 AI EXPLAIN 计划分析的指令。使用 \",[\"LANGUAGE\"],\" 作为输出语言的占位符。\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"检测到混合类型,默认为 TEXT\"],\"7RSQQd\":[\"在密钥链中保存密码\"],\"7VpPHA\":[\"确认\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"失败\"],\"7sMeHQ\":[\"键\"],\"7sNhEz\":[\"用户名\"],\"7tATh2\":[\"运行查询\"],\"7yb4gk\":[\"失败:\"],\"8-4V8D\":[\"表\"],\"82G-l5\":[\"模型上下文协议 (MCP) 允许 AI 助手(如 Claude)连接到您的本地工具。Tabularis 暴露了一个 MCP 服务器,让 AI 可以安全地读取数据库模式并执行查询。\"],\"83VjWE\":[\"新建笔记本\"],\"86IgoU\":[\"运行查询(编辑器中)\"],\"86fCgf\":[\"自定义 AI 查询结果标签页名称生成的指令。SQL 查询作为用户消息发送。\"],\"87a_t_\":[\"标签\"],\"87kWsr\":[\"导出连接\"],\"8CWirf\":[\"MCP 服务器\"],\"8S8aIX\":[\"Connection Health Check\"],\"8TMaZI\":[\"时间戳\"],\"8Tg_JR\":[\"自定义\"],\"8UFKYr\":[\"选择要执行的查询\"],\"8VKSGV\":[\"生成 SQL\"],\"8Wjy6z\":[\"关闭左侧标签\"],\"8ZsakT\":[\"密码\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL Editor\"],\"8bRgTe\":[\"未配置 AI 提供商。请前往 设置 > AI。\"],\"8c_W0h\":[\"旧版本\"],\"8guEQP\":[\"刷新视图\"],\"8lm5qE\":[\"SQLite 的 EXPLAIN QUERY PLAN 很轻量,主要用于展示结构。\"],\"8q_sOc\":[\"移除\"],\"8t-akp\":[\"前 \",[\"MAX_PREVIEW_ROWS\"],\" 行\"],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"连接名称\"],\"91gnWY\":[\"导出日志\"],\"91rtHL\":[\"创建新视图\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"新建分组\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"视图更新成功\"],\"9NzDFn\":[\"应用程序启动时显示欢迎屏幕。\"],\"9OoUS3\":[\"创建新的 SSH 连接\"],\"9QGRD5\":[\"目标列\"],\"9QTny9\":[\"查询失败。\"],\"9S-fyV\":[\"预先执行计划\"],\"9SJ_Sx\":[\"系统资源\"],\"9UQ730\":[\"克隆\"],\"9X6cky\":[\"否\"],\"9XUV5V\":[\"剪贴板中没有数据\"],\"9hGjL2\":[\"创建索引\"],\"9mMU1R\":[\"时间\"],\"9mvFo_\":[\"时间\"],\"9npOH9\":[\"打开文件\"],\"9uI_rE\":[\"撤销\"],\"9xUjzm\":[\"全选\"],\"9y_02p\":[\"与社区聊天、获取帮助、建议功能\"],\"A1pPcI\":[\"SSH 主机\"],\"A1taO8\":[\"搜索\"],\"A6C0pv\":[\"总成本\"],\"A7WG0p\":[\"插件已禁用\"],\"A7yRz3\":[\"视图定义是必需的\"],\"A9Uyp6\":[\"导入失败:\"],\"ABEd-z\":[\"使用您的包管理器更新 Tabularis。\"],\"AMdgKV\":[\"执行计划分析提示词\"],\"ANSTMe\":[\"当前执行计划摘要中未检测到明显问题。\"],\"ANzIr7\":[\"查询历史\"],\"AOnaU7\":[\"已跳过\"],\"AVlZoM\":[\"环境变量\"],\"AXTVsE\":[\"完全验证\"],\"AXdRYR\":[\"当前日志数\"],\"Aa-YkQ\":[\"导出笔记本\"],\"Ai2U7L\":[\"主机\"],\"AidayG\":[\"按级别筛选\"],\"AlPiMN\":[\"点击跳转到页面\"],\"An-1rA\":[\"返回的行数\"],\"AnV8j-\":[\"修改列\"],\"AvEr_L\":[\"新建控制台\"],\"AvYbUL\":[\"在 GitHub 上 Star\"],\"Aw_eOs\":[\"需要 Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No results found\"],\"B0mJGb\":[\"原始输出\"],\"B1c58n\":[\"修改列\"],\"B3toQF\":[\"对象\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"连接名称为必填项\"],\"BAVvWJ\":[\"ER 图\"],\"BBtVak\":[\"全部折叠\"],\"BEVzjL\":[\"导入失败\"],\"BHATjK\":[\"导出连接\"],\"BJe2lZ\":[\"切换侧边栏\"],\"BK3WCj\":[\"加载注册表失败\"],\"BKbO3i\":[\"编辑了笔记本\"],\"BMB51y\":[\"在控制台中运行\"],\"BNW_Z4\":[\"例如:active_users, order_summary\"],\"BPkXj7\":[\"创建外键\"],\"BUO_JN\":[\"复制查询\"],\"BYkhHY\":[\"启动时检查更新\"],\"BeSg6-\":[\"在内存中收集应用日志以进行调试\"],\"BgAyQH\":[\"清除排序\"],\"BinTJI\":[\"npm 生态\"],\"BkFson\":[\"自动分页\"],\"Bpglf1\":[\"上移\"],\"BrGo6h\":[\"搜索笔记本\"],\"BxiAN_\":[\"删除查询\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"前端依赖\"],\"CE-M2e\":[\"信息\"],\"CHIyL8\":[\"无筛选器 —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"下载中...\"],\"CUxwxn\":[\"显示所有表\"],\"CWMXbw\":[\"将强制停止其进程。使用此插件的任何活动数据库连接将停止工作,直到插件重新启动。\"],\"CZt6BX\":[\"手动配置\"],\"Ca8ixZ\":[\"删除\"],\"CbJBQS\":[\"更新失败:\"],\"Cdz-YU\":[\"Stacked view\"],\"CpeQf9\":[\"循环\"],\"D2wXBw\":[\"自增\"],\"D6Ql0c\":[\"选择用于生成和解释的模型。\"],\"DB8zMK\":[\"应用\"],\"DDXf5E\":[\"SQL 函数\"],\"DEwnwi\":[\"删除\"],\"DNTvdl\":[\"在编辑器中打开\"],\"DPc2P9\":[\"删除单元格\"],\"DUY8Ba\":[\"重大变更\"],\"DVnBSM\":[\"Line Height\"],\"Dd7YLj\":[\"稍后再说\"],\"Deej3j\":[\"JSON 格式错误\"],\"DfKhk_\":[\"更新\"],\"DiRiTz\":[\"打开包页面\"],\"DlRHAD\":[\"正在执行 EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个错误\"]}]],\"Dvdihe\":[\"在 \",[\"0\"],\" 上 — 请审核后再执行。\"],\"DzFLzw\":[\"是\"],\"E-JUtQ\":[\"审批门\"],\"E0kcnZ\":[\"基本信息\"],\"E2mje_\":[\"Select Query to Explain\"],\"EDieyg\":[\"确定要删除此 SSH 连接吗?\"],\"EHZxPj\":[\"展开\"],\"EL4oDO\":[\"有新版本可用\"],\"EPi4gT\":[\"按 \",[\"field\"],\" 排序\"],\"EWPtMO\":[\"代码\"],\"EWX0mQ\":[\"未分组\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"未知\"],\"EhADgB\":[\"删除列\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"已是最新版本\"],\"Em6JFd\":[\"统计行数\"],\"EnGiqG\":[[\"0\"],\" 个元素\"],\"Ew1n5z\":[\"搜索插件…\"],\"F18WP3\":[\"参数\"],\"F3uc1x\":[\"导出的文件将包含您的数据库和 SSH 明文密码。请妥善保管该文件。\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"F6pfE9\":[\"活动\"],\"F8tXg7\":[\"数据预览\"],\"F9-6yK\":[\"默认复制格式\"],\"F9lxfG\":[\"移除\"],\"F9nsa2\":[\"历史文件已损坏并被移至备份。新的查询将正常记录。备份文件:\"],\"FF_oap\":[\"默认值\"],\"FK8rlP\":[\"尚未配置 SSH 连接\"],\"FMRcH8\":[\"第一行作为标题\"],\"FNvDMc\":[\"本周\"],\"FQe1FI\":[\"预估行数\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"警告\"],\"FZg3wM\":[\"操作\"],\"Fa_cky\":[\"模式:\",[\"tableName\"]],\"FpEL5o\":[\"Choose an independent theme for the SQL editor, or keep it in sync with the app theme.\"],\"FsvZQL\":[\"编辑了单元格 \",[\"n\"]],\"FtwKL9\":[\"切换标签\"],\"FznI3z\":[\"删除外键 \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"预览失败:\"],\"G8Q5Zq\":[\"命名空间为必填项\"],\"GAohqx\":[\"删除列\"],\"GJR99u\":[\"删除列失败:\"],\"GKfzzM\":[\"选择连接...\"],\"GS-Mus\":[\"导出\"],\"GUaLUq\":[\"加载模式失败:\"],\"GXP-Iw\":[\"添加 SQL 单元格\"],\"Gj1mLb\":[\"重新排序单元格\"],\"GlbqG2\":[\"重置为驱动默认\"],\"Gq1YzP\":[\"事件数\"],\"Gs5AlY\":[\"打开\"],\"GtmO8_\":[\"从\"],\"GxkJXS\":[\"上传中...\"],\"H-o4D2\":[\"创建新列\"],\"H2B-KW\":[\"选择使用 Ctrl+C / Cmd+C 复制行时的默认格式。\"],\"H3oH0g\":[\"重做\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"收起\"],\"H9P8CD\":[\"添加第一个筛选器\"],\"HAQlGl\":[\"AI 活动\"],\"HKNZrs\":[\"索引条件\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"删除 \",\"#\",\" 行\"],\"other\":[\"删除 \",\"#\",\" 行\"]}]],\"HPuCiP\":[\"文件夹路径\"],\"HUs1R3\":[\"此连接无打开的标签。\"],\"HV4Isp\":[\"输入 SSH 密码\"],\"HVC8Hh\":[\"已复制到剪贴板\"],\"HWEpq8\":[\"磁盘写入/s\"],\"HY4nP5\":[\"内联\"],\"HcmoWv\":[\"保存视图失败:\"],\"He8v1Y\":[\"从全部应用中取消选择\"],\"HehHP1\":[\"默认布局\"],\"HilYn4\":[\"此笔记本为空。添加一个单元格以开始。\"],\"HjxVK_\":[\"快速连接测试\"],\"HmMnRx\":[\"WKT 模式\"],\"HoKCiI\":[\"安装后应用将自动重启\"],\"HpK_8d\":[\"重新加载\"],\"Hpi4Jm\":[\"立即加入\"],\"HuA3RU\":[\"制表符\"],\"I128p7\":[\"管道符 (|)\"],\"I3AgqA\":[\"配置内联 SSH\"],\"I5VBsr\":[\"Same as App\"],\"I8yrPb\":[\"替换表\"],\"I92BdB\":[\"从分组中移除\"],\"I92fr4\":[\"稍后提醒我\"],\"I99Miw\":[\"成本\"],\"IETZIR\":[\"编辑单元格名称\"],\"IG9wzA\":[\"插入行失败:\"],\"ILleOG\":[\"资源类型必须为 \\\"service\\\" 或 \\\"pod\\\"\"],\"IQ3gAw\":[\"上传文件\"],\"IUwGEM\":[\"保存更改\"],\"IUwmLq\":[\"直接依赖声明于 package.json 和 src-tauri/Cargo.toml。\"],\"IVrBTT\":[\"开源库\"],\"I_43p6\":[\"安全\"],\"Iaizf4\":[\"外观\"],\"Il3FBB\":[\"切换结构化筛选面板\"],\"IniZRK\":[\"下载不可用 - 仅加载了预览\"],\"Isaozb\":[\"查看并调整\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"通过此插件的活动查询和连接将被中断。\"],\"J6v1s_\":[\"默认模型\"],\"JE-DVk\":[\"解释器\"],\"JEGlfK\":[\"开始时间\"],\"JKDPqP\":[\"请先选择上下文\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"使用 SSH 隧道\"],\"JRz8tw\":[\"MySQL 和 MariaDB 仅在支持的 EXPLAIN ANALYZE 或 ANALYZE FORMAT 变体中提供实际指标。\"],\"JUICth\":[\"PNG、JPG、WebP 或 SVG · 最大 512 KB\"],\"JY5Oyv\":[\"数据库\"],\"JlFRIB\":[\"连接建立后发送给 MySQL 的会话时区。\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"已拒绝\"],\"K3H9p5\":[\"取消设置\"],\"K5Dgu_\":[\"数据库\"],\"K8IGKf\":[\"认证类型\"],\"KAYNSW\":[\"在内存中保留的日志数量(1-10000)\"],\"KHTGbr\":[\"预先 EXPLAIN\"],\"KHvda8\":[\"非空\"],\"KJKNaZ\":[\"复制为 `列`\"],\"KM5Kc8\":[\"必须选择至少一列\"],\"KSCnVQ\":[\"类型\"],\"KUjOb9\":[\"运行中\"],\"KXBdwy\":[\"刷新存储过程\"],\"KXNyX7\":[\"设为 DEFAULT\"],\"Kd70-v\":[\"从剪贴板导入...\"],\"KhI4oS\":[\"在 \",[\"0\"],\" 中打开引用的行\"],\"KhgrNu\":[\"MCP 服务器集成\"],\"KirERL\":[\"超时\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"删除索引失败:\"],\"KzeARD\":[\"删除表失败:\"],\"L-rMC9\":[\"重置为默认\"],\"L3HXkQ\":[\"错误修复\"],\"LCZ7Dy\":[\"复制名称\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"索引\"],\"LMeAoR\":[\"行\"],\"LPCdc-\":[\"查询标签页名称提示词\"],\"LPFmga\":[\"选择用于全部应用\"],\"LYzbQ2\":[\"工具\"],\"Lbis_V\":[\"快速导航\"],\"Lcpbe2\":[\"无法启动插件进程。请参阅下面的错误详细信息。\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN 仅支持 DML 语句(SELECT、INSERT、UPDATE、DELETE)。DDL 语句(如 CREATE、DROP、ALTER)无法进行分析。\"],\"LnT0hQ\":[\"添加列\"],\"LvutiO\":[\"AI 建议\"],\"M-rHQO\":[\"退出全屏\"],\"M0XJba\":[\"确定要清除此连接的所有查询历史吗?\"],\"M1co_O\":[\"已配置\"],\"M73whl\":[\"上下文\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"显示全部\"],\"MXdOwj\":[\"分离连接\"],\"MZ4T5z\":[\"主键\"],\"MZX6eL\":[\"选择 K8s 连接\"],\"Mc1tjS\":[\"启用 ANALYZE 后可查看实际行数、耗时、循环次数和缓冲区信息。\"],\"Mm4p0T\":[\"还有 \",[\"0\"],\" 行\"],\"Mp0jQ_\":[\"此驱动程序仅在表创建时支持主键\"],\"MqpZwN\":[\"Tabularis 进程\"],\"MxIx43\":[\"↑↓ 导航,Enter 打开\"],\"MygtgQ\":[\"添加 Markdown 单元格\"],\"N40H-G\":[\"全部\"],\"N5UQxq\":[\"未在端口 \",[\"0\"],\" 上检测到 Ollama。是否正在运行?\"],\"N6GBcC\":[\"确认删除\"],\"N6aqHp\":[\"执行查询数\"],\"N9_S15\":[\"将创建一个新表\"],\"NBdMa1\":[\"最慢步骤\"],\"NC2AI2\":[\"长度\"],\"NCzNnx\":[\"升序排列\"],\"NT4Ubs\":[\"删除自定义密钥并恢复到环境变量(如果有)\"],\"NUjrCO\":[\"没有匹配的收藏\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"树总计:\",[\"0\"]],\"Nc2VQn\":[\"追加到现有表\"],\"NgFERn\":[\"添加到收藏\"],\"NktMHG\":[\"数据库名称\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"测试\"],\"Nq5QTk\":[\"explain Nth\"],\"O2STgu\":[\"导出失败:\"],\"O8SV8O\":[\"下载中...\"],\"O9_WW6\":[\"连接\"],\"OGEsKj\":[\"运行所有单元格\"],\"OGWdBg\":[\"视图名称\"],\"OHqT6w\":[\"按下组合键...\"],\"OXJsaG\":[\"参数名称无效\"],\"OfhWJH\":[\"重置\"],\"OlAl5i\":[\"Expand all\"],\"Osn70z\":[\"调试\"],\"Ou8b_n\":[\"加入 Discord\"],\"P1YGsb\":[\"SQL 生成\"],\"P2m1xb\":[\"出错时停止\"],\"P3Qlys\":[\"无连接 ID\"],\"P6Y3Yf\":[\"在终端中运行此命令,然后重启 Claude Code。\"],\"PCdj-c\":[\"取消全选\"],\"PMnFt9\":[\"磁盘读取/s\"],\"PQU2Va\":[\"Accept Suggestion with Enter\"],\"PRnH8G\":[\"共 \",[\"0\"]],\"PY8UF3\":[\"切换了并行(单元格 \",[\"n\"],\")\"],\"PiH3UR\":[\"已复制!\"],\"Pia95d\":[\"列名称是必需的\"],\"PrElXQ\":[\"更新\"],\"PrixCC\":[\"行将追加到现有表\"],\"Pujgbb\":[\"配置目标\"],\"Pw_eQV\":[\"插件启动失败\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"无已保存查询\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"无子进程\"],\"QCxMC0\":[\"应用启动时自动检查新版本\"],\"QEazml\":[\"删除所选\"],\"QHcLEN\":[\"已连接\"],\"QLHHFO\":[\"只读模式\"],\"QOvAW3\":[\"新功能\"],\"QULGRi\":[\"未找到有效查询\"],\"QZwllF\":[\"浏览...\"],\"QbkSr_\":[\"此查询无法 EXPLAIN。\"],\"QeHFYZ\":[\"EXPLAIN 失败: \",[\"0\"]],\"Qll2Tb\":[\"降序\"],\"Qoq-GP\":[\"了解更多\"],\"Qu4Hog\":[\"笔记本导入成功\"],\"R-A2Vd\":[\"无数据显示\"],\"R0Hkb2\":[\"已选择 \",[\"0\"],\" 个数据库\"],\"R1nHhB\":[\"已存在\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"转换为控制台\"],\"R9Khdg\":[\"自动\"],\"RDjuBN\":[\"设置\"],\"RF-HyV\":[\"选择您的首选语言。自动\\\"将使用您的系统语言。\"],\"RGhYAo\":[\"内存\"],\"RGpZyz\":[\"复制名称\"],\"RI-HZc\":[\"输入 \",[\"0\"],\" 密钥\"],\"RJrE17\":[\"确定要删除视图 \\\"\",[\"0\"],\"\\\" 吗?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"一个 Star 可以帮助其他人发现这个项目\"],\"Rb3Tdm\":[\"笔记本名称\"],\"RcbKJ3\":[\"更新时\"],\"RkefFq\":[\"在显示审批模态之前运行 EXPLAIN,以便用户查看执行计划。\"],\"RnF_hl\":[\"加载插件注册表...\"],\"Rns7_C\":[\"此操作无法立即撤销\"],\"RoKRqW\":[\"可用插件\"],\"RphpKk\":[\"外观\"],\"Rt8sHM\":[\"检测到排序或临时操作\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"已启用\"],\"S1veKH\":[\"还原选中\"],\"S5zeZU\":[\"切换预览\"],\"S8Yqbl\":[\"插入\"],\"SDND4q\":[\"未配置\"],\"SJRy3D\":[\"(自动生成)\"],\"SSwIjo\":[\"设为空\"],\"SgvA_r\":[\"按运行(Ctrl/Command+F5)加载表数据\"],\"SlfejT\":[\"错误\"],\"SoATkx\":[\"复制单元格\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"端点 URL\"],\"T7w5CQ\":[\"创建新行失败:\"],\"T9947j\":[\"值(例如 'text' 或 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"切换到垂直布局\"],\"TK5oex\":[\"保存提示词\"],\"TKQ7K-\":[\"安装\"],\"TKZreP\":[\"要求\"],\"TMLAx2\":[\"必需\"],\"TO08JI\":[\"外键\"],\"TVKqvO\":[\"编辑行\"],\"TYSdQ3\":[\"执行 SELECT 查询\"],\"TfDFHS\":[\"Wrap long lines in the editor instead of scrolling horizontally.\"],\"Tibfjs\":[\"没有已保存的连接 — 在下方创建一个\"],\"Tj36Dr\":[\"重置为默认\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"锁定查询\"],\"TpwXyg\":[\"如果缺少耗时信息,服务器很可能返回的是仅估算的计划。\"],\"Tw2M1h\":[\"安装失败\"],\"Ty-rm9\":[\"SSH 连接\"],\"Tz0i8g\":[\"设置\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes 连接\"],\"U4uzyV\":[\"新功能\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"当单元格失败时停止执行\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" 在 \",[\"1\"],\" 上 — 请审核后再执行。\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[[\"clientName\"],\" 的配置安装成功!重启应用以应用更改。\"],\"URmyfc\":[\"详情\"],\"UWQBvp\":[\"生成 SQL 模板\"],\"UawTKZ\":[\"可选。指定用于运行此插件的可执行文件(例如 macOS/Linux 上的 python3,Windows 上的 python 或完整路径)。留空使用默认值。\"],\"Ub8sf5\":[\"SQLite 不支持通过 ALTER TABLE 删除外键。\"],\"UbbJ8j\":[\"未找到选项\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"这些连接将拒绝来自 MCP 的写入。其他连接行为不变。\"],\"UnQNah\":[\"确定要从表 \\\"\",[\"tableName\"],\"\\\" 中删除列 \\\"\",[\"0\"],\"\\\" 吗?\\n\\n警告:这将永久删除此列中的所有数据。此操作无法撤销。\"],\"UncTTh\":[\"整个进程树的 RSS 总和 — 可能重复计算共享内存\"],\"UpjgFm\":[\"更改了参数\"],\"UsAnu1\":[\"ANALYZE 会实际执行查询。对数据修改语句请谨慎使用。\"],\"UxKoFf\":[\"导航\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tab Size\"],\"UzWGWO\":[\"切换到 SQL WHERE 输入\"],\"V-chk5\":[\"How often to check if active connections are still alive. Set to 0 to disable.\"],\"V-pw1j\":[\"表名\"],\"V2T0Uw\":[\"暂无已保存的笔记本。\"],\"V3aNwx\":[\"数据编辑器\"],\"VGYp2r\":[\"应用到全部\"],\"VH8S7x\":[\"剪贴板列\"],\"VIAEcS\":[\"加载数据库失败。请检查您的凭据。\"],\"VKdztF\":[\"追加行\"],\"VLiHXI\":[\"分析数据\"],\"VMbmXc\":[\"确定要移除 \\\"\",[\"pluginName\"],\"\\\" 吗?这将删除插件文件。\"],\"VO3weF\":[\"未加载文件\"],\"VOZlKc\":[\"导入数据库\"],\"VPzsIz\":[\"正在生成名称...\"],\"VUul0v\":[\"终止\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"所有查询\"],\"Vi2Pqx\":[\"作者\"],\"Vl2zn2\":[\"已停止\"],\"Vo4uBA\":[\"安装插件时发生错误。请参阅下面的详细信息。\"],\"VqqyOs\":[\"执行查询以查看结果\"],\"VzhDFh\":[\"通过 MCP 阻止任何非 SELECT 语句,除非连接被显式允许。\"],\"W3uwpT\":[\"关闭所有标签\"],\"W4MKLh\":[\"例如:在生产环境中风险较大,请确认…\"],\"W60eXm\":[\"表\"],\"WA8RND\":[\"确定要删除表 \\\"\",[\"0\"],\"\\\" 吗?\"],\"WG8Qgt\":[\"删除表\"],\"WLnvCZ\":[\"输入用户名\"],\"WM-__8\":[\"搜索连接...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"已将 \",\"#\",\" 行导入到 \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"已将 \",\"#\",\" 行导入到 \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"确定要删除查询 \\\"\",[\"0\"],\"\\\" 吗?\"],\"WarTN_\":[\"成功\"],\"WcF1uL\":[\"分组名称\"],\"Weq9zb\":[\"通用\"],\"WmPpB1\":[\"正在加载执行计划…\"],\"Wu7cK0\":[\"未找到数据库\"],\"WvoUQF\":[\"删除了单元格 \",[\"n\"]],\"Ww3pDD\":[\"手动命令\"],\"X-20AU\":[\"输入查询标签页名称提示词...\"],\"X-U6_w\":[\"字体\"],\"X5fs0g\":[\"创建您的第一个连接以开始使用。\"],\"X7Ayjp\":[\"密码已保存到系统密钥链\"],\"X9kySA\":[\"收藏\"],\"XJOV1Y\":[\"活动\"],\"XMCLEL\":[\"Create New Trigger\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"查询解释\"],\"XVF2Pf\":[\"编辑模式\"],\"XW6OYF\":[\"此插件可能需要解释器(如 Python)。使用插件设置配置解释器路径。\"],\"XZB6Xr\":[\"最大日志条目数\"],\"Xcffv2\":[\"在编辑器中显示 AI 辅助和解释按钮\"],\"XeqTSh\":[\"连接类型\"],\"XmJfZT\":[\"名称\"],\"XoQfG1\":[\"SSH 用户\"],\"XwI0Vw\":[\"自动(系统)\"],\"XyDlLX\":[\"索引名称\"],\"Y2P2aK\":[\"选择要加载的模式:\"],\"Y8HYw2\":[\"值\"],\"Y8zX3R\":[\"插入到编辑器\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"搜索...\"],\"YWlnMZ\":[\"Ollama 端口\"],\"YYdC3A\":[\"版本 \",[\"0\"]],\"YYn8b5\":[\"浏览并安装注册表中的插件。\"],\"Y_3yKT\":[\"在新标签中打开\"],\"YiAQ_Q\":[\"刷新表\"],\"Ysjr9Y\":[\"SQL 预览\"],\"YswNf7\":[\"所有级别\"],\"YtNwr6\":[\"每个连接存储的查询历史最大条目数。\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"加载中...\"],\"Z7ZXbT\":[\"批准\"],\"Z8JpBH\":[\"导出为 Notebook\"],\"Z8fBIc\":[\"实际行数高于估算\"],\"ZC2VJP\":[\"执行\"],\"ZCIS4k\":[\"无激活筛选器\"],\"ZF1_UT\":[\"SSL 模式\"],\"ZGjBPa\":[\"清除日志\"],\"ZHQTlM\":[\"从以下文件导入\"],\"ZIFDoJ\":[\"请至少选择结构或数据\"],\"ZIZA6o\":[\"批准前编辑\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 条解析警告\"],\"other\":[\"#\",\" 条解析警告\"]}]],\"ZVn8p2\":[\"Display line numbers in the editor gutter.\"],\"ZYnwzF\":[\"已断开\"],\"Za3_fO\":[\"错误\"],\"ZcOxO1\":[\"创建外键\"],\"Zf7LHg\":[\"未找到上下文(是否已安装 kubectl?)\"],\"Zfotp5\":[\"估算与实际差距过大通常意味着统计信息过旧,或存在规划器难以建模的谓词。\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"加载模式失败\"],\"ZqXGPF\":[\"删除视图失败:\"],\"ZuL73E\":[\"创建新的数据库视图\"],\"_-bi4r\":[\"引用表\"],\"_AEYGI\":[\"暂无执行历史\"],\"_FdpZc\":[\"加载视图定义失败:\"],\"_FxSdi\":[\"查看应用、后端和工具链直接使用的开源依赖。\"],\"_JyTG8\":[\"输入解释提示词...\"],\"_Ltc_k\":[\"其他\"],\"_Q2Wix\":[\"行\"],\"_TK1zF\":[\"已保存的连接\"],\"_bJFBE\":[\"连接超时\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"树形\"],\"_dqduX\":[\"下一页\"],\"_fwE6J\":[\"更早\"],\"_n04sB\":[\"终止\"],\"_otxbQ\":[\"密钥文件\"],\"_pezIT\":[\"连接到 \",[\"0\"],\" 失败。请检查您的设置或确保数据库正在运行。\"],\"_srfkj\":[\"自定义密钥删除成功\"],\"_t6aFo\":[\"MySQL 和 MariaDB 会根据服务器版本回退到 EXPLAIN FORMAT=JSON 或表格版 EXPLAIN。\"],\"_xTbaM\":[\"列\"],\"_yxaaL\":[\"唯一索引\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis 是一个免费的开源项目。如果您觉得有用,请考虑支持该项目并与社区联系。\"],\"a9CASo\":[\"SQLite 仅支持重命名列。其他修改需要手动重建表。\"],\"aAIQg2\":[\"外观\"],\"aAURrV\":[\"已安装\"],\"aC_vCa\":[\"使用 AI 生成名称\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"选择节点查看详情\"],\"aHKcKc\":[\"上一页\"],\"aI-5wG\":[\"验证 CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"默认值\"],\"aScJP1\":[\"执行此查询\"],\"aVNbN8\":[\"筛选条件\"],\"aWhdMQ\":[\"使用现有 SSH 连接\"],\"aXYd8V\":[\"超时\"],\"aX_S_r\":[\"第 \",[\"0\"],\" 页,共 \",[\"totalPages\"],\" 页\"],\"agZcf8\":[\"生成的 SQL:\",[\"tableName\"]],\"ajqPzi\":[\"SELECT [字段]\"],\"alplHn\":[\"正在使用 AI 分析执行计划...\"],\"anBcU3\":[\"如果您喜欢 Tabularis 并希望看到更多功能,请考虑通过贡献代码、报告错误或 Star 项目来支持该项目。\"],\"arHmj2\":[\"确定要从历史中删除此查询吗?\"],\"arKcqW\":[\"较旧的服务器可能会回退到仅估算、指标更少的执行计划。\"],\"arcpYe\":[\"需要审批\"],\"aurEkh\":[\"加载进程中...\"],\"avtdsd\":[\"SQL 模式\"],\"az8lvo\":[\"关闭\"],\"b1Ah3z\":[\"聚焦于\"],\"b392Dr\":[\"全部展开\"],\"b5S_PU\":[\"数据库名称\"],\"bAvovP\":[\"下移\"],\"bH3JqY\":[\"未找到表\"],\"bP5JOn\":[\"Word Wrap\"],\"bcOdok\":[\"删除分组\"],\"bcqeas\":[\"将所有 MCP 查询设为只读\"],\"bmca5u\":[\"仅写入\"],\"bpCiBU\":[\"允许 MCP 写入\"],\"bqnhqW\":[\"估算高于实际行数\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"报错\"],\"bw22Gk\":[\"列结构\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"关键问题\"],\"cFCKYZ\":[\"拒绝\"],\"cFGrCP\":[\"表\"],\"cGeFup\":[\"字体大小\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"聚焦于表\"],\"cM9NHc\":[\"降级到\"],\"cO9-2L\":[\"禁用\"],\"cSev-j\":[\"筛选器\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"导入 \",\"#\",\" 行\"],\"other\":[\"导入 \",\"#\",\" 行\"]}]],\"c_xoSn\":[\"重命名了单元格 \",[\"n\"]],\"cd0XEW\":[\"保存查询\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"分割组\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" 语句\"],\"d34vwG\":[\"加载数据库\"],\"d6ynQ7\":[\"降序排列\"],\"d8_6_v\":[\"cancel\"],\"d8wc1_\":[\"示例值\"],\"dBXoCS\":[\"检测到环境变量,但您可以通过在上方设置密钥来覆盖它。\"],\"dD7NPy\":[\"大纲\"],\"dEgA5A\":[\"取消\"],\"dMtLDE\":[\"到\"],\"dPJVhW\":[\"安装失败\"],\"dQvGiF\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个会话\"]}]],\"dTUzKm\":[\"执行选中 (\",[\"0\"],\")\"],\"dU_iQN\":[\"没有会话匹配当前筛选条件。\"],\"dUh9QW\":[\"规划时间\"],\"dVoir2\":[\"添加了 Markdown 单元格 \",[\"n\"]],\"dZ0d2O\":[\"请至少选择一个表\"],\"dhi13U\":[\"选择图片…\"],\"dli1JX\":[\"提交更改\"],\"dmYV6f\":[\"存储过程\"],\"dohZCo\":[\"AI SQL 生成的指令。使用 \",[\"SCHEMA\"],\" 作为数据库结构的占位符。\"],\"dtxpK2\":[\"分析\"],\"dwW9nJ\":[\"Show Line Numbers\"],\"dwWVw_\":[\"显示欢迎屏幕\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"如果存在\"],\"dyN4j9\":[\"点击\\\"运行预览\\\"查看结果\"],\"e07Iz5\":[\"打开任务管理器\"],\"e0NzXu\":[\"此项目是正在进行的工作 (WIP)。核心功能已稳定,但我们有更大的计划。\"],\"e1UKxf\":[\"保存此查询\"],\"e34gdU\":[\"MCP 子进程等待用户决定的时间。\"],\"e62LQd\":[\"强制终止\"],\"e6QZsM\":[\"Editor Theme\"],\"e8CirT\":[\"运行查询\"],\"eD2kUP\":[\"缓冲区读取\"],\"eE0JZ4\":[\"版本\"],\"eIDch7\":[\"输入执行计划分析提示词...\"],\"eIVolo\":[\"磁盘 R/W\"],\"eJOEBy\":[\"导出中...\"],\"eKHY3W\":[\"插件设置\"],\"eMb6Ub\":[\"选择资源...\"],\"ePK91l\":[\"编辑\"],\"eXweu6\":[\"展开单元格\"],\"ecNsTE\":[\"没有匹配的查询\"],\"ecUA8p\":[\"今天\"],\"ecpIZP\":[\"如果加密请输入密钥密码\"],\"ejmeDY\":[\"已安装\"],\"esl-Tv\":[\"资源类型\"],\"exyUec\":[\"连接\"],\"f2AJjl\":[\"删除行\"],\"f4pD-j\":[\"连接测试失败\"],\"f7sXvi\":[\"输入密码\"],\"fAsxc0\":[\"顺序扫描\"],\"fIeFs0\":[\"选择值...\"],\"fJm92A\":[\"选择一个包含 EXPLAIN 计划(PostgreSQL JSON 或文本格式)的文件以进行可视化。\"],\"fOuPPd\":[\"插件\"],\"fXVIZq\":[\"数值\"],\"f_b1TA\":[\"执行历史\"],\"fghnqP\":[\"切换到连接 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"逗号 (,)\"],\"fp711N\":[\"已阻止 (只读)\"],\"fpzyLj\":[\"第 \",[\"0\"],\" 页,共 \",[\"1\"],\" 页\"],\"fuA6oy\":[\"Socket 超时\"],\"fvImQM\":[\"已选 \",[\"0\"],\" 列\"],\"fwr_nh\":[\"安装扩展、管理插件驱动,并控制运行时设置。\"],\"g0ZzK4\":[\"JSON 格式正确\"],\"g11hAR\":[\"新建行\"],\"g8VcMm\":[\"我的 K8s 集群\"],\"gCFR_O\":[\"并行执行(全部运行)\"],\"gEjU98\":[\"打开连接\"],\"gPQ8z1\":[\"可为空\"],\"gShKPx\":[\"至少需要一列\"],\"gSuQrG\":[\"无匹配 \\\"\",[\"search\"],\"\\\" 的连接\"],\"gUypqb\":[\"重新执行查询\"],\"gZWMnn\":[\"AI 分析\"],\"ghYd73\":[\"选择目标...\"],\"giAqEC\":[\"创建新表\"],\"gnQS8X\":[\"MySQL 连接器使用的最大数据包大小。\"],\"gqV5VL\":[\"内置,不可自定义\"],\"gww_XE\":[\"引用列\"],\"gxXPJ9\":[\"配置解释器\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"最大化\"],\"h-XNc9\":[\"CSV 分隔符\"],\"h-kNAk\":[\"例如:销售数据\"],\"h3Z_aK\":[\"在此编写 Markdown...\"],\"h7MgpO\":[\"键盘快捷键\"],\"h7peZQ\":[\"允许\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个系统进程正在运行\"],\"other\":[\"#\",\" 个系统进程正在运行\"]}]],\"hEZrFh\":[\"运行 SQL 文件...\"],\"hEipgW\":[\"立即检查更新\"],\"hG89Ed\":[\"图片\"],\"hIHcBE\":[\"导出为 CSV\"],\"hItdtk\":[\"浏览文件夹\"],\"hXFVjo\":[\"表名称是必需的\"],\"hZ6znB\":[\"端口\"],\"h_huI6\":[\"重新运行\"],\"hbz1rh\":[\"键\"],\"hdsaJo\":[\"导入中...\"],\"he3ygx\":[\"复制\"],\"hfGimp\":[\"选择命名空间...\"],\"hjjSEi\":[\"只读连接\"],\"hjwN_s\":[\"资源名称\"],\"hlF1mD\":[\"复制选区\"],\"hnboBb\":[\"AI 执行计划分析\"],\"hnvu2p\":[\"错误详情\"],\"hq4-D2\":[\"API 密钥安全存储在您的系统密钥链中。在此设置密钥将覆盖环境变量。\"],\"hqjXdn\":[\"删除 SSH 连接失败\"],\"hqofAK\":[\"复制 SQL\"],\"hy6L14\":[\"在 GitHub 上查看\"],\"hyjACX\":[\"折叠/展开单元格\"],\"hz1b5W\":[\"未找到匹配的元素\"],\"i1vAVM\":[\"创建新表\"],\"i3S5T3\":[\"搜索收藏...\"],\"i4_LY_\":[\"写入\"],\"i5HBWh\":[\"查询历史已重置\"],\"i5zCt4\":[\"表格\"],\"iAVlge\":[\"自定义 AI Notebook 单元格名称生成的指令。单元格内容(SQL 或 Markdown)作为用户消息发送。\"],\"iE1yAB\":[\"筛选表...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"连接\"],\"iSryJ2\":[\"我的 SSH 服务器\"],\"iT7UeX\":[\"添加索引\"],\"iUWwuR\":[\"下载并安装\"],\"ia7i08\":[\"请先选择上下文/命名空间/类型\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"已保存\"],\"igcsfY\":[\"注册表中无可用插件。\"],\"ij-Elv\":[\"图片预览\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" explainable query found\"],\"other\":[\"#\",\" explainable queries found\"]}]],\"ioL38P\":[\"实时监控插件进程、CPU、RAM 和磁盘使用情况\"],\"ixlL_e\":[\"SSH 密钥文件(可选)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"选择一个模型\"],\"j3gyYH\":[\"全部应用\"],\"j5CWO4\":[\"已是最新\"],\"j9HPuI\":[\"行 #\",[\"0\"]],\"jBtpMP\":[\"所有状态\"],\"jEu4bB\":[\"列\"],\"jEyQIs\":[\"未找到存储过程\"],\"jHc1By\":[\"删除视图\"],\"jI6sj4\":[\"与 PostgreSQL 和 MySQL 相比,成本、耗时和行数估算通常不可用。\"],\"jIxQCZ\":[\"您的平台不可用\"],\"jKIncn\":[\"数据库名称是必需的\"],\"jPSk57\":[\"理由 (可选)\"],\"jUNY_d\":[\"视图\"],\"jVqjDo\":[\"无效的笔记本文件格式\"],\"jWSZ-A\":[\"仅预览 - 未加载完整数据\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket 超时时间,单位为毫秒。\"],\"jpeU_Z\":[\"笔记本\"],\"jpgB4Y\":[\"连接名称是必需的\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"子进程\"],\"jx0t66\":[\"折叠子进程\"],\"k-0mL-\":[\"添加列\"],\"k-XiMX\":[\"原始\"],\"k2UnVy\":[\"哈希条件\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"seconds\"],\"kBiBq7\":[\"删除索引 \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"显示/隐藏图表\"],\"kI1qVD\":[\"格式化\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行 · \",[\"1\"],\"毫秒\"],\"other\":[\"#\",\" 行 · \",[\"2\"],\"毫秒\"]}]],\"kJDmsI\":[\"事件详情\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"注册表\"],\"kY-q3P\":[[\"label\"],\" 是必需的\"],\"kexIdC\":[\"使用 Kubernetes 端口转发\"],\"krksx_\":[\"成功\"],\"ktYUe9\":[\"全部执行\"],\"kwY6nh\":[\"关闭\"],\"kx0s-n\":[\"Results\"],\"kxUEfE\":[\"获取存储过程定义失败:\"],\"l2Op2p\":[\"查询参数\"],\"l9Ivba\":[\"插件进程和系统资源\"],\"lBdPxu\":[\"强调色\"],\"lCF0wC\":[\"刷新\"],\"lEQRwq\":[\"数据 (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"新表已创建\"],\"lOekZ3\":[\"切换到水平布局\"],\"lUA1C1\":[\"SSH 密钥密码(可选)\"],\"lVeG20\":[\"Rust 依赖\"],\"lXAG6D\":[\"AI 查询解释的指令。使用 \",[\"LANGUAGE\"],\" 作为输出语言的占位符。\"],\"lbbYjy\":[\"Directly edit the raw configuration file. A restart is required to apply changes.\"],\"lhKW0m\":[\"添加了 SQL 单元格 \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"结果页面大小(限制)\"],\"lkz6PL\":[\"耗时\"],\"lmVGeo\":[\"添加外键\"],\"lnnx3E\":[\"将 Tabularis 连接到 Claude Desktop、Cursor 等\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"添加\"],\"m2Q_r8\":[\"在文本列中检测 JSON\"],\"m2tskz\":[\"成功\"],\"mA-qpe\":[\"全部运行完成\"],\"mBhhbA\":[\"日志已导出到剪贴板\"],\"mCNdzH\":[\"运行单元格\"],\"mO95sp\":[\"关闭面板\"],\"mP7dLi\":[\"在上方输入字体名称\"],\"mQCWzt\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个被阻止\"]}]],\"mS74ir\":[\"保存 SSH 连接失败\"],\"mSqtw8\":[\"运行预览\"],\"mURmfQ\":[\"视图定义 (SQL)\"],\"mX_isJ\":[\"垂直\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"结构 (DDL)\"],\"mrk4Cf\":[\"按 \",[\"colName\"],\" 降序排序\"],\"msJ8t1\":[\"我们为 Tabularis 用户开设了专属社区:获取帮助、分享技巧、共建路线图。\"],\"mtvVdV\":[\"已处理行数\"],\"mx4evv\":[\"创建表\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"下载\"],\"n7JDTx\":[\"安装并启用插件以在此处查看它们\"],\"nDDJir\":[\"搜索会话、客户端、连接…\"],\"nHP-Kr\":[\"无活动会话。请选择一个连接。\"],\"nKhCjW\":[\"选择表\"],\"nNwvm4\":[\"错误\"],\"nOVim5\":[\"保存连接失败\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"事件\"],\"nf14vn\":[\"Requires extension: \",[\"0\"]],\"ngO6Pv\":[\"Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.\"],\"nhmF3p\":[\"连接\"],\"noM5A_\":[\"创建您的第一个连接\"],\"nohy4m\":[\"暂无 MCP 活动。\"],\"nr-axf\":[\"移除插件\"],\"nsPFX9\":[\"在 Visual Explain 中打开\"],\"nuBbBr\":[\"图表\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"导出数据库\"],\"o-XJ9D\":[\"更改\"],\"o21Y-P\":[\"条目\"],\"o3tP_A\":[\"删除索引\"],\"o45L8r\":[\"输入您的连接名称\"],\"o53XGh\":[\"复制选中的行\"],\"o7J4JM\":[\"过滤条件\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"级别\"],\"oGiIL7\":[\"默认提供商\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connection Lost\"],\"oJlXF2\":[\"导入笔记本\"],\"oMFv82\":[\"垂直分割\"],\"oOFiQg\":[\"限制每次查询获取的行数,以防止性能问题。设置为 0 可禁用(不推荐)。\"],\"oT9ZD3\":[\"隐藏概览\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"更改了图表(单元格 \",[\"n\"],\")\"],\"oWfclW\":[\"当未带类型的文本单元格包含 JSON 对象或数组时显示 JSON 查看器入口。每单元格会增加少量解析开销。\"],\"obpbdz\":[\"未找到配置文件(请手动创建)\"],\"odZgfC\":[\"AI 客户端\"],\"ogZhXn\":[\"选择 ER 图的默认布局方向\"],\"ohUJJM\":[\"插件\"],\"olAdaI\":[\"实际行数\"],\"olWzar\":[\"强制终止插件进程\"],\"ovBPCi\":[\"默认\"],\"owzTWN\":[\"已从提供商刷新 AI 模型\"],\"oxYi6j\":[\"调整整个应用使用的基础字体大小(10-20px)。\"],\"p--hsQ\":[\"A database connection was lost\"],\"p6NueD\":[\"新建\"],\"pOYHox\":[\"操作\"],\"pR9bTR\":[\"无 BLOB 数据\"],\"pS8S5q\":[\"例如:users, orders, products\"],\"pSws_M\":[\"表名称\"],\"pVLbKZ\":[\"视图创建成功\"],\"pWT04I\":[\"检查中...\"],\"pZJ_6D\":[\"索引名称是必需的\"],\"pddYFG\":[\"输入单元格名称提示词...\"],\"pnpyuD\":[\"启用日志\"],\"pqKMPv\":[\"创建表失败:\"],\"pqaP1h\":[\"关闭\"],\"pqarBu\":[\"升序\"],\"ptuq35\":[\"例如:微软雅黑\"],\"pzu7v4\":[\"水平\"],\"q-ch8m\":[\"其余连接保持只读。仅勾选的连接可以执行写入。\"],\"qA5jLs\":[\"错误详情\"],\"qIrtcK\":[\"更新\"],\"qOqy8G\":[\"检查配置中...\"],\"qWaVNs\":[\"Save & Restart\"],\"qb3LPX\":[\"查看 ER 图\"],\"qkK0vq\":[\"视图名称是必需的\"],\"qki9tG\":[\"错误\"],\"qoIir-\":[\"您的 OpenAI 兼容 API 的基础 URL。例如:https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Collapse all\"],\"r6ncaO\":[\"关闭标签\"],\"rAJlpP\":[\"容器端口\"],\"rG3WVm\":[\"读取\"],\"rGRCeK\":[\"清除查询历史\"],\"rNIto7\":[\"资源名称为必填项\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"笔记本导出成功\"],\"rY4sEV\":[\"删除外键\"],\"rbu0nO\":[\"管理 SSH 连接\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个连接\"],\"other\":[\"#\",\" 个连接\"]}]],\"rn2_2V\":[\"移除筛选器\"],\"roABNH\":[\"暂无查询历史\"],\"rtir7c\":[\"未知\"],\"ru0-2W\":[\"无活动连接\"],\"rvDPWO\":[\"估算偏差\"],\"rwWjWg\":[\"发布说明\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"测试连接\"],\"sBOaim\":[\"The configuration file has been saved. Restart now to apply the changes?\"],\"sCyv9B\":[\"刷新模型\"],\"sSUqe4\":[\"删除\"],\"sUBkgN\":[\"生成 SQL 中...\"],\"sZZG3d\":[\"确定要导入 \\\"\",[\"0\"],\"\\\" 吗?\\n这可能会覆盖现有数据。\"],\"sbK5ck\":[\"搜索历史...\"],\"sq_bS6\":[\"删除时\"],\"suW7-E\":[\"连接超时时间,单位为毫秒。\"],\"suqtBX\":[\"Esc 关闭\"],\"t-R8-P\":[\"执行时间\"],\"t1OfVY\":[[\"totalLibraries\"],\" 个库\"],\"t2TMzs\":[\"关闭标签\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"选择一个表...\"],\"t7KRl1\":[\"MCP 工具调用的审计日志,以及等待批准的查询。仅本地存储。\"],\"t9NJIk\":[\"检测到高扫描操作\"],\"tB7xof\":[\"临时或排序操作\"],\"tBBXTO\":[\"Ping Interval\"],\"tFrT3w\":[\"如果自动安装失败,请将此添加到您的客户端配置文件中。\"],\"tJ7UbA\":[\"explain focused\"],\"tKlWWY\":[\"表情\"],\"tMFzq-\":[\"水平分割\"],\"tQhW-D\":[\"日志设置\"],\"tT-BQX\":[\"已安装\"],\"tXFGEx\":[\"没有已保存的 Kubernetes 连接。点击“添加”创建一个。\"],\"tXLz_8\":[\"删除\"],\"tXpRby\":[\"数据网格\"],\"tbysEk\":[\"操作\"],\"tdta9X\":[\"第 \",[\"0\"],\" 页\"],\"tfDRzk\":[\"保存\"],\"tfEioV\":[\"从上到下执行所有 SQL 单元格\"],\"tiAIaJ\":[\"SSH 密码缺失。请重新输入。\"],\"tk22BR\":[\"粘贴结构化数据,导入前预览模式\"],\"tst44n\":[\"事件\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL 文件执行成功\"],\"u6QeR6\":[\"Restart Now\"],\"uAQUqI\":[\"状态\"],\"uBAxNB\":[\"编辑器\"],\"uBI8D9\":[\"按 Esc 关闭\"],\"uFViPK\":[\"无 SSH 连接可用\"],\"uHUuhp\":[\"Explain this query\"],\"uHfFzS\":[\"Editor Font Size\"],\"uJ_3K5\":[\"删除笔记本“\",[\"0\"],\"”?此操作无法撤销。\"],\"uKaNJ3\":[\"在 JSON 编辑器中打开\"],\"uQBwTo\":[\"模式\"],\"ub54ff\":[\"插件中心\"],\"ufFyBs\":[\"数据库导出成功\"],\"upNmR2\":[\"打开侧边栏编辑器\"],\"upwIY4\":[\"视图定义\"],\"utMia3\":[\"取消全选\"],\"uyNaJg\":[\"1 个元素\"],\"v61dnS\":[\"输入您的 OpenAI 兼容提供商的确切模型名称。\"],\"v6oeyr\":[\"已安装\"],\"v75DGg\":[\"浏览文件\"],\"v99dO4\":[\"主键\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"找到 \",\"#\",\" 个查询\"],\"other\":[\"找到 \",\"#\",\" 个查询\"]}]],\"vCSBPD\":[\"添加筛选器\"],\"vH7uJj\":[\"排序方式…\"],\"vUOA1-\":[\"搜索模型...\"],\"vWcB0p\":[\"PostgreSQL 的 ANALYZE 会在可用时包含实际行数、耗时、循环次数和缓冲区计数。\"],\"vXIe7J\":[\"语言\"],\"vYf4Jm\":[\"输入完整的 SQL 函数(例如 ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"首选\"],\"vditm4\":[\"执行计划\"],\"vks_ls\":[\"关闭其他标签\"],\"vnAnIp\":[\"在 \",[\"1\"],\" 中未找到模型 \",[\"0\"],\"。它可能无法正常工作。\"],\"vqoN5u\":[\"结构\"],\"vrAvbP\":[\"确定要删除分组 \\\"\",[\"0\"],\"\\\" 吗?此分组中的连接将移至未分组。\"],\"vtJ2yO\":[\"浏览器\"],\"vujQJ5\":[\"本地化\"],\"vvJPVL\":[\"显示概览\"],\"vwI5S4\":[\"成功\"],\"vzH-7Z\":[\"解释\"],\"w7QmD_\":[\"输入系统提示词...\"],\"w9eMXw\":[\"触发器\"],\"wCJFlW\":[\"已用时间\"],\"wCfv2R\":[\"添加连接\"],\"wGfc86\":[\"清除所有历史\"],\"wGwNv4\":[\"当前数据库\"],\"wJJ-Wy\":[\"安装中...\"],\"wMe2Qp\":[\"命名空间\"],\"wQiel_\":[\"缓冲区命中\"],\"wQn-RM\":[\"添加列\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"已应用\"],\"wTmVhm\":[\"删除\"],\"wZeIWq\":[\"从剪贴板导入\"],\"w_bY7R\":[\"日志\"],\"wc_8bA\":[\"待审批\"],\"wckWOP\":[\"管理\"],\"wdYcKH\":[\"打开的标签\"],\"wja8aL\":[\"未命名\"],\"wkOAzk\":[\"没有匹配的笔记本。\"],\"wp49Ao\":[\"处理插入失败:\"],\"wqG2hQ\":[\"跳过(不导入)\"],\"wwrAsK\":[\"请填写所有必需字段\"],\"wwu18a\":[\"图标\"],\"x2fr_j\":[\"图形\"],\"xANKBj\":[\"函数\"],\"xBwjck\":[\"A restart is required to apply changes.\"],\"xDAtGP\":[\"消息\"],\"xECY01\":[\"存储过程\"],\"xGPNgZ\":[\"提示词自定义\"],\"xNgtS-\":[\"未找到视图\"],\"xOPa1b\":[\"端口必须介于 1 和 65535 之间\"],\"xY9s5E\":[\"超时\"],\"xaVUr1\":[\"The quick brown fox jumps over the lazy dog\"],\"xbvTzL\":[\"文件路径\"],\"xlew5F\":[\"清空\"],\"xmNyKz\":[\"测试中...\"],\"xtuh6D\":[\"展开浏览器\"],\"y-Zdqj\":[\"选择上下文...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"打开 JSON 查看器\"],\"yQXjG5\":[\"取消全选\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"昨天\"],\"ygCKqB\":[\"停止\"],\"ykCc6r\":[\"更改了数据库(单元格 \",[\"n\"],\")\"],\"ynVMSc\":[\"全选\"],\"ytdz1d\":[\"AI 请求执行数据库写入\"],\"yyhzur\":[\"创建表\"],\"yz7wBu\":[\"关闭\"],\"z0VdfR\":[\"例程\"],\"z407wX\":[\"SSH 密码\"],\"z4oF5T\":[\"导出数据库\"],\"z5kV0h\":[\"连接\"],\"zBTMzx\":[\"预览\"],\"zCaAKs\":[\"更新错误\"],\"zDAakK\":[\"无法在没有连接 ID 的情况下显示图表。\"],\"zGe21h\":[\"此密钥从环境变量加载\"],\"zGfL5t\":[\"值\"],\"zL6-4A\":[\"无插件进程在运行\"],\"zLZhCi\":[\"全新的 Discord 社区!\"],\"zLlCou\":[\"复制列名\"],\"zNEL34\":[\"加入社区\"],\"zNgTlV\":[\"关闭右侧标签\"],\"zQz55p\":[\"查看结构\"],\"zR0FfH\":[\"已导出到 \",[\"target\"]],\"zRZeOc\":[\"搜索表、视图、例程、触发器...\"],\"zUNMsr\":[\"SSH 密钥\"],\"zXMRzb\":[\"SSH 端口\"],\"zZgoXr\":[\"无匹配的表\"],\"zaWbms\":[\"回滚更改\"],\"zgClmU\":[\"安装配置\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"输入值...\"],\"zvzN4C\":[\"设为激活\"],\"zzDlyQ\":[\"成功\"],\"zzMxrp\":[\"Edit config.json\"],\"zz_Wd_\":[\"模式\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"-1aZ0k\":[\"最大历史条目\"],\"-6AWa-\":[\"导入连接\"],\"-6NyRG\":[\"客户端\"],\"-K0AvT\":[\"断开连接\"],\"-PLZfh\":[\"刷新模型失败\"],\"-T5W2e\":[\"驱动说明\"],\"-ZgeeE\":[\"编辑历史\"],\"-aYrdc\":[\"版本 \",[\"0\"],\" 可用\"],\"-fBGXl\":[\"最高成本\"],\"-jIQDz\":[\"折叠单元格\"],\"-u1eRo\":[\"无数据库\"],\"-yoeVU\":[\"加载模式中...\"],\"-zy2Nq\":[\"类型\"],\"000Kz2\":[\"CA Certificate\"],\"04xgcQ\":[\"审批 ID\"],\"0E5-gF\":[\"确定要删除此连接吗?\"],\"0HCubq\":[\"展开\"],\"0Kmdvy\":[\"自定义字体\"],\"0Nj13E\":[\"生成 SQL\"],\"0ROgz5\":[\"输入 JSON...\"],\"0SY9sU\":[\"断开数据库连接失败\"],\"0b3kL9\":[\"选择一个数据库\"],\"0caMy7\":[\"历史\"],\"0mx5ow\":[\"查询\"],\"0n9BtL\":[\"预览\"],\"0pHB9N\":[\"复制为 表.列\"],\"0sQzZK\":[\"筛选数据库...\"],\"0uPP9X\":[\"FK 名称(可选)\"],\"0wxuek\":[\"当前版本\"],\"0x09Aw\":[\"切换了出错时停止\"],\"0yBP6v\":[\"支持开发\"],\"0yQBai\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"0yVAoD\":[\"统计行数\"],\"0zxJ87\":[\"无日志可用\"],\"1-ETbn\":[\"可视化执行计划\"],\"1133_z\":[\"编辑视图\"],\"11fGJ6\":[\"查询\"],\"13hIUA\":[[\"0\"],\" API 密钥\"],\"14qNWF\":[\"选择 SSH 连接\"],\"17qHRP\":[\"新建连接\"],\"1Dn6bg\":[\"Import from Clipboard\"],\"1Dnd0I\":[\"加载行数\"],\"1FjTLW\":[\"例如:python3\"],\"1GOvbo\":[\"Ollama 已连接(找到 \",[\"0\"],\" 个模型)\"],\"1I6UoR\":[\"视图\"],\"1U7hS5\":[\"长度\"],\"1UTmg5\":[\"最大允许数据包\"],\"1b7aSU\":[\"Editor Font Family\"],\"1ekzlY\":[\"插件进程\"],\"1gk9ya\":[\"No general settings available for this driver.\"],\"1qxmP0\":[\"主题选择\"],\"1xVZkL\":[\"未找到模型\"],\"26Joci\":[\"已检索 \",[\"0\"],\" 行\"],\"2Bf-Qe\":[\"新建控制台\"],\"2CrSmP\":[\"帮助 Tabularis 成长\"],\"2D9F8_\":[\"复制连接失败\"],\"2Eoi_a\":[\"查看详情\"],\"2F4pE5\":[\"Rust 构建与测试\"],\"2Fsd9r\":[\"本月\"],\"2JzKXI\":[\"设为 GENERATED\"],\"2KAI4N\":[\"Export CSV\"],\"2NSy1A\":[\"全选\"],\"2SO5RM\":[\"此驱动不支持 Kubernetes。\"],\"2Uh5GA\":[\"Cargo 生态\"],\"2YylFp\":[\"新建可视化查询\"],\"2luuSG\":[\"重试\"],\"2wxgft\":[\"重命名\"],\"2yG2GC\":[\"在执行前暂停写入(或所有查询)并要求用户在 Tabularis 中批准。\"],\"30-b5r\":[\"删除\"],\"31kwdN\":[\"复制筛选器\"],\"34nxyb\":[\"Triggers\"],\"35148H\":[\"所有工具\"],\"3Am5DS\":[\"Tab view\"],\"3FVg9_\":[\"本地列\"],\"3IIRsC\":[\"Select the databases to include in this connection.\"],\"3JjdaA\":[\"运行\"],\"3L0HCz\":[\"没有匹配的插件。\"],\"3Nv3JV\":[\"执行查询中...\"],\"3TSz9S\":[\"最小化\"],\"3UW8fG\":[\"更新由 \",[\"0\"],\" 管理\"],\"3YvS-c\":[\"新建标签\"],\"3flmnQ\":[\"SSH is not available for this driver.\"],\"3lrsr2\":[\"Notebook 单元格名称提示词\"],\"3qkggm\":[\"全屏\"],\"3rBJ1T\":[\"查看模式\"],\"3xZ-xV\":[\"插入当前时间戳\"],\"40Gx0U\":[\"时区\"],\"41GP4f\":[\"选择复制或导出行为 CSV 时使用的默认分隔符。\"],\"42iaEi\":[\"未启用 ANALYZE 的 PostgreSQL 仅显示规划器估算值。\"],\"44cXI8\":[\"按 \",[\"colName\"],\" 升序排序\"],\"4AF7FO\":[\"管理数据库\"],\"4CK17g\":[\"确定要修改视图 \\\"\",[\"name\"],\"\\\" 吗?\"],\"4DDaw-\":[\"请至少选择一个数据库\"],\"4D_Nvt\":[\"创建分组失败\"],\"4RiR6c\":[\"导出为 HTML\"],\"4SBPS4\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个子进程\"],\"other\":[\"#\",\" 个子进程\"]}]],\"4TtbAT\":[\"Fetch the latest translations from the cloud without waiting for an app update.\"],\"4VyuY3\":[\"确定要清除所有日志吗?\"],\"4WWqS3\":[\"展开/收起 JSON 树\"],\"4XAQdl\":[\"创建索引\"],\"4cEClj\":[\"会话\"],\"4cmfYp\":[\"复制行\"],\"4hsr6d\":[\"创建视图\"],\"4lIZTB\":[\"前端开发依赖\"],\"4oYjvJ\":[\"搜索查询…\"],\"4tMxW4\":[\"预览相关记录\"],\"4yJcjm\":[\"选择类型...\"],\"52O82A\":[\"非空\"],\"570t6W\":[\"关闭筛选面板 (ESC)\"],\"592-gw\":[\"自增\"],\"5FvuZv\":[\"分号 (;)\"],\"5GIUBn\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个事件\"]}]],\"5I2fxu\":[\"/path/to/id_rsa\"],\"5NZpX8\":[\"列表视图\"],\"5To6Z6\":[\"复制查询\"],\"5gqNQl\":[\"网格视图\"],\"5igIzr\":[\"导入已取消\"],\"5nTIup\":[\"正在编辑视图:\",[\"name\"]],\"5qIe8E\":[\"全部运行\"],\"66bEht\":[\"项目状态\"],\"6PIJVc\":[\"启动\"],\"6QvP0l\":[\"导出为 JSON\"],\"6W41Xq\":[\"任务管理器\"],\"6WngBH\":[\"设为 NULL\"],\"6YtxFj\":[\"名称\"],\"6_dCYd\":[\"概览\"],\"6dOBsk\":[\"创建视图\"],\"6gvoHP\":[\"复制错误信息\"],\"6oCVzX\":[\"Kubernetes 上下文为必填项\"],\"6wQO0f\":[\"显示数据\"],\"6z9W13\":[\"重启\"],\"71agNy\":[\"使用 AI 为未命名单元格生成名称\"],\"74J3FG\":[\"初始版本\"],\"75BWdo\":[\"Failed to load trigger definition: \"],\"76d3Uz\":[\"Events\"],\"76gPWk\":[\"知道了\"],\"77nSMU\":[\"删除全部 AI 活动历史?此操作不可撤销。\"],\"7ABmyQ\":[\"重试\"],\"7Ap0JP\":[[\"activeFilterCount\"],\" / \",[\"0\"],\" 已激活\"],\"7E864M\":[\"数据库类型\"],\"7FqaG1\":[\"自定义 AI EXPLAIN 计划分析的指令。使用 \",[\"LANGUAGE\"],\" 作为输出语言的占位符。\"],\"7L01XJ\":[\"Actions\"],\"7Mc-KL\":[\"检测到混合类型,默认为 TEXT\"],\"7RSQQd\":[\"在密钥链中保存密码\"],\"7VpPHA\":[\"确认\"],\"7e7bPs\":[\"Trigger Body (SQL)\"],\"7eRaA9\":[\"Drop Trigger\"],\"7l15X4\":[\"失败\"],\"7sMeHQ\":[\"键\"],\"7sNhEz\":[\"用户名\"],\"7tATh2\":[\"运行查询\"],\"7yb4gk\":[\"失败:\"],\"8-4V8D\":[\"表\"],\"82G-l5\":[\"模型上下文协议 (MCP) 允许 AI 助手(如 Claude)连接到您的本地工具。Tabularis 暴露了一个 MCP 服务器,让 AI 可以安全地读取数据库模式并执行查询。\"],\"83VjWE\":[\"新建笔记本\"],\"86IgoU\":[\"运行查询(编辑器中)\"],\"86fCgf\":[\"自定义 AI 查询结果标签页名称生成的指令。SQL 查询作为用户消息发送。\"],\"87a_t_\":[\"标签\"],\"87kWsr\":[\"导出连接\"],\"8CWirf\":[\"MCP 服务器\"],\"8S8aIX\":[\"Connection Health Check\"],\"8TMaZI\":[\"时间戳\"],\"8Tg_JR\":[\"自定义\"],\"8UFKYr\":[\"选择要执行的查询\"],\"8VKSGV\":[\"生成 SQL\"],\"8Wjy6z\":[\"关闭左侧标签\"],\"8ZsakT\":[\"密码\"],\"8_brI5\":[\"Name is required\"],\"8aYr-m\":[\"SQL Editor\"],\"8bRgTe\":[\"未配置 AI 提供商。请前往 设置 > AI。\"],\"8c_W0h\":[\"旧版本\"],\"8guEQP\":[\"刷新视图\"],\"8lm5qE\":[\"SQLite 的 EXPLAIN QUERY PLAN 很轻量,主要用于展示结构。\"],\"8q_sOc\":[\"移除\"],\"8t-akp\":[\"前 \",[\"MAX_PREVIEW_ROWS\"],\" 行\"],\"8y-ljb\":[\"Toggle inline text editor\"],\"8zfThY\":[\"连接名称\"],\"91gnWY\":[\"导出日志\"],\"91rtHL\":[\"创建新视图\"],\"92hf9a\":[\"Clear\"],\"93KA8w\":[\"新建分组\"],\"9DOfTQ\":[\"Editing trigger: \",[\"name\"]],\"9JdjEN\":[\"视图更新成功\"],\"9NzDFn\":[\"应用程序启动时显示欢迎屏幕。\"],\"9OoUS3\":[\"创建新的 SSH 连接\"],\"9QGRD5\":[\"目标列\"],\"9QTny9\":[\"查询失败。\"],\"9S-fyV\":[\"预先执行计划\"],\"9SJ_Sx\":[\"系统资源\"],\"9UQ730\":[\"克隆\"],\"9X6cky\":[\"否\"],\"9XUV5V\":[\"剪贴板中没有数据\"],\"9hGjL2\":[\"创建索引\"],\"9mMU1R\":[\"时间\"],\"9mvFo_\":[\"时间\"],\"9npOH9\":[\"打开文件\"],\"9uI_rE\":[\"撤销\"],\"9xUjzm\":[\"全选\"],\"9y_02p\":[\"与社区聊天、获取帮助、建议功能\"],\"A1pPcI\":[\"SSH 主机\"],\"A1taO8\":[\"搜索\"],\"A6C0pv\":[\"总成本\"],\"A7WG0p\":[\"插件已禁用\"],\"A7yRz3\":[\"视图定义是必需的\"],\"A9Uyp6\":[\"导入失败:\"],\"ABEd-z\":[\"使用您的包管理器更新 Tabularis。\"],\"AMdgKV\":[\"执行计划分析提示词\"],\"ANSTMe\":[\"当前执行计划摘要中未检测到明显问题。\"],\"ANzIr7\":[\"查询历史\"],\"AOnaU7\":[\"已跳过\"],\"AVlZoM\":[\"环境变量\"],\"AXTVsE\":[\"完全验证\"],\"AXdRYR\":[\"当前日志数\"],\"Aa-YkQ\":[\"导出笔记本\"],\"Ai2U7L\":[\"主机\"],\"AidayG\":[\"按级别筛选\"],\"AlPiMN\":[\"点击跳转到页面\"],\"An-1rA\":[\"返回的行数\"],\"AnV8j-\":[\"修改列\"],\"AvEr_L\":[\"新建控制台\"],\"AvYbUL\":[\"在 GitHub 上 Star\"],\"Aw_eOs\":[\"需要 Tabularis ≥ \",[\"minVersion\"]],\"AxPAXW\":[\"No results found\"],\"B0mJGb\":[\"原始输出\"],\"B1c58n\":[\"修改列\"],\"B3toQF\":[\"对象\"],\"B5nKny\":[\"/absolute/path/to/folder\"],\"B5xevr\":[\"连接名称为必填项\"],\"BAVvWJ\":[\"ER 图\"],\"BBtVak\":[\"全部折叠\"],\"BEVzjL\":[\"导入失败\"],\"BHATjK\":[\"导出连接\"],\"BJe2lZ\":[\"切换侧边栏\"],\"BK3WCj\":[\"加载注册表失败\"],\"BKbO3i\":[\"编辑了笔记本\"],\"BMB51y\":[\"在控制台中运行\"],\"BNW_Z4\":[\"例如:active_users, order_summary\"],\"BPkXj7\":[\"创建外键\"],\"BUO_JN\":[\"复制查询\"],\"BYkhHY\":[\"启动时检查更新\"],\"BeSg6-\":[\"在内存中收集应用日志以进行调试\"],\"BgAyQH\":[\"清除排序\"],\"BinTJI\":[\"npm 生态\"],\"BkFson\":[\"自动分页\"],\"Bpglf1\":[\"上移\"],\"BrGo6h\":[\"搜索笔记本\"],\"BxiAN_\":[\"删除查询\"],\"C6XQ5D\":[\"Search icons…\"],\"CCE-mP\":[\"前端依赖\"],\"CE-M2e\":[\"信息\"],\"CHIyL8\":[\"无筛选器 —\"],\"CJnUoU\":[\"Refresh Triggers\"],\"CLWWRV\":[\"下载中...\"],\"CUxwxn\":[\"显示所有表\"],\"CWMXbw\":[\"将强制停止其进程。使用此插件的任何活动数据库连接将停止工作,直到插件重新启动。\"],\"CZt6BX\":[\"手动配置\"],\"Ca8ixZ\":[\"删除\"],\"CbJBQS\":[\"更新失败:\"],\"Cdz-YU\":[\"Stacked view\"],\"CpeQf9\":[\"循环\"],\"D2wXBw\":[\"自增\"],\"D6Ql0c\":[\"选择用于生成和解释的模型。\"],\"DB8zMK\":[\"应用\"],\"DDXf5E\":[\"SQL 函数\"],\"DEwnwi\":[\"删除\"],\"DNTvdl\":[\"在编辑器中打开\"],\"DPc2P9\":[\"删除单元格\"],\"DUY8Ba\":[\"重大变更\"],\"DVnBSM\":[\"Line Height\"],\"Dd7YLj\":[\"稍后再说\"],\"Deej3j\":[\"JSON 格式错误\"],\"DfKhk_\":[\"更新\"],\"DiRiTz\":[\"打开包页面\"],\"DlRHAD\":[\"正在执行 EXPLAIN...\"],\"DsDwR-\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个错误\"]}]],\"Dvdihe\":[\"在 \",[\"0\"],\" 上 — 请审核后再执行。\"],\"DzFLzw\":[\"是\"],\"E-JUtQ\":[\"审批门\"],\"E0kcnZ\":[\"基本信息\"],\"E2mje_\":[\"Select Query to Explain\"],\"EDieyg\":[\"确定要删除此 SSH 连接吗?\"],\"EHZxPj\":[\"展开\"],\"EL4oDO\":[\"有新版本可用\"],\"EPi4gT\":[\"按 \",[\"field\"],\" 排序\"],\"EWPtMO\":[\"代码\"],\"EWX0mQ\":[\"未分组\"],\"E_QGRL\":[\"Disabled\"],\"Ef7StM\":[\"未知\"],\"EhADgB\":[\"删除列\"],\"EkH9pt\":[\"UPDATE\"],\"Ekblrc\":[\"已是最新版本\"],\"Em6JFd\":[\"统计行数\"],\"EnGiqG\":[[\"0\"],\" 个元素\"],\"Ew1n5z\":[\"搜索插件…\"],\"F18WP3\":[\"参数\"],\"F3uc1x\":[\"导出的文件将包含您的数据库和 SSH 明文密码。请妥善保管该文件。\"],\"F4UTAG\":[[\"rowCount\",\"plural\",{\"one\":[\"#\",\" 行\"],\"other\":[\"#\",\" 行\"]}]],\"F6pfE9\":[\"活动\"],\"F8tXg7\":[\"数据预览\"],\"F9-6yK\":[\"默认复制格式\"],\"F9lxfG\":[\"移除\"],\"F9nsa2\":[\"历史文件已损坏并被移至备份。新的查询将正常记录。备份文件:\"],\"FF_oap\":[\"默认值\"],\"FK8rlP\":[\"尚未配置 SSH 连接\"],\"FMRcH8\":[\"第一行作为标题\"],\"FNvDMc\":[\"本周\"],\"FQe1FI\":[\"预估行数\"],\"FSbpS7\":[\"CPU\"],\"FVVJhm\":[\"警告\"],\"FZg3wM\":[\"操作\"],\"Fa_cky\":[\"模式:\",[\"tableName\"]],\"FpEL5o\":[\"Choose an independent theme for the SQL editor, or keep it in sync with the app theme.\"],\"FsvZQL\":[\"编辑了单元格 \",[\"n\"]],\"FtwKL9\":[\"切换标签\"],\"FznI3z\":[\"删除外键 \\\"\",[\"name\"],\"\\\"?\"],\"G6W8j1\":[\"预览失败:\"],\"G8Q5Zq\":[\"命名空间为必填项\"],\"GAohqx\":[\"删除列\"],\"GJR99u\":[\"删除列失败:\"],\"GKfzzM\":[\"选择连接...\"],\"GS-Mus\":[\"导出\"],\"GUaLUq\":[\"加载模式失败:\"],\"GXP-Iw\":[\"添加 SQL 单元格\"],\"Gj1mLb\":[\"重新排序单元格\"],\"GlbqG2\":[\"重置为驱动默认\"],\"Gq1YzP\":[\"事件数\"],\"Gs5AlY\":[\"打开\"],\"GtmO8_\":[\"从\"],\"GxkJXS\":[\"上传中...\"],\"H-o4D2\":[\"创建新列\"],\"H2B-KW\":[\"选择使用 Ctrl+C / Cmd+C 复制行时的默认格式。\"],\"H3oH0g\":[\"重做\"],\"H7mlCc\":[\"/absolute/path/to/db.sqlite\"],\"H86f9p\":[\"收起\"],\"H9HlDe\":[\"minutes\"],\"H9P8CD\":[\"添加第一个筛选器\"],\"HAQlGl\":[\"AI 活动\"],\"HKNZrs\":[\"索引条件\"],\"HKVXRn\":[[\"deleteRowCount\",\"plural\",{\"one\":[\"删除 \",\"#\",\" 行\"],\"other\":[\"删除 \",\"#\",\" 行\"]}]],\"HPuCiP\":[\"文件夹路径\"],\"HUs1R3\":[\"此连接无打开的标签。\"],\"HV4Isp\":[\"输入 SSH 密码\"],\"HVC8Hh\":[\"已复制到剪贴板\"],\"HWEpq8\":[\"磁盘写入/s\"],\"HY4nP5\":[\"内联\"],\"HcmoWv\":[\"保存视图失败:\"],\"He8v1Y\":[\"从全部应用中取消选择\"],\"HehHP1\":[\"默认布局\"],\"HilYn4\":[\"此笔记本为空。添加一个单元格以开始。\"],\"HjxVK_\":[\"快速连接测试\"],\"HmMnRx\":[\"WKT 模式\"],\"HoKCiI\":[\"安装后应用将自动重启\"],\"HpK_8d\":[\"重新加载\"],\"Hpi4Jm\":[\"立即加入\"],\"HuA3RU\":[\"制表符\"],\"I128p7\":[\"管道符 (|)\"],\"I3AgqA\":[\"配置内联 SSH\"],\"I5VBsr\":[\"Same as App\"],\"I8yrPb\":[\"替换表\"],\"I92BdB\":[\"从分组中移除\"],\"I92fr4\":[\"稍后提醒我\"],\"I99Miw\":[\"成本\"],\"IETZIR\":[\"编辑单元格名称\"],\"IG9wzA\":[\"插入行失败:\"],\"ILleOG\":[\"资源类型必须为 \\\"service\\\" 或 \\\"pod\\\"\"],\"IQ3gAw\":[\"上传文件\"],\"IUwGEM\":[\"保存更改\"],\"IUwmLq\":[\"直接依赖声明于 package.json 和 src-tauri/Cargo.toml。\"],\"IVrBTT\":[\"开源库\"],\"I_43p6\":[\"安全\"],\"Iaizf4\":[\"外观\"],\"Il3FBB\":[\"切换结构化筛选面板\"],\"IniZRK\":[\"下载不可用 - 仅加载了预览\"],\"Isaozb\":[\"查看并调整\"],\"J17_9Z\":[\"Failed to save trigger: \"],\"J2Cb95\":[\"通过此插件的活动查询和连接将被中断。\"],\"J6v1s_\":[\"默认模型\"],\"JE-DVk\":[\"解释器\"],\"JEGlfK\":[\"开始时间\"],\"JKDPqP\":[\"请先选择上下文\"],\"JLLOmc\":[\"No preview\"],\"JOQPl0\":[\"使用 SSH 隧道\"],\"JRz8tw\":[\"MySQL 和 MariaDB 仅在支持的 EXPLAIN ANALYZE 或 ANALYZE FORMAT 变体中提供实际指标。\"],\"JUICth\":[\"PNG、JPG、WebP 或 SVG · 最大 512 KB\"],\"JY5Oyv\":[\"数据库\"],\"JlFRIB\":[\"连接建立后发送给 MySQL 的会话时区。\"],\"JrOEip\":[\"Preview\"],\"JsY1p5\":[\"已拒绝\"],\"K3H9p5\":[\"取消设置\"],\"K5Dgu_\":[\"数据库\"],\"K8IGKf\":[\"认证类型\"],\"KAYNSW\":[\"在内存中保留的日志数量(1-10000)\"],\"KHTGbr\":[\"预先 EXPLAIN\"],\"KHvda8\":[\"非空\"],\"KJKNaZ\":[\"复制为 `列`\"],\"KM5Kc8\":[\"必须选择至少一列\"],\"KSCnVQ\":[\"类型\"],\"KUjOb9\":[\"运行中\"],\"KXBdwy\":[\"刷新存储过程\"],\"KXNyX7\":[\"设为 DEFAULT\"],\"Kd70-v\":[\"从剪贴板导入...\"],\"KhI4oS\":[\"在 \",[\"0\"],\" 中打开引用的行\"],\"KhgrNu\":[\"MCP 服务器集成\"],\"KirERL\":[\"超时\"],\"KqZ83Y\":[\"Clear\"],\"KtLirC\":[\"删除索引失败:\"],\"KzeARD\":[\"删除表失败:\"],\"L-rMC9\":[\"重置为默认\"],\"L3HXkQ\":[\"错误修复\"],\"LCZ7Dy\":[\"复制名称\"],\"LFDf6p\":[\"Create a new database trigger\"],\"LK1m4W\":[\"索引\"],\"LMeAoR\":[\"行\"],\"LPCdc-\":[\"查询标签页名称提示词\"],\"LPFmga\":[\"选择用于全部应用\"],\"LYzbQ2\":[\"工具\"],\"Lbis_V\":[\"快速导航\"],\"Lcpbe2\":[\"无法启动插件进程。请参阅下面的错误详细信息。\"],\"LhUHHO\":[\"Generated SQL Preview\"],\"LihabZ\":[\"EXPLAIN 仅支持 DML 语句(SELECT、INSERT、UPDATE、DELETE)。DDL 语句(如 CREATE、DROP、ALTER)无法进行分析。\"],\"LnT0hQ\":[\"添加列\"],\"LvutiO\":[\"AI 建议\"],\"M-rHQO\":[\"退出全屏\"],\"M0XJba\":[\"确定要清除此连接的所有查询历史吗?\"],\"M1co_O\":[\"已配置\"],\"M73whl\":[\"上下文\"],\"MDa5o0\":[\"e.g. before_insert_user\"],\"MImSf3\":[\"Selected emoji\"],\"MWB7fV\":[\"显示全部\"],\"MXdOwj\":[\"分离连接\"],\"MZ4T5z\":[\"主键\"],\"MZX6eL\":[\"选择 K8s 连接\"],\"Mc1tjS\":[\"启用 ANALYZE 后可查看实际行数、耗时、循环次数和缓冲区信息。\"],\"Mm4p0T\":[\"还有 \",[\"0\"],\" 行\"],\"Mp0jQ_\":[\"此驱动程序仅在表创建时支持主键\"],\"MqpZwN\":[\"Tabularis 进程\"],\"MxIx43\":[\"↑↓ 导航,Enter 打开\"],\"MygtgQ\":[\"添加 Markdown 单元格\"],\"N40H-G\":[\"全部\"],\"N5UQxq\":[\"未在端口 \",[\"0\"],\" 上检测到 Ollama。是否正在运行?\"],\"N6GBcC\":[\"确认删除\"],\"N6aqHp\":[\"执行查询数\"],\"N9_S15\":[\"将创建一个新表\"],\"NBdMa1\":[\"最慢步骤\"],\"NC2AI2\":[\"长度\"],\"NCzNnx\":[\"升序排列\"],\"NT4Ubs\":[\"删除自定义密钥并恢复到环境变量(如果有)\"],\"NUjrCO\":[\"没有匹配的收藏\"],\"NWJrXh\":[\"Trigger SQL is required\"],\"NZUDnP\":[\"树总计:\",[\"0\"]],\"Nc2VQn\":[\"追加到现有表\"],\"NgFERn\":[\"添加到收藏\"],\"NktMHG\":[\"数据库名称\"],\"NmaGHf\":[\"No icons match.\"],\"NnH3pK\":[\"测试\"],\"Nq5QTk\":[\"explain Nth\"],\"O2STgu\":[\"导出失败:\"],\"O8SV8O\":[\"下载中...\"],\"O9_WW6\":[\"连接\"],\"OGEsKj\":[\"运行所有单元格\"],\"OGWdBg\":[\"视图名称\"],\"OHqT6w\":[\"按下组合键...\"],\"OXJsaG\":[\"参数名称无效\"],\"OfhWJH\":[\"重置\"],\"OlAl5i\":[\"Expand all\"],\"Osn70z\":[\"调试\"],\"Ou8b_n\":[\"加入 Discord\"],\"P1YGsb\":[\"SQL 生成\"],\"P2m1xb\":[\"出错时停止\"],\"P3Qlys\":[\"无连接 ID\"],\"P6Y3Yf\":[\"在终端中运行此命令,然后重启 Claude Code。\"],\"PCdj-c\":[\"取消全选\"],\"PMnFt9\":[\"磁盘读取/s\"],\"PQU2Va\":[\"Accept Suggestion with Enter\"],\"PRnH8G\":[\"共 \",[\"0\"]],\"PY8UF3\":[\"切换了并行(单元格 \",[\"n\"],\")\"],\"PiH3UR\":[\"已复制!\"],\"Pia95d\":[\"列名称是必需的\"],\"PrElXQ\":[\"更新\"],\"PrixCC\":[\"行将追加到现有表\"],\"Pujgbb\":[\"配置目标\"],\"Pw_eQV\":[\"插件启动失败\"],\"Q2fWEn\":[\"Export JSON\"],\"Q3p-J5\":[\"无已保存查询\"],\"Q4WUjR\":[\"Search emoji…\"],\"Q50vQm\":[\"无子进程\"],\"QCxMC0\":[\"应用启动时自动检查新版本\"],\"QEazml\":[\"删除所选\"],\"QHcLEN\":[\"已连接\"],\"QLHHFO\":[\"只读模式\"],\"QOvAW3\":[\"新功能\"],\"QULGRi\":[\"未找到有效查询\"],\"QZwllF\":[\"浏览...\"],\"QbkSr_\":[\"此查询无法 EXPLAIN。\"],\"QeHFYZ\":[\"EXPLAIN 失败: \",[\"0\"]],\"Qll2Tb\":[\"降序\"],\"Qoq-GP\":[\"了解更多\"],\"Qu4Hog\":[\"笔记本导入成功\"],\"R-A2Vd\":[\"无数据显示\"],\"R0Hkb2\":[\"已选择 \",[\"0\"],\" 个数据库\"],\"R1nHhB\":[\"已存在\"],\"R2Iz3m\":[\"Trigger Name\"],\"R6oBUl\":[\"转换为控制台\"],\"R9Khdg\":[\"自动\"],\"RDjuBN\":[\"设置\"],\"RF-HyV\":[\"选择您的首选语言。自动\\\"将使用您的系统语言。\"],\"RGhYAo\":[\"内存\"],\"RGpZyz\":[\"复制名称\"],\"RI-HZc\":[\"输入 \",[\"0\"],\" 密钥\"],\"RJrE17\":[\"确定要删除视图 \\\"\",[\"0\"],\"\\\" 吗?\"],\"RU6gaj\":[\"Showing \",[\"RESULT_LIMIT\"],\" of \",[\"0\"],\" — refine search to narrow down.\"],\"RWv3_R\":[\"一个 Star 可以帮助其他人发现这个项目\"],\"Rb3Tdm\":[\"笔记本名称\"],\"RcbKJ3\":[\"更新时\"],\"RkefFq\":[\"在显示审批模态之前运行 EXPLAIN,以便用户查看执行计划。\"],\"RnF_hl\":[\"加载插件注册表...\"],\"Rns7_C\":[\"此操作无法立即撤销\"],\"RoKRqW\":[\"可用插件\"],\"RphpKk\":[\"外观\"],\"Rt8sHM\":[\"检测到排序或临时操作\"],\"RuSW0a\":[\"Timezone used to display timestamps and exports. 'Auto' follows your system timezone.\"],\"RxzN1M\":[\"已启用\"],\"S1veKH\":[\"还原选中\"],\"S5zeZU\":[\"切换预览\"],\"S8Yqbl\":[\"插入\"],\"SDND4q\":[\"未配置\"],\"SJRy3D\":[\"(自动生成)\"],\"SSwIjo\":[\"设为空\"],\"SgvA_r\":[\"按运行(Ctrl/Command+F5)加载表数据\"],\"SlfejT\":[\"错误\"],\"SoATkx\":[\"复制单元格\"],\"T3bXxK\":[\"Service\"],\"T3juzf\":[\"端点 URL\"],\"T7w5CQ\":[\"创建新行失败:\"],\"T9947j\":[\"值(例如 'text' 或 123)\"],\"TCizFv\":[\"Search timezones...\"],\"TI33l7\":[\"切换到垂直布局\"],\"TK5oex\":[\"保存提示词\"],\"TKQ7K-\":[\"安装\"],\"TKZreP\":[\"要求\"],\"TMLAx2\":[\"必需\"],\"TO08JI\":[\"外键\"],\"TVKqvO\":[\"编辑行\"],\"TYSdQ3\":[\"执行 SELECT 查询\"],\"TfDFHS\":[\"Wrap long lines in the editor instead of scrolling horizontally.\"],\"Tibfjs\":[\"没有已保存的连接 — 在下方创建一个\"],\"Tj36Dr\":[\"重置为默认\"],\"Tjg925\":[\"Loading trigger definition...\"],\"TlZ7Ul\":[\"锁定查询\"],\"TpwXyg\":[\"如果缺少耗时信息,服务器很可能返回的是仅估算的计划。\"],\"Tw2M1h\":[\"安装失败\"],\"Ty-rm9\":[\"SSH 连接\"],\"Tz0i8g\":[\"设置\"],\"TzPZ8X\":[\"ST_GeomFromText('POINT(30 40)', 4326)\"],\"U3zIqy\":[\"Kubernetes 连接\"],\"U4uzyV\":[\"新功能\"],\"U8W7sX\":[\"Failed to get trigger definition: \"],\"UB112k\":[\"当单元格失败时停止执行\"],\"UCQiqt\":[\"on \",[\"0\"]],\"UECR2b\":[[\"0\"],\" 在 \",[\"1\"],\" 上 — 请审核后再执行。\"],\"UI85PB\":[\"No triggers match your filter\"],\"UNKlAy\":[[\"clientName\"],\" 的配置安装成功!重启应用以应用更改。\"],\"URmyfc\":[\"详情\"],\"UWQBvp\":[\"生成 SQL 模板\"],\"UawTKZ\":[\"可选。指定用于运行此插件的可执行文件(例如 macOS/Linux 上的 python3,Windows 上的 python 或完整路径)。留空使用默认值。\"],\"Ub8sf5\":[\"SQLite 不支持通过 ALTER TABLE 删除外键。\"],\"UbbJ8j\":[\"未找到选项\"],\"Ubs68g\":[\"General\"],\"UftN8J\":[\"这些连接将拒绝来自 MCP 的写入。其他连接行为不变。\"],\"UnQNah\":[\"确定要从表 \\\"\",[\"tableName\"],\"\\\" 中删除列 \\\"\",[\"0\"],\"\\\" 吗?\\n\\n警告:这将永久删除此列中的所有数据。此操作无法撤销。\"],\"UncTTh\":[\"整个进程树的 RSS 总和 — 可能重复计算共享内存\"],\"UpjgFm\":[\"更改了参数\"],\"UsAnu1\":[\"ANALYZE 会实际执行查询。对数据修改语句请谨慎使用。\"],\"UxKoFf\":[\"导航\"],\"Uy4iQO\":[\"Side by side\"],\"UzFX5x\":[\"Tab Size\"],\"UzWGWO\":[\"切换到 SQL WHERE 输入\"],\"V-chk5\":[\"How often to check if active connections are still alive. Set to 0 to disable.\"],\"V-pw1j\":[\"表名\"],\"V2T0Uw\":[\"暂无已保存的笔记本。\"],\"V3aNwx\":[\"数据编辑器\"],\"VGYp2r\":[\"应用到全部\"],\"VH8S7x\":[\"剪贴板列\"],\"VIAEcS\":[\"加载数据库失败。请检查您的凭据。\"],\"VKdztF\":[\"追加行\"],\"VLiHXI\":[\"分析数据\"],\"VMbmXc\":[\"确定要移除 \\\"\",[\"pluginName\"],\"\\\" 吗?这将删除插件文件。\"],\"VO3weF\":[\"未加载文件\"],\"VOZlKc\":[\"导入数据库\"],\"VPzsIz\":[\"正在生成名称...\"],\"VUul0v\":[\"终止\"],\"VW0GVQ\":[\"Click another emoji below to change.\"],\"VcFuiX\":[\"Failed to drop trigger: \"],\"VfOb_W\":[\"No triggers found\"],\"Vgy9LX\":[\"所有查询\"],\"Vi2Pqx\":[\"作者\"],\"Vl2zn2\":[\"已停止\"],\"Vo4uBA\":[\"安装插件时发生错误。请参阅下面的详细信息。\"],\"VqqyOs\":[\"执行查询以查看结果\"],\"VzhDFh\":[\"通过 MCP 阻止任何非 SELECT 语句,除非连接被显式允许。\"],\"W3uwpT\":[\"关闭所有标签\"],\"W4MKLh\":[\"例如:在生产环境中风险较大,请确认…\"],\"W60eXm\":[\"表\"],\"WA8RND\":[\"确定要删除表 \\\"\",[\"0\"],\"\\\" 吗?\"],\"WG8Qgt\":[\"删除表\"],\"WLnvCZ\":[\"输入用户名\"],\"WM-__8\":[\"搜索连接...\"],\"WQKYh8\":[[\"0\",\"plural\",{\"one\":[\"已将 \",\"#\",\" 行导入到 \\\"\",[\"tableName\"],\"\\\"\"],\"other\":[\"已将 \",\"#\",\" 行导入到 \\\"\",[\"tableName\"],\"\\\"\"]}]],\"WTfntM\":[\"确定要删除查询 \\\"\",[\"0\"],\"\\\" 吗?\"],\"WarTN_\":[\"成功\"],\"WcF1uL\":[\"分组名称\"],\"Weq9zb\":[\"通用\"],\"WmPpB1\":[\"正在加载执行计划…\"],\"Wu7cK0\":[\"未找到数据库\"],\"WvoUQF\":[\"删除了单元格 \",[\"n\"]],\"Ww3pDD\":[\"手动命令\"],\"X-20AU\":[\"输入查询标签页名称提示词...\"],\"X-U6_w\":[\"字体\"],\"X5fs0g\":[\"创建您的第一个连接以开始使用。\"],\"X7Ayjp\":[\"密码已保存到系统密钥链\"],\"X9kySA\":[\"收藏\"],\"XJOV1Y\":[\"活动\"],\"XMCLEL\":[\"Create New Trigger\"],\"XN_sSd\":[\"Automatic updates\"],\"XNi_U4\":[\"DDL\"],\"XSq453\":[\"查询解释\"],\"XVF2Pf\":[\"编辑模式\"],\"XW6OYF\":[\"此插件可能需要解释器(如 Python)。使用插件设置配置解释器路径。\"],\"XZB6Xr\":[\"最大日志条目数\"],\"Xcffv2\":[\"在编辑器中显示 AI 辅助和解释按钮\"],\"XeqTSh\":[\"连接类型\"],\"XmJfZT\":[\"名称\"],\"XoQfG1\":[\"SSH 用户\"],\"XwI0Vw\":[\"自动(系统)\"],\"XyDlLX\":[\"索引名称\"],\"Y2P2aK\":[\"选择要加载的模式:\"],\"Y8HYw2\":[\"值\"],\"Y8zX3R\":[\"插入到编辑器\"],\"YDEtn8\":[\"General\"],\"YIix5Y\":[\"搜索...\"],\"YWlnMZ\":[\"Ollama 端口\"],\"YYdC3A\":[\"版本 \",[\"0\"]],\"YYn8b5\":[\"浏览并安装注册表中的插件。\"],\"Y_3yKT\":[\"在新标签中打开\"],\"YiAQ_Q\":[\"刷新表\"],\"Ysjr9Y\":[\"SQL 预览\"],\"YswNf7\":[\"所有级别\"],\"YtNwr6\":[\"每个连接存储的查询历史最大条目数。\"],\"YuPKaQ\":[\"Preferred\"],\"Z3FXyt\":[\"加载中...\"],\"Z7ZXbT\":[\"批准\"],\"Z8JpBH\":[\"导出为 Notebook\"],\"Z8fBIc\":[\"实际行数高于估算\"],\"ZC2VJP\":[\"执行\"],\"ZCIS4k\":[\"无激活筛选器\"],\"ZF1_UT\":[\"SSL 模式\"],\"ZGjBPa\":[\"清除日志\"],\"ZHQTlM\":[\"从以下文件导入\"],\"ZIFDoJ\":[\"请至少选择结构或数据\"],\"ZIZA6o\":[\"批准前编辑\"],\"ZUKAja\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 条解析警告\"],\"other\":[\"#\",\" 条解析警告\"]}]],\"ZVn8p2\":[\"Display line numbers in the editor gutter.\"],\"ZYnwzF\":[\"已断开\"],\"Za3_fO\":[\"错误\"],\"ZcOxO1\":[\"创建外键\"],\"Zf7LHg\":[\"未找到上下文(是否已安装 kubectl?)\"],\"Zfotp5\":[\"估算与实际差距过大通常意味着统计信息过旧,或存在规划器难以建模的谓词。\"],\"ZiFjhs\":[\"SELECT *\"],\"ZpzHz0\":[\"加载模式失败\"],\"ZqXGPF\":[\"删除视图失败:\"],\"ZuL73E\":[\"创建新的数据库视图\"],\"_-bi4r\":[\"引用表\"],\"_AEYGI\":[\"暂无执行历史\"],\"_FdpZc\":[\"加载视图定义失败:\"],\"_FxSdi\":[\"查看应用、后端和工具链直接使用的开源依赖。\"],\"_JyTG8\":[\"输入解释提示词...\"],\"_Ltc_k\":[\"其他\"],\"_Q2Wix\":[\"行\"],\"_TK1zF\":[\"已保存的连接\"],\"_bJFBE\":[\"连接超时\"],\"_bodH4\":[\"Alter View\"],\"_dCWE0\":[\"树形\"],\"_dqduX\":[\"下一页\"],\"_fwE6J\":[\"更早\"],\"_n04sB\":[\"终止\"],\"_otxbQ\":[\"密钥文件\"],\"_pezIT\":[\"连接到 \",[\"0\"],\" 失败。请检查您的设置或确保数据库正在运行。\"],\"_srfkj\":[\"自定义密钥删除成功\"],\"_t6aFo\":[\"MySQL 和 MariaDB 会根据服务器版本回退到 EXPLAIN FORMAT=JSON 或表格版 EXPLAIN。\"],\"_xTbaM\":[\"列\"],\"_yxaaL\":[\"唯一索引\"],\"a-MXf3\":[\"Failed to move connection\"],\"a1Tkgq\":[\"Tabularis 是一个免费的开源项目。如果您觉得有用,请考虑支持该项目并与社区联系。\"],\"a9CASo\":[\"SQLite 仅支持重命名列。其他修改需要手动重建表。\"],\"aAIQg2\":[\"外观\"],\"aAURrV\":[\"已安装\"],\"aC_vCa\":[\"使用 AI 生成名称\"],\"aChLPZ\":[\"POINT(30 40)\"],\"aF4ZU_\":[\"选择节点查看详情\"],\"aHKcKc\":[\"上一页\"],\"aI-5wG\":[\"验证 CA\"],\"aJJySV\":[\"e.g. users\"],\"aQ8swY\":[\"默认值\"],\"aScJP1\":[\"执行此查询\"],\"aVNbN8\":[\"筛选条件\"],\"aWhdMQ\":[\"使用现有 SSH 连接\"],\"aXYd8V\":[\"超时\"],\"aX_S_r\":[\"第 \",[\"0\"],\" 页,共 \",[\"totalPages\"],\" 页\"],\"agZcf8\":[\"生成的 SQL:\",[\"tableName\"]],\"ajqPzi\":[\"SELECT [字段]\"],\"alplHn\":[\"正在使用 AI 分析执行计划...\"],\"anBcU3\":[\"如果您喜欢 Tabularis 并希望看到更多功能,请考虑通过贡献代码、报告错误或 Star 项目来支持该项目。\"],\"arHmj2\":[\"确定要从历史中删除此查询吗?\"],\"arKcqW\":[\"较旧的服务器可能会回退到仅估算、指标更少的执行计划。\"],\"arcpYe\":[\"需要审批\"],\"aurEkh\":[\"加载进程中...\"],\"avtdsd\":[\"SQL 模式\"],\"az8lvo\":[\"关闭\"],\"b1Ah3z\":[\"聚焦于\"],\"b392Dr\":[\"全部展开\"],\"b5S_PU\":[\"数据库名称\"],\"bAvovP\":[\"下移\"],\"bH3JqY\":[\"未找到表\"],\"bP5JOn\":[\"Word Wrap\"],\"bcOdok\":[\"删除分组\"],\"bcqeas\":[\"将所有 MCP 查询设为只读\"],\"bmca5u\":[\"仅写入\"],\"bpCiBU\":[\"允许 MCP 写入\"],\"bqnhqW\":[\"估算高于实际行数\"],\"bspG20\":[\"Diff\"],\"bu5X4V\":[\"报错\"],\"bw22Gk\":[\"列结构\"],\"c1IX6l\":[\"Configure SSL/TLS for secure database connections (optional).\"],\"c6oKAO\":[\"关键问题\"],\"cFCKYZ\":[\"拒绝\"],\"cFGrCP\":[\"表\"],\"cGeFup\":[\"字体大小\"],\"cHtkp6\":[\"Verify Identity\"],\"cK1wvl\":[\"Connection String\"],\"cM1O6m\":[\"聚焦于表\"],\"cM9NHc\":[\"降级到\"],\"cO9-2L\":[\"禁用\"],\"cSev-j\":[\"筛选器\"],\"cTIuZt\":[[\"0\",\"plural\",{\"one\":[\"导入 \",\"#\",\" 行\"],\"other\":[\"导入 \",\"#\",\" 行\"]}]],\"c_xoSn\":[\"重命名了单元格 \",[\"n\"]],\"cd0XEW\":[\"保存查询\"],\"cnGeoo\":[\"DELETE\"],\"cwfPLH\":[\"分割组\"],\"cyFaZJ\":[\"Resize sidebar\"],\"czWItZ\":[[\"0\"],\" / \",[\"1\"],\" 语句\"],\"d34vwG\":[\"加载数据库\"],\"d6ynQ7\":[\"降序排列\"],\"d8_6_v\":[\"cancel\"],\"d8wc1_\":[\"示例值\"],\"dBXoCS\":[\"检测到环境变量,但您可以通过在上方设置密钥来覆盖它。\"],\"dD7NPy\":[\"大纲\"],\"dEgA5A\":[\"取消\"],\"dMtLDE\":[\"到\"],\"dPJVhW\":[\"安装失败\"],\"dQvGiF\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个会话\"]}]],\"dTUzKm\":[\"执行选中 (\",[\"0\"],\")\"],\"dU_iQN\":[\"没有会话匹配当前筛选条件。\"],\"dUh9QW\":[\"规划时间\"],\"dVoir2\":[\"添加了 Markdown 单元格 \",[\"n\"]],\"dZ0d2O\":[\"请至少选择一个表\"],\"dhi13U\":[\"选择图片…\"],\"dli1JX\":[\"提交更改\"],\"dmYV6f\":[\"存储过程\"],\"dohZCo\":[\"AI SQL 生成的指令。使用 \",[\"SCHEMA\"],\" 作为数据库结构的占位符。\"],\"dtxpK2\":[\"分析\"],\"dwW9nJ\":[\"Show Line Numbers\"],\"dwWVw_\":[\"显示欢迎屏幕\"],\"dxBa3Y\":[[\"0\",\"plural\",{\"one\":[\"#\",\" tab\"],\"other\":[\"#\",\" tabs\"]}]],\"dxxY9r\":[\"如果存在\"],\"dyN4j9\":[\"点击\\\"运行预览\\\"查看结果\"],\"e07Iz5\":[\"打开任务管理器\"],\"e0NzXu\":[\"此项目是正在进行的工作 (WIP)。核心功能已稳定,但我们有更大的计划。\"],\"e1UKxf\":[\"保存此查询\"],\"e34gdU\":[\"MCP 子进程等待用户决定的时间。\"],\"e62LQd\":[\"强制终止\"],\"e6QZsM\":[\"Editor Theme\"],\"e8CirT\":[\"运行查询\"],\"eD2kUP\":[\"缓冲区读取\"],\"eE0JZ4\":[\"版本\"],\"eIDch7\":[\"输入执行计划分析提示词...\"],\"eIVolo\":[\"磁盘 R/W\"],\"eJOEBy\":[\"导出中...\"],\"eKHY3W\":[\"插件设置\"],\"eMb6Ub\":[\"选择资源...\"],\"ePK91l\":[\"编辑\"],\"eXweu6\":[\"展开单元格\"],\"ecNsTE\":[\"没有匹配的查询\"],\"ecUA8p\":[\"今天\"],\"ecpIZP\":[\"如果加密请输入密钥密码\"],\"ejmeDY\":[\"已安装\"],\"esl-Tv\":[\"资源类型\"],\"exyUec\":[\"连接\"],\"f2AJjl\":[\"删除行\"],\"f4pD-j\":[\"连接测试失败\"],\"f7sXvi\":[\"输入密码\"],\"fAsxc0\":[\"顺序扫描\"],\"fIeFs0\":[\"选择值...\"],\"fJm92A\":[\"选择一个包含 EXPLAIN 计划(PostgreSQL JSON 或文本格式)的文件以进行可视化。\"],\"fOuPPd\":[\"插件\"],\"fXVIZq\":[\"数值\"],\"f_b1TA\":[\"执行历史\"],\"fghnqP\":[\"切换到连接 1–9\"],\"fjJHeP\":[\"Client Key\"],\"fkLtw5\":[\"逗号 (,)\"],\"fp711N\":[\"已阻止 (只读)\"],\"fpzyLj\":[\"第 \",[\"0\"],\" 页,共 \",[\"1\"],\" 页\"],\"fuA6oy\":[\"Socket 超时\"],\"fvImQM\":[\"已选 \",[\"0\"],\" 列\"],\"fwr_nh\":[\"安装扩展、管理插件驱动,并控制运行时设置。\"],\"g0ZzK4\":[\"JSON 格式正确\"],\"g11hAR\":[\"新建行\"],\"g8VcMm\":[\"我的 K8s 集群\"],\"gCFR_O\":[\"并行执行(全部运行)\"],\"gEjU98\":[\"打开连接\"],\"gPQ8z1\":[\"可为空\"],\"gShKPx\":[\"至少需要一列\"],\"gSuQrG\":[\"无匹配 \\\"\",[\"search\"],\"\\\" 的连接\"],\"gUypqb\":[\"重新执行查询\"],\"gZWMnn\":[\"AI 分析\"],\"ghYd73\":[\"选择目标...\"],\"giAqEC\":[\"创建新表\"],\"gnQS8X\":[\"MySQL 连接器使用的最大数据包大小。\"],\"gqV5VL\":[\"内置,不可自定义\"],\"gww_XE\":[\"引用列\"],\"gxXPJ9\":[\"配置解释器\"],\"gxutEv\":[\"Trigger updated successfully\"],\"gz6UQ3\":[\"最大化\"],\"h-XNc9\":[\"CSV 分隔符\"],\"h-kNAk\":[\"例如:销售数据\"],\"h3Z_aK\":[\"在此编写 Markdown...\"],\"h7MgpO\":[\"键盘快捷键\"],\"h7peZQ\":[\"允许\"],\"h8Hzk-\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个系统进程正在运行\"],\"other\":[\"#\",\" 个系统进程正在运行\"]}]],\"hEZrFh\":[\"运行 SQL 文件...\"],\"hEipgW\":[\"立即检查更新\"],\"hG89Ed\":[\"图片\"],\"hIHcBE\":[\"导出为 CSV\"],\"hItdtk\":[\"浏览文件夹\"],\"hXFVjo\":[\"表名称是必需的\"],\"hZ6znB\":[\"端口\"],\"h_huI6\":[\"重新运行\"],\"hbz1rh\":[\"键\"],\"hdsaJo\":[\"导入中...\"],\"he3ygx\":[\"复制\"],\"hfGimp\":[\"选择命名空间...\"],\"hjjSEi\":[\"只读连接\"],\"hjwN_s\":[\"资源名称\"],\"hlF1mD\":[\"复制选区\"],\"hnboBb\":[\"AI 执行计划分析\"],\"hnvu2p\":[\"错误详情\"],\"hq4-D2\":[\"API 密钥安全存储在您的系统密钥链中。在此设置密钥将覆盖环境变量。\"],\"hqjXdn\":[\"删除 SSH 连接失败\"],\"hqofAK\":[\"复制 SQL\"],\"hy6L14\":[\"在 GitHub 上查看\"],\"hyjACX\":[\"折叠/展开单元格\"],\"hz1b5W\":[\"未找到匹配的元素\"],\"i1vAVM\":[\"创建新表\"],\"i3S5T3\":[\"搜索收藏...\"],\"i4_LY_\":[\"写入\"],\"i5HBWh\":[\"查询历史已重置\"],\"i5zCt4\":[\"表格\"],\"iAVlge\":[\"自定义 AI Notebook 单元格名称生成的指令。单元格内容(SQL 或 Markdown)作为用户消息发送。\"],\"iE1yAB\":[\"筛选表...\"],\"iIdVrv\":[\"config.json\"],\"iSLIjg\":[\"连接\"],\"iSryJ2\":[\"我的 SSH 服务器\"],\"iT7UeX\":[\"添加索引\"],\"iUWwuR\":[\"下载并安装\"],\"ia7i08\":[\"请先选择上下文/命名空间/类型\"],\"ibepZK\":[\"Raw SQL\"],\"ibsqrm\":[\"Failed to delete group\"],\"idD8Ev\":[\"已保存\"],\"igcsfY\":[\"注册表中无可用插件。\"],\"ij-Elv\":[\"图片预览\"],\"ij76Ns\":[[\"0\",\"plural\",{\"one\":[\"#\",\" explainable query found\"],\"other\":[\"#\",\" explainable queries found\"]}]],\"ioL38P\":[\"实时监控插件进程、CPU、RAM 和磁盘使用情况\"],\"ixlL_e\":[\"SSH 密钥文件(可选)\"],\"iyN1Hh\":[\"Certificate paths are optional. Leave empty to use system defaults.\"],\"iyoCCY\":[\"选择一个模型\"],\"j3gyYH\":[\"全部应用\"],\"j5CWO4\":[\"已是最新\"],\"j9HPuI\":[\"行 #\",[\"0\"]],\"jBtpMP\":[\"所有状态\"],\"jEu4bB\":[\"列\"],\"jEyQIs\":[\"未找到存储过程\"],\"jHc1By\":[\"删除视图\"],\"jI6sj4\":[\"与 PostgreSQL 和 MySQL 相比,成本、耗时和行数估算通常不可用。\"],\"jIxQCZ\":[\"您的平台不可用\"],\"jKIncn\":[\"数据库名称是必需的\"],\"jPSk57\":[\"理由 (可选)\"],\"jUNY_d\":[\"视图\"],\"jVqjDo\":[\"无效的笔记本文件格式\"],\"jWSZ-A\":[\"仅预览 - 未加载完整数据\"],\"jgjIDU\":[\"Failed to drop existing trigger: \"],\"jnhuWy\":[\"Socket 超时时间,单位为毫秒。\"],\"jpeU_Z\":[\"笔记本\"],\"jpgB4Y\":[\"连接名称是必需的\"],\"jsQZMk\":[\"AI\"],\"juO8wz\":[\"子进程\"],\"jx0t66\":[\"折叠子进程\"],\"k-0mL-\":[\"添加列\"],\"k-XiMX\":[\"原始\"],\"k2UnVy\":[\"哈希条件\"],\"k5UUX3\":[\"Trigger created successfully\"],\"kALwhk\":[\"seconds\"],\"kBiBq7\":[\"删除索引 \\\"\",[\"name\"],\"\\\"?\"],\"kEYasw\":[\"显示/隐藏图表\"],\"kI1qVD\":[\"格式化\"],\"kJCNBk\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 行 · \",[\"1\"],\"毫秒\"],\"other\":[\"#\",\" 行 · \",[\"2\"],\"毫秒\"]}]],\"kJDmsI\":[\"事件详情\"],\"kOrX2F\":[\"PID\"],\"kVAo1m\":[\"Pod\"],\"kVxO_O\":[\"注册表\"],\"kY-q3P\":[[\"label\"],\" 是必需的\"],\"kexIdC\":[\"使用 Kubernetes 端口转发\"],\"krksx_\":[\"成功\"],\"ktYUe9\":[\"全部执行\"],\"kwY6nh\":[\"关闭\"],\"kx0s-n\":[\"Results\"],\"kxUEfE\":[\"获取存储过程定义失败:\"],\"l2Op2p\":[\"查询参数\"],\"l9Ivba\":[\"插件进程和系统资源\"],\"lBdPxu\":[\"强调色\"],\"lCF0wC\":[\"刷新\"],\"lEQRwq\":[\"数据 (INSERT)\"],\"lIvS11\":[\"Recreate Trigger\"],\"lKS0ce\":[\"新表已创建\"],\"lOekZ3\":[\"切换到水平布局\"],\"lUA1C1\":[\"SSH 密钥密码(可选)\"],\"lVeG20\":[\"Rust 依赖\"],\"lXAG6D\":[\"AI 查询解释的指令。使用 \",[\"LANGUAGE\"],\" 作为输出语言的占位符。\"],\"lbbYjy\":[\"Directly edit the raw configuration file. A restart is required to apply changes.\"],\"lhKW0m\":[\"添加了 SQL 单元格 \",[\"n\"]],\"lk-wOz\":[\"Filter triggers...\"],\"lk0x32\":[\"结果页面大小(限制)\"],\"lkz6PL\":[\"耗时\"],\"lmVGeo\":[\"添加外键\"],\"lnnx3E\":[\"将 Tabularis 连接到 Claude Desktop、Cursor 等\"],\"lpGiOh\":[\"Check interval\"],\"lpYill\":[\"Export failed\"],\"m16xKo\":[\"添加\"],\"m2Q_r8\":[\"在文本列中检测 JSON\"],\"m2tskz\":[\"成功\"],\"mA-qpe\":[\"全部运行完成\"],\"mBhhbA\":[\"日志已导出到剪贴板\"],\"mCNdzH\":[\"运行单元格\"],\"mO95sp\":[\"关闭面板\"],\"mP7dLi\":[\"在上方输入字体名称\"],\"mQCWzt\":[[\"0\",\"plural\",{\"other\":[\"#\",\" 个被阻止\"]}]],\"mS74ir\":[\"保存 SSH 连接失败\"],\"mSqtw8\":[\"运行预览\"],\"mURmfQ\":[\"视图定义 (SQL)\"],\"mX_isJ\":[\"垂直\"],\"mZT1Nu\":[\"SQL\"],\"m_VCsW\":[\"结构 (DDL)\"],\"mrk4Cf\":[\"按 \",[\"colName\"],\" 降序排序\"],\"msJ8t1\":[\"我们为 Tabularis 用户开设了专属社区:获取帮助、分享技巧、共建路线图。\"],\"mtvVdV\":[\"已处理行数\"],\"mx4evv\":[\"创建表\"],\"myXGZW\":[\"Guided\"],\"mzI_c-\":[\"下载\"],\"n7JDTx\":[\"安装并启用插件以在此处查看它们\"],\"nDDJir\":[\"搜索会话、客户端、连接…\"],\"nHP-Kr\":[\"无活动会话。请选择一个连接。\"],\"nKhCjW\":[\"选择表\"],\"nNwvm4\":[\"错误\"],\"nOVim5\":[\"保存连接失败\"],\"nPQulR\":[\"Client Certificate\"],\"nSfU4M\":[\"事件\"],\"nf14vn\":[\"Requires extension: \",[\"0\"]],\"ngO6Pv\":[\"Allow Enter (in addition to Tab) to accept the active autocomplete suggestion. When off, Enter always inserts a newline.\"],\"nhmF3p\":[\"连接\"],\"noM5A_\":[\"创建您的第一个连接\"],\"nohy4m\":[\"暂无 MCP 活动。\"],\"nr-axf\":[\"移除插件\"],\"nsPFX9\":[\"在 Visual Explain 中打开\"],\"nuBbBr\":[\"图表\"],\"nvFqs7\":[\"Unnamed connection\"],\"o-QZJW\":[\"导出数据库\"],\"o-XJ9D\":[\"更改\"],\"o21Y-P\":[\"条目\"],\"o3tP_A\":[\"删除索引\"],\"o45L8r\":[\"输入您的连接名称\"],\"o53XGh\":[\"复制选中的行\"],\"o7J4JM\":[\"过滤条件\"],\"oA2Fd6\":[\"Failed to rename group\"],\"oCHfGC\":[\"级别\"],\"oGiIL7\":[\"默认提供商\"],\"oH8GS6\":[\"View Definition\"],\"oJ4rAm\":[\"Connection Lost\"],\"oJlXF2\":[\"导入笔记本\"],\"oMFv82\":[\"垂直分割\"],\"oOFiQg\":[\"限制每次查询获取的行数,以防止性能问题。设置为 0 可禁用(不推荐)。\"],\"oT9ZD3\":[\"隐藏概览\"],\"oUzLtx\":[\"Editing a trigger requires dropping and recreating it. Continue modifying \\\"\",[\"name\"],\"\\\"?\"],\"oVRbyk\":[\"更改了图表(单元格 \",[\"n\"],\")\"],\"oWfclW\":[\"当未带类型的文本单元格包含 JSON 对象或数组时显示 JSON 查看器入口。每单元格会增加少量解析开销。\"],\"obpbdz\":[\"未找到配置文件(请手动创建)\"],\"odZgfC\":[\"AI 客户端\"],\"ogZhXn\":[\"选择 ER 图的默认布局方向\"],\"ohUJJM\":[\"插件\"],\"olAdaI\":[\"实际行数\"],\"olWzar\":[\"强制终止插件进程\"],\"ovBPCi\":[\"默认\"],\"owzTWN\":[\"已从提供商刷新 AI 模型\"],\"oxYi6j\":[\"调整整个应用使用的基础字体大小(10-20px)。\"],\"p--hsQ\":[\"A database connection was lost\"],\"p6NueD\":[\"新建\"],\"pOYHox\":[\"操作\"],\"pR9bTR\":[\"无 BLOB 数据\"],\"pS8S5q\":[\"例如:users, orders, products\"],\"pSws_M\":[\"表名称\"],\"pVLbKZ\":[\"视图创建成功\"],\"pWT04I\":[\"检查中...\"],\"pZJ_6D\":[\"索引名称是必需的\"],\"pddYFG\":[\"输入单元格名称提示词...\"],\"pm9Yb5\":[\"Translation updates\"],\"pnpyuD\":[\"启用日志\"],\"pqKMPv\":[\"创建表失败:\"],\"pqaP1h\":[\"关闭\"],\"pqarBu\":[\"升序\"],\"ptuq35\":[\"例如:微软雅黑\"],\"pzu7v4\":[\"水平\"],\"q-ch8m\":[\"其余连接保持只读。仅勾选的连接可以执行写入。\"],\"qA5jLs\":[\"错误详情\"],\"qIrtcK\":[\"更新\"],\"qOqy8G\":[\"检查配置中...\"],\"qWaVNs\":[\"Save & Restart\"],\"qb3LPX\":[\"查看 ER 图\"],\"qkK0vq\":[\"视图名称是必需的\"],\"qki9tG\":[\"错误\"],\"qoIir-\":[\"您的 OpenAI 兼容 API 的基础 URL。例如:https://api.groq.com/openai/v1, http://localhost:8000/v1\"],\"qvWGzP\":[\"Collapse all\"],\"r6ncaO\":[\"关闭标签\"],\"rAJlpP\":[\"容器端口\"],\"rG3WVm\":[\"读取\"],\"rGRCeK\":[\"清除查询历史\"],\"rNIto7\":[\"资源名称为必填项\"],\"rRJX0C\":[\"e.g. mysql://user:pass@localhost:3306/db\"],\"rTAOpF\":[\"笔记本导出成功\"],\"rY4sEV\":[\"删除外键\"],\"rbu0nO\":[\"管理 SSH 连接\"],\"rjVGUO\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 个连接\"],\"other\":[\"#\",\" 个连接\"]}]],\"rn2_2V\":[\"移除筛选器\"],\"roABNH\":[\"暂无查询历史\"],\"rtir7c\":[\"未知\"],\"ru0-2W\":[\"无活动连接\"],\"rvDPWO\":[\"估算偏差\"],\"rwWjWg\":[\"发布说明\"],\"s6m9gy\":[\"Are you sure you want to drop trigger \\\"\",[\"0\"],\"\\\"?\"],\"s7uMvM\":[\"测试连接\"],\"sBOaim\":[\"The configuration file has been saved. Restart now to apply the changes?\"],\"sCyv9B\":[\"刷新模型\"],\"sSUqe4\":[\"删除\"],\"sUBkgN\":[\"生成 SQL 中...\"],\"sZZG3d\":[\"确定要导入 \\\"\",[\"0\"],\"\\\" 吗?\\n这可能会覆盖现有数据。\"],\"sbK5ck\":[\"搜索历史...\"],\"sq_bS6\":[\"删除时\"],\"suW7-E\":[\"连接超时时间,单位为毫秒。\"],\"suqtBX\":[\"Esc 关闭\"],\"t-R8-P\":[\"执行时间\"],\"t1OfVY\":[[\"totalLibraries\"],\" 个库\"],\"t2TMzs\":[\"关闭标签\"],\"t3x-Z0\":[\"Click Load Databases to fetch available databases.\"],\"t61XQ5\":[\"选择一个表...\"],\"t7KRl1\":[\"MCP 工具调用的审计日志,以及等待批准的查询。仅本地存储。\"],\"t9NJIk\":[\"检测到高扫描操作\"],\"tB7xof\":[\"临时或排序操作\"],\"tBBXTO\":[\"Ping Interval\"],\"tFrT3w\":[\"如果自动安装失败,请将此添加到您的客户端配置文件中。\"],\"tJ7UbA\":[\"explain focused\"],\"tKlWWY\":[\"表情\"],\"tMFzq-\":[\"水平分割\"],\"tQhW-D\":[\"日志设置\"],\"tT-BQX\":[\"已安装\"],\"tXFGEx\":[\"没有已保存的 Kubernetes 连接。点击“添加”创建一个。\"],\"tXLz_8\":[\"删除\"],\"tXpRby\":[\"数据网格\"],\"tbysEk\":[\"操作\"],\"tdta9X\":[\"第 \",[\"0\"],\" 页\"],\"tfDRzk\":[\"保存\"],\"tfEioV\":[\"从上到下执行所有 SQL 单元格\"],\"tiAIaJ\":[\"SSH 密码缺失。请重新输入。\"],\"tk22BR\":[\"粘贴结构化数据,导入前预览模式\"],\"tst44n\":[\"事件\"],\"u6Hp4N\":[\"Markdown\"],\"u6PbNl\":[\"SQL 文件执行成功\"],\"u6QeR6\":[\"Restart Now\"],\"uAQUqI\":[\"状态\"],\"uBAxNB\":[\"编辑器\"],\"uBI8D9\":[\"按 Esc 关闭\"],\"uFViPK\":[\"无 SSH 连接可用\"],\"uHUuhp\":[\"Explain this query\"],\"uHfFzS\":[\"Editor Font Size\"],\"uJ_3K5\":[\"删除笔记本“\",[\"0\"],\"”?此操作无法撤销。\"],\"uKaNJ3\":[\"在 JSON 编辑器中打开\"],\"uQBwTo\":[\"模式\"],\"ub54ff\":[\"插件中心\"],\"ufFyBs\":[\"数据库导出成功\"],\"upNmR2\":[\"打开侧边栏编辑器\"],\"upwIY4\":[\"视图定义\"],\"utMia3\":[\"取消全选\"],\"uyNaJg\":[\"1 个元素\"],\"v61dnS\":[\"输入您的 OpenAI 兼容提供商的确切模型名称。\"],\"v6oeyr\":[\"已安装\"],\"v75DGg\":[\"浏览文件\"],\"v99dO4\":[\"主键\"],\"vBNUCC\":[[\"0\",\"plural\",{\"one\":[\"找到 \",\"#\",\" 个查询\"],\"other\":[\"找到 \",\"#\",\" 个查询\"]}]],\"vCSBPD\":[\"添加筛选器\"],\"vH7uJj\":[\"排序方式…\"],\"vUOA1-\":[\"搜索模型...\"],\"vWcB0p\":[\"PostgreSQL 的 ANALYZE 会在可用时包含实际行数、耗时、循环次数和缓冲区计数。\"],\"vXIe7J\":[\"语言\"],\"vYf4Jm\":[\"输入完整的 SQL 函数(例如 ST_GeomFromText('POINT(30 40)', 4326))\"],\"vc7Psg\":[\"首选\"],\"vditm4\":[\"执行计划\"],\"vks_ls\":[\"关闭其他标签\"],\"vnAnIp\":[\"在 \",[\"1\"],\" 中未找到模型 \",[\"0\"],\"。它可能无法正常工作。\"],\"vqoN5u\":[\"结构\"],\"vrAvbP\":[\"确定要删除分组 \\\"\",[\"0\"],\"\\\" 吗?此分组中的连接将移至未分组。\"],\"vtJ2yO\":[\"浏览器\"],\"vujQJ5\":[\"本地化\"],\"vvJPVL\":[\"显示概览\"],\"vwI5S4\":[\"成功\"],\"vzH-7Z\":[\"解释\"],\"w7QmD_\":[\"输入系统提示词...\"],\"w9eMXw\":[\"触发器\"],\"wCJFlW\":[\"已用时间\"],\"wCfv2R\":[\"添加连接\"],\"wGfc86\":[\"清除所有历史\"],\"wGwNv4\":[\"当前数据库\"],\"wJJ-Wy\":[\"安装中...\"],\"wMe2Qp\":[\"命名空间\"],\"wQiel_\":[\"缓冲区命中\"],\"wQn-RM\":[\"添加列\"],\"wRXcR2\":[\"Using the driver's default icon.\"],\"wTOwz-\":[\"已应用\"],\"wTmVhm\":[\"删除\"],\"wXx7W4\":[\"How often to check for new translations.\"],\"wZeIWq\":[\"从剪贴板导入\"],\"w_bY7R\":[\"日志\"],\"wc_8bA\":[\"待审批\"],\"wckWOP\":[\"管理\"],\"wdYcKH\":[\"打开的标签\"],\"wja8aL\":[\"未命名\"],\"wkOAzk\":[\"没有匹配的笔记本。\"],\"wp49Ao\":[\"处理插入失败:\"],\"wqG2hQ\":[\"跳过(不导入)\"],\"wwrAsK\":[\"请填写所有必需字段\"],\"wwu18a\":[\"图标\"],\"x2fr_j\":[\"图形\"],\"xANKBj\":[\"函数\"],\"xBwjck\":[\"A restart is required to apply changes.\"],\"xDAtGP\":[\"消息\"],\"xECY01\":[\"存储过程\"],\"xGPNgZ\":[\"提示词自定义\"],\"xNgtS-\":[\"未找到视图\"],\"xOPa1b\":[\"端口必须介于 1 和 65535 之间\"],\"xY9s5E\":[\"超时\"],\"xaVUr1\":[\"The quick brown fox jumps over the lazy dog\"],\"xbvTzL\":[\"文件路径\"],\"xlew5F\":[\"清空\"],\"xmNyKz\":[\"测试中...\"],\"xtuh6D\":[\"展开浏览器\"],\"y-Zdqj\":[\"选择上下文...\"],\"y3HaQk\":[\"Timing\"],\"yLFey_\":[\"Create Trigger\"],\"yLianM\":[\"打开 JSON 查看器\"],\"yQXjG5\":[\"取消全选\"],\"yWJQnz\":[\"Ctrl+Tab\"],\"yZ5jKN\":[\"Edit Trigger\"],\"y_0uwd\":[\"昨天\"],\"ygCKqB\":[\"停止\"],\"ykCc6r\":[\"更改了数据库(单元格 \",[\"n\"],\")\"],\"ynVMSc\":[\"全选\"],\"ytdz1d\":[\"AI 请求执行数据库写入\"],\"yyhzur\":[\"创建表\"],\"yz7wBu\":[\"关闭\"],\"z0VdfR\":[\"例程\"],\"z407wX\":[\"SSH 密码\"],\"z4oF5T\":[\"导出数据库\"],\"z5kV0h\":[\"连接\"],\"zBTMzx\":[\"预览\"],\"zCaAKs\":[\"更新错误\"],\"zDAakK\":[\"无法在没有连接 ID 的情况下显示图表。\"],\"zGe21h\":[\"此密钥从环境变量加载\"],\"zGfL5t\":[\"值\"],\"zL6-4A\":[\"无插件进程在运行\"],\"zLZhCi\":[\"全新的 Discord 社区!\"],\"zLlCou\":[\"复制列名\"],\"zNEL34\":[\"加入社区\"],\"zNgTlV\":[\"关闭右侧标签\"],\"zQz55p\":[\"查看结构\"],\"zR0FfH\":[\"已导出到 \",[\"target\"]],\"zRZeOc\":[\"搜索表、视图、例程、触发器...\"],\"zUNMsr\":[\"SSH 密钥\"],\"zXMRzb\":[\"SSH 端口\"],\"zZgoXr\":[\"无匹配的表\"],\"zaWbms\":[\"回滚更改\"],\"zgClmU\":[\"安装配置\"],\"zga9sT\":[\"OK\"],\"zgk5iK\":[\"输入值...\"],\"zvzN4C\":[\"设为激活\"],\"zzDlyQ\":[\"成功\"],\"zzMxrp\":[\"Edit config.json\"],\"zz_Wd_\":[\"模式\"]}")as Messages; \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx index 67e095b6..460a2797 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -7,6 +7,7 @@ import { App } from './App'; import './index.css'; import { I18nProvider } from '@lingui/react'; import { i18n, dynamicActivate, detectLocale } from './i18n/lingui'; +import { refreshFromCdn, isOtaEnabled, getOtaIntervalMinutes } from './i18n/ota'; import { DatabaseProvider } from './contexts/DatabaseProvider'; import { SettingsProvider } from './contexts/SettingsProvider'; import { SavedQueriesProvider } from './contexts/SavedQueriesProvider'; @@ -16,7 +17,20 @@ import { ThemeProvider } from './contexts/ThemeProvider'; import { UpdateProvider } from './contexts/UpdateProvider'; void (async () => { - await dynamicActivate(detectLocale()); + const locale = detectLocale(); + await dynamicActivate(locale); + // Phase-2 OTA: overlay the latest CDN translations on top of the bundled + // catalog (non-blocking — bundled text is already active), then poll. The + // self-rescheduling tick re-reads the enabled flag + interval each time, so + // changing them in Settings takes effect without a restart. + if (isOtaEnabled()) void refreshFromCdn(locale); + const scheduleOta = () => { + setTimeout(() => { + if (isOtaEnabled()) void refreshFromCdn(i18n.locale); + scheduleOta(); + }, getOtaIntervalMinutes() * 60_000); + }; + scheduleOta(); ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( diff --git a/tests/i18n/ota.test.ts b/tests/i18n/ota.test.ts new file mode 100644 index 00000000..3e5ffb67 --- /dev/null +++ b/tests/i18n/ota.test.ts @@ -0,0 +1,74 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; +import { i18n } from "../../src/i18n/lingui"; +import { refreshFromCdn } from "../../src/i18n/ota"; +import { generateMessageId } from "@lingui/message-utils/generateMessageId"; + +const po = (lines: string[]) => lines.join("\n"); + +const id = (msg: string, ctx = "") => generateMessageId(msg, ctx); + +// Lingui's load() merges, so each test uses a fresh locale to stay isolated. +let LOC = ""; +let n = 0; + +describe("refreshFromCdn", () => { + beforeEach(() => { + LOC = `test-${n++}`; + i18n.load(LOC, {}); + i18n.activate(LOC); + }); + afterEach(() => { + vi.restoreAllMocks(); + }); + + it("overlays non-plural CDN translations; skips plural + untranslated", async () => { + const body = po([ + 'msgid ""', + 'msgstr "Content-Type: text/plain; charset=UTF-8\\n"', + "", + 'msgid "Close"', + 'msgstr "Schließen"', + "", + 'msgctxt "connections.export"', + 'msgid "Export Connections"', + 'msgstr "Verbindungen exportieren"', + "", + 'msgid "Untranslated"', + 'msgstr ""', + "", + 'msgid "{n, plural, one {# row} other {# rows}}"', + 'msgid_plural "{n, plural, one {# row} other {# rows}}"', + 'msgstr[0] "# Zeile"', + 'msgstr[1] "# Zeilen"', + "", + ]); + vi.stubGlobal("fetch", vi.fn().mockResolvedValue({ ok: true, text: () => Promise.resolve(body) })); + + await refreshFromCdn(LOC); + + // plain + context entries overlaid + expect(i18n._(id("Close"))).toBe("Schließen"); + expect(i18n._(id("Export Connections", "connections.export"))).toBe("Verbindungen exportieren"); + // same English, different context must NOT be overwritten by the export one + expect(i18n._(id("Export Connections", "connections.exportTitle"))).toBe( + id("Export Connections", "connections.exportTitle"), + ); + // untranslated -> not loaded (falls back to id here, bundled value in the app) + expect(i18n._(id("Untranslated"))).toBe(id("Untranslated")); + // plural -> skipped, served by the bundled catalog + const pluralId = id("{n, plural, one {# row} other {# rows}}"); + expect(i18n._(pluralId)).toBe(pluralId); + }); + + it("no-ops when offline (fetch rejects)", async () => { + vi.stubGlobal("fetch", vi.fn().mockRejectedValue(new Error("offline"))); + await expect(refreshFromCdn(LOC)).resolves.toBeUndefined(); + expect(i18n._(id("Close"))).toBe(id("Close")); // unchanged + }); + + it("no-ops on a non-ok response", async () => { + vi.stubGlobal("fetch", vi.fn().mockResolvedValue({ ok: false })); + await refreshFromCdn(LOC); + expect(i18n._(id("Close"))).toBe(id("Close")); + }); +}); From 68b23ec816ed0a8dd90d342fa0aebe0caa7035bb Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Mon, 22 Jun 2026 16:32:46 +0200 Subject: [PATCH 20/22] feat(i18n): regenerate catalogs live in dev via a Vite plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dev-only Vite plugin (scripts/i18n/vite-lingui-watch.mjs) that regenerates the Lingui catalogs on every source save, so new t/ strings show up via HMR. Runs inside Vite's dev server, so `tauri dev` needs nothing beyond its usual beforeDevCommand — no extra process. --- scripts/i18n/vite-lingui-watch.mjs | 65 ++++++++++++++++++++++++++++++ vite.config.ts | 3 ++ 2 files changed, 68 insertions(+) create mode 100644 scripts/i18n/vite-lingui-watch.mjs diff --git a/scripts/i18n/vite-lingui-watch.mjs b/scripts/i18n/vite-lingui-watch.mjs new file mode 100644 index 00000000..7d0c818d --- /dev/null +++ b/scripts/i18n/vite-lingui-watch.mjs @@ -0,0 +1,65 @@ +import { spawn } from "node:child_process"; + +// Dev-only Vite plugin: regenerate the Lingui catalogs whenever a source file +// changes, so new `t`/`` strings show up in the running app. +// +// This runs inside Vite's own dev server (which is already watching files and +// owns HMR), so `tauri dev` needs nothing more than its usual `npm run dev` — +// no extra process, no `concurrently`. Extract and compile run SEQUENTIALLY in +// one debounced job (two parallel `lingui --watch` processes race and crash on +// Linux). Changes under src/locales — the catalogs we write — are ignored so we +// don't loop. When `messages.ts` is recompiled, Vite reloads it automatically. +export function linguiWatch() { + let running = false; + let queued = false; + let timer = null; + + const run = (command) => + new Promise((resolve, reject) => { + const child = spawn(command, { stdio: "inherit", shell: true }); + child.on("exit", (code) => + code === 0 ? resolve() : reject(new Error(`\`${command}\` exited with ${code}`)), + ); + child.on("error", reject); + }); + + async function regenerate() { + if (running) { + queued = true; + return; + } + running = true; + try { + await run("lingui extract"); + await run("lingui compile --typescript --namespace es"); + } catch (err) { + console.error("[i18n] regenerate failed:", err.message); + } finally { + running = false; + if (queued) { + queued = false; + schedule(); + } + } + } + + function schedule() { + clearTimeout(timer); + timer = setTimeout(regenerate, 400); + } + + return { + name: "lingui-watch", + apply: "serve", // dev server only — never runs during `vite build` + configureServer(server) { + void regenerate(); // initial catalog refresh on dev start + const onChange = (file) => { + if (!/\.(ts|tsx)$/.test(file)) return; + if (/[\\/]locales[\\/]/.test(file)) return; // our own output + schedule(); + }; + server.watcher.on("change", onChange); + server.watcher.on("add", onChange); + }, + }; +} diff --git a/vite.config.ts b/vite.config.ts index 8de0b6b5..d29080f2 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,12 +1,15 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import { lingui } from '@lingui/vite-plugin' +import { linguiWatch } from './scripts/i18n/vite-lingui-watch.mjs' // https://vite.dev/config/ export default defineConfig({ plugins: [ react({ babel: { plugins: ['@lingui/babel-plugin-lingui-macro'] } }), lingui(), + // Dev-only: regenerate message catalogs on source change (no extra process). + linguiWatch(), ], resolve: { alias: { From 535202d55215620aadf1e21334cd1737c863d137 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Mon, 22 Jun 2026 18:04:08 +0200 Subject: [PATCH 21/22] ci(i18n): refresh catalogs on PRs, push+backsync Tolgee MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - i18n-catalogs.yml regenerates and commits catalogs on PRs (and on main as a fallback for fork PRs), covering contributors who never ran the dev server. - i18n-tolgee-sync.yml pushes source strings to Tolgee on every push to main, so machine translation can start promptly. - i18n-tolgee-backsync.yml pulls finished translations (human + MT) back into the bundled catalogs on a daily schedule — MT lands asynchronously, so we poll. - .tolgeerc.json forceMode OVERRIDE -> KEEP (+ projectId): a push never overwrites translations edited in Tolgee; it only adds new keys. --- .github/workflows/i18n-catalogs.yml | 65 +++++++++++++++++++++ .github/workflows/i18n-tolgee-backsync.yml | 67 ++++++++++++++++++++++ .github/workflows/i18n-tolgee-sync.yml | 52 +++++++++++++++++ .tolgeerc.json | 3 +- 4 files changed, 186 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/i18n-catalogs.yml create mode 100644 .github/workflows/i18n-tolgee-backsync.yml create mode 100644 .github/workflows/i18n-tolgee-sync.yml diff --git a/.github/workflows/i18n-catalogs.yml b/.github/workflows/i18n-catalogs.yml new file mode 100644 index 00000000..2bf5f923 --- /dev/null +++ b/.github/workflows/i18n-catalogs.yml @@ -0,0 +1,65 @@ +name: i18n Catalogs + +# Keeps the Lingui message catalogs in sync with the source, so a contributor +# who never ran `pnpm tauri dev` (which auto-regenerates them) doesn't leave the +# catalogs stale. On a PR it regenerates and commits the catalogs back onto the +# PR branch; on main it does the same as a safety net (e.g. for fork PRs that +# couldn't be auto-committed). This does NOT touch Tolgee — that happens only on +# release (see i18n-tolgee-sync.yml). + +concurrency: + group: i18n-catalogs-${{ github.ref }} + cancel-in-progress: true + +on: + push: + branches: [main] + paths: + - 'src/**' + - 'lingui.config.ts' + - '.github/workflows/i18n-catalogs.yml' + pull_request: + branches: [main] + paths: + - 'src/**' + - 'lingui.config.ts' + - '.github/workflows/i18n-catalogs.yml' + +permissions: + contents: write + +jobs: + catalogs: + runs-on: ubuntu-24.04 + # Auto-commit can only push to branches in this repo, not forks. Fork PRs + # are covered by the main run after merge. + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + ref: ${{ github.head_ref || github.ref_name }} + token: ${{ secrets.GITHUB_TOKEN }} + + - uses: pnpm/action-setup@v5 + name: Install pnpm + + - uses: actions/setup-node@v6 + with: + node-version: '20' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Regenerate message catalogs + run: | + pnpm run i18n:extract + pnpm run i18n:compile + + - name: Commit refreshed catalogs + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add src/locales + git diff --staged --quiet || (git commit -m "chore(i18n): refresh message catalogs [skip ci]" && git push) diff --git a/.github/workflows/i18n-tolgee-backsync.yml b/.github/workflows/i18n-tolgee-backsync.yml new file mode 100644 index 00000000..a468b40b --- /dev/null +++ b/.github/workflows/i18n-tolgee-backsync.yml @@ -0,0 +1,67 @@ +name: i18n Tolgee Backsync + +# Pulls finished translations (human + machine translation) back from Tolgee into +# the bundled catalogs. Runs on a schedule because machine translation completes +# asynchronously — there's no event telling us when it's ready, so we poll. +# +# Only the target languages are pulled (never `en` — English/source is owned by +# the code), and only TRANSLATED/REVIEWED states, so untranslated keys keep their +# English fallback. After pulling, `lingui extract` re-normalizes the catalogs to +# the canonical Lingui format (matching by source+context, so msgstr is preserved) +# and `lingui compile` rebuilds messages.ts. Changes are committed with [skip ci]. +# +# Requires the repo secret TOLGEE_API_KEY. + +on: + schedule: + - cron: '0 3 * * *' # daily 03:00 UTC — tune for how fast you want MT to land + workflow_dispatch: + +permissions: + contents: write + +concurrency: + group: i18n-tolgee-backsync + cancel-in-progress: false + +jobs: + backsync: + runs-on: ubuntu-24.04 + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - uses: pnpm/action-setup@v5 + name: Install pnpm + + - uses: actions/setup-node@v6 + with: + node-version: '20' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Pull translations from Tolgee + run: > + npx --yes @tolgee/cli@latest pull + --path src/locales + --file-structure-template "{languageTag}/messages.{extension}" + --languages de es fr it ja ru zh + --states TRANSLATED REVIEWED + env: + TOLGEE_API_KEY: ${{ secrets.TOLGEE_API_KEY }} + + - name: Re-normalize and compile catalogs + run: | + pnpm run i18n:extract + pnpm run i18n:compile + + - name: Commit synced translations + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add src/locales + git diff --staged --quiet || (git commit -m "chore(i18n): backsync translations from Tolgee [skip ci]" && git push) diff --git a/.github/workflows/i18n-tolgee-sync.yml b/.github/workflows/i18n-tolgee-sync.yml new file mode 100644 index 00000000..0a543037 --- /dev/null +++ b/.github/workflows/i18n-tolgee-sync.yml @@ -0,0 +1,52 @@ +name: i18n Tolgee Sync + +# Pushes the current source strings to Tolgee on every push to main, so the +# translation platform learns about new keys promptly and can start machine- +# translating them. Finished translations flow back via i18n-tolgee-backsync.yml. +# +# Uses forceMode KEEP (configured in .tolgeerc.json) — it only ADDS new keys and +# NEVER overwrites translations that already exist in Tolgee, so a typo fixed by a +# translator in Tolgee is never clobbered by the bundled catalogs. English/source +# text is owned by the code: fix source typos in the `t` string, not in Tolgee. +# +# Requires the repo secret TOLGEE_API_KEY (a Tolgee PAT or project API key with +# write access to project 32587). + +concurrency: + group: i18n-tolgee-sync + cancel-in-progress: false + +on: + push: + branches: [main] + paths: + - 'src/**' + - '.tolgeerc.json' + - '.github/workflows/i18n-tolgee-sync.yml' + workflow_dispatch: + +jobs: + tolgee: + runs-on: ubuntu-24.04 + steps: + - name: Checkout + uses: actions/checkout@v6 + + - uses: pnpm/action-setup@v5 + name: Install pnpm + + - uses: actions/setup-node@v6 + with: + node-version: '20' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Regenerate source catalog + run: pnpm run i18n:extract + + - name: Push source strings to Tolgee + run: npx --yes @tolgee/cli@latest push + env: + TOLGEE_API_KEY: ${{ secrets.TOLGEE_API_KEY }} diff --git a/.tolgeerc.json b/.tolgeerc.json index 35a3686e..12ab9895 100644 --- a/.tolgeerc.json +++ b/.tolgeerc.json @@ -1,6 +1,7 @@ { "$schema": "https://docs.tolgee.io/cli-schema.json", "apiUrl": "https://app.tolgee.io", + "projectId": 32587, "format": "PO_ICU", "patterns": [ "./src/**/*.ts?(x)" @@ -40,6 +41,6 @@ "language": "zh" } ], - "forceMode": "OVERRIDE" + "forceMode": "KEEP" } } From 11ab32dc6e4aa330090bc8f45a220c0ebe150aa5 Mon Sep 17 00:00:00 2001 From: NewtTheWolf Date: Mon, 22 Jun 2026 18:04:08 +0200 Subject: [PATCH 22/22] docs(i18n): document the Lingui authoring & translator workflow README + CONTRIBUTING explain the 'author English macros, don't translate' contributor flow and the translator (Tolgee/OTA) flow; new .rules/i18n.md rule; fixed the stale src/i18n/locales reference; rules index lists frontend.md + i18n.md. --- .rules/general.md | 2 +- .rules/i18n.md | 6 ++++++ AGENTS.md | 2 ++ CONTRIBUTING.md | 18 ++++++++++++++++++ README.md | 13 +++++++++++++ 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 .rules/i18n.md diff --git a/.rules/general.md b/.rules/general.md index c8db6384..a4146680 100644 --- a/.rules/general.md +++ b/.rules/general.md @@ -1,3 +1,3 @@ # General Rules -1. **Language:** Use **English** for all code comments, documentation, and commit messages. Translate other languages in @src/i18n/locales . +1. **Language:** Use **English** for all code comments, documentation, and commit messages. User-facing UI strings are authored in English via Lingui macros — see [i18n Rules](./i18n.md); you do not write translations by hand. 2. **Package Manager:** Always use **pnpm** instead of npm or yarn. diff --git a/.rules/i18n.md b/.rules/i18n.md new file mode 100644 index 00000000..4382b603 --- /dev/null +++ b/.rules/i18n.md @@ -0,0 +1,6 @@ +# i18n Rules + +1. **Author in English only.** Wrap every user-facing string in a Lingui macro — `` t`...` `` / `t({ message })` from `@lingui/core/macro`, or `` / `useLingui().t` from `@lingui/react/macro`. Never ship a bare UI string literal. +2. **Do not write translations by hand.** Contributors are **not** required to translate. `pnpm tauri dev` (and `pnpm i18n:extract`) regenerates the catalogs from your source strings; missing translations fall back to English and are filled later via Tolgee + over-the-air delivery. After extracting you _may_ fill other locales' `.po` files, but it is optional. +3. **Catalogs are generated artifacts.** `src/locales//messages.po` (source) and `messages.ts` (compiled) are produced by `lingui extract` / `lingui compile`. The dev server regenerates them on save — never edit them by hand. Commit the regenerated catalogs alongside the code that introduced the strings. +4. **Plugin UI strings are separate.** A plugin's strings live in its own `locales/.json` (ICU `{var}` placeholders), read via `usePluginTranslation(pluginId)` — they are not part of the app catalogs. diff --git a/AGENTS.md b/AGENTS.md index 9e363adc..6966d3da 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,6 +6,8 @@ Adhere to the rules defined in the [rules directory](./.rules/): - [Rust Rules](./.rules/rust.md) (Backend module structure and Rust testing) - [TypeScript Rules](./.rules/typescript.md) - [React Rules](./.rules/react.md) +- [Frontend Rules](./.rules/frontend.md) (Driver-agnostic frontend) +- [i18n Rules](./.rules/i18n.md) (Lingui authoring & translation workflow) - [Modal Styling Rules](./.rules/modals.md) (Modal component structure and styling) - [Testing Conventions](./.rules/testing.md) (Test file organization and structure) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7c329b28..31defae7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,6 +24,7 @@ All types of contributions are encouraged and valued. See the [Table of Contents - [Suggesting Enhancements](#suggesting-enhancements) - [Your First Code Contribution](#your-first-code-contribution) - [Improving The Documentation](#improving-the-documentation) + - [Translations](#translations) - [Styleguides](#styleguides) - [Commit Messages](#commit-messages) - [Join The Project Team](#join-the-project-team) @@ -154,6 +155,23 @@ Updating, improving and correcting the documentation --> +### Translations + +Tabularis is localized with [Lingui](https://lingui.dev), and the source language is English. + +**For code contributors — you don't have to translate anything.** Just wrap every user-facing string in a Lingui macro and write it in English: + +```tsx +import { useLingui } from "@lingui/react/macro"; + +const { t } = useLingui(); +return ; +``` + +`pnpm tauri dev` regenerates the catalogs (`src/locales//messages.po` and the compiled `messages.ts`) automatically on save, so you never edit them by hand — commit the regenerated catalogs alongside your change. If you forget, CI regenerates and commits them on your PR. Strings without a translation fall back to English. After extracting you _may_ fill in other locales' `.po` files, but it is entirely optional; leave them and a translator (or the maintainers) will. + +**For translators.** Translations live in [Tolgee](https://tolgee.io), not in the repository: source strings are pushed there, translated, reviewed, and delivered to the app over the air — so a corrected translation reaches users without waiting for a release. You never need to touch `.po` files or open a PR to translate. If you'd like to help translate Tabularis, or want a new language added, open an [issue](https://github.com/TabularisDB/tabularis/issues) or ping us on [Discord](https://discord.com/invite/K2hmhfHRSt) and we'll get you set up. + ## Styleguides ### Commit Messages diff --git a/README.md b/README.md index dde38741..b1cd022c 100644 --- a/README.md +++ b/README.md @@ -346,6 +346,19 @@ pnpm tauri dev pnpm tauri build ``` +### Translations + +The UI is localized with [Lingui](https://lingui.dev), and **you don't need to translate anything to contribute** — just wrap user-facing strings in a Lingui macro and write them in English: + +```tsx +import { useLingui } from "@lingui/react/macro"; + +const { t } = useLingui(); +; +``` + +`pnpm tauri dev` regenerates the message catalogs (`src/locales//messages.po`) on save, so new strings appear immediately via HMR. Untranslated strings fall back to English; the actual translations are managed in [Tolgee](https://tolgee.io) and delivered over the air, so they reach users without an app release. See [CONTRIBUTING.md](./CONTRIBUTING.md#translations) for the translator workflow. + ## Roadmap - [x] [[Feat]: Allow loading of multiple Databases per connection](https://github.com/TabularisDB/tabularis/issues/47)