planche 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/app/assets/AboutDialog-BKZYkJTp.js +1 -0
- package/app/assets/ConnectDialog-BR8x82WA.js +1 -0
- package/app/assets/CopyDatabaseDialog-BNy2T6Gr.js +1 -0
- package/app/assets/CopyTableDialog-BPlrWZkd.js +1 -0
- package/app/assets/CreateDatabaseDialog-CSGP8uim.js +1 -0
- package/app/assets/DataDiffDialog-DnPrMjJH.js +1 -0
- package/app/assets/{DownloadToCSVDialog-jX0lEP8B.js → DownloadToCSVDialog-BAB8dFZb.js} +2 -2
- package/app/assets/EditSchemaDialog-DbtEwLFq.js +1 -0
- package/app/assets/FindReplaceDialog-uWQWnCuI.js +1 -0
- package/app/assets/{FlushDialog-CNu4QuYo.js → FlushDialog-Cs0aKhnC.js} +1 -1
- package/app/assets/LinkColumnDialog-Wug5N1I5.js +1 -0
- package/app/assets/LocalHistoryDialog-DNRc52tY.js +1 -0
- package/app/assets/ProcessListDialog-EFZx2I21.js +1 -0
- package/app/assets/QuickCommandPalette-CpXQe_fD.js +1 -0
- package/app/assets/RowFormDialog-DGJRhveF.js +2 -0
- package/app/assets/{SafetySettingsDialog-iaN6H-EP.js → SafetySettingsDialog-EPYmYqI7.js} +1 -1
- package/app/assets/{SchemaDiffDialog-D7re7sup.js → SchemaDiffDialog-CepiDNT4.js} +2 -2
- package/app/assets/{SchemaToHTMLDialog-Biq3ELkl.js → SchemaToHTMLDialog-Cl7FtDQ4.js} +2 -2
- package/app/assets/StatusDialog-BorcEOOv.js +1 -0
- package/app/assets/{TermsDialog-DbHxb0ld.js → TermsDialog-CSYNiNpB.js} +1 -1
- package/app/assets/UserAddDialog-DvKVbCtu.js +1 -0
- package/app/assets/UserManagerDialog-lyWevcWM.js +1 -0
- package/app/assets/VariablesDialog-BVUkQuDm.js +1 -0
- package/app/assets/button-BGQhw-yz.js +1 -0
- package/app/assets/chevron-up-C8Exvnh_.js +1 -0
- package/app/assets/connection-store-B9-4NAfR.js +1 -0
- package/app/assets/database-D3ZazTXj.js +1 -0
- package/app/assets/de-B9X_f_18.js +2 -0
- package/app/assets/dialog-z_ZHxAMN.js +1 -0
- package/app/assets/dist-Dfw8x01G.js +1 -0
- package/app/assets/dist-R-HWeP5h.js +41 -0
- package/app/assets/dist-eK8CwLw8.js +1 -0
- package/app/assets/{engine-DBTzC3si.js → engine-BmvPzjsq.js} +1 -1
- package/app/assets/fr-ByU5YzKG.js +2 -0
- package/app/assets/i18n-9War-oHy.js +2 -0
- package/app/assets/ja-nAp-4B2u.js +2 -0
- package/app/assets/ko-BeLRvuuF.js +2 -0
- package/app/assets/main-CCLlOK4N.js +940 -0
- package/app/assets/main-DntTuWCY.css +2 -0
- package/app/assets/{query-execution-CR2mkIdH.js → query-execution-C80kZc4y.js} +3 -3
- package/app/assets/{query-store-DlzOIWw1.js → query-store-fCiE0iiG.js} +1 -1
- package/app/assets/select-XqkC478q.js +1 -0
- package/app/assets/{settings-store-DxKFgC4Z.js → settings-store-MJead_iM.js} +1 -1
- package/app/assets/{table-copy-2y2RNth1.js → table-copy-WMW8qLUH.js} +1 -1
- package/app/assets/ui-store-DWSBgCoR.js +1 -0
- package/app/assets/{use-engine-F2Y_trPz.js → use-engine-z0WEd5U4.js} +1 -1
- package/app/assets/{user-store-D5dzuD-E.js → user-store-D_BMKTT2.js} +1 -1
- package/app/assets/zh-QBkIdY--.js +2 -0
- package/app/index.html +17 -20
- package/dist/index.js +22 -16
- package/package.json +2 -2
- package/app/_headers +0 -19
- package/app/assets/AboutDialog-HsaLhYrq.js +0 -1
- package/app/assets/ConnectDialog-DAYnaSzA.js +0 -1
- package/app/assets/CopyDatabaseDialog-DCDkX1Zt.js +0 -1
- package/app/assets/CopyTableDialog-BylicT1d.js +0 -1
- package/app/assets/CreateDatabaseDialog-i7_uV-wh.js +0 -1
- package/app/assets/DataDiffDialog-B4SeJXry.js +0 -1
- package/app/assets/EditSchemaDialog-BVOHVgBR.js +0 -1
- package/app/assets/FindReplaceDialog-B0rD26fg.js +0 -1
- package/app/assets/LinkColumnDialog-BwUBtMiy.js +0 -1
- package/app/assets/LocalHistoryDialog-DUlsyn8i.js +0 -1
- package/app/assets/ProcessListDialog-Chv324I7.js +0 -1
- package/app/assets/QuickCommandPalette-BG5A7y3V.js +0 -1
- package/app/assets/RowFormDialog-C5agNu3l.js +0 -2
- package/app/assets/StatusDialog-D8CcfFkP.js +0 -1
- package/app/assets/UserAddDialog-B_fz-cXy.js +0 -1
- package/app/assets/UserManagerDialog-ku7exEzu.js +0 -1
- package/app/assets/VariablesDialog-BP2RcCBK.js +0 -1
- package/app/assets/abap-08VXUWAP.js +0 -1
- package/app/assets/apex-BWPQTe0t.js +0 -1
- package/app/assets/azcli-Bc_sGQ0U.js +0 -1
- package/app/assets/bat-i0X4ZdIN.js +0 -1
- package/app/assets/bicep-B5-_aFwp.js +0 -2
- package/app/assets/button-DkRlMkru.js +0 -1
- package/app/assets/cameligo-DMUM7wLl.js +0 -1
- package/app/assets/chevron-up-Dy_mz-03.js +0 -1
- package/app/assets/clojure-Cm7r79vr.js +0 -1
- package/app/assets/coffee-Ba7i2nA0.js +0 -1
- package/app/assets/connection-store-CJ_al8qv.js +0 -1
- package/app/assets/cpp-C7h46wYY.js +0 -1
- package/app/assets/csharp-BKxtCVv1.js +0 -1
- package/app/assets/csp-bTuwJoIa.js +0 -1
- package/app/assets/css-DIMkf-bt.js +0 -3
- package/app/assets/css.worker-Dsm2X3j_.js +0 -89
- package/app/assets/cssMode-BK7_e-YI.js +0 -1
- package/app/assets/cypher-CVaqCwHa.js +0 -1
- package/app/assets/dart-onAF5SnQ.js +0 -1
- package/app/assets/database-BIhkgl2O.js +0 -1
- package/app/assets/de-B_f2X0cM.js +0 -2
- package/app/assets/dialog-BtwqThq6.js +0 -1
- package/app/assets/dist-BV6Hwye5.js +0 -41
- package/app/assets/dist-C2pydad-.js +0 -1
- package/app/assets/dist-C3MLFgG1.js +0 -1
- package/app/assets/dockerfile-DZFCIeNp.js +0 -1
- package/app/assets/ecl-D05T4iGw.js +0 -1
- package/app/assets/editor-Br_kD0ds.css +0 -1
- package/app/assets/editor.api2-JBjomUWM.js +0 -872
- package/app/assets/elixir-6RTg0lbw.js +0 -1
- package/app/assets/flow9-C5_-GSwl.js +0 -1
- package/app/assets/fr-DigYoMZT.js +0 -2
- package/app/assets/freemarker2-Ca8y5qEc.js +0 -3
- package/app/assets/fsharp-C8Ef5oNN.js +0 -1
- package/app/assets/go-C-y9NEjX.js +0 -1
- package/app/assets/graphql-fmXr3nnJ.js +0 -1
- package/app/assets/handlebars-CMoDOM1Y.js +0 -1
- package/app/assets/hcl-CpzslTdj.js +0 -1
- package/app/assets/html-BOS8Hfbf.js +0 -1
- package/app/assets/html.worker-fD12ABR7.js +0 -502
- package/app/assets/htmlMode-CRjI81Qd.js +0 -1
- package/app/assets/i18n-C7R6hKCp.js +0 -2
- package/app/assets/ini-sBoK_t0W.js +0 -1
- package/app/assets/ja-CPMeuUuT.js +0 -2
- package/app/assets/java-BEtHBSE6.js +0 -1
- package/app/assets/javascript-2ntxzhMa.js +0 -1
- package/app/assets/json.worker-B2CIyALT.js +0 -58
- package/app/assets/jsonMode-C8yGgOEo.js +0 -7
- package/app/assets/julia-Bri6UV-V.js +0 -1
- package/app/assets/ko-IAtUoTg5.js +0 -2
- package/app/assets/kotlin-BOotOW0E.js +0 -1
- package/app/assets/less-B9JPFI3C.js +0 -2
- package/app/assets/lexon-CfSJPG6W.js +0 -1
- package/app/assets/liquid-DThFAxbS.js +0 -1
- package/app/assets/lspLanguageFeatures-DQW0rv3P.js +0 -4
- package/app/assets/lua-CsQS60Ue.js +0 -1
- package/app/assets/m3-D-oSqn_W.js +0 -1
- package/app/assets/main-DI8DxG3x.css +0 -2
- package/app/assets/main-NJl8KiiX.js +0 -73
- package/app/assets/markdown-Cimd5fb3.js +0 -1
- package/app/assets/mdx-CI71gDmg.js +0 -1
- package/app/assets/mips-CIPQ_RoX.js +0 -1
- package/app/assets/msdax-DauUninz.js +0 -1
- package/app/assets/mysql-SOo6toE5.js +0 -1
- package/app/assets/objective-c-FvmIjYaQ.js +0 -1
- package/app/assets/pascal-DrH0SRf2.js +0 -1
- package/app/assets/pascaligo-D-ptJ9y-.js +0 -1
- package/app/assets/perl-oz_6vUea.js +0 -1
- package/app/assets/pgsql-DTj74zXo.js +0 -1
- package/app/assets/php-nr791fC2.js +0 -1
- package/app/assets/pla-CopQ2nXW.js +0 -1
- package/app/assets/postiats-43DmfD33.js +0 -1
- package/app/assets/powerquery-D3hlyOfw.js +0 -1
- package/app/assets/powershell-DmHpPYUd.js +0 -1
- package/app/assets/preload-helper-Czpn1I53.js +0 -1
- package/app/assets/protobuf-C531GsRP.js +0 -2
- package/app/assets/pug-Z5eAx3Zn.js +0 -1
- package/app/assets/python-Ck7s8L2p.js +0 -1
- package/app/assets/qsharp-DkqhCAOL.js +0 -1
- package/app/assets/r-BwWrilGY.js +0 -1
- package/app/assets/razor-DiN-9kkz.js +0 -1
- package/app/assets/redis-ClamHrr6.js +0 -1
- package/app/assets/redshift-DT7zqm-g.js +0 -1
- package/app/assets/restructuredtext-BYgofb2h.js +0 -1
- package/app/assets/rolldown-runtime-hePW80VL.js +0 -1
- package/app/assets/ruby-DezsRK8O.js +0 -1
- package/app/assets/rust-DdL9SqIa.js +0 -1
- package/app/assets/sb-CcwsVR0C.js +0 -1
- package/app/assets/scala-DHpiXF5c.js +0 -1
- package/app/assets/scheme-BeGwcela.js +0 -1
- package/app/assets/scss-gp-XZpBa.js +0 -3
- package/app/assets/select-CqYxAwnu.js +0 -1
- package/app/assets/shell-CC2rA5mh.js +0 -1
- package/app/assets/solidity-BEEn4gHE.js +0 -1
- package/app/assets/sophia-CRfGWb83.js +0 -1
- package/app/assets/sparql-D_Lu-MrJ.js +0 -1
- package/app/assets/st-DbInun42.js +0 -1
- package/app/assets/swift-Bxkupp3x.js +0 -1
- package/app/assets/systemverilog-Bz4Y3fRF.js +0 -1
- package/app/assets/tcl-DISqw1ZD.js +0 -1
- package/app/assets/ts.worker-BwG70EDZ.js +0 -67734
- package/app/assets/tsMode-Dzctobqp.js +0 -11
- package/app/assets/twig-De2hgUGE.js +0 -1
- package/app/assets/typescript-Ww5oHWDp.js +0 -1
- package/app/assets/typespec-B8J7ngcE.js +0 -1
- package/app/assets/ui-store-BPY9VfQP.js +0 -1
- package/app/assets/vb-DV3o63ZY.js +0 -1
- package/app/assets/wgsl-DpFanUEy.js +0 -298
- package/app/assets/xml-CT99FsSc.js +0 -1
- package/app/assets/yaml-DA78fpmA.js +0 -1
- package/app/assets/zh-DCKqmOQA.js +0 -2
- package/app/cloudflare-d1-client/index.html +0 -111
- package/app/de/cloudflare-d1-client/index.html +0 -111
- package/app/de/index.html +0 -123
- package/app/de/mariadb-client/index.html +0 -111
- package/app/de/mysql-client/index.html +0 -112
- package/app/de/neon-client/index.html +0 -111
- package/app/de/oracle-client/index.html +0 -111
- package/app/de/postgresql-client/index.html +0 -111
- package/app/de/sql-server-client/index.html +0 -111
- package/app/de/sqlite-viewer/index.html +0 -112
- package/app/de/supabase-client/index.html +0 -111
- package/app/fr/cloudflare-d1-client/index.html +0 -111
- package/app/fr/index.html +0 -123
- package/app/fr/mariadb-client/index.html +0 -111
- package/app/fr/mysql-client/index.html +0 -112
- package/app/fr/neon-client/index.html +0 -111
- package/app/fr/oracle-client/index.html +0 -111
- package/app/fr/postgresql-client/index.html +0 -111
- package/app/fr/sql-server-client/index.html +0 -111
- package/app/fr/sqlite-viewer/index.html +0 -112
- package/app/fr/supabase-client/index.html +0 -111
- package/app/ja/cloudflare-d1-client/index.html +0 -111
- package/app/ja/index.html +0 -123
- package/app/ja/mariadb-client/index.html +0 -111
- package/app/ja/mysql-client/index.html +0 -112
- package/app/ja/neon-client/index.html +0 -111
- package/app/ja/oracle-client/index.html +0 -111
- package/app/ja/postgresql-client/index.html +0 -111
- package/app/ja/sql-server-client/index.html +0 -111
- package/app/ja/sqlite-viewer/index.html +0 -112
- package/app/ja/supabase-client/index.html +0 -111
- package/app/ko/cloudflare-d1-client/index.html +0 -111
- package/app/ko/index.html +0 -123
- package/app/ko/mariadb-client/index.html +0 -111
- package/app/ko/mysql-client/index.html +0 -112
- package/app/ko/neon-client/index.html +0 -111
- package/app/ko/oracle-client/index.html +0 -111
- package/app/ko/postgresql-client/index.html +0 -111
- package/app/ko/sql-server-client/index.html +0 -111
- package/app/ko/sqlite-viewer/index.html +0 -112
- package/app/ko/supabase-client/index.html +0 -111
- package/app/mariadb-client/index.html +0 -111
- package/app/mysql-client/index.html +0 -112
- package/app/neon-client/index.html +0 -111
- package/app/og-image.png +0 -0
- package/app/oracle-client/index.html +0 -111
- package/app/postgresql-client/index.html +0 -111
- package/app/robots.txt +0 -3
- package/app/sample-shop.db +0 -0
- package/app/sitemap.xml +0 -603
- package/app/sql-server-client/index.html +0 -111
- package/app/sqlite-viewer/index.html +0 -112
- package/app/supabase-client/index.html +0 -111
- package/app/zh/cloudflare-d1-client/index.html +0 -111
- package/app/zh/index.html +0 -123
- package/app/zh/mariadb-client/index.html +0 -111
- package/app/zh/mysql-client/index.html +0 -112
- package/app/zh/neon-client/index.html +0 -111
- package/app/zh/oracle-client/index.html +0 -111
- package/app/zh/postgresql-client/index.html +0 -111
- package/app/zh/sql-server-client/index.html +0 -111
- package/app/zh/sqlite-viewer/index.html +0 -112
- package/app/zh/supabase-client/index.html +0 -111
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={reconnecting:`Reconnexion…`,dropSqlite:`Déposez pour ouvrir le fichier SQLite`,dropSqliteHint:`Ouvert dans votre navigateur via WebAssembly — le fichier reste sur votre ordinateur. Déposez le fichier -wal avec lui s'il existe.`,dropFailedTitle:`Impossible d'ouvrir le fichier déposé`,dropNotSqlite:`{{name}} n'est pas un fichier de base de données SQLite.`,crashTitle:`Un problème est survenu`,crashBody:`L'application a rencontré une erreur inattendue. Recharger restaure les connexions et les onglets ; les modifications de grille non enregistrées sont perdues.`,crashReload:`Recharger`},t={auto:`Langue du système ({{name}})`,en:`English`,ko:`한국어`,zh:`中文(简体)`,ja:`日本語`,de:`Deutsch`,fr:`Français`},n={title:`Sécurité`,description:`Garde-fous contre la perte accidentelle de données. Le mode lecture seule, la couleur d'environnement et le mode de transaction se règlent par connexion.`,language:`Langue`,languageHint:`S'applique immédiatement. « Langue du système » suit votre navigateur.`,resetDefaults:`Rétablir les valeurs par défaut`,done:`Terminé`,analytics:`Partager des statistiques d'utilisation anonymes`,analyticsHint:`Envoie des événements d'utilisation anonymes (moteur, fonctionnalité, type d'instruction) à Google Analytics. Jamais le texte SQL, les noms d'hôte, de table ou d'utilisateur.`,analyticsUnavailableHint:`Inactif dans cette version (aucun identifiant de mesure configuré).`,persistHistory:`Conserver l'historique des requêtes après rechargement`,persistHistoryHint:`Le texte des instructions est stocké dans ce navigateur (les mots de passe littéraux sont masqués ; les onglets d'éditeur ouverts sont toujours conservés). Désactivé : l'historique et les instantanés ne vivent que jusqu'à la fermeture de l'onglet.`},r={settings:{safety:`Sécurité…`,language:`Langue`,title:`Paramètres`,theme:`Thème`},help:{gettingStarted:`Premiers pas`,about:`À propos de Planche`,title:`Aide`,documentation:`Documentation`,terms:`Conditions d’utilisation`},connection:{title:`Connexion`,connect:`Se connecter`,disconnect:`Se déconnecter`,readOnly:`Lecture seule`,manualTransactions:`Transactions manuelles`,saveDatabaseFile:`Enregistrer le fichier de base de données`,saveDatabaseFileBlocked:`Enregistrer le fichier de base de données (charger d'abord le -wal)`,exit:`Quitter`},query:{title:`Requête`,execute:`Exécuter`,executeStatementAtCursor:`Exécuter l'instruction au curseur`,executeWholeScript:`Exécuter tout le script`,newQueryTab:`Nouvel onglet de requête`,findReplace:`Rechercher et remplacer`,localHistory:`Historique local…`},edit:{title:`Édition`,undo:`Annuler`,redo:`Rétablir`,cut:`Couper`,copy:`Copier`,paste:`Coller`,selectAll:`Tout sélectionner`},database:{title:`Base de données`,create:`Créer une base de données`,alter:`Modifier la base de données`,drop:`Supprimer la base de données`,copy:`Copier la base de données`,compare:`Comparer les schémas…`,truncate:`Tronquer la base de données`,compareData:`Comparer les données…`},table:{title:`Table`,create:`Créer une table`,alter:`Modifier la table`,drop:`Supprimer la table`,rename:`Renommer la table`,truncate:`Tronquer la table`,duplicateStructure:`Dupliquer la structure de la table`},export:{title:`Exporter`,csv:`Télécharger en CSV`,schemaHtml:`Schéma en HTML`,links:`Exporter les liens de colonnes…`,importLinks:`Importer les liens de colonnes…`},tools:{title:`Outils`,userManager:`Gestion des utilisateurs`,processList:`Liste des processus`,variables:`Variables`,status:`État`,flush:`Flush`,quickCommand:`Commande rapide`,viewErd:`Afficher l'ERD`,scratchpad:`Bloc-notes (SQLite dans le navigateur)`,federated:`Requête fédérée (jointure entre connexions)…`,federatedTab:`Fédérée {{n}}`},messages:{databaseFileSaved:`Fichier de base de données enregistré`,databaseExported:`Base de données exportée en téléchargement`,databaseExportedWithReason:`Base de données exportée en téléchargement — {{reason}}`,errorSavingDatabase:`Erreur lors de l'enregistrement de la base de données : {{message}}`,noDatabaseSelected:`Aucune base de données sélectionnée`,noTableSelected:`Aucune table sélectionnée`,noActiveConnection:`Aucune connexion active`,databaseDropped:`Base de données « {{database}} » supprimée`,errorDroppingDatabase:`Erreur lors de la suppression de la base de données : {{message}}`,noTablesInDatabase:`Aucune table trouvée dans la base de données « {{database}} »`,databaseTruncated_one:`{{count}} table de « {{database}} » tronquée`,databaseTruncated_other:`Les {{count}} tables de « {{database}} » ont été tronquées`,errorTruncatingDatabase:`Erreur lors du tronquage de la base de données : {{message}}`,tableDropped:`Table « {{table}} » supprimée`,errorDroppingTable:`Erreur lors de la suppression de la table : {{message}}`,tableTruncated:`Table « {{table}} » tronquée`,errorTruncatingTable:`Erreur lors du tronquage de la table : {{message}}`,renameTablePrompt:`Renommer la table « {{table}} » en :`,tableRenamed:`Table « {{table}} » renommée en « {{newName}} »`,errorRenamingTable:`Erreur lors du renommage de la table : {{message}}`,truncateDatabaseTitle:`Vider toutes les tables de "{{name}}" ?`,truncateDatabaseDescription:`Toutes les lignes des {{count}} table(s) de "{{name}}" seront supprimées. La structure des tables est conservée. Cette action est irréversible.`,truncateDatabaseConfirm:`Vider toutes les tables`,renameTableTitle:`Renommer la table`,renameTableConfirm:`Renommer`,noLinksToExport:`Aucun lien de colonne à exporter.`,linksExported:`{{count}} liens de colonnes exportés.`,linksImported:`{{count}} liens de colonnes importés.`,linksImportedPartial:`{{count}} liens de colonnes importés ; aucun profil correspondant pour : {{profiles}}`,linksImportFailed:`Impossible d'importer les liens de colonnes : {{reason}}`}},i={title:`À propos de Planche`,tagline:`Un client de base de données pour MySQL, MariaDB, PostgreSQL et SQLite.`,version:`Version`,website:`Site web`,disclaimer:`Planche est fourni « tel quel », sans garantie d'aucune sorte. Les auteurs ne sauraient être tenus responsables des dommages ou pertes de données découlant de son utilisation. Sauvegardez vos données avant d'exécuter des instructions destructrices.`,rights:`Tous droits réservés.`},a=JSON.parse(`{"dialog":{"title":"Se connecter à une base de données","firstQueryTab":"Requête 1","colHostName":"Nom de l'hôte","colTarget":"Cible","colDbms":"SGBD","noSaved":"Aucune connexion enregistrée","unnamed":"(sans nom)","pickOnConnect":"(choisir à la connexion)","noFile":"(aucun fichier)","selectPrompt":"Sélectionnez une connexion ou ajoutez-en une nouvelle","addNew":"Ajouter","delete":"Supprimer","testConnection":"Tester la connexion","connect":"Se connecter","close":"Fermer","unknownError":"Erreur inconnue","browserTestHint":"Les connexions SQLite dans le navigateur ouvrent un fichier local lorsque vous cliquez sur Se connecter.","testSuccess":"Connexion réussie","restoredUnsaved":"{{file}} : modifications non enregistrées restaurées depuis la copie en cache","restoredUnsavedDiskChanged":"{{file}} : modifications non enregistrées restaurées depuis la copie en cache — attention, le fichier sur le disque a changé depuis","walPending":"{{file}} est en mode WAL : des modifications récentes peuvent encore se trouver dans son fichier -wal. Utilisez « Charger le fichier -wal » ci-dessus pour les inclure.","walApplied":"{{file}} ouvert avec ses modifications -wal appliquées","connectFailedTitle":"Échec de la connexion","testSuccessDescription":"Le serveur a accepté les identifiants.","testFailedTitle":"Échec du test de connexion","privacy":"Rien de ce que vous saisissez ici n'est envoyé ni stocké sur les serveurs de planche.dev. Les profils de connexion restent uniquement dans le stockage local de ce navigateur ; les requêtes vont directement de l'agent local à votre base de données.","hostKeyTitle":"Clé d'hôte SSH inconnue","hostKeyDescription":"{{host}}:{{port}} a présenté une clé {{type}} d'empreinte {{fingerprint}}. Comparez-la avec l'empreinte fournie par l'administrateur du serveur ; accepter une mauvaise clé permet à un attaquant de lire votre trafic.","hostKeyAccept":"Faire confiance à cet hôte","gatewayTitle":"Profils de la passerelle","gatewayAdd":"Ajouter","gatewayAdded":"Profil de passerelle {{name}} ajouté.","gatewayReadOnly":"lecture seule","gatewayWritable":"modifiable","gatewayProfileHint":"Cette connexion utilise le profil « {{name}} » détenu par la passerelle ; rien à configurer ici.","gatewayLoadFailed":"Impossible de charger les profils de la passerelle : {{error}}"},"form":{"hostName":"Nom de l'hôte","hostNamePlaceholder":"Ma connexion","dataSource":"Source de données","openVia":"Ouvrir via","viaBrowser":"Navigateur (fichier local)","viaAgent":"Agent local","viaBrowserHint":"Rien à installer. Idéal pour les fichiers qu'aucun autre programme n'utilise : le navigateur travaille sur une copie en mémoire et ne peut pas verrouiller le fichier ; les modifications faites ailleurs pendant qu'il est ouvert ne sont pas vues et Enregistrer les écrase.","viaAgentHint":"Ouvre le fichier avec SQLite lui-même via npx planche — verrouillage et WAL corrects, sûr même si d'autres programmes utilisent la même base de données.","databaseFile":"Fichier de base de données","changeFile":"Changer de fichier","filePickerHint":"Un sélecteur de fichier s'ouvre lorsque vous cliquez sur Se connecter (astuce : ⌘⇧. affiche les fichiers cachés, ⌘⇧G permet de saisir un chemin).","fileRememberedHint":"Le fichier choisi est mémorisé (Chromium), la reconnexion ne demande donc que l'autorisation. Utilisez Connexion > Enregistrer le fichier de base de données pour écrire les modifications.","authToken":"Jeton d'authentification","authTokenPlaceholder":"Laisser vide pour utiliser le jeton de l'agent appairé","filePathPlaceholder":"/chemin/vers/database.sqlite ou :memory:","createIfMissing":"Créer si absent","createIfMissingHint":"Le chemin est résolu sur l'hôte du serveur de tunnel","host":"Hôte","port":"Port","database":"Base de données","serviceName":"Nom du service","user":"Utilisateur","password":"Mot de passe","savePassword":"Enregistrer le mot de passe","savePasswordHint":"Désactivé : le mot de passe n'est conservé que pour cette session du navigateur et n'est jamais écrit sur le disque.","charset":"Jeu de caractères","autoConnection":"Connexion automatique","safety":"Sécurité","environment":"Environnement","environmentHint":"colore l'onglet et l'espace de travail","readOnly":"Lecture seule","readOnlyHint":"Refuser les instructions qui modifient les données ou le schéma","transactions":"Transactions","txAuto":"Auto-commit","txManual":"Manuel — Commit / Rollback depuis la barre d'outils","ssh":"SSH","sshTunnel":"Tunnel SSH","sshTunnelHint":"Atteindre la base via un hôte de rebond SSH (le tunnel est ouvert par l'agent local)","sshHost":"Hôte SSH","sshPort":"Port SSH","sshUser":"Utilisateur SSH","sshAuth":"Auth SSH","sshAuthKey":"Clé privée","sshAuthPassword":"Mot de passe","sshAuthAgent":"ssh-agent","sshAuthAgentHint":"Utilise les clés chargées dans le ssh-agent de la machine qui exécute npx planche (SSH_AUTH_SOCK).","sshPassword":"Mot de passe SSH","sshKey":"Clé privée","sshKeyPick":"Choisir un fichier de clé…","sshKeyLoaded":"Clé chargée","sshKeyHint":"Laisser vide pour utiliser l'IdentityFile de ~/.ssh/config (ou ~/.ssh/id_*) sur la machine de l'agent ; une clé choisie est enregistrée avec ce profil","sshPassphrase":"Phrase secrète","sshPassphrasePlaceholder":"Laisser vide si la clé n'en a pas","sshSecretsHint":"Le mot de passe SSH, la clé privée et la phrase de passe suivent le réglage « Enregistrer le mot de passe » ci-dessus. Les clés d'hôte inconnues sont affichées pour vérification avant la première connexion et enregistrées dans ~/.planche/known_hosts sur la machine de l'agent.","sshHostPlaceholder":"bastion.example.com ou un alias Host de ~/.ssh/config","sshUserPlaceholder":"Laisser vide pour utiliser ~/.ssh/config","sshTargetHint":"L'hôte et le port de la base sont résolus sur l'hôte de rebond — indiquez l'adresse réelle de la base (ex. le point de terminaison RDS), pas localhost ni une redirection de port locale.","connectionString":"Chaîne de connexion","connectionStringApplied":"Reportée dans les champs ci-dessous. La chaîne elle-même n'est pas enregistrée, seuls les champs le sont.","connectionStringInvalid":"Ce n'est pas un URI PostgreSQL (attendu : postgresql://user:password@host/database).","neonHint":"Collez l'URI de la console Neon (Connect > Connection string) ; les champs ci-dessous sont remplis à partir de celui-ci.","supabaseHint":"Collez l'URI de Supabase (Connect > Session pooler ou Direct connection) ; les champs ci-dessous sont remplis à partir de celui-ci.","supabasePoolerWarning":"Le port 6543 est le pooler en mode transaction : chaque instruction peut s'exécuter sur un backend différent, donc le changement de schéma, les tables temporaires, les prepared statements et les transactions manuelles ne fonctionnent pas. Utilisez le pooler de session (port 5432) ou la connexion directe.","managedTlsHint":"TLS est toujours activé pour ce service ; la connexion va directement de l'agent local au service (pas de tunnel SSH).","d1AccountId":"Account ID","d1DatabaseId":"Database ID","d1ApiToken":"Jeton API","d1Hint":"Account ID : tableau de bord Cloudflare, à droite de l'accueil du compte. Database ID : Storage & Databases > D1 > votre base. Jeton : My Profile > API Tokens > Create Token avec la permission « D1 Edit » (ou « D1 Read » en lecture seule). L'agent local appelle l'API Cloudflare avec ce jeton.","d1LimitsHint":"D1 exécute chaque requête isolément avec validation automatique : les transactions manuelles sont indisponibles ; la base apparaît comme l'unique schéma « main ».","tls":"TLS","tlsEnable":"Chiffrer la connexion","tlsVerify":"Vérifier le certificat du serveur","tlsVerifyHint":"Désactivé : les certificats auto-signés sont acceptés (chiffré, mais le serveur n'est pas authentifié). Indisponible via un tunnel SSH."},"agent":{"copy":"Copier","looking":"Recherche de l'agent Planche…","online":"L'agent <b>v{{version}}</b> est en cours d'exécution sur <mono>{{url}}</mono>","outdated":"L'agent v{{version}} utilise le protocole {{protocol}}, mais cette application en requiert un plus récent. Redémarrez-le avec <cmd/>","unauthorized":"L'agent <b>v{{version}}</b> est en cours d'exécution sur <mono>{{url}}</mono>, mais cette application n'est pas appairée avec lui (le jeton change à chaque démarrage). Ouvrez le lien affiché dans le terminal de l'agent, ou collez le jeton sous Configurer.","offline":"Aucun agent sur <mono>{{url}}</mono>. Exécutez <cmd/> dans un terminal — cela ouvre cette application déjà appairée.","close":"Fermer","configure":"Configurer","checkAgain":"Vérifier à nouveau","urlLabel":"URL de l'agent","urlPlaceholder":"http://127.0.0.1:8888 (par défaut)","tokenLabel":"Jeton","tokenPlaceholder":"Affiché par l'agent","reset":"Réinitialiser","save":"Enregistrer","remoteWarning":"Cet agent n'est pas sur votre ordinateur ({{host}}) : chaque connexion y envoie ses mots de passe et clés SSH.","remoteRefusedTitle":"Agent distant refusé","remoteRefused":"L'agent doit tourner sur cet ordinateur (127.0.0.1 ou localhost). Pour un agent sur une autre machine, redirigez son port avec \`ssh -L 8888:127.0.0.1:8888 user@host\` et gardez l'URL http://127.0.0.1:8888.","gateway":"Passerelle « {{name}} » : {{count}} profils côté serveur. Les identifiants restent sur la passerelle ; choisissez un profil ci-dessous."},"tab":{"noConnections":"Aucune connexion ouverte. Cliquez sur Se connecter pour commencer.","theSqliteFile":"le fichier SQLite","reopened":"{{file}} rouvert","reopenFailed":"Impossible de rouvrir le fichier : {{message}}","reopenPrompt":"Le navigateur a de nouveau besoin de votre autorisation pour lire <b>{{file}}</b>.","reopenFile":"Rouvrir le fichier","closeConnection":"Fermer la connexion","reconnected":"{{file}} reconnecté","accessNotGranted":"L'accès au fichier n'a pas été accordé ; Enregistrer exportera un téléchargement à la place.","detachedPrompt":"Travail sur une copie en cache de <b>{{file}}</b>. Reconnectez le fichier pour enregistrer les modifications sur place.","reconnectFile":"Reconnecter le fichier","detachedHide":"Masquer (Enregistrer demandera le fichier si nécessaire)","walFramesApplied_one":"{{count}} trame WAL appliquée depuis {{file}}-wal","walFramesApplied_other":"{{count}} trames WAL appliquées depuis {{file}}-wal","walNoChanges":"Le fichier -wal ne contenait aucune modification validée","walLoadFailed":"Impossible de charger le fichier -wal : {{message}}","walPrompt":"<b>{{file}}</b> est en mode WAL : il peut ne pas afficher les données les plus récentes tant que son fichier <mono>{{file}}-wal</mono> n'est pas chargé, et l'enregistrement est désactivé jusque-là. Si aucun fichier de ce type n'existe à côté (la base de données a été fermée proprement), confirmez-le plutôt. Si un autre programme utilise encore cette base de données, ouvrez-la plutôt via l'agent local (<mono>npx planche</mono>) : le navigateur ne peut pas partager le fichier en toute sécurité.","loadWal":"Charger le fichier -wal","noWalHint":"J'ai vérifié : il n'y a pas de fichier -wal à côté de la base de données","noWal":"Pas de fichier -wal","dismiss":"Ignorer","walHide":"Masquer (l'enregistrement reste désactivé)","readOnlyBadge":"lecture seule"}}`),o={connect:`Se connecter (Alt+N)`,disconnect:`Se déconnecter`,newQueryTab:`Nouvel onglet de requête (Alt+T)`,execute:`Exécuter (F9)`,executeStatement:`Exécuter l'instruction au curseur / la sélection (Ctrl+Enter)`,commit:`Commit`,commitHint:`Valider la transaction ouverte`,noOpenTransaction:`Aucune transaction ouverte`,rollback:`Rollback`,rollbackHint:`Annuler la transaction ouverte`,readOnlyBadge:`lecture seule`,readOnlyHint:`Cette connexion refuse les instructions qui modifient les données ou le schéma`,userManager:`Gestion des utilisateurs (Alt+U)`,quickCommand:`Commande rapide`,processList:`Liste des processus`,variables:`Variables`,status:`État`,flush:`Flush`,fullscreen:`Plein écran`},s={readOnly:`lecture seule`,txOpen:`tx ouverte`,manualTx:`tx manuelle`},c={title:`Commande rapide`,description:`Rechercher une commande à exécuter...`,inputPlaceholder:`Saisissez une commande ou recherchez...`,empty:`Aucune commande trouvée.`,groups:{connection:`Connexion`,query:`Requête`,database:`Base de données`,table:`Table`,tools:`Outils`},commands:{connect:`Se connecter`,disconnect:`Se déconnecter`,executeQuery:`Exécuter la requête`,newQueryTab:`Nouvel onglet de requête`,createDatabase:`Créer une base de données`,dropDatabase:`Supprimer la base de données`,createTable:`Créer une table`,alterTable:`Modifier la table`,dropTable:`Supprimer la table`,processList:`Liste des processus`,serverVariables:`Variables du serveur`,serverStatus:`État du serveur`,flush:`Flush`,userManager:`Gestion des utilisateurs`}},l={title:`Bienvenue dans Planche`,intro:`Un client SQL qui s'exécute dans votre navigateur. Vos bases de données sont accessibles via un petit agent sur votre machine : identifiants et données ne quittent jamais votre ordinateur.`,skip:`Passer`,skipTitle:`Masquer cet écran (Aide > Premiers pas le fait réapparaître)`,copy:`Copier`,copied:`Copié`,sampleOpenFailed:`Impossible d'ouvrir la base de données d'exemple : {{message}}`,steps:{agent:{title:`Lancer l'agent local`,body:`Dans un terminal (Node.js 22 ou plus récent), exécutez ceci une fois. Cela démarre l'agent et l'appaire avec cette page.`},connection:{title:`Ajouter une connexion`,body:`Choisissez votre base de données pour ouvrir le formulaire de connexion avec les bons réglages par défaut.`},sample:{title:`Pas de base de données sous la main ? Essayez l'exemple`,body:`Chargez une base de données d'exemple de boutique en ligne (24 tables, ~50 k lignes, vues et déclencheurs) dans le navigateur pour essayer l'éditeur, la grille et l'arborescence du schéma.`,loading:`Chargement de l'exemple…`,button:`Essayer la base de données d'exemple`}},terms:{title:`Avant de commencer`,local:`Tout s’exécute localement : identifiants, requêtes et résultats restent sur votre machine et ne nous sont jamais envoyés.`,asIs:`Planche est fourni en l’état, sans garantie. Les garde-fous (confirmation des opérations destructives, mode lecture seule) sont des commodités, pas des garanties.`,dataLoss:`Vous êtes responsable de chaque instruction exécutée via Planche. Sauvegardez vos données avant toute opération destructive.`,agree:`J’ai lu et j’accepte les conditions d’utilisation.`,accepted:`Vous avez accepté les conditions d’utilisation.`,readFull:`Lire les conditions complètes`}},u={treeLabel:`Schéma`,unreachableHint:`Ce n'est pas la base de données à laquelle cette connexion est liée ; créez un profil pour elle afin de la parcourir`,objectType:{table:`Table`,view:`Vue`,procedure:`Procédure`,function:`Fonction`,trigger:`Déclencheur`,event:`Événement`},menu:{showCreate:`Afficher CREATE {{type}}`,alter:`Modifier {{type}}`,drop:`Supprimer {{type}}`,create:`Créer {{type}}`,refresh:`Actualiser`,unreachable:`Connectez-vous avec un profil lié à cette base de données pour la parcourir`,openDatabase:`Ouvrir la base de données`,createSchema:`Créer un schéma`,createTable:`Créer une table`,dropDatabase:`Supprimer la base de données`,openSchema:`Ouvrir le schéma`,dropSchema:`Supprimer le schéma`,newQueryTab:`Nouvel onglet de requête`,generateSql:`Générer du SQL`,openTable:`Ouvrir la table`,alterTable:`Modifier la table`,showCreateTable:`Afficher CREATE TABLE`,duplicateStructure:`Dupliquer la structure`,copyTable:`Copier la table vers…`,compare:`Comparer {{type}}…`,truncateTable:`Tronquer la table`,dropTable:`Supprimer la table`,exportCsv:`Exporter en CSV`,openView:`Ouvrir la vue`,alterView:`Modifier la vue`,showCreateView:`Afficher CREATE VIEW`,dropView:`Supprimer la vue`,compareData:`Comparer les données…`},actions:{createStatementUnavailable:`-- Impossible de récupérer l'instruction CREATE pour {{type}} {{name}}`,getCreateFailed:`Échec de la récupération de CREATE {{type}} : {{message}}`,createTabTitle:`Créer {{type}}`,createSchemaTabTitle:`Créer un schéma`,generateSqlFailed:`Impossible de générer le SQL : {{message}}`,dropTableTitle:`Supprimer la table « {{name}} » ?`,dropTableDescription:`Cela supprime définitivement la table et toutes ses lignes{{from}}. Cette action est irréversible.`,dropTableConfirm:`Supprimer la table`,dropObjectTitle:`Supprimer {{type}} « {{name}} » ?`,dropObjectDescription:`La définition de {{type}} sera supprimée{{from}}. Cette action est irréversible.`,dropObjectConfirm:`Supprimer {{type}}`,fromDatabase:` de la base de données « {{database}} »`,dropped:`{{type}} {{name}} supprimé`,dropFailed:`Échec de la suppression de {{type}}`,dropDatabaseTitle:`Supprimer la base de données « {{name}} » ?`,dropDatabaseDescription:`Cela supprime définitivement la base de données avec toutes ses tables et données. Cette action est irréversible.`,dropDatabaseConfirm:`Supprimer la base de données`,droppedDatabase:`Base de données {{name}} supprimée`,dropDatabaseFailed:`Échec de la suppression de la base de données`,dropSchemaTitle:`Supprimer le schéma « {{name}} » ?`,dropSchemaDescription:`Cela supprime définitivement le schéma avec toutes ses tables et données. Cette action est irréversible.`,dropSchemaConfirm:`Supprimer le schéma`,droppedSchema:`Schéma {{name}} supprimé`,dropSchemaFailed:`Échec de la suppression du schéma`,truncateTitle:`Tronquer la table « {{name}} » ?`,truncateDescription:`Toutes les lignes de « {{name}} » seront supprimées. La structure de la table est conservée. Cette action est irréversible.`,truncateConfirm:`Tronquer la table`,truncated:`{{name}} tronquée`,truncateFailed:`Échec du tronquage`},tree:{loadDatabasesFailed:`Échec du chargement des bases de données : {{message}}`}},d={editor:{destructiveMarker:`Destructeur : {{action}} {{names}}`,readOnlyMarker:`La connexion est en lecture seule ; cette instruction modifie les données ou le schéma`,actionExecute:`Exécuter (selon les paramètres)`,actionExecuteStatement:`Exécuter l'instruction au curseur / la sélection`,actionExecuteScript:`Exécuter tout le script`},tabs:{newQuery:`Nouvelle requête`,queryTitle:`Requête {{n}}`,erdViewer:`Visionneuse ERD`,close:`Fermer`,closeOthers:`Fermer les autres`,closeLeft:`Fermer les onglets à gauche`,closeRight:`Fermer les onglets à droite`,closeAll:`Tout fermer`},executor:{noActiveConnection:`Aucune connexion active`,uncommittedTitle:`Transaction non validée`,uncommittedDescription:`Cette connexion a une transaction ouverte. La déconnexion annulera ses modifications.`,uncommittedConfirm:`Annuler (rollback) et se déconnecter`,unsavedTitle:`Modifications non enregistrées`,unsavedDescription:`{{file}} contient des modifications qui n'ont pas été enregistrées dans son fichier. La déconnexion les abandonne (utilisez d'abord Connexion > Enregistrer le fichier de base de données pour les conserver).`,theSqliteDatabase:`La base de données SQLite`,unsavedConfirm:`Abandonner et se déconnecter`}},f={tabs:{message:`Message`,info:`Infos`,history:`Historique`,result:`Résultat`,resultN:`Résultat {{n}}`},message:{executing:`Exécution de la requête...`,error:`Erreur : {{message}}`,total:` (Total : {{ms}} ms)`,ready:`Prêt.`,log:`Journal d'exécution`,statementN:`Instruction {{n}}`,limitedBadge:`limite atteinte`,insertId:`insert id {{id}}`,failed:`Échec`,failedStatement:`Instruction en échec`,summary:`{{ok}} réussies · {{failed}} échouées · {{ms}} au total`,copy:`Copier`,copied:`Copié`,showSql:`Afficher le SQL`,hideSql:`Masquer le SQL`},info:{empty:`Aucune information de requête disponible.`,resultN:`Résultat {{n}}`,metadata:`Métadonnées de la requête`,executionTime:`Temps d'exécution`,notAvailable:`N/D`,affectedRows:`Lignes affectées`,fields:`Champs`,fieldDetails:`Détails des champs`,colName:`Nom`,colType:`Type`,colTable:`Table`,resultSets:`Jeux de résultats`,rowsReturned:`Lignes renvoyées`,insertId:`Dernier ID inséré`,lastQuery:`Dernière instruction exécutée`,copy:`Copier`,copied:`Copié`,colOrigin:`Origine`,primaryKey:`Clé primaire`,rowsAndFields:`{{rows}} lignes × {{fields}} champs`,noFields:`Cette instruction n'a renvoyé aucune colonne.`},rowForm:{colColumn:`Colonne`,colValue:`Valeur`,insertTitle:`Insérer une ligne`,editTitle:`Modifier la ligne`,loading:`Chargement des colonnes...`,preview:`Instruction`,nothingToWrite:`Rien à écrire`,insert:`Insérer`,update:`Mettre à jour`,stageInsert:`Ajouter comme ligne en attente`,stageEdit:`Appliquer à la grille`,stageHint:`Place les valeurs dans la grille sans rien exécuter ; validez plus tard avec les autres modifications.`,inserted:`Ligne insérée dans {{table}}`,updated:`Ligne mise à jour dans {{table}}`,confirmInsertTitle:`Insérer une ligne dans {{table}} ?`,confirmUpdateTitle:`Mettre à jour une ligne de {{table}} ?`,inTransaction:`S'exécute dans la transaction ouverte`,pickDate:`Choisir une date`,now:`Maintenant`,formatJson:`Formater`,binaryUnsupported:`Les colonnes binaires ne sont pas modifiables ici ; laissez NULL/DEFAULT ou utilisez du SQL.`,generateUuid:`Générer un UUID`,defaultValue:`Valeur par défaut`,clickToChange:`Cliquer pour modifier`,empty:`(vide)`,autoHint:`Généré par le serveur`,mode:{keep:`Conserver`,auto:`Auto`,value:`Valeur`},invalid:{integer:`Saisissez un entier`,unsigned:`Cette colonne n'accepte pas les nombres négatifs`,number:`Saisissez un nombre`,json:`JSON invalide`,date:`Utilisez YYYY-MM-DD`,datetime:`Utilisez YYYY-MM-DD HH:MM:SS`,time:`Utilisez HH:MM:SS`,length:`{{max}} caractères maximum`}},history:{copied:`Copié dans le presse-papiers`,searchPlaceholder:`Rechercher dans l'historique...`,all:`Tous`,success:`Réussies`,failed:`Échouées`,thisTab:`Cet onglet seulement`,noMatch:`Aucune entrée ne correspond.`,count:`{{count}} entrées`,clear:`Effacer`,clearTitle:`Effacer l'historique des requêtes ?`,clearDescription:`Les {{count}} entrées de cette connexion seront supprimées. Cette action est irréversible.`,clearConfirm:`Effacer l'historique`,insert:`Insérer dans l'éditeur`,inserted:`Inséré dans l'éditeur`,copy:`Copier`,rows:`{{count}} lignes`,affected:`{{count}} affectées`,today:`Aujourd'hui`,yesterday:`Hier`,empty:`Aucun historique de requêtes.`},json:{arrayLength:`Array[{{count}}]`,keys_one:`{{count}} clé`,keys_other:`{{count}} clés`,invalid:`JSON invalide`,clickToView:`Cliquer pour afficher le JSON`,expandAll:`Tout déplier`,collapseAll:`Tout replier`,edit:`Modifier`,view:`Afficher`,copied:`Copié`,copy:`Copier`,shortcutHint:`{{mod}}+Enter pour enregistrer · Esc pour annuler`,cancel:`Annuler`,save:`Enregistrer`},grid:{readOnlyConnection:`Connexion en lecture seule`,readOnlyWal:`Lecture seule : fichier -wal non chargé`,readOnlyNoPk:`Lecture seule : la table n'a pas de clé primaire`,commitTitle:`Valider {{count}} modification(s) dans {{table}} ?`,commitDescription:`Les instructions suivantes seront exécutées.`,commitConfirm:`Commit`,rowPrefix:`Ligne {{row}} :`,cancelled:`annulé`,commitFailed:`Échec du commit : {{message}}`,executedInTransaction:`{{count}} modification(s) exécutée(s) dans la transaction ouverte — cliquez sur Commit dans la barre d'outils pour les rendre permanentes (un rechargement les annule)`,committed:`{{count}} modification(s) validée(s) dans {{table}}`,noData:`Aucune donnée à afficher.`,commit:`Commit`,discard:`Abandonner`,addRow:`Ajouter une ligne`,removeNewRow:`Annuler cette nouvelle ligne`,addRowForm:`Ajouter via un formulaire`,addRowFormHint:`Ouvre un formulaire avec un champ par colonne (validé en INSERT)`,editRowForm:`Modifier cette ligne dans un formulaire`,addRowHint:`Ajouter une nouvelle ligne (validée par INSERT)`,delete:`Supprimer`,deleteCount:`Supprimer ({{count}})`,deleteHint:`Supprimer les lignes sélectionnées (validé par DELETE). Sélectionnez les lignes avec la colonne des numéros de ligne.`,field:`Champ`,searchPlaceholder:`Rechercher...`,orderBy:`Trier par`,none:`Aucun`,refresh:`Actualiser`,dismiss:`Ignorer`,clearSelection:`Effacer la sélection`,columns:`Colonnes`,showAllColumns:`Tout afficher`,hideAllColumns:`Tout masquer`,selectAll:`Sélectionner toutes les lignes`,emptyTable:`Cette table ne contient aucune ligne.`,noRows:`Aucune ligne renvoyée.`,addARow:`Ajouter une ligne`,markedForDeletion:`Marquée pour suppression — cliquez pour restaurer`,newRow:`Nouvelle ligne`,clickToSelect:`Cliquez pour sélectionner ; Maj/Ctrl pour une sélection multiple`,rows:`Lignes : {{count}}`,rowsWithNew:`Lignes : {{count}} (+{{added}})`,sortedBy:`Trié par : {{column}} {{direction}}`,selected:`{{count}} sélectionnée(s)`,cellsModified:`{{count}} cellule(s) modifiée(s)`,newCount:`{{count}} nouvelle(s)`,toDelete:`{{count}} à supprimer`,searchMode:`Mode de correspondance`,contains:`contient`,equals:`égal à`,followLink:`Ouvrir {{table}} où {{column}} = valeur`,linkColumn:`Lier « {{column}} » à une autre table…`,editLink:`Modifier le lien de « {{column}} »…`,removeLink:`Supprimer le lien`,copyValue:`Copier la valeur`,filterByValue:`Filtrer : {{column}} = cette valeur`,clearFilter:`Effacer le filtre`,copyColumnName:`Copier le nom de la colonne`,editCell:`Modifier la cellule`,setNull:`Mettre à NULL`,setEmpty:`Mettre une chaîne vide`,restoreRow:`Restaurer la ligne`,hideColumn:`Masquer la colonne « {{column}} »`,copyRowsTsv_one:`Copier la ligne en TSV (avec en-tête)`,copyRowsTsv_other:`Copier {{count}} lignes en TSV (avec en-tête)`,copyRowsCsv_one:`Copier la ligne en CSV`,copyRowsCsv_other:`Copier {{count}} lignes en CSV`,copyRowsJson_one:`Copier la ligne en JSON`,copyRowsJson_other:`Copier {{count}} lignes en JSON`,copyRowsInsert_one:`Copier la ligne en INSERT`,copyRowsInsert_other:`Copier {{count}} lignes en INSERT`,deleteRowsPending_one:`Supprimer la ligne (en attente du Commit)`,deleteRowsPending_other:`Supprimer {{count}} lignes (en attente du Commit)`,sendRowsToScratchpad_one:`Envoyer la ligne au bloc-notes`,sendRowsToScratchpad_other:`Envoyer {{count}} lignes au bloc-notes`,sendAllToScratchpad:`Envoyer les {{count}} lignes chargées au bloc-notes`,sentToScratchpad:`{{count}} lignes copiées dans la table {{table}} du bloc-notes.`,changesSince:`Depuis le dernier chargement : {{changed}} modifiées · {{added}} nouvelles · {{gone}} disparues`,changesToggle:`Afficher/masquer ce qui a changé depuis le chargement précédent`,changesDismiss:`Oublier ces changements`,previousValue:`Valeur précédente : {{value}}`},link:{title:`Lier la colonne à une autre table`,source:`Colonne`,hint:`Les valeurs de cette colonne deviennent des liens : un clic ouvre la table cible filtrée sur les lignes correspondantes. Les vraies clés étrangères sont liées automatiquement.`,targetDatabase:`Base cible`,targetTable:`Table cible`,targetColumn:`Colonne cible`,pickTable:`Choisir une table`,pickColumn:`Choisir une colonne`,remove:`Supprimer le lien`,cancel:`Annuler`,save:`Enregistrer le lien`,targetConnection:`Connexion cible`,targetNotConnected:`La connexion liée n'est pas ouverte. Connectez-la d'abord.`}},p={defaultDescription:`Cette action est irréversible.`,typeToConfirm:`Saisissez <name/> pour confirmer`,cancel:`Annuler`,confirm:`Confirmer`,ok:`OK`},m={dialog:{createTitle:`Créer une table`,alterTitle:`Modifier la table`,duplicateTitle:`Dupliquer la structure de la table`,create:`Créer`,alter:`Modifier`,cancel:`Annuler`,tableName:`Nom de la table`,tableNamePlaceholder:`Saisissez le nom de la table...`,loading:`Chargement du schéma de la table...`,tabSchema:`Schéma`,tabIndexes:`Index`,tabProperties:`Propriétés`},schema:{colField:`Nom du champ`,colType:`Type de données`,colLength:`Longueur`,colDefault:`Par défaut`,colPk:`PK`,colNotNull:`Not Null`,colUnsigned:`Unsigned`,colAutoIncrement:`Auto Incr`,colZerofill:`Zerofill`,colComment:`Commentaire`,empty:`Aucune colonne définie. Cliquez sur « Ajouter une colonne » pour en ajouter une.`,add:`Ajouter une colonne`,remove:`Supprimer la colonne`},indexes:{colName:`Nom de l'index`,colType:`Type d'index`,colColumns:`Colonnes`,empty:`Aucun index défini. Cliquez sur « Ajouter un index » pour en ajouter un.`,add:`Ajouter un index`,remove:`Supprimer l'index`},index:{addTitle:`Ajouter un index`,editTitle:`Modifier l'index`,name:`Nom de l'index`,namePlaceholder:`Saisissez le nom de l'index`,type:`Type d'index`,columns:`Colonnes`,noColumns:`Aucune colonne disponible. Définissez d'abord des colonnes dans l'onglet Schéma.`,unnamed:`(sans nom)`,cancel:`Annuler`,ok:`OK`},properties:{engine:`Moteur`,charset:`Jeu de caractères`,collation:`Collation`,autoIncrement:`Auto-incrément`,autoIncrementPlaceholder:`Par défaut`,comment:`Commentaire`},info:{engine:`Moteur`,version:`Version`,rowFormat:`Format des lignes`,rows:`Lignes`,avgRowLength:`Longueur moyenne des lignes`,dataLength:`Taille des données`,createTime:`Date de création`,updateTime:`Date de mise à jour`,collation:`Collation`,comment:`Commentaire`},copy:{title:`Copier la table`,source:`Source`,targetConnection:`Connexion cible`,targetDatabase:`Base cible`,targetTable:`Nom de la table cible`,what:`Copier`,structureAndData:`Structure et données`,structureOnly:`Structure seule`,ifExists:`Si la table cible existe`,abort:`Abandonner (par défaut)`,dropAndRecreate:`Supprimer et recréer (le nom devra être ressaisi)`,preview:`CREATE TABLE sur la cible (modifiable)`,crossEngineHint:`La cible est {{engine}} : vérifiez les types ci-dessous, les attributs propres à MySQL ont été retirés.`,readOnly:`lecture seule`,loading:`Chargement…`,progressCreate:`Création de la table…`,progressCount:`Comptage des lignes…`,progressRows:`{{copied}} lignes copiées sur {{total}}`,progressDone:`Terminé`,doneTitle:`Table copiée`,doneRows:`{{count}} lignes copiées dans {{table}}.`,doneStructure:`Structure de {{table}} créée.`,noColumns:`La table source n'a aucune colonne.`,exists:`La table {{table}} existe déjà dans la cible. Choisissez un autre nom ou « Supprimer et recréer ».`,dropTitle:`Supprimer la table existante {{table}} ?`,dropDescription:`La table cible et toutes ses lignes seront supprimées avant la copie. Cette action est irréversible.`,dropConfirm:`Supprimer et copier`,cancelled:`Copie annulée.`,stop:`Arrêter`,cancel:`Annuler`,copy:`Copier`}},h={copy:{title:`Copier la base de données`,source:`Base de données source`,target:`Nom de la base de données cible`,targetPlaceholder:`Saisissez le nom de la base de données cible`,options:`Options`,structureAndData:`Structure et données`,structureOnly:`Structure uniquement`,cancel:`Annuler`,copy:`Copier`},diff:{title:`Comparer les schémas`,source:`Source`,target:`Cible`,pickConnection:`Connexion`,pickDatabase:`Base de données`,crossEngineHint:`Moteurs différents : les noms de types varient selon le dialecte, la plupart des colonnes apparaîtront comme modifiées.`,sameSide:`La source et la cible sont la même base.`,summary:`{{changed}} modifiées, {{missingTarget}} absentes de la cible, {{missingSource}} uniquement dans la cible, {{identical}} identiques`,showIdentical:`Afficher les tables identiques`,identicalAll:`Les tables sont identiques.`,column:`Colonne`,index:`Index`,object:`Objet`,selectTable:`Sélectionnez une table pour voir ses différences.`,missingInTarget:`{{table}} n'existe pas dans la cible ; le script la crée.`,missingInSource:`{{table}} n'existe que dans la cible ; le script la supprime (en commentaire sauf si les DROP sont inclus).`,includeDrops:`Inclure les instructions DROP en SQL exécutable (par défaut : en commentaire)`,tabTitle:`Sync {{database}}`,close:`Fermer`,compare:`Comparer`,comparing:`Comparaison…`,openScript:`Ouvrir le script dans l'éditeur`,noDefinition:`Aucune instruction CREATE disponible`},create:{title:`Créer une base de données`,name:`Nom de la base de données`,namePlaceholder:`Saisissez le nom de la base de données`,charset:`Jeu de caractères`,collation:`Collation`,cancel:`Annuler`,create:`Créer`},csv:{title:`Télécharger en CSV`,target:`Cible`,targetQueryResult:`Résultat de la requête actuelle`,targetTableData:`Données de la table`,tableName:`Nom de la table`,tableNamePlaceholder:`Saisissez le nom de la table`,delimiter:`Délimiteur`,delimiterComma:`Virgule (,)`,delimiterTab:`Tabulation (\\t)`,delimiterSemicolon:`Point-virgule (;)`,delimiterPipe:`Barre verticale (|)`,includeHeaders:`Inclure les en-têtes`,cancel:`Annuler`,download:`Télécharger`,downloading:`Téléchargement...`,progress:`{{loaded}} lignes sur {{total}} écrites`,progressUnknown:`{{loaded}} lignes écrites`,stop:`Arrêter`,done:`{{count}} lignes de {{table}} exportées en CSV.`,database:`Base de données`,databasePlaceholder:`Choisir une base`},html:{title:`Schéma en HTML`,database:`Base de données`,selectDatabase:`Sélectionner une base de données`,tables:`Tables à inclure`,selectAll:`Tout sélectionner`,deselectAll:`Tout désélectionner`,noTables:`Aucune table disponible.`,include:`Inclure`,includeColumns:`Colonnes`,includeIndexes:`Index`,includeProperties:`Propriétés`,cancel:`Annuler`,generate:`Générer`,generating:`Génération...`,sectionColumns:`Colonnes`,sectionIndexes:`Index`,sectionProperties:`Propriétés`,docTitle:`Schéma : {{database}}`,heading:`Base de données : {{database}}`,summary:`Tables : {{count}} | Généré le : {{date}}`,footer:`Généré par Planche 2026`},dataDiff:{title:`Comparer les données`,pickTable:`Table`,hint:`Les lignes sont associées par la clé primaire de la table source et comparées en texte. Jusqu'à {{cap}} lignes par côté sont chargées ; filtrez d'abord les grandes tables.`,sameSide:`La source et la cible sont la même table.`,noPrimaryKey:`{{table}} n'a pas de clé primaire ; la comparaison en a besoin pour associer les lignes.`,keyMissingInTarget:`La table cible n'a pas la ou les colonnes clés : {{columns}}`,summary:`Clé : {{key}} — {{added}} absentes de la cible, {{changed}} différentes, {{removed}} uniquement dans la cible, {{identical}} identiques`,capped:`Seules les {{cap}} premières lignes de chaque côté ont été comparées.`,ignoredColumns:`Colonnes ignorées (un seul côté) : {{columns}}`,added_one:`{{count}} absente de la cible`,added_other:`{{count}} absentes de la cible`,changed_one:`{{count}} différente`,changed_other:`{{count}} différentes`,removed_one:`{{count}} uniquement dans la cible`,removed_other:`{{count}} uniquement dans la cible`,none:`Rien dans ce groupe.`,more:`… {{count}} de plus non listées`,includeDeletes:`Inclure les instructions DELETE en SQL exécutable (par défaut : en commentaire)`,tabTitle:`Sync données {{table}}`,loading:`Chargement des lignes — source : {{source}}, cible : {{target}}`}},g={manager:{title:`Gestion des utilisateurs`,addUser:`Ajouter un utilisateur`,removeUser:`Supprimer l'utilisateur`,noUsers:`Aucun utilisateur chargé`,grantScope:`Portée des privilèges`,apply:`Appliquer`,close:`Fermer`,removed:`Utilisateur '{{user}}'@'{{host}}' supprimé`,selectUserFirst:`Veuillez d'abord sélectionner un utilisateur`,applied:`Modifications appliquées`},add:{title:`Ajouter un utilisateur`,username:`Nom d'utilisateur`,usernamePlaceholder:`Saisissez le nom d'utilisateur`,host:`Hôte`,password:`Mot de passe`,passwordPlaceholder:`Saisissez le mot de passe`,confirmPassword:`Confirmer le mot de passe`,confirmPasswordPlaceholder:`Confirmez le mot de passe`,plugin:`Plugin`,cancel:`Annuler`,add:`Ajouter`,usernameRequired:`Le nom d'utilisateur est requis`,passwordMismatch:`Les mots de passe ne correspondent pas`,added:`Utilisateur '{{user}}'@'{{host}}' ajouté`},privileges:{globalTitle:`Privilèges globaux`,databaseTitle:`Privilèges sur la base de données`,tableTitle:`Privilèges sur la table`,checkAll:`Tout cocher`,uncheckAll:`Tout décocher`,categoryData:`Données`,categoryStructure:`Structure`,categoryAdministration:`Administration`},grantTree:{globalPrivileges:`Privilèges globaux`}},_={close:`Fermer`,noActiveConnection:`Aucune connexion active`,variableName:`Nom de la variable`,value:`Valeur`,scope:{session:`Session`,global:`Global`},findReplace:{findPlaceholder:`Rechercher`,replacePlaceholder:`Remplacer`,found:`{{count}} trouvé(s)`,noResults:`Aucun résultat`,previous:`Précédent`,next:`Suivant`,close:`Fermer`,replace:`Remplacer`,all:`Tout`,caseSensitive:`Respecter la casse`,regex:`Regex`,wholeWord:`Mot entier`},flush:{title:`Flush`,executed:`Exécuté : {{command}}`,executeError:`Erreur lors de l'exécution de {{command}} : {{message}}`},localHistory:{title:`Historique local`,description:`Versions de cet onglet capturées avant chaque exécution et avant qu'un modèle ne l'écrase.`,empty:`Aucun historique pour cet onglet pour l'instant.`,restored:`Contenu de l'éditeur restauré depuis l'historique local`,restore:`Restaurer cette version`,chars:`{{count}} caractères`,reason:{execute:`avant exécution`,replaced:`avant écrasement`,restore:`avant restauration`}},processList:{title:`Liste des processus`,refresh:`Actualiser`,autoRefresh:`Actualisation auto`,empty:`Aucun processus à afficher`,kill:`Tuer`,killProcess:`Tuer le processus`,selectToKill:`Veuillez sélectionner un processus à tuer`,killed:`Processus {{id}} tué`,killError:`Erreur lors de l'arrêt du processus : {{message}}`,loadError:`Erreur lors du chargement de la liste des processus : {{message}}`,updatedAt:`mis à jour à {{time}}`,filterPlaceholder:`Filtrer par utilisateur, hôte, base, SQL...`,hideIdle:`Masquer les inactifs`,noMatch:`Aucun processus ne correspond au filtre`,self:`moi`,selfHint:`Il s'agit de la session de Planche`,statementOf:`Instruction de #{{id}}`,noStatement:`Aucune instruction`,copy:`Copier`,copied:`Copié`,killConfirmTitle:`Terminer le processus {{id}} ?`,killConfirmDescription:`La session de {{user}}@{{host}} sera fermée et l'instruction en cours interrompue. Une transaction ouverte sera annulée.`,stats:{total:`Total`,active:`Actifs`,idle:`Inactifs`,longest:`Plus longue exécution`},columns:{id:`Id`,user:`Utilisateur`,host:`Hôte`,db:`db`,command:`Commande`,time:`Temps`,state:`État`,info:`Infos`,action:`Action`}},status:{title:`État du serveur`,filterPlaceholder:`Filtrer les variables d'état...`,empty:`Aucune variable d'état à afficher`,loadError:`Erreur lors du chargement de l'état : {{message}}`},variables:{title:`Variables du serveur`,filterPlaceholder:`Filtrer les variables...`,empty:`Aucune variable à afficher`,loadError:`Erreur lors du chargement des variables : {{message}}`}},v={empty:{title:`Ouvrez un fichier de schéma Prisma (.prisma) pour afficher l'ERD`,description:`Les modèles, énumérations et relations seront analysés automatiquement`,openFile:`Ouvrir un fichier .prisma`,dropHint:`ou glissez-déposez un fichier dans cette zone`},entity:{enumBadge:`ENUM`,modelBadge:`MODEL`,columns:{value:`Valeur`,comment:`Commentaire`,type:`Type`,column:`Colonne`},linkBadge:`LIEN`,externalTitle:`Table liée sur {{location}} (lien de colonne, pas une vraie clé étrangère)`},toolbar:{refresh:`Actualiser`,zoomIn:`Zoom avant`,zoomOut:`Zoom arrière`,resetView:`Réinitialiser la vue`,center:`Centrer`,fitAll:`Tout ajuster`,spreadAll:`Tout espacer`,resetLayout:`Réinitialiser la disposition`,legendOneToMany:`1:N (FK)`,tables:`Tables :`,relations:`Relations :`,columns:`Colonnes :`},viewer:{noServerConnection:`Aucune connexion serveur active`,loading:`Chargement du schéma depuis {{database}}...`,loadFailed:`Échec du chargement de l'ERD`,noDatabase:`Aucune base de données sélectionnée.`,selectDatabaseHint:`Sélectionnez une base de données dans l'arborescence du schéma, puis ouvrez Afficher l'ERD.`}},y={runAnyway:`Exécuter quand même`,query:{rowsReturned:`{{count}} ligne(s) renvoyée(s)`,rowsAffected:`{{count}} ligne(s) affectée(s)`,rowsReturnedLimited:`{{count}} ligne(s) renvoyée(s) (limité à {{limit}} ; ajoutez LIMIT pour en récupérer davantage)`,notConnected:`Non connecté`,fileNotOpen:`Le fichier SQLite n'est pas encore ouvert — cliquez sur « Rouvrir le fichier » ci-dessus pour accorder à nouveau l'accès.`,failed:`Échec de la requête`,nothingToExecute:`Rien à exécuter`},destructive:{title_one:`Exécuter l'instruction destructrice ?`,title_other:`Exécuter {{count}} instructions destructrices ?`,description:`Les instructions suivantes modifieront ou supprimeront définitivement des données. Cette action est irréversible.`,unknownTarget:`(inconnu)`,deleteAll:`DELETE de toutes les lignes de {{target}}`,updateAll:`UPDATE de toutes les lignes de {{target}}`,alterDrop:`DROP COLUMN/PARTITION sur {{target}}`},readOnly:{refused:`La connexion « {{label}} » est en lecture seule. {{count}} instruction(s) modifieraient les données ou le schéma.`,title:`« {{label}} » est en lecture seule`,description:`Ces instructions modifient les données ou le schéma. Les exécuter quand même sur cette connexion ?`},transaction:{startFailed:`Impossible de démarrer la transaction`,started:`Transaction démarrée — Commit ou Rollback une fois terminé`,implicitCommit:`{{kind}} a provoqué un COMMIT implicite de la transaction ouverte`,committed:`Transaction validée`,rolledBack:`Transaction annulée`,commandFailed:`Échec de {{name}}`,commandFailedWith:`Échec de {{name}} : {{message}}`},save:{notBrowserSqlite:`Ce n'est pas une connexion SQLite dans le navigateur.`,inMemory:`Base de données en mémoire : elle ne peut être exportée qu'en téléchargement.`,noFileSystemAccess:`Ce navigateur ne dispose pas de l'API File System Access (Chrome/Edge uniquement) : la base de données est exportée en téléchargement au lieu d'être écrite sur place.`,noWritableHandle:`Le fichier a été ouvert sans descripteur en écriture : il est exporté en téléchargement.`},agent:{devProxyUrl:`{{url}} (via le proxy de dev)`,notPlanche:`Quelque chose a répondu, mais ce n'est pas un agent Planche`,unreachable:"Agent Planche injoignable sur {{url}} — exécutez `npx planche` ({{message}})",httpError:`Erreur HTTP : {{status}} {{statusText}}`,emptyResponse:`Le serveur de tunnel a renvoyé une réponse vide`,reconnected:`Reconnecté à {{name}} — l'agent avait abandonné la connexion (redémarrage ou délai d'inactivité).`},sample:{profileName:`Boutique d'exemple (dans le navigateur)`,downloadFailed:`Impossible de télécharger la base de données d'exemple ({{status}})`,tabTitle:`Requête 1`},sqliteFile:{tooSmall:`Le fichier est trop petit pour être une base de données SQLite.`,notSqlite:`Ce n'est pas une base de données SQLite (ou elle est chiffrée, p. ex. SQLCipher). L'en-tête de 16 octets ne contient pas « SQLite format 3 ».`,badPageSize:`En-tête SQLite corrompu : taille de page invalide {{size}}.`,unreadable:`SQLite n'a pas pu lire le fichier : {{message}}`,pickerDescription:`Base de données SQLite`,walNotLoaded:`Cette base de données est en mode WAL et son fichier -wal n'a pas été chargé. Chargez-le, ou confirmez dans la bannière qu'aucun fichier -wal n'existe, avant d'enregistrer.`,changedOnDisk:`{{name}} a changé sur le disque après son chargement (un autre programme y a écrit). Enregistrer écraserait ces modifications — rouvrez le fichier et refaites vos modifications, ou utilisez le serveur de tunnel.`,walHasChanges:`{{name}}-wal contient de nouvelles modifications ; chargez-le avant d'enregistrer.`,walChangedOnDisk:`{{name}}-wal a été écrit par un autre programme après son chargement ; rouvrez le fichier avant d'enregistrer.`,writeDenied:`L'accès en écriture à {{name}} n'a pas été accordé. Autorisez-le dans l'invite du navigateur, ou exportez en téléchargement à la place.`},environment:{none:`Aucun`,green:`Vert (dev)`,blue:`Bleu`,yellow:`Jaune (staging)`,orange:`Orange`,red:`Rouge (production)`,purple:`Violet`},scratchpad:{profileName:`Bloc-notes`,namePromptTitle:`Nom de la table du bloc-notes`,namePromptDescription:`Une table nommée {{table}} existe déjà dans le bloc-notes. Choisissez un autre nom.`,nameTaken:`La table {{table}} existe déjà.`},federated:{pulling:`Récupération de {{table}} depuis {{connection}}…`,capped:`{{table}} : seules les {{limit}} premières lignes ont été récupérées.`,templateLine1:`Référencez une table de n'importe quelle connexion ouverte comme "Nom de connexion".database.table ; elle est copiée dans ce bloc-notes avant l'exécution.`,templateLine2:`Les tables sont limitées à {{limit}} lignes. La requête elle-même s'exécute dans SQLite (dans votre navigateur).`,templateConnections:`Connexions ouvertes : {{names}}`,templateNone:`Aucune autre connexion n'est ouverte. Connectez-en une, puis référencez-la ici.`,done:`{{rows}} lignes récupérées depuis {{tables}} tables distantes vers le bloc-notes.`,pullingProgress:`Récupération de {{table}} depuis {{connection}} : {{loaded}} / {{total}} lignes…`},paged:{noColumns:`{{table}} n'a aucune colonne.`,cancelled:`Annulé.`}},b={title:`Conditions d’utilisation`,version:`Version {{version}}`,englishOnly:`Les conditions sont fournies en anglais. Le résumé de l’écran d’accueil est disponible dans votre langue.`},x={title:`{{kind}} toucherait {{count}} lignes`,titleUnknown:`{{kind}} — lignes affectées inconnues`,description:`Voici les lignes que l'instruction toucherait maintenant, lues avec un SELECT. Rien n'a encore été écrit.`,previewFailed:`La requête d'aperçu a échoué : {{error}}
|
|
2
|
+
Vous pouvez quand même exécuter l'instruction.`,noRows:`Aucune ligne ne correspond — l'instruction ne changerait rien.`,truncated:`Affichage des {{shown}} premières lignes sur {{count}}.`,previewQuery:`Requête d'aperçu`,run:`Exécuter {{kind}} ({{count}} lignes)`,runAnyway:`Exécuter quand même`},S={app:e,language:t,settings:n,menu:r,about:i,connection:a,toolbar:o,footer:s,palette:c,welcome:l,schema:u,query:d,result:f,confirm:p,table:m,database:h,user:g,command:_,erd:v,services:y,terms:b,dryRun:x};export{i as about,e as app,_ as command,p as confirm,a as connection,h as database,S as default,x as dryRun,v as erd,s as footer,t as language,r as menu,c as palette,d as query,f as result,u as schema,y as services,n as settings,m as table,b as terms,o as toolbar,g as user,l as welcome};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{f as e,u as t}from"./ui-store-DWSBgCoR.js";var n=e=>typeof e==`string`,r=()=>{let e,t,n=new Promise((n,r)=>{e=n,t=r});return n.resolve=e,n.reject=t,n},i=e=>e==null?``:String(e),a=(e,t,n)=>{e.forEach(e=>{t[e]&&(n[e]=t[e])})},o=/###/g,s=e=>e&&e.includes(`###`)?e.replace(o,`.`):e,c=e=>!e||n(e),l=(e,t,r)=>{let i=n(t)?t.split(`.`):t,a=0;for(;a<i.length-1;){if(c(e))return{};let t=s(i[a]);!e[t]&&r&&(e[t]=new r),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++a}return c(e)?{}:{obj:e,k:s(i[a])}},u=(e,t,n)=>{let{obj:r,k:i}=l(e,t,Object);if(r!==void 0||t.length===1){r[i]=n;return}let a=t[t.length-1],o=t.slice(0,t.length-1),s=l(e,o,Object);for(;s.obj===void 0&&o.length;)a=`${o[o.length-1]}.${a}`,o=o.slice(0,o.length-1),s=l(e,o,Object),s?.obj&&s.obj[`${s.k}.${a}`]!==void 0&&(s.obj=void 0);s.obj[`${s.k}.${a}`]=n},d=(e,t,n,r)=>{let{obj:i,k:a}=l(e,t,Object);i[a]=i[a]||[],i[a].push(n)},f=(e,t)=>{let{obj:n,k:r}=l(e,t);if(n&&Object.prototype.hasOwnProperty.call(n,r))return n[r]},p=(e,t,n)=>{let r=f(e,n);return r===void 0?f(t,n):r},m=(e,t,r)=>{for(let i in t)i!==`__proto__`&&i!==`constructor`&&(Object.prototype.hasOwnProperty.call(e,i)?n(e[i])||e[i]instanceof String||n(t[i])||t[i]instanceof String?r&&(e[i]=t[i]):m(e[i],t[i],r):e[i]=t[i]);return e},h=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,`\\$&`),g={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`,"/":`/`},_=e=>n(e)?e.replace(/[&<>"'\/]/g,e=>g[e]):e,v=class{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){let t=this.regExpMap.get(e);if(t!==void 0)return t;let n=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,n),this.regExpQueue.push(e),n}},y=[` `,`,`,`?`,`!`,`;`],b=new v(20),x=(e,t,n)=>{t||=``,n||=``;let r=y.filter(e=>!t.includes(e)&&!n.includes(e));if(r.length===0)return!0;let i=b.getRegExp(`(${r.map(e=>e===`?`?`\\?`:e).join(`|`)})`),a=!i.test(e);if(!a){let t=e.indexOf(n);t>0&&!i.test(e.substring(0,t))&&(a=!0)}return a},S=(e,t,n=`.`)=>{if(!e)return;if(e[t])return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;let r=t.split(n),i=e;for(let e=0;e<r.length;){if(!i||typeof i!=`object`)return;let t,a=``;for(let o=e;o<r.length;++o)if(o!==e&&(a+=n),a+=r[o],t=i[a],t!==void 0){if([`string`,`number`,`boolean`].includes(typeof t)&&o<r.length-1)continue;e+=o-e+1;break}i=t}return i},C=e=>e?.replace(/_/g,`-`),w={type:`logger`,log(e){this.output(`log`,e)},warn(e){this.output(`warn`,e)},error(e){this.output(`error`,e)},output(e,t){console?.[e]?.apply?.(console,t)}},T=new class e{constructor(e,t={}){this.init(e,t)}init(e,t={}){this.prefix=t.prefix||`i18next:`,this.logger=e||w,this.options=t,this.debug=t.debug}log(...e){return this.forward(e,`log`,``,!0)}warn(...e){return this.forward(e,`warn`,``,!0)}error(...e){return this.forward(e,`error`,``)}deprecate(...e){return this.forward(e,`warn`,`WARNING DEPRECATED: `,!0)}forward(e,t,r,i){return i&&!this.debug?null:(e=e.map(e=>n(e)?e.replace(/[\r\n\x00-\x1F\x7F]/g,` `):e),n(e[0])&&(e[0]=`${r}${this.prefix} ${e[0]}`),this.logger[t](e))}create(t){return new e(this.logger,{prefix:`${this.prefix}:${t}:`,...this.options})}clone(t){return t||=this.options,t.prefix=t.prefix||this.prefix,new e(this.logger,t)}},E=class{constructor(){this.observers={}}on(e,t){return e.split(` `).forEach(e=>{this.observers[e]||(this.observers[e]=new Map);let n=this.observers[e].get(t)||0;this.observers[e].set(t,n+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}once(e,t){let n=(...r)=>{t(...r),this.off(e,n)};return this.on(e,n),this}emit(e,...t){this.observers[e]&&Array.from(this.observers[e].entries()).forEach(([e,n])=>{for(let r=0;r<n;r++)e(...t)}),this.observers[`*`]&&Array.from(this.observers[`*`].entries()).forEach(([n,r])=>{for(let i=0;i<r;i++)n(e,...t)})}},D=class extends E{constructor(e,t={ns:[`translation`],defaultNS:`translation`}){super(),this.data=e||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.includes(e)||this.options.ns.push(e)}removeNamespaces(e){let t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,r,i={}){let a=i.keySeparator===void 0?this.options.keySeparator:i.keySeparator,o=i.ignoreJSONStructure===void 0?this.options.ignoreJSONStructure:i.ignoreJSONStructure,s;e.includes(`.`)?s=e.split(`.`):(s=[e,t],r&&(Array.isArray(r)?s.push(...r):n(r)&&a?s.push(...r.split(a)):s.push(r)));let c=f(this.data,s);return!c&&!t&&!r&&e.includes(`.`)&&(e=s[0],t=s[1],r=s.slice(2).join(`.`)),c||!o||!n(r)?c:S(this.data?.[e]?.[t],r,a)}addResource(e,t,n,r,i={silent:!1}){let a=i.keySeparator===void 0?this.options.keySeparator:i.keySeparator,o=[e,t];n&&(o=o.concat(a?n.split(a):n)),e.includes(`.`)&&(o=e.split(`.`),r=t,t=o[1]),this.addNamespaces(t),u(this.data,o,r),i.silent||this.emit(`added`,e,t,n,r)}addResources(e,t,r,i={silent:!1}){for(let i in r)(n(r[i])||Array.isArray(r[i]))&&this.addResource(e,t,i,r[i],{silent:!0});i.silent||this.emit(`added`,e,t,r)}addResourceBundle(e,t,n,r,i,a={silent:!1,skipCopy:!1}){let o=[e,t];e.includes(`.`)&&(o=e.split(`.`),r=n,n=t,t=o[1]),this.addNamespaces(t);let s=f(this.data,o)||{};a.skipCopy||(n=JSON.parse(JSON.stringify(n))),r?m(s,n,i):s={...s,...n},u(this.data,o,s),a.silent||this.emit(`added`,e,t,n)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit(`removed`,e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||=this.options.defaultNS,this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){let t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(e=>t[e]&&Object.keys(t[e]).length>0)}toJSON(){return this.data}},O={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(e=>{t=this.processors[e]?.process(t,n,r,i)??t}),t}},k=Symbol(`i18next/PATH_KEY`);function A(){let e=[],t=Object.create(null),n;return t.get=(r,i)=>(n?.revoke?.(),i===k?e:(e.push(i),n=Proxy.revocable(r,t),n.proxy)),Proxy.revocable(Object.create(null),t).proxy}function j(e,t){let{[k]:n}=e(A()),r=t?.keySeparator??`.`,i=t?.nsSeparator??`:`,a=t?.enableSelector===`strict`;if(n.length>1&&i){let e=t?.ns,o=a?Array.isArray(e)?e:e?[e]:null:Array.isArray(e)?e:null;if(o&&(a?o:o.length>1?o.slice(1):[]).includes(n[0]))return`${n[0]}${i}${n.slice(1).join(r)}`}return n.join(r)}var M=e=>!n(e)&&typeof e!=`boolean`&&typeof e!=`number`,N=class e extends E{constructor(e,t={}){super(),a([`resourceStore`,`languageUtils`,`pluralResolver`,`interpolator`,`backendConnector`,`i18nFormat`,`utils`],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.logger=T.create(`translator`),this.checkedLoadedFor={}}changeLanguage(e){e&&(this.language=e)}exists(e,t={interpolation:{}}){let n={...t};if(e==null)return!1;let r=this.resolve(e,n);if(r?.res===void 0)return!1;let i=M(r.res);return!(n.returnObjects===!1&&i)}extractFromKey(e,t){let r=t.nsSeparator===void 0?this.options.nsSeparator:t.nsSeparator;r===void 0&&(r=`:`);let i=t.keySeparator===void 0?this.options.keySeparator:t.keySeparator,a=t.ns||this.options.defaultNS||[],o=r&&e.includes(r),s=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!x(e,r,i);if(o&&!s){let t=e.match(this.interpolator.nestingRegexp);if(t&&t.length>0)return{key:e,namespaces:n(a)?[a]:a};let o=e.split(r);(r!==i||r===i&&this.options.ns.includes(o[0]))&&(a=o.shift()),e=o.join(i)}return{key:e,namespaces:n(a)?[a]:a}}translate(t,r,i){let a=typeof r==`object`?{...r}:r;if(typeof a!=`object`&&this.options.overloadTranslationOptionHandler&&(a=this.options.overloadTranslationOptionHandler(arguments)),typeof a==`object`&&(a={...a}),a||={},t==null)return``;typeof t==`function`&&(t=j(t,{...this.options,...a})),Array.isArray(t)||(t=[String(t)]),t=t.map(e=>typeof e==`function`?j(e,{...this.options,...a}):String(e));let o=a.returnDetails===void 0?this.options.returnDetails:a.returnDetails,s=a.keySeparator===void 0?this.options.keySeparator:a.keySeparator,{key:c,namespaces:l}=this.extractFromKey(t[t.length-1],a),u=l[l.length-1],d=a.nsSeparator===void 0?this.options.nsSeparator:a.nsSeparator;d===void 0&&(d=`:`);let f=a.lng||this.language,p=a.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(f?.toLowerCase()===`cimode`)return p?o?{res:`${u}${d}${c}`,usedKey:c,exactUsedKey:c,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(a)}:`${u}${d}${c}`:o?{res:c,usedKey:c,exactUsedKey:c,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(a)}:c;let m=this.resolve(t,a),h=m?.res,g=m?.usedKey||c,_=m?.exactUsedKey||c,v=[`[object Number]`,`[object Function]`,`[object RegExp]`],y=a.joinArrays===void 0?this.options.joinArrays:a.joinArrays,b=!this.i18nFormat||this.i18nFormat.handleAsObject,x=a.count!==void 0&&!n(a.count),S=e.hasDefaultValue(a),C=x?this.pluralResolver.getSuffix(f,a.count,a):``,w=a.ordinal&&x?this.pluralResolver.getSuffix(f,a.count,{ordinal:!1}):``,T=x&&!a.ordinal&&a.count===0,E=T&&a[`defaultValue${this.options.pluralSeparator}zero`]||a[`defaultValue${C}`]||a[`defaultValue${w}`]||a.defaultValue,D=h;b&&!h&&S&&(D=E);let O=M(D),k=Object.prototype.toString.apply(D);if(b&&D&&O&&!v.includes(k)&&!(n(y)&&Array.isArray(D))){if(!a.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn(`accessing an object - but returnObjects options is not enabled!`);let e=this.options.returnedObjectHandler?this.options.returnedObjectHandler(g,D,{...a,ns:l}):`key '${c} (${this.language})' returned an object instead of string.`;return o?(m.res=e,m.usedParams=this.getUsedParamsDetails(a),m):e}if(s){let e=Array.isArray(D),t=e?[]:{},n=e?_:g;for(let e in D)if(Object.prototype.hasOwnProperty.call(D,e)){let r=`${n}${s}${e}`;t[e]=S&&!h?this.translate(r,{...a,defaultValue:M(E)?E[e]:void 0,joinArrays:!1,ns:l}):this.translate(r,{...a,joinArrays:!1,ns:l}),t[e]===r&&(t[e]=D[e])}h=t}}else if(b&&n(y)&&Array.isArray(h))h=h.join(y),h&&=this.extendTranslation(h,t,a,i);else{let e=!1,n=!1;!this.isValidLookup(h)&&S&&(e=!0,h=E),this.isValidLookup(h)||(n=!0,h=c);let r=(a.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&n?void 0:h,o=S&&E!==h&&this.options.updateMissing;if(n||e||o){if(this.logger.log(o?`updateKey`:`missingKey`,f,u,x&&!o?`${c}${this.pluralResolver.getSuffix(f,a.count,a)}`:c,o?E:h),s){let e=this.resolve(c,{...a,keySeparator:!1});e&&e.res&&this.logger.warn(`Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.`)}let e=[],t=this.languageUtils.getFallbackCodes(this.options.fallbackLng,a.lng||this.language);if(this.options.saveMissingTo===`fallback`&&t&&t[0])for(let n=0;n<t.length;n++)e.push(t[n]);else this.options.saveMissingTo===`all`?e=this.languageUtils.toResolveHierarchy(a.lng||this.language):e.push(a.lng||this.language);let n=(e,t,n)=>{let i=S&&n!==h?n:r;this.options.missingKeyHandler?this.options.missingKeyHandler(e,u,t,i,o,a):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing(e,u,t,i,o,a),this.emit(`missingKey`,e,u,t,h)};this.options.saveMissing&&(this.options.saveMissingPlurals&&x?e.forEach(e=>{let t=this.pluralResolver.getSuffixes(e,a);T&&a[`defaultValue${this.options.pluralSeparator}zero`]&&!t.includes(`${this.options.pluralSeparator}zero`)&&t.push(`${this.options.pluralSeparator}zero`),t.forEach(t=>{n([e],c+t,a[`defaultValue${t}`]||E)})}):n(e,c,E))}h=this.extendTranslation(h,t,a,m,i),n&&h===c&&this.options.appendNamespaceToMissingKey&&(h=`${u}${d}${c}`),(n||e)&&this.options.parseMissingKeyHandler&&(h=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${u}${d}${c}`:c,e?h:void 0,a))}return o?(m.res=h,m.usedParams=this.getUsedParamsDetails(a),m):h}extendTranslation(e,t,r,i,a){if(this.i18nFormat?.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});let o=n(e)&&(r?.interpolation?.skipOnVariables===void 0?this.options.interpolation.skipOnVariables:r.interpolation.skipOnVariables),s;if(o){let t=e.match(this.interpolator.nestingRegexp);s=t&&t.length}let c=r.replace&&!n(r.replace)?r.replace:r;if(this.options.interpolation.defaultVariables&&(c={...this.options.interpolation.defaultVariables,...c}),e=this.interpolator.interpolate(e,c,r.lng||this.language||i.usedLng,r),o){let t=e.match(this.interpolator.nestingRegexp),n=t&&t.length;s<n&&(r.nest=!1)}!r.lng&&i&&i.res&&(r.lng=this.language||i.usedLng),r.nest!==!1&&(e=this.interpolator.nest(e,(...e)=>a?.[0]===e[0]&&!r.context?(this.logger.warn(`It seems you are nesting recursively key: ${e[0]} in key: ${t[0]}`),null):this.translate(...e,t),r)),r.interpolation&&this.interpolator.reset()}let o=r.postProcess||this.options.postProcess,s=n(o)?[o]:o;return e!=null&&s?.length&&r.applyPostProcessor!==!1&&(e=O.handle(s,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...i,usedParams:this.getUsedParamsDetails(r)},...r}:r,this)),e}resolve(e,t={}){let r,i,a,o,s;return n(e)&&(e=[e]),Array.isArray(e)&&(e=e.map(e=>typeof e==`function`?j(e,{...this.options,...t}):e)),e.forEach(e=>{if(this.isValidLookup(r))return;let c=this.extractFromKey(e,t),l=c.key;i=l;let u=c.namespaces;this.options.fallbackNS&&(u=u.concat(this.options.fallbackNS));let d=t.count!==void 0&&!n(t.count),f=d&&!t.ordinal&&t.count===0,p=t.context!==void 0&&(n(t.context)||typeof t.context==`number`)&&t.context!==``,m=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);u.forEach(e=>{this.isValidLookup(r)||(s=e,!this.checkedLoadedFor[`${m[0]}-${e}`]&&this.utils?.hasLoadedNamespace&&!this.utils?.hasLoadedNamespace(s)&&(this.checkedLoadedFor[`${m[0]}-${e}`]=!0,this.logger.warn(`key "${i}" for languages "${m.join(`, `)}" won't get resolved as namespace "${s}" was not yet loaded`,`This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!`)),m.forEach(n=>{if(this.isValidLookup(r))return;o=n;let i=[l];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(i,l,n,e,t);else{let e;d&&(e=this.pluralResolver.getSuffix(n,t.count,t));let r=`${this.options.pluralSeparator}zero`,a=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(d&&(t.ordinal&&e.startsWith(a)&&i.push(l+e.replace(a,this.options.pluralSeparator)),i.push(l+e),f&&i.push(l+r)),p){let n=`${l}${this.options.contextSeparator||`_`}${t.context}`;i.push(n),d&&(t.ordinal&&e.startsWith(a)&&i.push(n+e.replace(a,this.options.pluralSeparator)),i.push(n+e),f&&i.push(n+r))}}let s;for(;s=i.pop();)this.isValidLookup(r)||(a=s,r=this.getResource(n,e,s,t))}))})}),{res:r,usedKey:i,exactUsedKey:a,usedLng:o,usedNS:s}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e===``)}getResource(e,t,n,r={}){return this.i18nFormat?.getResource?this.i18nFormat.getResource(e,t,n,r):this.resourceStore.getResource(e,t,n,r)}getUsedParamsDetails(e={}){let t=[`defaultValue`,`ordinal`,`context`,`replace`,`lng`,`lngs`,`fallbackLng`,`ns`,`keySeparator`,`nsSeparator`,`returnObjects`,`returnDetails`,`joinArrays`,`postProcess`,`interpolation`],r=e.replace&&!n(e.replace),i=r?e.replace:e;if(r&&e.count!==void 0&&(i={...i,count:e.count}),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!r){i={...i};for(let e of t)delete i[e]}return i}static hasDefaultValue(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&t.startsWith(`defaultValue`)&&e[t]!==void 0)return!0;return!1}},P=class{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=T.create(`languageUtils`),this.resolveHierarchyCache={}}clearCache(){this.resolveHierarchyCache={}}getScriptPartFromCode(e){if(e=C(e),!e||!e.includes(`-`))return null;let t=e.split(`-`);return t.length===2||(t.pop(),t[t.length-1].toLowerCase()===`x`)?null:this.formatLanguageCode(t.join(`-`))}getLanguagePartFromCode(e){if(e=C(e),!e||!e.includes(`-`))return e;let t=e.split(`-`);return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(n(e)&&e.includes(`-`)){let t;try{t=Intl.getCanonicalLocales(e)[0]}catch{}return t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t||(this.options.lowerCaseLng?e.toLowerCase():e)}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load===`languageOnly`||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.includes(e)}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach(e=>{if(t)return;let n=this.formatLanguageCode(e);(!this.options.supportedLngs||this.isSupportedCode(n))&&(t=n)}),!t&&this.options.supportedLngs&&e.forEach(e=>{if(t)return;let n=this.getScriptPartFromCode(e);if(this.isSupportedCode(n))return t=n;let r=this.getLanguagePartFromCode(e);if(this.isSupportedCode(r))return t=r;t=this.options.supportedLngs.find(e=>e===r?!0:!e.includes(`-`)&&!r.includes(`-`)?!1:!!(e.includes(`-`)&&!r.includes(`-`)&&e.slice(0,e.indexOf(`-`))===r||e.startsWith(r)&&r.length>1))}),t||=this.getFallbackCodes(this.options.fallbackLng)[0],t}getFallbackCodes(e,t){if(!e)return[];if(typeof e==`function`&&(e=e(t)),n(e)&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let r=e[t];return r||=e[this.getScriptPartFromCode(t)],r||=e[this.formatLanguageCode(t)],r||=e[this.getLanguagePartFromCode(t)],r||=e.default,r||[]}toResolveHierarchy(e,t){let r=this.options.fallbackLng,i=Array.isArray(r)?r.join(`|`):r;i!==this._cachedFallbackLng&&(this.resolveHierarchyCache={},this._cachedFallbackLng=i);let a=t===void 0||t===!1||n(t),o=t===void 0&&typeof this.options.fallbackLng==`function`,s=n(e)&&a&&!o,c=null;if(s){let n;n=t===void 0?`undefined`:t===!1?`boolean:false`:`string:${t}`,c=`${e.length}:${e}|${n}`}if(c!==null){let e=this.resolveHierarchyCache[c];if(e!==void 0)return e.slice()}let l=this.getFallbackCodes((t===!1?[]:t)||this.options.fallbackLng||[],e),u=[],d=e=>{e&&(this.isSupportedCode(e)?u.push(e):this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`))};return n(e)&&(e.includes(`-`)||e.includes(`_`))?(this.options.load!==`languageOnly`&&d(this.formatLanguageCode(e)),this.options.load!==`languageOnly`&&this.options.load!==`currentOnly`&&d(this.getScriptPartFromCode(e)),this.options.load!==`currentOnly`&&d(this.getLanguagePartFromCode(e))):n(e)&&d(this.formatLanguageCode(e)),l.forEach(e=>{u.includes(e)||d(this.formatLanguageCode(e))}),c===null?u:(this.resolveHierarchyCache[c]=u,u.slice())}},F={zero:0,one:1,two:2,few:3,many:4,other:5},I={select:e=>e===1?`one`:`other`,resolvedOptions:()=>({pluralCategories:[`one`,`other`]})},L=class{constructor(e,t={}){this.languageUtils=e,this.options=t,this.logger=T.create(`pluralResolver`),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(e,t={}){let n=C(e===`dev`?`en`:e),r=t.ordinal?`ordinal`:`cardinal`,i=JSON.stringify({cleanedCode:n,type:r});if(i in this.pluralRulesCache)return this.pluralRulesCache[i];let a;try{a=new Intl.PluralRules(n,{type:r})}catch{if(typeof Intl>`u`)return this.logger.error(`No Intl support, please use an Intl polyfill!`),I;if(!e.match(/-|_/))return I;let n=this.languageUtils.getLanguagePartFromCode(e);a=this.getRule(n,t)}return this.pluralRulesCache[i]=a,a}needsPlural(e,t={}){let n=this.getRule(e,t);return n||=this.getRule(`dev`,t),n?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(e,t,n={}){return this.getSuffixes(e,n).map(e=>`${t}${e}`)}getSuffixes(e,t={}){let n=this.getRule(e,t);return n||=this.getRule(`dev`,t),n?n.resolvedOptions().pluralCategories.sort((e,t)=>F[e]-F[t]).map(e=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:``}${e}`):[]}getSuffix(e,t,n={}){let r=this.getRule(e,n);return r?`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:``}${r.select(t)}`:(this.logger.warn(`no plural rule found for: ${e}`),this.getSuffix(`dev`,t,n))}},R=(e,t,r,i=`.`,a=!0)=>{let o=p(e,t,r);return!o&&a&&n(r)&&(o=S(e,r,i),o===void 0&&(o=S(t,r,i))),o},ee=e=>e.replace(/\$/g,`$$$$`),z=class{constructor(e={}){this.logger=T.create(`interpolator`),this.options=e,this.format=e?.interpolation?.format||(e=>e),this.init(e)}init(e={}){e.interpolation||={escapeValue:!0};let{escape:t,escapeValue:n,useRawValueToEscape:r,prefix:i,prefixEscaped:a,suffix:o,suffixEscaped:s,formatSeparator:c,unescapeSuffix:l,unescapePrefix:u,nestingPrefix:d,nestingPrefixEscaped:f,nestingSuffix:p,nestingSuffixEscaped:m,nestingOptionsSeparator:g,maxReplaces:v,alwaysFormat:y}=e.interpolation;this.escape=t===void 0?_:t,this.escapeValue=n===void 0||n,this.useRawValueToEscape=r!==void 0&&r,this.prefix=i?h(i):a||`{{`,this.suffix=o?h(o):s||`}}`,this.formatSeparator=c||`,`,this.unescapePrefix=l?``:u?h(u):`-`,this.unescapeSuffix=this.unescapePrefix?``:l?h(l):``,this.nestingPrefix=d?h(d):f||h(`$t(`),this.nestingSuffix=p?h(p):m||h(`)`),this.nestingOptionsSeparator=g||`,`,this.maxReplaces=v||1e3,this.alwaysFormat=y!==void 0&&y,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){let e=(e,t)=>e?.source===t?(e.lastIndex=0,e):new RegExp(t,`g`);this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(e,t,r,a){let o,s,c,l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},u=e=>{if(!e.includes(this.formatSeparator)){let n=R(t,l,e,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(n,void 0,r,{...a,...t,interpolationkey:e}):n}let n=e.split(this.formatSeparator),i=n.shift().trim(),o=n.join(this.formatSeparator).trim();return this.format(R(t,l,i,this.options.keySeparator,this.options.ignoreJSONStructure),o,r,{...a,...t,interpolationkey:i})};this.resetRegExp(),!this.escapeValue&&typeof e==`string`&&/\$t\([^)]*\{[^}]*\{\{/.test(e)&&this.logger.warn(`nesting options string contains interpolated variables with escapeValue: false — if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.`);let d=a?.missingInterpolationHandler||this.options.missingInterpolationHandler,f=a?.interpolation?.skipOnVariables===void 0?this.options.interpolation.skipOnVariables:a.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:e=>e},{regex:this.regexp,safeValue:e=>this.escapeValue?this.escape(e):e}].forEach(t=>{for(c=0;o=t.regex.exec(e);){let r=o[1].trim();if(s=u(r),s===void 0){if(typeof d==`function`){let t=d(e,o,a);s=n(t)?t:``}else if(a&&Object.prototype.hasOwnProperty.call(a,r))s=``;else if(f){s=o[0];continue}else this.logger.warn(`missed to pass in variable ${r} for interpolating ${e}`),s=``}else!n(s)&&!this.useRawValueToEscape&&(s=i(s));let l=t.safeValue(s);if(e=e.replace(o[0],ee(l)),f?(t.regex.lastIndex+=l.length,t.regex.lastIndex-=o[0].length):t.regex.lastIndex=0,c++,c>=this.maxReplaces)break}}),e}nest(e,t,r={}){let a,o,s,c=(e,t)=>{let n=this.nestingOptionsSeparator;if(!e.includes(n))return e;let r=e.split(RegExp(`${h(n)}[ ]*{`)),i=`{${r[1]}`;e=r[0],i=this.interpolate(i,s);let a=i.match(/'/g),o=i.match(/"/g);((a?.length??0)%2==0&&!o||(o?.length??0)%2!=0)&&(i=i.replace(/'/g,`"`));try{s=JSON.parse(i),t&&(s={...t,...s})}catch(t){return this.logger.warn(`failed parsing options string in nesting for key ${e}`,t),`${e}${n}${i}`}return s.defaultValue&&s.defaultValue.includes(this.prefix)&&delete s.defaultValue,e};for(;a=this.nestingRegexp.exec(e);){let l=[];s={...r},s=s.replace&&!n(s.replace)?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;let u=/{.*}/s.test(a[1])?a[1].lastIndexOf(`}`)+1:a[1].indexOf(this.formatSeparator);if(u!==-1&&(l=a[1].slice(u).split(this.formatSeparator).map(e=>e.trim()).filter(Boolean),a[1]=a[1].slice(0,u)),o=t(c.call(this,a[1].trim(),s),s),o&&a[0]===e&&!n(o))return o;n(o)||(o=i(o)),o||=(this.logger.warn(`missed to resolve ${a[1]} for nesting ${e}`),``),l.length&&(o=l.reduce((e,t)=>this.format(e,t,r.lng,{...r,interpolationkey:a[1].trim()}),o.trim())),e=e.replace(a[0],o),this.regexp.lastIndex=0}return e}},B=e=>{let t=e.toLowerCase().trim(),n={};if(e.includes(`(`)){let r=e.split(`(`);t=r[0].toLowerCase().trim();let i=r[1].slice(0,-1);t===`currency`&&!i.includes(`:`)?n.currency||=i.trim():t===`relativetime`&&!i.includes(`:`)?n.range||=i.trim():i.split(`;`).forEach(e=>{if(e){let[t,...r]=e.split(`:`),i=r.join(`:`).trim().replace(/^'+|'+$/g,``),a=t.trim();n[a]||(n[a]=i),i===`false`&&(n[a]=!1),i===`true`&&(n[a]=!0),isNaN(i)||(n[a]=parseInt(i,10))}})}return{formatName:t,formatOptions:n}},V=e=>{let t={};return(n,r,i)=>{let a=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(a={...a,[i.interpolationkey]:void 0});let o=r+JSON.stringify(a),s=t[o];return s||(s=e(C(r),i),t[o]=s),s(n)}},te=e=>(t,n,r)=>e(C(n),r)(t),ne=class{constructor(e={}){this.logger=T.create(`formatter`),this.options=e,this.init(e)}init(e,t={interpolation:{}}){this.formatSeparator=t.interpolation.formatSeparator||`,`;let n=t.cacheInBuiltFormats?V:te;this.formats={number:n((e,t)=>{let n=new Intl.NumberFormat(e,{...t});return e=>n.format(e)}),currency:n((e,t)=>{let n=new Intl.NumberFormat(e,{...t,style:`currency`});return e=>n.format(e)}),datetime:n((e,t)=>{let n=new Intl.DateTimeFormat(e,{...t});return e=>n.format(e)}),relativetime:n((e,t)=>{let n=new Intl.RelativeTimeFormat(e,{...t});return e=>n.format(e,t.range||`day`)}),list:n((e,t)=>{let n=new Intl.ListFormat(e,{...t});return e=>n.format(e)})}}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=V(t)}format(e,t,n,r={}){if(!t||e==null)return e;let i=t.split(this.formatSeparator),a=[];for(let e=0;e<i.length;e++){let t=i[e];for(;t.indexOf(`(`)>-1&&!t.includes(`)`)&&e+1<i.length;)t=`${t}${this.formatSeparator}${i[++e]}`;a.push(t)}return a.reduce((e,t)=>{let{formatName:i,formatOptions:a}=B(t);if(this.formats[i]){let t=e;try{let o=r?.formatParams?.[r.interpolationkey]||{},s=o.locale||o.lng||r.locale||r.lng||n;t=this.formats[i](e,s,{...a,...r,...o})}catch(e){this.logger.warn(e)}return t}return this.logger.warn(`there was no format function for ${i}`),e},e)}},re=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)},ie=class extends E{constructor(e,t,n,r={}){super(),this.backend=e,this.store=t,this.services=n,this.languageUtils=n.languageUtils,this.options=r,this.logger=T.create(`backendConnector`),this.waitingReads=[],this.maxParallelReads=r.maxParallelReads||10,this.readingCalls=0,this.maxRetries=r.maxRetries>=0?r.maxRetries:5,this.retryTimeout=r.retryTimeout>=1?r.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(n,r.backend,r)}queueLoad(e,t,n,r){let i={},a={},o={},s={};return e.forEach(e=>{let r=!0;t.forEach(t=>{let o=`${e}|${t}`;!n.reload&&this.store.hasResourceBundle(e,t)?this.state[o]=2:this.state[o]<0||(this.state[o]===1?a[o]===void 0&&(a[o]=!0):(this.state[o]=1,r=!1,a[o]===void 0&&(a[o]=!0),i[o]===void 0&&(i[o]=!0),s[t]===void 0&&(s[t]=!0)))}),r||(o[e]=!0)}),(Object.keys(i).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:r}),{toLoad:Object.keys(i),pending:Object.keys(a),toLoadLanguages:Object.keys(o),toLoadNamespaces:Object.keys(s)}}loaded(e,t,n){let r=e.split(`|`),i=r[0],a=r[1];t&&this.emit(`failedLoading`,i,a,t),!t&&n&&this.store.addResourceBundle(i,a,n,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&n&&(this.state[e]=0);let o={};this.queue.forEach(n=>{d(n.loaded,[i],a),re(n,e),t&&n.errors.push(t),n.pendingCount===0&&!n.done&&(Object.keys(n.loaded).forEach(e=>{o[e]||(o[e]={});let t=n.loaded[e];t.length&&t.forEach(t=>{o[e][t]===void 0&&(o[e][t]=!0)})}),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())}),this.emit(`loaded`,o),this.queue=this.queue.filter(e=>!e.done)}read(e,t,n,r=0,i=this.retryTimeout,a){if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:n,tried:r,wait:i,callback:a});return}this.readingCalls++;let o=(o,s)=>{if(this.readingCalls--,this.waitingReads.length>0){let e=this.waitingReads.shift();this.read(e.lng,e.ns,e.fcName,e.tried,e.wait,e.callback)}if(o&&s&&r<this.maxRetries){setTimeout(()=>{this.read(e,t,n,r+1,i*2,a)},i);return}a(o,s)},s=this.backend[n].bind(this.backend);if(s.length===2){try{let n=s(e,t);n&&typeof n.then==`function`?n.then(e=>o(null,e)).catch(o):o(null,n)}catch(e){o(e)}return}return s(e,t,o)}prepareLoading(e,t,r={},i){if(!this.backend)return this.logger.warn(`No backend was added via i18next.use. Will not load resources.`),i&&i();n(e)&&(e=this.languageUtils.toResolveHierarchy(e)),n(t)&&(t=[t]);let a=this.queueLoad(e,t,r,i);if(!a.toLoad.length)return a.pending.length||i(),null;a.toLoad.forEach(e=>{this.loadOne(e)})}load(e,t,n){this.prepareLoading(e,t,{},n)}reload(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}loadOne(e,t=``){let n=e.split(`|`),r=n[0],i=n[1];this.read(r,i,`read`,void 0,void 0,(n,a)=>{n&&this.logger.warn(`${t}loading namespace ${i} for language ${r} failed`,n),!n&&a&&this.logger.log(`${t}loaded namespace ${i} for language ${r}`,a),this.loaded(e,n,a)})}saveMissing(e,t,n,r,i,a={},o=()=>{}){if(this.services?.utils?.hasLoadedNamespace&&!this.services?.utils?.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${n}" as the namespace "${t}" was not yet loaded`,`This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!`);return}if(n!=null&&n!==``){if(this.backend?.create){let s={...a,isUpdate:i},c=this.backend.create.bind(this.backend);if(c.length<6)try{let i;i=c.length===5?c(e,t,n,r,s):c(e,t,n,r),i&&typeof i.then==`function`?i.then(e=>o(null,e)).catch(o):o(null,i)}catch(e){o(e)}else c(e,t,n,r,o,s)}!e||!e[0]||this.store.addResource(e[0],t,n,r)}}},H=()=>({debug:!1,initAsync:!0,ns:[`translation`],defaultNS:[`translation`],fallbackLng:[`dev`],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:`all`,preload:!1,keySeparator:`.`,nsSeparator:`:`,pluralSeparator:`_`,contextSeparator:`_`,enableSelector:!1,partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:`fallback`,saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let t={};if(typeof e[1]==`object`&&(t=e[1]),n(e[1])&&(t.defaultValue=e[1]),n(e[2])&&(t.tDescription=e[2]),typeof e[2]==`object`||typeof e[3]==`object`){let n=e[3]||e[2];Object.keys(n).forEach(e=>{t[e]=n[e]})}return t},interpolation:{escapeValue:!0,prefix:`{{`,suffix:`}}`,formatSeparator:`,`,unescapePrefix:`-`,nestingPrefix:`$t(`,nestingSuffix:`)`,nestingOptionsSeparator:`,`,maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),U=e=>(n(e.ns)&&(e.ns=[e.ns]),n(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),n(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&!e.supportedLngs.includes(`cimode`)&&(e.supportedLngs=e.supportedLngs.concat([`cimode`])),e),W=()=>{},G=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(t=>{typeof e[t]==`function`&&(e[t]=e[t].bind(e))})},K=class e extends E{constructor(e={},t){if(super(),this.options=U(e),this.services={},this.logger=T,this.modules={external:[]},G(this),t&&!this.isInitialized&&!e.isClone){if(!this.options.initAsync)return this.init(e,t),this;setTimeout(()=>{this.init(e,t)},0)}}init(e={},t){this.isInitializing=!0,typeof e==`function`&&(t=e,e={}),e.defaultNS==null&&e.ns&&(n(e.ns)?e.defaultNS=e.ns:e.ns.includes(`translation`)||(e.defaultNS=e.ns[0]));let i=H();this.options={...i,...this.options,...U(e)},this.options.interpolation={...i.interpolation,...this.options.interpolation},e.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=e.keySeparator),e.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=e.nsSeparator),typeof this.options.overloadTranslationOptionHandler!=`function`&&(this.options.overloadTranslationOptionHandler=i.overloadTranslationOptionHandler);let a=e=>e?typeof e==`function`?new e:e:null;if(!this.options.isClone){this.modules.logger?T.init(a(this.modules.logger),this.options):T.init(null,this.options);let e;e=this.modules.formatter?this.modules.formatter:ne;let t=new P(this.options);this.store=new D(this.options.resources,this.options);let n=this.services;n.logger=T,n.resourceStore=this.store,n.languageUtils=t,n.pluralResolver=new L(t,{prepend:this.options.pluralSeparator}),e&&(n.formatter=a(e),n.formatter.init&&n.formatter.init(n,this.options),this.options.interpolation.format=n.formatter.format.bind(n.formatter)),n.interpolator=new z(this.options),n.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},n.backendConnector=new ie(a(this.modules.backend),n.resourceStore,n,this.options),n.backendConnector.on(`*`,(e,...t)=>{this.emit(e,...t)}),this.modules.languageDetector&&(n.languageDetector=a(this.modules.languageDetector),n.languageDetector.init&&n.languageDetector.init(n,this.options.detection,this.options)),this.modules.i18nFormat&&(n.i18nFormat=a(this.modules.i18nFormat),n.i18nFormat.init&&n.i18nFormat.init(this)),this.translator=new N(this.services,this.options),this.translator.on(`*`,(e,...t)=>{this.emit(e,...t)}),this.modules.external.forEach(e=>{e.init&&e.init(this)})}if(this.format=this.options.interpolation.format,t||=W,this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){let e=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);e.length>0&&e[0]!==`dev`&&(this.options.lng=e[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn(`init: no languageDetector is used and no lng is defined`),[`getResource`,`hasResourceBundle`,`getResourceBundle`,`getDataByLanguage`].forEach(e=>{this[e]=(...t)=>this.store[e](...t)}),[`addResource`,`addResources`,`addResourceBundle`,`removeResourceBundle`].forEach(e=>{this[e]=(...t)=>(this.store[e](...t),this)});let o=r(),s=()=>{let e=(e,n)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn(`init: i18next is already initialized. You should call init just once!`),this.isInitialized=!0,this.options.isClone||this.logger.log(`initialized`,this.options),this.emit(`initialized`,this.options),o.resolve(n),t(e,n)};if((this.languages||this.isLanguageChangingTo)&&!this.isInitialized)return e(null,this.t.bind(this));this.changeLanguage(this.options.lng,e)};return this.options.resources||!this.options.initAsync?s():setTimeout(s,0),o}loadResources(e,t=W){let r=t,i=n(e)?e:this.language;if(typeof e==`function`&&(r=e),!this.options.resources||this.options.partialBundledLanguages){if(i?.toLowerCase()===`cimode`&&(!this.options.preload||this.options.preload.length===0))return r();let e=[],t=t=>{t&&t!==`cimode`&&this.services.languageUtils.toResolveHierarchy(t).forEach(t=>{t!==`cimode`&&(e.includes(t)||e.push(t))})};i?t(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(e=>t(e)),this.options.preload?.forEach?.(e=>t(e)),this.services.backendConnector.load(e,this.options.ns,e=>{!e&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(e)})}else r(null)}reloadResources(e,t,n){let i=r();return typeof e==`function`&&(n=e,e=void 0),typeof t==`function`&&(n=t,t=void 0),e||=this.languages,t||=this.options.ns,n||=W,this.services.backendConnector.reload(e,t,e=>{i.resolve(),n(e)}),i}use(e){if(!e)throw Error(`You are passing an undefined module! Please check the object you are passing to i18next.use()`);if(!e.type)throw Error(`You are passing a wrong module! Please check the object you are passing to i18next.use()`);return e.type===`backend`&&(this.modules.backend=e),(e.type===`logger`||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type===`languageDetector`&&(this.modules.languageDetector=e),e.type===`i18nFormat`&&(this.modules.i18nFormat=e),e.type===`postProcessor`&&O.addPostProcessor(e),e.type===`formatter`&&(this.modules.formatter=e),e.type===`3rdParty`&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&![`cimode`,`dev`].includes(e)){for(let e=0;e<this.languages.length;e++){let t=this.languages[e];if(![`cimode`,`dev`].includes(t)&&this.store.hasLanguageSomeTranslations(t)){this.resolvedLanguage=t;break}}!this.resolvedLanguage&&!this.languages.includes(e)&&this.store.hasLanguageSomeTranslations(e)&&(this.resolvedLanguage=e,this.languages.unshift(e))}}changeLanguage(e,t){this.isLanguageChangingTo=e;let i=r();this.emit(`languageChanging`,e);let a=e=>{this.language=e,this.languages=this.services.languageUtils.toResolveHierarchy(e),this.resolvedLanguage=void 0,this.setResolvedLanguage(e)},o=(n,r)=>{r?this.isLanguageChangingTo===e&&(a(r),this.translator.changeLanguage(r),this.isLanguageChangingTo=void 0,this.emit(`languageChanged`,r),this.logger.log(`languageChanged`,r)):this.isLanguageChangingTo=void 0,i.resolve((...e)=>this.t(...e)),t&&t(n,(...e)=>this.t(...e))},s=t=>{!e&&!t&&this.services.languageDetector&&(t=[]);let r=n(t)?t:t&&t[0],i=this.store.hasLanguageSomeTranslations(r)?r:this.services.languageUtils.getBestMatchFromCodes(n(t)?[t]:t);i&&(this.language||a(i),this.translator.language||this.translator.changeLanguage(i),this.services.languageDetector?.cacheUserLanguage?.(i)),this.loadResources(i,e=>{o(e,i)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?s(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(s):this.services.languageDetector.detect(s):s(e),i}getFixedT(e,t,r,i){let a=i?.scopeNs,o=(e,t,...n)=>{let i;i=typeof t==`object`?{...t}:this.options.overloadTranslationOptionHandler([e,t].concat(n)),i.lng=i.lng||o.lng,i.lngs=i.lngs||o.lngs;let s=i.ns!==void 0&&i.ns!==null;i.ns=i.ns||o.ns,i.keyPrefix!==``&&(i.keyPrefix=i.keyPrefix||r||o.keyPrefix);let c={...this.options,...i};Array.isArray(a)&&!s&&(c.ns=a),typeof i.keyPrefix==`function`&&(i.keyPrefix=j(i.keyPrefix,c));let l=this.options.keySeparator||`.`,u;return i.keyPrefix&&Array.isArray(e)?u=e.map(e=>(typeof e==`function`&&(e=j(e,c)),`${i.keyPrefix}${l}${e}`)):(typeof e==`function`&&(e=j(e,c)),u=i.keyPrefix?`${i.keyPrefix}${l}${e}`:e),this.t(u,i)};return n(e)?o.lng=e:o.lngs=e,o.ns=t,o.keyPrefix=r,o}t(...e){return this.translator?.translate(...e)}exists(...e){return this.translator?.exists(...e)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e,t={}){if(!this.isInitialized)return this.logger.warn(`hasLoadedNamespace: i18next was not initialized`,this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn(`hasLoadedNamespace: i18n.languages were undefined or empty`,this.languages),!1;let n=t.lng||this.resolvedLanguage||this.languages[0],r=this.options?this.options.fallbackLng:!1,i=this.languages[this.languages.length-1];if(n.toLowerCase()===`cimode`)return!0;let a=(e,t)=>{let n=this.services.backendConnector.state[`${e}|${t}`];return n===-1||n===0||n===2};if(t.precheck){let e=t.precheck(this,a);if(e!==void 0)return e}return!!(this.hasResourceBundle(n,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(n,e)&&(!r||a(i,e)))}loadNamespaces(e,t){let i=r();return this.options.ns?(n(e)&&(e=[e]),e.forEach(e=>{this.options.ns.includes(e)||this.options.ns.push(e)}),this.loadResources(e=>{i.resolve(),t&&t(e)}),i):(t&&t(),Promise.resolve())}loadLanguages(e,t){let i=r();n(e)&&(e=[e]);let a=this.options.preload||[],o=e.filter(e=>!a.includes(e)&&this.services.languageUtils.isSupportedCode(e));return o.length?(this.options.preload=a.concat(o),this.loadResources(e=>{i.resolve(),t&&t(e)}),i):(t&&t(),Promise.resolve())}dir(e){if(e||=this.resolvedLanguage||(this.languages?.length>0?this.languages[0]:this.language),!e)return`rtl`;try{let t=new Intl.Locale(e);if(t&&t.getTextInfo){let e=t.getTextInfo();if(e&&e.direction)return e.direction}}catch{}let t=`ar.shu.sqr.ssh.xaa.yhd.yud.aao.abh.abv.acm.acq.acw.acx.acy.adf.ads.aeb.aec.afb.ajp.apc.apd.arb.arq.ars.ary.arz.auz.avl.ayh.ayl.ayn.ayp.bbz.pga.he.iw.ps.pbt.pbu.pst.prp.prd.ug.ur.ydd.yds.yih.ji.yi.hbo.men.xmn.fa.jpr.peo.pes.prs.dv.sam.ckb`.split(`.`),n=this.services?.languageUtils||new P(H());return e.toLowerCase().indexOf(`-latn`)>1?`ltr`:t.includes(n.getLanguagePartFromCode(e))||e.toLowerCase().indexOf(`-arab`)>1?`rtl`:`ltr`}static createInstance(t={},n){let r=new e(t,n);return r.createInstance=e.createInstance,r}cloneInstance(t={},n=W){let r=t.forkResourceStore;r&&delete t.forkResourceStore;let i={...this.options,...t,isClone:!0},a=new e(i);if((t.debug!==void 0||t.prefix!==void 0)&&(a.logger=a.logger.clone(t)),[`store`,`services`,`language`].forEach(e=>{a[e]=this[e]}),a.services={...this.services},a.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},r&&(a.store=new D(Object.keys(this.store.data).reduce((e,t)=>(e[t]={...this.store.data[t]},e[t]=Object.keys(e[t]).reduce((n,r)=>(n[r]={...e[t][r]},n),e[t]),e),{}),i),a.services.resourceStore=a.store),t.interpolation){let e={...H().interpolation,...this.options.interpolation,...t.interpolation},n={...i,interpolation:e};a.services.interpolator=new z(n)}return a.translator=new N(a.services,i),a.translator.on(`*`,(e,...t)=>{a.emit(e,...t)}),a.init(i,n),a.translator.options=i,a.translator.backendConnector.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},a}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}.createInstance();K.createInstance,K.dir,K.init,K.loadResources,K.reloadResources,K.use,K.changeLanguage,K.getFixedT,K.t,K.exists,K.setDefaultNamespace,K.hasLoadedNamespace,K.loadNamespaces,K.loadLanguages;var q={type:`3rdParty`,init(n){e(n.options.react),t(n)}},J={app:{reconnecting:`Reconnecting…`,dropSqlite:`Drop to open the SQLite file`,dropSqliteHint:`Opened in your browser with WebAssembly — the file stays on your computer. Drop the -wal sidecar together with it if there is one.`,dropFailedTitle:`Could not open the dropped file`,dropNotSqlite:`{{name}} is not a SQLite database file.`,crashTitle:`Something went wrong`,crashBody:`The app hit an unexpected error. Reloading restores your connections and tabs; unsaved grid edits are lost.`,crashReload:`Reload`},language:{auto:`System language ({{name}})`,en:`English`,ko:`한국어`,zh:`中文(简体)`,ja:`日本語`,de:`Deutsch`,fr:`Français`},settings:{title:`Safety`,description:`Guard rails against accidental data loss. Read-only, environment colour and transaction mode are set per connection.`,language:`Language`,languageHint:`Applies immediately. "System language" follows your browser.`,resetDefaults:`Reset to defaults`,done:`Done`,analytics:`Share anonymous usage statistics`,analyticsHint:`Sends anonymous usage events (engine, feature, statement type) to Google Analytics. Never SQL text, host names, table or user names.`,analyticsUnavailableHint:`Not active in this build (no measurement id configured).`,persistHistory:`Keep query history across reloads`,persistHistoryHint:`Statement text is stored in this browser (password literals are masked; the open editor tabs themselves are always kept). Off: history and snapshots live only until the tab closes.`},menu:{settings:{safety:`Safety…`,language:`Language`,title:`Settings`,theme:`Theme`},help:{gettingStarted:`Getting Started`,about:`About Planche`,title:`Help`,documentation:`Documentation`,terms:`Terms of Use`},connection:{title:`Connection`,connect:`Connect`,disconnect:`Disconnect`,readOnly:`Read-only`,manualTransactions:`Manual Transactions`,saveDatabaseFile:`Save Database File`,saveDatabaseFileBlocked:`Save Database File (load -wal first)`,exit:`Exit`},query:{title:`Query`,execute:`Execute`,executeStatementAtCursor:`Execute Statement at Cursor`,executeWholeScript:`Execute Whole Script`,newQueryTab:`New Query Tab`,findReplace:`Find & Replace`,localHistory:`Local History…`},edit:{title:`Edit`,undo:`Undo`,redo:`Redo`,cut:`Cut`,copy:`Copy`,paste:`Paste`,selectAll:`Select All`},database:{title:`Database`,create:`Create Database`,alter:`Alter Database`,drop:`Drop Database`,copy:`Copy Database`,compare:`Compare Schemas…`,truncate:`Truncate Database`,compareData:`Compare Data…`},table:{title:`Table`,create:`Create Table`,alter:`Alter Table`,drop:`Drop Table`,rename:`Rename Table`,truncate:`Truncate Table`,duplicateStructure:`Duplicate Table Structure`},export:{title:`Export`,csv:`Download to CSV`,schemaHtml:`Schema to HTML`,links:`Export column links…`,importLinks:`Import column links…`},tools:{title:`Tools`,userManager:`User Manager`,processList:`Process List`,variables:`Variables`,status:`Status`,flush:`Flush`,quickCommand:`Quick Command`,viewErd:`View ERD`,scratchpad:`Scratchpad (in-browser SQLite)`,federated:`Federated query (join across connections)…`,federatedTab:`Federated {{n}}`},messages:{databaseFileSaved:`Database file saved`,databaseExported:`Database exported as download`,databaseExportedWithReason:`Database exported as download — {{reason}}`,errorSavingDatabase:`Error saving database: {{message}}`,noDatabaseSelected:`No database selected`,noTableSelected:`No table selected`,noActiveConnection:`No active connection`,databaseDropped:`Database "{{database}}" dropped successfully`,errorDroppingDatabase:`Error dropping database: {{message}}`,noTablesInDatabase:`No tables found in database "{{database}}"`,databaseTruncated_one:`All {{count}} table in "{{database}}" truncated successfully`,databaseTruncated_other:`All {{count}} tables in "{{database}}" truncated successfully`,errorTruncatingDatabase:`Error truncating database: {{message}}`,tableDropped:`Table "{{table}}" dropped successfully`,errorDroppingTable:`Error dropping table: {{message}}`,tableTruncated:`Table "{{table}}" truncated successfully`,errorTruncatingTable:`Error truncating table: {{message}}`,renameTablePrompt:`Rename table "{{table}}" to:`,tableRenamed:`Table "{{table}}" renamed to "{{newName}}" successfully`,errorRenamingTable:`Error renaming table: {{message}}`,truncateDatabaseTitle:`Truncate all tables in "{{name}}"?`,truncateDatabaseDescription:`Every row in {{count}} table(s) of "{{name}}" will be deleted. Table structures are kept. This cannot be undone.`,truncateDatabaseConfirm:`Truncate all tables`,renameTableTitle:`Rename table`,renameTableConfirm:`Rename`,noLinksToExport:`No column links to export.`,linksExported:`Exported {{count}} column links.`,linksImported:`Imported {{count}} column links.`,linksImportedPartial:`Imported {{count}} column links; no matching profile for: {{profiles}}`,linksImportFailed:`Could not import column links: {{reason}}`}},about:{title:`About Planche`,tagline:`A database client for MySQL, MariaDB, PostgreSQL and SQLite.`,version:`Version`,website:`Website`,disclaimer:`Planche is provided "as is", without warranty of any kind. The authors are not liable for any damage or data loss arising from its use. Back up your data before running destructive statements.`,rights:`All rights reserved.`},connection:{dialog:{title:`Connect to Database`,firstQueryTab:`Query 1`,colHostName:`Host Name`,colTarget:`Target`,colDbms:`DBMS`,noSaved:`No saved connections`,unnamed:`(unnamed)`,pickOnConnect:`(pick on connect)`,noFile:`(no file)`,selectPrompt:`Select a connection or add a new one`,addNew:`Add New`,delete:`Delete`,testConnection:`Test Connection`,connect:`Connect`,close:`Close`,unknownError:`Unknown error`,browserTestHint:`In-browser SQLite connections open a local file when you click Connect.`,testSuccess:`Connection successful`,restoredUnsaved:`{{file}}: restored unsaved changes from the cached copy`,restoredUnsavedDiskChanged:`{{file}}: restored unsaved changes from the cached copy — note the file on disk changed since`,walPending:`{{file}} is in WAL mode: recent changes may still be in its -wal file. Use "Load -wal file" above to include them.`,walApplied:`{{file}} opened with its -wal changes applied`,connectFailedTitle:`Connection failed`,testSuccessDescription:`The server accepted the credentials.`,testFailedTitle:`Connection test failed`,privacy:`Nothing you enter here is sent to or stored on planche.dev servers. Connection profiles live only in this browser's local storage; queries go straight from the local agent to your database.`,hostKeyTitle:`Unknown SSH host key`,hostKeyDescription:`{{host}}:{{port}} presented a {{type}} key with fingerprint {{fingerprint}}. Compare it with the fingerprint your server administrator gave you; accepting the wrong key lets an attacker read your traffic.`,hostKeyAccept:`Trust this host`,gatewayTitle:`Gateway profiles`,gatewayAdd:`Add`,gatewayAdded:`Added gateway profile {{name}}.`,gatewayReadOnly:`read-only`,gatewayWritable:`writable`,gatewayProfileHint:`This connection uses the profile "{{name}}" held by the gateway; there is nothing to configure here.`,gatewayLoadFailed:`Could not load the gateway profiles: {{error}}`},form:{hostName:`Host Name`,hostNamePlaceholder:`My Connection`,dataSource:`Data Source`,openVia:`Open Via`,viaBrowser:`Browser (local file)`,viaAgent:`Local agent`,viaBrowserHint:`Nothing to install. Best for files no other program is using: the browser works on an in-memory copy and cannot lock the file, so edits made elsewhere while it is open are not seen and Save overwrites them.`,viaAgentHint:`Opens the file with SQLite itself via npx planche — proper locking and WAL, safe alongside other programs using the same database.`,databaseFile:`Database File`,changeFile:`Change file`,filePickerHint:`A file picker opens when you click Connect (tip: ⌘⇧. shows hidden files, ⌘⇧G lets you type a path).`,fileRememberedHint:`The chosen file is remembered (Chromium) so reconnecting only asks for permission. Use Connection > Save Database File to write changes back.`,authToken:`Auth Token`,authTokenPlaceholder:`Leave empty to use the paired agent token`,filePathPlaceholder:`/path/to/database.sqlite or :memory:`,createIfMissing:`Create If Missing`,createIfMissingHint:`Path is resolved on the tunneling server host`,host:`Host`,port:`Port`,database:`Database`,serviceName:`Service name`,user:`User`,password:`Password`,savePassword:`Save password`,savePasswordHint:`Off: the password is kept only for this browser session and never written to disk.`,charset:`Charset`,autoConnection:`Auto Connection`,safety:`Safety`,environment:`Environment`,environmentHint:`tints the tab and workspace`,readOnly:`Read-only`,readOnlyHint:`Refuse statements that modify data or schema`,transactions:`Transactions`,txAuto:`Auto-commit`,txManual:`Manual — Commit / Rollback from the toolbar`,ssh:`SSH`,sshTunnel:`SSH tunnel`,sshTunnelHint:`Reach the database through an SSH jump host (opened by the local agent)`,sshHost:`SSH Host`,sshPort:`SSH port`,sshUser:`SSH User`,sshAuth:`SSH Auth`,sshAuthKey:`Private key`,sshAuthPassword:`Password`,sshAuthAgent:`ssh-agent`,sshAuthAgentHint:`Uses the keys loaded in the ssh-agent of the machine running npx planche (SSH_AUTH_SOCK).`,sshPassword:`SSH Password`,sshKey:`Private Key`,sshKeyPick:`Choose key file…`,sshKeyLoaded:`Key loaded`,sshKeyHint:`Leave empty to use the IdentityFile from ~/.ssh/config (or ~/.ssh/id_*) on the agent's machine; a picked key is stored with this profile`,sshPassphrase:`Passphrase`,sshPassphrasePlaceholder:`Leave empty if the key has none`,sshSecretsHint:`The SSH password, private key and passphrase follow the "Save password" setting above. Unknown host keys are shown for you to verify before the first connection and saved to ~/.planche/known_hosts on the agent's machine.`,sshHostPlaceholder:`bastion.example.com or a Host alias from ~/.ssh/config`,sshUserPlaceholder:`Leave empty to use ~/.ssh/config`,sshTargetHint:`The database host and port are resolved on the jump host — use the database's real address (e.g. the RDS endpoint), not localhost or a local port forward.`,connectionString:`Connection string`,connectionStringApplied:`Applied to the fields below. The string itself is not saved — only the fields are.`,connectionStringInvalid:`Not a PostgreSQL URI (expected postgresql://user:password@host/database).`,neonHint:`Paste the URI from the Neon console (Connect > Connection string); the fields below are filled in from it.`,supabaseHint:`Paste the URI from Supabase (Connect > Session pooler or Direct connection); the fields below are filled in from it.`,supabasePoolerWarning:`Port 6543 is the transaction-mode pooler: each statement may run on a different backend, so switching schemas, temp tables, prepared statements and manual transactions do not work. Use the session pooler (port 5432) or the direct connection.`,managedTlsHint:`TLS is always on for this service; the connection goes straight from the local agent to the service (no SSH tunnel).`,d1AccountId:`Account ID`,d1DatabaseId:`Database ID`,d1ApiToken:`API Token`,d1Hint:`Account ID: Cloudflare dashboard, right side of the account home. Database ID: Storage & Databases > D1 > your database. Token: My Profile > API Tokens > Create Token with the "D1 Edit" permission (or "D1 Read" for read-only). The local agent calls the Cloudflare API with it.`,d1LimitsHint:`D1 runs each request on its own and auto-commits, so manual transactions are unavailable; the database appears as the single schema "main".`,tls:`TLS`,tlsEnable:`Encrypt the connection`,tlsVerify:`Verify server certificate`,tlsVerifyHint:`Off: self-signed certificates are accepted (encrypted, but the server is not authenticated). Not available over an SSH tunnel.`},agent:{copy:`Copy`,looking:`Looking for the Planche agent…`,online:`Agent <b>v{{version}}</b> is running at <mono>{{url}}</mono>`,outdated:`Agent v{{version}} speaks protocol {{protocol}}, but this app needs a newer one. Restart it with <cmd/>`,unauthorized:`Agent <b>v{{version}}</b> is running at <mono>{{url}}</mono>, but this app is not paired with it (the token changes on every start). Open the link printed in the agent's terminal, or paste the token under Configure.`,offline:`No agent at <mono>{{url}}</mono>. Run <cmd/> in a terminal — it opens this app already paired.`,close:`Close`,configure:`Configure`,checkAgain:`Check again`,urlLabel:`Agent URL`,urlPlaceholder:`http://127.0.0.1:8888 (default)`,tokenLabel:`Token`,tokenPlaceholder:`Printed by the agent`,reset:`Reset`,save:`Save`,remoteWarning:`This agent is not on your computer ({{host}}): every connection sends its passwords and SSH keys there.`,remoteRefusedTitle:`Remote agent not allowed`,remoteRefused:"The agent must run on this computer (127.0.0.1 or localhost). To use one on another machine, forward its port with `ssh -L 8888:127.0.0.1:8888 user@host` and keep the URL at http://127.0.0.1:8888.",gateway:`Gateway "{{name}}": {{count}} server-side profiles. Credentials stay on the gateway; pick a profile below.`},tab:{noConnections:`No connections open. Press Connect to get started.`,theSqliteFile:`the SQLite file`,reopened:`Reopened {{file}}`,reopenFailed:`Could not reopen file: {{message}}`,reopenPrompt:`The browser needs your permission again to read <b>{{file}}</b>.`,reopenFile:`Reopen file`,closeConnection:`Close connection`,reconnected:`Reconnected {{file}}`,accessNotGranted:`File access was not granted; Save will export a download instead.`,detachedPrompt:`Working on a cached copy of <b>{{file}}</b>. Reconnect the file to save changes in place.`,reconnectFile:`Reconnect file`,detachedHide:`Hide (Save will ask for the file when needed)`,walFramesApplied_one:`Applied {{count}} WAL frame from {{file}}-wal`,walFramesApplied_other:`Applied {{count}} WAL frames from {{file}}-wal`,walNoChanges:`The -wal file had no committed changes`,walLoadFailed:`Could not load -wal file: {{message}}`,walPrompt:`<b>{{file}}</b> is in WAL mode: it may not show the latest data until its <mono>{{file}}-wal</mono> file is loaded, and saving is disabled until then. If no such file exists next to it (the database was closed cleanly), confirm that instead. If another program is still using this database, open it through the local agent (<mono>npx planche</mono>) instead: the browser cannot share the file safely.`,loadWal:`Load -wal file`,noWalHint:`I checked: there is no -wal file next to the database`,noWal:`No -wal file`,dismiss:`Dismiss`,walHide:`Hide (saving stays disabled)`,readOnlyBadge:`read-only`}},toolbar:{connect:`Connect (Alt+N)`,disconnect:`Disconnect`,newQueryTab:`New Query Tab (Alt+T)`,execute:`Execute (F9)`,executeStatement:`Execute statement at cursor / selection (Ctrl+Enter)`,commit:`Commit`,commitHint:`Commit the open transaction`,noOpenTransaction:`No open transaction`,rollback:`Rollback`,rollbackHint:`Discard the open transaction`,readOnlyBadge:`read-only`,readOnlyHint:`This connection refuses statements that modify data or schema`,userManager:`User Manager (Alt+U)`,quickCommand:`Quick Command`,processList:`Process List`,variables:`Variables`,status:`Status`,flush:`Flush`,fullscreen:`Fullscreen`},footer:{readOnly:`read-only`,txOpen:`tx open`,manualTx:`manual tx`},palette:{title:`Quick Command`,description:`Search for a command to run...`,inputPlaceholder:`Type a command or search...`,empty:`No commands found.`,groups:{connection:`Connection`,query:`Query`,database:`Database`,table:`Table`,tools:`Tools`},commands:{connect:`Connect`,disconnect:`Disconnect`,executeQuery:`Execute Query`,newQueryTab:`New Query Tab`,createDatabase:`Create Database`,dropDatabase:`Drop Database`,createTable:`Create Table`,alterTable:`Alter Table`,dropTable:`Drop Table`,processList:`Process List`,serverVariables:`Server Variables`,serverStatus:`Server Status`,flush:`Flush`,userManager:`User Manager`}},welcome:{title:`Welcome to Planche`,intro:`A SQL client that runs in your browser. Your databases are reached through a small agent on your machine, so credentials and data never leave your computer.`,skip:`Skip`,skipTitle:`Hide this screen (Help > Getting Started brings it back)`,copy:`Copy`,copied:`Copied`,sampleOpenFailed:`Could not open the sample database: {{message}}`,steps:{agent:{title:`Run the local agent`,body:`In a terminal (Node.js 22 or newer), run this once. It starts the agent and pairs it with this page.`},connection:{title:`Add a connection`,body:`Pick your database to open the connection form with the right defaults.`},sample:{title:`No database at hand? Try the sample`,body:`Load a sample web-shop database (24 tables, ~50k rows, views and triggers) into the browser to try the editor, grid and schema tree.`,loading:`Loading sample…`,button:`Try the sample database`}},terms:{title:`Before you start`,local:`Everything runs locally: credentials, queries and results stay on your machine and are never sent to us.`,asIs:`Planche is provided as is, without warranty. The safeguards (destructive confirms, read-only mode) are conveniences, not guarantees.`,dataLoss:`You are responsible for every statement executed through Planche. Back up your data before running anything destructive.`,agree:`I have read and agree to the Terms of Use.`,accepted:`You accepted the Terms of Use.`,readFull:`Read the full terms`}},schema:{treeLabel:`Schema`,unreachableHint:`Not the database this connection is bound to; create a profile for it to browse it`,objectType:{table:`Table`,view:`View`,procedure:`Procedure`,function:`Function`,trigger:`Trigger`,event:`Event`},menu:{showCreate:`Show Create {{type}}`,alter:`Alter {{type}}`,drop:`Drop {{type}}`,create:`Create {{type}}`,refresh:`Refresh`,unreachable:`Connect with a profile bound to this database to browse it`,openDatabase:`Open Database`,createSchema:`Create Schema`,createTable:`Create Table`,dropDatabase:`Drop Database`,openSchema:`Open Schema`,dropSchema:`Drop Schema`,newQueryTab:`New Query Tab`,generateSql:`Generate SQL`,openTable:`Open Table`,alterTable:`Alter Table`,showCreateTable:`Show Create Table`,duplicateStructure:`Duplicate Structure`,copyTable:`Copy Table to…`,compare:`Compare {{type}}…`,truncateTable:`Truncate Table`,dropTable:`Drop Table`,exportCsv:`Export to CSV`,openView:`Open View`,alterView:`Alter View`,showCreateView:`Show Create View`,dropView:`Drop View`,compareData:`Compare Data…`},actions:{createStatementUnavailable:`-- Could not retrieve CREATE statement for {{type}} {{name}}`,getCreateFailed:`Failed to get CREATE {{type}}: {{message}}`,createTabTitle:`Create {{type}}`,createSchemaTabTitle:`Create Schema`,generateSqlFailed:`Could not generate SQL: {{message}}`,dropTableTitle:`Drop table "{{name}}"?`,dropTableDescription:`This permanently deletes the table and every row in it{{from}}. This cannot be undone.`,dropTableConfirm:`Drop table`,dropObjectTitle:`Drop {{type}} "{{name}}"?`,dropObjectDescription:`The {{type}} definition will be removed{{from}}. This cannot be undone.`,dropObjectConfirm:`Drop {{type}}`,fromDatabase:` from database "{{database}}"`,dropped:`Dropped {{type}} {{name}}`,dropFailed:`Failed to drop {{type}}`,dropDatabaseTitle:`Drop database "{{name}}"?`,dropDatabaseDescription:`This permanently deletes the database with all of its tables and data. This cannot be undone.`,dropDatabaseConfirm:`Drop database`,droppedDatabase:`Dropped database {{name}}`,dropDatabaseFailed:`Failed to drop database`,dropSchemaTitle:`Drop schema "{{name}}"?`,dropSchemaDescription:`This permanently deletes the schema with all of its tables and data. This cannot be undone.`,dropSchemaConfirm:`Drop schema`,droppedSchema:`Dropped schema {{name}}`,dropSchemaFailed:`Failed to drop schema`,truncateTitle:`Truncate table "{{name}}"?`,truncateDescription:`Every row in "{{name}}" will be deleted. The table structure is kept. This cannot be undone.`,truncateConfirm:`Truncate table`,truncated:`Truncated {{name}}`,truncateFailed:`Failed to truncate`},tree:{loadDatabasesFailed:`Failed to load databases: {{message}}`}},query:{editor:{destructiveMarker:`Destructive: {{action}} {{names}}`,readOnlyMarker:`Connection is read-only; this statement modifies data or schema`,actionExecute:`Execute (per settings)`,actionExecuteStatement:`Execute Statement at Cursor / Selection`,actionExecuteScript:`Execute Whole Script`},tabs:{newQuery:`New Query`,queryTitle:`Query {{n}}`,erdViewer:`ERD Viewer`,close:`Close`,closeOthers:`Close Others`,closeLeft:`Close Tabs to the Left`,closeRight:`Close Tabs to the Right`,closeAll:`Close All`},executor:{noActiveConnection:`No active connection`,uncommittedTitle:`Uncommitted transaction`,uncommittedDescription:`This connection has an open transaction. Disconnecting will roll back its changes.`,uncommittedConfirm:`Rollback and disconnect`,unsavedTitle:`Unsaved changes`,unsavedDescription:`{{file}} has changes that were not saved to its file. Disconnecting discards them (use Connection > Save Database File first to keep them).`,theSqliteDatabase:`The SQLite database`,unsavedConfirm:`Discard and disconnect`}},result:{tabs:{message:`Message`,info:`Info`,history:`History`,result:`Result`,resultN:`Result {{n}}`},message:{executing:`Executing query...`,error:`Error: {{message}}`,total:` (Total: {{ms}}ms)`,ready:`Ready.`,log:`Execution log`,statementN:`Statement {{n}}`,limitedBadge:`limit hit`,insertId:`insert id {{id}}`,failed:`Failed`,failedStatement:`Failed statement`,summary:`{{ok}} succeeded · {{failed}} failed · {{ms}} total`,copy:`Copy`,copied:`Copied`,showSql:`Show SQL`,hideSql:`Hide SQL`},info:{empty:`No query information available.`,resultN:`Result {{n}}`,metadata:`Query Metadata`,executionTime:`Execution Time`,notAvailable:`N/A`,affectedRows:`Affected Rows`,fields:`Fields`,fieldDetails:`Field Details`,colName:`Name`,colType:`Type`,colTable:`Table`,resultSets:`Result Sets`,rowsReturned:`Rows Returned`,insertId:`Last Insert ID`,lastQuery:`Last executed statement`,copy:`Copy`,copied:`Copied`,colOrigin:`Origin`,primaryKey:`Primary key`,rowsAndFields:`{{rows}} rows × {{fields}} fields`,noFields:`This statement returned no columns.`},rowForm:{colColumn:`Column`,colValue:`Value`,insertTitle:`Insert row`,editTitle:`Edit row`,loading:`Loading columns...`,preview:`Statement`,nothingToWrite:`Nothing to write`,insert:`Insert`,update:`Update`,stageInsert:`Add as pending row`,stageEdit:`Apply to grid`,stageHint:`Put the values in the grid without running anything; commit later with the other edits.`,inserted:`Row inserted into {{table}}`,updated:`Row updated in {{table}}`,confirmInsertTitle:`Insert a row into {{table}}?`,confirmUpdateTitle:`Update a row in {{table}}?`,inTransaction:`Runs inside the open transaction`,pickDate:`Pick a date`,now:`Now`,formatJson:`Format`,binaryUnsupported:`Binary columns cannot be edited here; leave NULL / DEFAULT or set them with SQL.`,generateUuid:`Generate UUID`,defaultValue:`Default value`,clickToChange:`Click to change`,empty:`(empty)`,autoHint:`Generated by the server`,mode:{keep:`Keep`,auto:`Auto`,value:`Value`},invalid:{integer:`Enter a whole number`,unsigned:`This column does not accept negative numbers`,number:`Enter a number`,json:`Invalid JSON`,date:`Use YYYY-MM-DD`,datetime:`Use YYYY-MM-DD HH:MM:SS`,time:`Use HH:MM:SS`,length:`At most {{max}} characters`}},history:{copied:`Copied to clipboard`,searchPlaceholder:`Search history...`,all:`All`,success:`Succeeded`,failed:`Failed`,thisTab:`This tab only`,noMatch:`No entries match.`,count:`{{count}} entries`,clear:`Clear`,clearTitle:`Clear query history?`,clearDescription:`All {{count}} entries for this connection will be removed. This cannot be undone.`,clearConfirm:`Clear history`,insert:`Insert into editor`,inserted:`Inserted into the editor`,copy:`Copy`,rows:`{{count}} rows`,affected:`{{count}} affected`,today:`Today`,yesterday:`Yesterday`,empty:`No query history.`},json:{arrayLength:`Array[{{count}}]`,keys_one:`{{count}} key`,keys_other:`{{count}} keys`,invalid:`Invalid JSON`,clickToView:`Click to view JSON`,expandAll:`Expand all`,collapseAll:`Collapse all`,edit:`Edit`,view:`View`,copied:`Copied`,copy:`Copy`,shortcutHint:`{{mod}}+Enter to save · Esc to cancel`,cancel:`Cancel`,save:`Save`},grid:{readOnlyConnection:`Read-only connection`,readOnlyWal:`Read-only: -wal file not loaded`,readOnlyNoPk:`Read-only: table has no primary key`,commitTitle:`Commit {{count}} change(s) to {{table}}?`,commitDescription:`The following statements will be executed.`,commitConfirm:`Commit`,rowPrefix:`Row {{row}}:`,cancelled:`cancelled`,commitFailed:`Commit failed: {{message}}`,executedInTransaction:`Executed {{count}} change(s) inside the open transaction — press Commit in the toolbar to make them permanent (reloading rolls them back)`,committed:`Committed {{count}} change(s) to {{table}}`,noData:`No data to display.`,commit:`Commit`,discard:`Discard`,addRow:`Add row`,removeNewRow:`Cancel this new row`,addRowForm:`Add with form`,addRowFormHint:`Open a form with an input per column (committed as INSERT)`,editRowForm:`Edit this row in a form`,addRowHint:`Add a new row (committed as INSERT)`,delete:`Delete`,deleteCount:`Delete ({{count}})`,deleteHint:`Delete the selected rows (committed as DELETE). Select rows with the row-number column.`,field:`Field`,searchPlaceholder:`Search...`,orderBy:`Order by`,none:`None`,refresh:`Refresh`,dismiss:`Dismiss`,clearSelection:`Clear selection`,columns:`Columns`,showAllColumns:`Show all`,hideAllColumns:`Hide all`,selectAll:`Select all rows`,emptyTable:`This table has no rows.`,noRows:`No rows returned.`,addARow:`Add a row`,markedForDeletion:`Marked for deletion — click to restore`,newRow:`New row`,clickToSelect:`Click to select; Shift/Ctrl for multiple`,rows:`Rows: {{count}}`,rowsWithNew:`Rows: {{count}} (+{{added}})`,sortedBy:`Sorted by: {{column}} {{direction}}`,selected:`{{count}} selected`,cellsModified:`{{count}} cell(s) modified`,newCount:`{{count}} new`,toDelete:`{{count}} to delete`,searchMode:`Match mode`,contains:`contains`,equals:`equals`,followLink:`Open {{table}} where {{column}} = value`,linkColumn:`Link "{{column}}" to another table…`,editLink:`Edit link of "{{column}}"…`,removeLink:`Remove link`,copyValue:`Copy value`,filterByValue:`Filter: {{column}} = this value`,clearFilter:`Clear filter`,copyColumnName:`Copy column name`,editCell:`Edit cell`,setNull:`Set NULL`,setEmpty:`Set empty string`,restoreRow:`Restore row`,hideColumn:`Hide column "{{column}}"`,copyRowsTsv_one:`Copy row as TSV (with header)`,copyRowsTsv_other:`Copy {{count}} rows as TSV (with header)`,copyRowsCsv_one:`Copy row as CSV`,copyRowsCsv_other:`Copy {{count}} rows as CSV`,copyRowsJson_one:`Copy row as JSON`,copyRowsJson_other:`Copy {{count}} rows as JSON`,copyRowsInsert_one:`Copy row as INSERT`,copyRowsInsert_other:`Copy {{count}} rows as INSERT`,deleteRowsPending_one:`Delete row (pending until Commit)`,deleteRowsPending_other:`Delete {{count}} rows (pending until Commit)`,sendRowsToScratchpad_one:`Send row to scratchpad`,sendRowsToScratchpad_other:`Send {{count}} rows to scratchpad`,sendAllToScratchpad:`Send all {{count}} loaded rows to scratchpad`,sentToScratchpad:`{{count}} rows copied into scratchpad table {{table}}.`,changesSince:`Since last load: {{changed}} changed · {{added}} new · {{gone}} gone`,changesToggle:`Toggle highlighting of what changed since the previous load`,changesDismiss:`Forget these changes`,previousValue:`Previous value: {{value}}`},link:{title:`Link column to another table`,source:`Column`,hint:`Values of this column become links: clicking one opens the target table filtered to the matching row(s). Real foreign keys are linked automatically.`,targetDatabase:`Target database`,targetTable:`Target table`,targetColumn:`Target column`,pickTable:`Choose a table`,pickColumn:`Choose a column`,remove:`Remove link`,cancel:`Cancel`,save:`Save link`,targetConnection:`Target connection`,targetNotConnected:`The linked connection is not open. Connect it first.`}},confirm:{defaultDescription:`This action cannot be undone.`,typeToConfirm:`Type <name/> to confirm`,cancel:`Cancel`,confirm:`Confirm`,ok:`OK`},table:{dialog:{createTitle:`Create Table`,alterTitle:`Alter Table`,duplicateTitle:`Duplicate Table Structure`,create:`Create`,alter:`Alter`,cancel:`Cancel`,tableName:`Table Name`,tableNamePlaceholder:`Enter table name...`,loading:`Loading table schema...`,tabSchema:`Schema`,tabIndexes:`Indexes`,tabProperties:`Properties`},schema:{colField:`Field Name`,colType:`Datatype`,colLength:`Length`,colDefault:`Default`,colPk:`PK`,colNotNull:`Not Null`,colUnsigned:`Unsigned`,colAutoIncrement:`Auto Incr`,colZerofill:`Zerofill`,colComment:`Comment`,empty:`No columns defined. Click "Add Column" to add one.`,add:`Add Column`,remove:`Remove Column`},indexes:{colName:`Index Name`,colType:`Index Type`,colColumns:`Columns`,empty:`No indexes defined. Click "Add Index" to add one.`,add:`Add Index`,remove:`Remove Index`},index:{addTitle:`Add Index`,editTitle:`Edit Index`,name:`Index Name`,namePlaceholder:`Enter index name`,type:`Index Type`,columns:`Columns`,noColumns:`No columns available. Define columns in the Schema tab first.`,unnamed:`(unnamed)`,cancel:`Cancel`,ok:`OK`},properties:{engine:`Engine`,charset:`Charset`,collation:`Collation`,autoIncrement:`Auto Increment`,autoIncrementPlaceholder:`Default`,comment:`Comment`},info:{engine:`Engine`,version:`Version`,rowFormat:`Row Format`,rows:`Rows`,avgRowLength:`Avg Row Length`,dataLength:`Data Length`,createTime:`Create Time`,updateTime:`Update Time`,collation:`Collation`,comment:`Comment`},copy:{title:`Copy Table`,source:`Source`,targetConnection:`Target connection`,targetDatabase:`Target database`,targetTable:`Target table name`,what:`Copy`,structureAndData:`Structure & data`,structureOnly:`Structure only`,ifExists:`If the target table exists`,abort:`Abort (default)`,dropAndRecreate:`Drop and recreate (asks to retype the name)`,preview:`CREATE TABLE on the target (editable)`,crossEngineHint:`The target is {{engine}}: review the types below, MySQL-specific attributes were dropped.`,readOnly:`read-only`,loading:`Loading…`,progressCreate:`Creating table…`,progressCount:`Counting rows…`,progressRows:`Copied {{copied}} of {{total}} rows`,progressDone:`Done`,doneTitle:`Table copied`,doneRows:`{{count}} rows copied into {{table}}.`,doneStructure:`Structure of {{table}} created.`,noColumns:`The source table has no columns.`,exists:`Table {{table}} already exists in the target. Choose another name or "Drop and recreate".`,dropTitle:`Drop existing table {{table}}?`,dropDescription:`The target table and all of its rows will be dropped before the copy. This cannot be undone.`,dropConfirm:`Drop and copy`,cancelled:`Copy cancelled.`,stop:`Stop`,cancel:`Cancel`,copy:`Copy`}},database:{copy:{title:`Copy Database`,source:`Source Database`,target:`Target Database Name`,targetPlaceholder:`Enter target database name`,options:`Options`,structureAndData:`Structure & Data`,structureOnly:`Structure Only`,cancel:`Cancel`,copy:`Copy`},diff:{title:`Compare Schemas`,source:`Source`,target:`Target`,pickConnection:`Connection`,pickDatabase:`Database`,crossEngineHint:`Different engines: type names differ by dialect, so most columns will show a type change.`,sameSide:`Source and target are the same database.`,summary:`{{changed}} changed, {{missingTarget}} missing in target, {{missingSource}} only in target, {{identical}} identical`,showIdentical:`Show identical tables`,identicalAll:`The tables are identical.`,column:`Column`,index:`Index`,object:`Object`,selectTable:`Select a table to see its differences.`,missingInTarget:`{{table}} does not exist in the target; the script creates it.`,missingInSource:`{{table}} exists only in the target; the script drops it (commented out unless DROPs are included).`,includeDrops:`Include DROP statements as live SQL (default: commented out)`,tabTitle:`Sync {{database}}`,close:`Close`,compare:`Compare`,comparing:`Comparing…`,openScript:`Open script in editor`,noDefinition:`No CREATE statement available`},create:{title:`Create Database`,name:`Database Name`,namePlaceholder:`Enter database name`,charset:`Character Set`,collation:`Collation`,cancel:`Cancel`,create:`Create`},csv:{title:`Download to CSV`,target:`Target`,targetQueryResult:`Current Query Result`,targetTableData:`Table Data`,tableName:`Table Name`,tableNamePlaceholder:`Enter table name`,delimiter:`Delimiter`,delimiterComma:`Comma (,)`,delimiterTab:`Tab (\\t)`,delimiterSemicolon:`Semicolon (;)`,delimiterPipe:`Pipe (|)`,includeHeaders:`Include Headers`,cancel:`Cancel`,download:`Download`,downloading:`Downloading...`,progress:`{{loaded}} of {{total}} rows written`,progressUnknown:`{{loaded}} rows written`,stop:`Stop`,done:`Exported {{count}} rows of {{table}} to CSV.`,database:`Database`,databasePlaceholder:`Choose a database`},html:{title:`Schema to HTML`,database:`Database`,selectDatabase:`Select database`,tables:`Tables to Include`,selectAll:`Select All`,deselectAll:`Deselect All`,noTables:`No tables available.`,include:`Include`,includeColumns:`Columns`,includeIndexes:`Indexes`,includeProperties:`Properties`,cancel:`Cancel`,generate:`Generate`,generating:`Generating...`,sectionColumns:`Columns`,sectionIndexes:`Indexes`,sectionProperties:`Properties`,docTitle:`Schema: {{database}}`,heading:`Database: {{database}}`,summary:`Tables: {{count}} | Generated: {{date}}`,footer:`Generated by Planche 2026`},dataDiff:{title:`Compare Data`,pickTable:`Table`,hint:`Rows are matched by the source table's primary key and compared as text. Up to {{cap}} rows per side are loaded; narrow big tables with a filter first.`,sameSide:`Source and target are the same table.`,noPrimaryKey:`{{table}} has no primary key; the comparison needs one to match rows.`,keyMissingInTarget:`The target table lacks the key column(s): {{columns}}`,summary:`Key: {{key}} — {{added}} missing in target, {{changed}} different, {{removed}} only in target, {{identical}} identical`,capped:`Only the first {{cap}} rows of each side were compared.`,ignoredColumns:`Columns ignored (one side only): {{columns}}`,added_one:`{{count}} missing in target`,added_other:`{{count}} missing in target`,changed_one:`{{count}} different`,changed_other:`{{count}} different`,removed_one:`{{count}} only in target`,removed_other:`{{count}} only in target`,none:`Nothing in this group.`,more:`… {{count}} more not listed`,includeDeletes:`Include DELETE statements as live SQL (default: commented out)`,tabTitle:`Sync data {{table}}`,loading:`Loading rows — source: {{source}}, target: {{target}}`}},user:{manager:{title:`User Manager`,addUser:`Add User`,removeUser:`Remove User`,noUsers:`No users loaded`,grantScope:`Grant Scope`,apply:`Apply`,close:`Close`,removed:`User '{{user}}'@'{{host}}' removed`,selectUserFirst:`Please select a user first`,applied:`Changes applied successfully`},add:{title:`Add User`,username:`Username`,usernamePlaceholder:`Enter username`,host:`Host`,password:`Password`,passwordPlaceholder:`Enter password`,confirmPassword:`Confirm Password`,confirmPasswordPlaceholder:`Confirm password`,plugin:`Plugin`,cancel:`Cancel`,add:`Add`,usernameRequired:`Username is required`,passwordMismatch:`Passwords do not match`,added:`User '{{user}}'@'{{host}}' added`},privileges:{globalTitle:`Global Privileges`,databaseTitle:`Database Privileges`,tableTitle:`Table Privileges`,checkAll:`Check All`,uncheckAll:`Uncheck All`,categoryData:`Data`,categoryStructure:`Structure`,categoryAdministration:`Administration`},grantTree:{globalPrivileges:`Global Privileges`}},command:{close:`Close`,noActiveConnection:`No active connection`,variableName:`Variable Name`,value:`Value`,scope:{session:`Session`,global:`Global`},findReplace:{findPlaceholder:`Find`,replacePlaceholder:`Replace`,found:`{{count}} found`,noResults:`No results`,previous:`Previous`,next:`Next`,close:`Close`,replace:`Replace`,all:`All`,caseSensitive:`Case Sensitive`,regex:`Regex`,wholeWord:`Whole Word`},flush:{title:`Flush`,executed:`Executed: {{command}}`,executeError:`Error executing {{command}}: {{message}}`},localHistory:{title:`Local History`,description:`Versions of this tab captured before each run and before a template overwrote it.`,empty:`No history for this tab yet.`,restored:`Editor content restored from local history`,restore:`Restore this version`,chars:`{{count}} chars`,reason:{execute:`before run`,replaced:`before overwrite`,restore:`before restore`}},processList:{title:`Process List`,refresh:`Refresh`,autoRefresh:`Auto-refresh`,empty:`No processes to display`,kill:`Kill`,killProcess:`Kill Process`,selectToKill:`Please select a process to kill`,killed:`Process {{id}} killed successfully`,killError:`Error killing process: {{message}}`,loadError:`Error loading process list: {{message}}`,updatedAt:`updated {{time}}`,filterPlaceholder:`Filter by user, host, db, SQL...`,hideIdle:`Hide idle`,noMatch:`No processes match the filter`,self:`me`,selfHint:`This is Planche's own session`,statementOf:`Statement of #{{id}}`,noStatement:`No statement`,copy:`Copy`,copied:`Copied`,killConfirmTitle:`Kill process {{id}}?`,killConfirmDescription:`The session of {{user}}@{{host}} will be terminated and its running statement aborted. An open transaction is rolled back.`,stats:{total:`Total`,active:`Active`,idle:`Idle`,longest:`Longest running`},columns:{id:`Id`,user:`User`,host:`Host`,db:`db`,command:`Command`,time:`Time`,state:`State`,info:`Info`,action:`Action`}},status:{title:`Server Status`,filterPlaceholder:`Filter status variables...`,empty:`No status variables to display`,loadError:`Error loading status: {{message}}`},variables:{title:`Server Variables`,filterPlaceholder:`Filter variables...`,empty:`No variables to display`,loadError:`Error loading variables: {{message}}`}},erd:{empty:{title:`Open a Prisma schema file (.prisma) to view the ERD`,description:`Models, enums, and relations will be automatically analyzed`,openFile:`Open .prisma File`,dropHint:`or drag and drop a file onto this area`},entity:{enumBadge:`ENUM`,modelBadge:`MODEL`,columns:{value:`Value`,comment:`Comment`,type:`Type`,column:`Column`},linkBadge:`LINK`,externalTitle:`Linked table on {{location}} (column link, not a real foreign key)`},toolbar:{refresh:`Refresh`,zoomIn:`Zoom In`,zoomOut:`Zoom Out`,resetView:`Reset View`,center:`Center`,fitAll:`Fit All`,spreadAll:`Spread All`,resetLayout:`Reset Layout`,legendOneToMany:`1:N (FK)`,tables:`Tables:`,relations:`Relations:`,columns:`Columns:`},viewer:{noServerConnection:`No active server connection`,loading:`Loading schema from {{database}}...`,loadFailed:`Failed to load ERD`,noDatabase:`No database selected.`,selectDatabaseHint:`Select a database in the Schema Tree, then open View ERD.`}},services:{runAnyway:`Run anyway`,query:{rowsReturned:`{{count}} row(s) returned`,rowsAffected:`{{count}} row(s) affected`,rowsReturnedLimited:`{{count}} row(s) returned (limited to {{limit}}; add LIMIT to fetch more)`,notConnected:`Not connected`,fileNotOpen:`The SQLite file is not open yet — click "Reopen file" above to grant access again.`,failed:`Query failed`,nothingToExecute:`Nothing to execute`},destructive:{title_one:`Run destructive statement?`,title_other:`Run {{count}} destructive statements?`,description:`The following will permanently modify or delete data. This cannot be undone.`,unknownTarget:`(unknown)`,deleteAll:`DELETE all rows from {{target}}`,updateAll:`UPDATE all rows in {{target}}`,alterDrop:`DROP COLUMN/PARTITION on {{target}}`},readOnly:{refused:`Connection "{{label}}" is read-only. {{count}} statement(s) would modify data or schema.`,title:`"{{label}}" is read-only`,description:`These statements modify data or schema. Run them on this connection anyway?`},transaction:{startFailed:`Could not start transaction`,started:`Transaction started — Commit or Rollback when done`,implicitCommit:`{{kind}} caused an implicit COMMIT of the open transaction`,committed:`Transaction committed`,rolledBack:`Transaction rolled back`,commandFailed:`{{name}} failed`,commandFailedWith:`{{name}} failed: {{message}}`},save:{notBrowserSqlite:`Not a browser SQLite connection.`,inMemory:`In-memory database: it can only be exported as a download.`,noFileSystemAccess:`This browser has no File System Access API (Chrome/Edge only): the database is exported as a download instead of written in place.`,noWritableHandle:`The file was opened without a writable handle: it is exported as a download.`},agent:{devProxyUrl:`{{url}} (via dev proxy)`,notPlanche:`Something answered, but it is not a Planche agent`,unreachable:"Planche agent unreachable at {{url}} — run `npx planche` ({{message}})",httpError:`HTTP error: {{status}} {{statusText}}`,emptyResponse:`Tunneling server returned an empty response`,reconnected:`Reconnected to {{name}} — the agent had dropped the connection (restart or idle timeout).`},sample:{profileName:`Sample shop (in-browser)`,downloadFailed:`Could not download the sample database ({{status}})`,tabTitle:`Query 1`},sqliteFile:{tooSmall:`File is too small to be a SQLite database.`,notSqlite:`Not a SQLite database (or an encrypted one, e.g. SQLCipher). The 16-byte header does not read "SQLite format 3".`,badPageSize:`Corrupt SQLite header: invalid page size {{size}}.`,unreadable:`SQLite could not read the file: {{message}}`,pickerDescription:`SQLite database`,walNotLoaded:`This database is in WAL mode and its -wal file was not loaded. Load it, or confirm in the banner that no -wal file exists, before saving.`,changedOnDisk:`{{name}} changed on disk after it was loaded (another program wrote to it). Saving would overwrite those changes — reopen the file and redo your edits, or use the tunneling server.`,walHasChanges:`{{name}}-wal contains new changes; load it before saving.`,walChangedOnDisk:`{{name}}-wal was written by another program after it was loaded; reopen the file before saving.`,writeDenied:`Write access to {{name}} was not granted. Allow it in the browser prompt, or export as a download instead.`},environment:{none:`None`,green:`Green (dev)`,blue:`Blue`,yellow:`Yellow (staging)`,orange:`Orange`,red:`Red (production)`,purple:`Purple`},scratchpad:{profileName:`Scratchpad`,namePromptTitle:`Scratchpad table name`,namePromptDescription:`A table named {{table}} already exists in the scratchpad. Choose another name.`,nameTaken:`Table {{table}} already exists.`},federated:{pulling:`Pulling {{table}} from {{connection}}…`,capped:`{{table}}: only the first {{limit}} rows were pulled.`,templateLine1:`Reference a table of any open connection as "Connection name".database.table; it is copied into this scratchpad before the statement runs.`,templateLine2:`Tables are capped at {{limit}} rows. The query itself runs in SQLite (in your browser).`,templateConnections:`Open connections: {{names}}`,templateNone:`No other connection is open yet. Connect one, then reference it here.`,done:`Pulled {{rows}} rows from {{tables}} remote tables into the scratchpad.`,pullingProgress:`Pulling {{table}} from {{connection}}: {{loaded}} / {{total}} rows…`},paged:{noColumns:`{{table}} has no columns.`,cancelled:`Cancelled.`}},terms:{title:`Terms of Use`,version:`Version {{version}}`,englishOnly:`The terms are provided in English. The summary on the welcome screen is available in your language.`},dryRun:{title:`{{kind}} would affect {{count}} rows`,titleUnknown:`{{kind}} — affected rows unknown`,description:`These are the rows the statement would touch right now, read with a SELECT. Nothing has been written yet.`,previewFailed:`The preview query failed: {{error}}
|
|
2
|
+
You can still run the statement.`,noRows:`No rows match — the statement would change nothing.`,truncated:`Showing the first {{shown}} of {{count}} rows.`,previewQuery:`Preview query`,run:`Run {{kind}} ({{count}} rows)`,runAnyway:`Run anyway`}},ae=`modulepreload`,Y=function(e){return`/`+e},X={},Z=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Y(t,n),t=s(t),t in X)return;X[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:ae,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Q=[`en`,`ko`,`zh`,`ja`,`de`,`fr`];function $(e=navigator.languages??[navigator.language]){for(let t of e){let e=t.toLowerCase().split(`-`)[0];if(Q.includes(e))return e}return`en`}function oe(e){return e===`auto`?$():e}var se={ko:()=>Z(()=>import(`./ko-BeLRvuuF.js`),[]),zh:()=>Z(()=>import(`./zh-QBkIdY--.js`),[]),ja:()=>Z(()=>import(`./ja-nAp-4B2u.js`),[]),de:()=>Z(()=>import(`./de-B9X_f_18.js`),[]),fr:()=>Z(()=>import(`./fr-ByU5YzKG.js`),[])};K.use(q).init({lng:`en`,fallbackLng:`en`,resources:{en:{translation:J}},interpolation:{escapeValue:!1},returnNull:!1});async function ce(e){let t=oe(e);if(t!==`en`&&!K.hasResourceBundle(t,`translation`)){let e=await se[t]();K.addResourceBundle(t,`translation`,e.default,!0,!0)}K.language!==t&&await K.changeLanguage(t),document.documentElement.lang=t}export{K as a,Z as i,ce as n,j as o,$ as r,Q as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={reconnecting:`再接続中…`,dropSqlite:`ドロップして SQLite ファイルを開く`,dropSqliteHint:`WebAssembly でブラウザ内に開かれ、ファイルはお使いのコンピューターから出ません。-wal ファイルがあれば一緒にドロップしてください。`,dropFailedTitle:`ドロップしたファイルを開けませんでした`,dropNotSqlite:`{{name}} は SQLite データベースファイルではありません。`,crashTitle:`問題が発生しました`,crashBody:`予期しないエラーが発生しました。再読み込みすると接続とタブは復元されますが、保存していないグリッドの編集は失われます。`,crashReload:`再読み込み`},t={auto:`システムの言語({{name}})`,en:`English`,ko:`한국어`,zh:`中文(简体)`,ja:`日本語`,de:`Deutsch`,fr:`Français`},n={title:`安全設定`,description:`意図しないデータ損失を防ぐためのガードレールです。読み取り専用、環境カラー、トランザクションモードは接続ごとに設定します。`,language:`言語`,languageHint:`すぐに反映されます。「システム言語」はブラウザの設定に従います。`,resetDefaults:`デフォルトに戻す`,done:`完了`,analytics:`匿名の使用統計を送信する`,analyticsHint:`匿名の使用イベント(エンジン、機能、文の種類)を Google Analytics に送信します。SQL 本文、ホスト名、テーブル名やユーザー名は送信しません。`,analyticsUnavailableHint:`このビルドでは無効です(測定 ID 未設定)。`,persistHistory:`再読み込み後もクエリ履歴を保持`,persistHistoryHint:`文のテキストがこのブラウザに保存されます (パスワードのリテラルはマスク、開いているエディタタブ自体は常に保持)。オフにすると履歴とスナップショットはタブを閉じるまでのみ保持されます。`},r={settings:{safety:`安全設定…`,language:`言語`,title:`設定`,theme:`テーマ`},help:{gettingStarted:`はじめに`,about:`Planche について`,title:`ヘルプ`,documentation:`ドキュメント`,terms:`利用規約`},connection:{title:`接続`,connect:`接続`,disconnect:`切断`,readOnly:`読み取り専用`,manualTransactions:`手動トランザクション`,saveDatabaseFile:`データベースファイルを保存`,saveDatabaseFileBlocked:`データベースファイルを保存(先に -wal を読み込んでください)`,exit:`終了`},query:{title:`クエリ`,execute:`実行`,executeStatementAtCursor:`カーソル位置のステートメントを実行`,executeWholeScript:`スクリプト全体を実行`,newQueryTab:`新しいクエリタブ`,findReplace:`検索と置換`,localHistory:`ローカル履歴…`},edit:{title:`編集`,undo:`元に戻す`,redo:`やり直す`,cut:`切り取り`,copy:`コピー`,paste:`貼り付け`,selectAll:`すべて選択`},database:{title:`データベース`,create:`データベースを作成`,alter:`データベースを変更`,drop:`データベースを削除`,copy:`データベースをコピー`,compare:`スキーマを比較…`,truncate:`データベースを空にする`,compareData:`データを比較…`},table:{title:`テーブル`,create:`テーブルを作成`,alter:`テーブルを変更`,drop:`テーブルを削除`,rename:`テーブル名を変更`,truncate:`テーブルを空にする`,duplicateStructure:`テーブル構造を複製`},export:{title:`エクスポート`,csv:`CSV としてダウンロード`,schemaHtml:`スキーマを HTML に出力`,links:`列リンクをエクスポート…`,importLinks:`列リンクをインポート…`},tools:{title:`ツール`,userManager:`ユーザー管理`,processList:`プロセス一覧`,variables:`変数`,status:`ステータス`,flush:`フラッシュ`,quickCommand:`クイックコマンド`,viewErd:`ERD を表示`,scratchpad:`スクラッチパッド(ブラウザ内 SQLite)`,federated:`統合クエリ(接続をまたぐ結合)…`,federatedTab:`統合クエリ {{n}}`},messages:{databaseFileSaved:`データベースファイルを保存しました`,databaseExported:`データベースをダウンロードとしてエクスポートしました`,databaseExportedWithReason:`データベースをダウンロードとしてエクスポートしました — {{reason}}`,errorSavingDatabase:`データベースの保存中にエラーが発生しました: {{message}}`,noDatabaseSelected:`データベースが選択されていません`,noTableSelected:`テーブルが選択されていません`,noActiveConnection:`アクティブな接続がありません`,databaseDropped:`データベース "{{database}}" を削除しました`,errorDroppingDatabase:`データベースの削除中にエラーが発生しました: {{message}}`,noTablesInDatabase:`データベース "{{database}}" にテーブルが見つかりません`,databaseTruncated_other:`"{{database}}" の {{count}} 個のテーブルをすべて空にしました`,errorTruncatingDatabase:`データベースを空にする際にエラーが発生しました: {{message}}`,tableDropped:`テーブル "{{table}}" を削除しました`,errorDroppingTable:`テーブルの削除中にエラーが発生しました: {{message}}`,tableTruncated:`テーブル "{{table}}" を空にしました`,errorTruncatingTable:`テーブルを空にする際にエラーが発生しました: {{message}}`,renameTablePrompt:`テーブル "{{table}}" の新しい名前:`,tableRenamed:`テーブル "{{table}}" の名前を "{{newName}}" に変更しました`,errorRenamingTable:`テーブル名の変更中にエラーが発生しました: {{message}}`,truncateDatabaseTitle:`"{{name}}" のすべてのテーブルを空にしますか?`,truncateDatabaseDescription:`"{{name}}" の {{count}} 個のテーブルのすべての行が削除されます。テーブル構造は保持されます。この操作は元に戻せません。`,truncateDatabaseConfirm:`すべてのテーブルを空にする`,renameTableTitle:`テーブル名の変更`,renameTableConfirm:`名前を変更`,noLinksToExport:`エクスポートする列リンクがありません。`,linksExported:`列リンク {{count}} 件をエクスポートしました。`,linksImported:`列リンク {{count}} 件をインポートしました。`,linksImportedPartial:`列リンク {{count}} 件をインポートしました。一致するプロファイルなし: {{profiles}}`,linksImportFailed:`列リンクをインポートできませんでした: {{reason}}`}},i={title:`Planche について`,tagline:`MySQL、MariaDB、PostgreSQL、SQLite 向けのデータベースクライアントです。`,version:`バージョン`,website:`ウェブサイト`,disclaimer:`Planche は「現状のまま」提供され、いかなる保証もありません。作者は本ソフトウェアの使用によって生じた損害やデータ損失について一切の責任を負いません。破壊的なステートメントを実行する前にデータをバックアップしてください。`,rights:`All rights reserved.`},a=JSON.parse('{"dialog":{"title":"データベースに接続","firstQueryTab":"クエリ 1","colHostName":"接続名","colTarget":"接続先","colDbms":"DBMS","noSaved":"保存された接続はありません","unnamed":"(名前なし)","pickOnConnect":"(接続時に選択)","noFile":"(ファイルなし)","selectPrompt":"接続を選択するか、新しく追加してください","addNew":"新規追加","delete":"削除","testConnection":"接続テスト","connect":"接続","close":"閉じる","unknownError":"不明なエラー","browserTestHint":"ブラウザ内 SQLite 接続は、「接続」をクリックするとローカルファイルを開きます。","testSuccess":"接続に成功しました","restoredUnsaved":"{{file}}: キャッシュされたコピーから未保存の変更を復元しました","restoredUnsavedDiskChanged":"{{file}}: キャッシュされたコピーから未保存の変更を復元しました — ディスク上のファイルはその後変更されています","walPending":"{{file}} は WAL モードです: 最近の変更が -wal ファイルに残っている可能性があります。上の「-wal ファイルを読み込む」で取り込んでください。","walApplied":"{{file}} を -wal の変更を適用して開きました","connectFailedTitle":"接続に失敗しました","testSuccessDescription":"サーバーが認証情報を受け付けました。","testFailedTitle":"接続テストに失敗しました","privacy":"ここに入力した情報が planche.dev のサーバーに送信・保存されることはありません。接続プロファイルはこのブラウザのローカルストレージにのみ保存され、クエリはローカルエージェントからデータベースへ直接送られます。","hostKeyTitle":"不明な SSH ホスト鍵","hostKeyDescription":"{{host}}:{{port}} がフィンガープリント {{fingerprint}} の {{type}} 鍵を提示しました。サーバー管理者から受け取ったフィンガープリントと照合してください。誤った鍵を受け入れると攻撃者に通信を読まれます。","hostKeyAccept":"このホストを信頼する","gatewayTitle":"ゲートウェイのプロファイル","gatewayAdd":"追加","gatewayAdded":"ゲートウェイのプロファイル {{name}} を追加しました。","gatewayReadOnly":"読み取り専用","gatewayWritable":"書き込み可","gatewayProfileHint":"この接続はゲートウェイが保持するプロファイル「{{name}}」を使います。ここで設定するものはありません。","gatewayLoadFailed":"ゲートウェイのプロファイルを読み込めませんでした: {{error}}"},"form":{"hostName":"接続名","hostNamePlaceholder":"My Connection","dataSource":"データソース","openVia":"開く方法","viaBrowser":"ブラウザ(ローカルファイル)","viaAgent":"ローカルエージェント","viaBrowserHint":"インストール不要です。他のプログラムが使用していないファイルに最適です: ブラウザはメモリ上のコピーで作業し、ファイルをロックできないため、開いている間に他で行われた編集は反映されず、保存時に上書きされます。","viaAgentHint":"npx planche 経由で SQLite 自体がファイルを開きます — 適切なロックと WAL に対応し、同じデータベースを使う他のプログラムと安全に共存できます。","databaseFile":"データベースファイル","changeFile":"ファイルを変更","filePickerHint":"「接続」をクリックするとファイル選択ダイアログが開きます(ヒント: ⌘⇧. で隠しファイルを表示、⌘⇧G でパスを入力できます)。","fileRememberedHint":"選択したファイルは記憶される(Chromium)ため、再接続時は権限の確認のみ行われます。変更を書き戻すには「接続 > データベースファイルを保存」を使用してください。","authToken":"認証トークン","authTokenPlaceholder":"空欄でペアリング済みのエージェントトークンを使用","filePathPlaceholder":"/path/to/database.sqlite または :memory:","createIfMissing":"存在しない場合は作成","createIfMissingHint":"パスはトンネリングサーバーのホスト上で解決されます","host":"ホスト","port":"ポート","database":"データベース","serviceName":"サービス名","user":"ユーザー","password":"パスワード","savePassword":"パスワードを保存","savePasswordHint":"オフ: パスワードはこのブラウザセッションの間だけ保持され、ディスクには書き込まれません。","charset":"文字セット","autoConnection":"自動接続","safety":"安全設定","environment":"環境","environmentHint":"タブとワークスペースに色を付けます","readOnly":"読み取り専用","readOnlyHint":"データやスキーマを変更するステートメントを拒否します","transactions":"トランザクション","txAuto":"自動コミット","txManual":"手動 — ツールバーからコミット / ロールバック","ssh":"SSH","sshTunnel":"SSHトンネル","sshTunnelHint":"SSH踏み台ホスト経由でデータベースに接続します(ローカルエージェントがトンネルを開きます)","sshHost":"SSHホスト","sshPort":"SSHポート","sshUser":"SSHユーザー","sshAuth":"SSH認証","sshAuthKey":"秘密鍵","sshAuthPassword":"パスワード","sshAuthAgent":"ssh-agent","sshAuthAgentHint":"npx planche を実行しているマシンの ssh-agent に読み込まれた鍵を使用します(SSH_AUTH_SOCK)。","sshPassword":"SSHパスワード","sshKey":"秘密鍵","sshKeyPick":"鍵ファイルを選択…","sshKeyLoaded":"鍵を読み込み済み","sshKeyHint":"空ならエージェントのマシンの ~/.ssh/config の IdentityFile(または ~/.ssh/id_*)を使用します。選択した鍵はこのプロファイルと共に保存されます","sshPassphrase":"パスフレーズ","sshPassphrasePlaceholder":"鍵にパスフレーズがなければ空のまま","sshSecretsHint":"SSH のパスワード・秘密鍵・パスフレーズは上の「パスワードを保存」設定に従います。不明なホスト鍵は初回接続前に確認用に表示され、エージェントのマシンの ~/.planche/known_hosts に保存されます。","sshHostPlaceholder":"bastion.example.com または ~/.ssh/config の Host エイリアス","sshUserPlaceholder":"空なら ~/.ssh/config の User を使用","sshTargetHint":"DB のホスト/ポートは踏み台ホスト側で解決されます — localhost やローカルポートフォワードではなく、DB の実際のアドレス(例: RDS エンドポイント)を入力してください。","connectionString":"接続文字列","connectionStringApplied":"下のフィールドに反映しました。文字列自体は保存されず、フィールドのみ保存されます。","connectionStringInvalid":"PostgreSQL URI ではありません (postgresql://user:password@host/database の形式)。","neonHint":"Neon コンソール (Connect > Connection string) の URI を貼り付けると、下のフィールドが埋まります。","supabaseHint":"Supabase (Connect > Session pooler または Direct connection) の URI を貼り付けると、下のフィールドが埋まります。","supabasePoolerWarning":"ポート 6543 はトランザクションモードのプーラーです。文ごとに別のバックエンドで実行される可能性があるため、スキーマの切り替え、一時テーブル、プリペアドステートメント、手動トランザクションは動作しません。セッションプーラー (ポート 5432) か直接接続を使ってください。","managedTlsHint":"このサービスへは常に TLS で接続し、ローカルエージェントからサービスへ直接接続します (SSH トンネルなし)。","d1AccountId":"Account ID","d1DatabaseId":"Database ID","d1ApiToken":"API トークン","d1Hint":"Account ID: Cloudflare ダッシュボードのアカウントホーム右側。Database ID: Storage & Databases > D1 > データベース。トークン: My Profile > API Tokens > Create Token で \\"D1 Edit\\" 権限 (読み取り専用は \\"D1 Read\\")。ローカルエージェントがこのトークンで Cloudflare API を呼び出します。","d1LimitsHint":"D1 はリクエストごとに独立して実行され自動コミットされるため、手動トランザクションは使えません。データベースは \\"main\\" スキーマ 1 つとして表示されます。","tls":"TLS","tlsEnable":"接続を暗号化","tlsVerify":"サーバー証明書を検証","tlsVerifyHint":"オフ: 自己署名証明書も受け入れます (暗号化はされますがサーバーは認証されません)。SSH トンネル経由では使えません。"},"agent":{"copy":"コピー","looking":"Planche エージェントを探しています…","online":"エージェント <b>v{{version}}</b> が <mono>{{url}}</mono> で実行中です","outdated":"エージェント v{{version}} はプロトコル {{protocol}} を使用していますが、このアプリにはより新しいものが必要です。<cmd/> で再起動してください","unauthorized":"エージェント <b>v{{version}}</b> が <mono>{{url}}</mono> で実行中ですが、このアプリとペアリングされていません(トークンは起動のたびに変わります)。エージェントのターミナルに表示されたリンクを開くか、「設定」でトークンを貼り付けてください。","offline":"<mono>{{url}}</mono> にエージェントがありません。ターミナルで <cmd/> を実行してください — ペアリング済みの状態でこのアプリが開きます。","close":"閉じる","configure":"設定","checkAgain":"再確認","urlLabel":"エージェント URL","urlPlaceholder":"http://127.0.0.1:8888(デフォルト)","tokenLabel":"トークン","tokenPlaceholder":"エージェントが表示したもの","reset":"リセット","save":"保存","remoteWarning":"このエージェントはお使いのコンピューター上にありません ({{host}}): すべての接続のパスワードと SSH 鍵がそこへ送られます。","remoteRefusedTitle":"リモートエージェントは使用できません","remoteRefused":"エージェントはこのコンピューター (127.0.0.1 または localhost) 上で実行する必要があります。別のマシンのエージェントを使うには `ssh -L 8888:127.0.0.1:8888 user@host` でポートを転送し、URL は http://127.0.0.1:8888 のままにしてください。","gateway":"ゲートウェイ「{{name}}」: サーバー側プロファイル {{count}} 件。認証情報はゲートウェイにのみあります。下からプロファイルを選んでください。"},"tab":{"noConnections":"開いている接続はありません。「接続」を押して始めてください。","theSqliteFile":"SQLite ファイル","reopened":"{{file}} を再度開きました","reopenFailed":"ファイルを再度開けませんでした: {{message}}","reopenPrompt":"<b>{{file}}</b> を読み取るには、ブラウザの許可が再度必要です。","reopenFile":"ファイルを再度開く","closeConnection":"接続を閉じる","reconnected":"{{file}} に再接続しました","accessNotGranted":"ファイルへのアクセスが許可されませんでした。保存時はダウンロードとしてエクスポートします。","detachedPrompt":"<b>{{file}}</b> のキャッシュされたコピーで作業しています。変更をその場で保存するにはファイルを再接続してください。","reconnectFile":"ファイルを再接続","detachedHide":"非表示(保存時に必要に応じてファイルを求めます)","walFramesApplied_other":"{{file}}-wal から {{count}} 個の WAL フレームを適用しました","walNoChanges":"-wal ファイルにコミット済みの変更はありませんでした","walLoadFailed":"-wal ファイルを読み込めませんでした: {{message}}","walPrompt":"<b>{{file}}</b> は WAL モードです: <mono>{{file}}-wal</mono> ファイルを読み込むまで最新のデータが表示されない場合があり、それまで保存は無効です。隣にそのようなファイルがない場合(データベースが正常に閉じられた場合)は、代わりにその旨を確認してください。他のプログラムがまだこのデータベースを使用している場合は、代わりにローカルエージェント(<mono>npx planche</mono>)経由で開いてください: ブラウザはファイルを安全に共有できません。","loadWal":"-wal ファイルを読み込む","noWalHint":"確認済み: データベースの隣に -wal ファイルはありません","noWal":"-wal ファイルなし","dismiss":"閉じる","walHide":"非表示(保存は無効のまま)","readOnlyBadge":"読み取り専用"}}'),o={connect:`接続 (Alt+N)`,disconnect:`切断`,newQueryTab:`新しいクエリタブ (Alt+T)`,execute:`実行 (F9)`,executeStatement:`カーソル位置 / 選択範囲のステートメントを実行 (Ctrl+Enter)`,commit:`コミット`,commitHint:`開いているトランザクションをコミットします`,noOpenTransaction:`開いているトランザクションはありません`,rollback:`ロールバック`,rollbackHint:`開いているトランザクションを破棄します`,readOnlyBadge:`読み取り専用`,readOnlyHint:`この接続はデータやスキーマを変更するステートメントを拒否します`,userManager:`ユーザー管理 (Alt+U)`,quickCommand:`クイックコマンド`,processList:`プロセス一覧`,variables:`変数`,status:`ステータス`,flush:`フラッシュ`,fullscreen:`全画面表示`},s={readOnly:`読み取り専用`,txOpen:`トランザクション中`,manualTx:`手動トランザクション`},c={title:`クイックコマンド`,description:`実行するコマンドを検索...`,inputPlaceholder:`コマンドを入力または検索...`,empty:`コマンドが見つかりません。`,groups:{connection:`接続`,query:`クエリ`,database:`データベース`,table:`テーブル`,tools:`ツール`},commands:{connect:`接続`,disconnect:`切断`,executeQuery:`クエリを実行`,newQueryTab:`新しいクエリタブ`,createDatabase:`データベースを作成`,dropDatabase:`データベースを削除`,createTable:`テーブルを作成`,alterTable:`テーブルを変更`,dropTable:`テーブルを削除`,processList:`プロセス一覧`,serverVariables:`サーバー変数`,serverStatus:`サーバーステータス`,flush:`フラッシュ`,userManager:`ユーザー管理`}},l={title:`Planche へようこそ`,intro:`ブラウザで動作する SQL クライアントです。データベースにはお使いのマシン上の小さなエージェントを通じてアクセスするため、認証情報やデータがコンピューターの外に出ることはありません。`,skip:`スキップ`,skipTitle:`この画面を非表示にします(「ヘルプ > はじめに」で再表示できます)`,copy:`コピー`,copied:`コピーしました`,sampleOpenFailed:`サンプルデータベースを開けませんでした: {{message}}`,steps:{agent:{title:`ローカルエージェントを実行する`,body:`ターミナル(Node.js 22 以降)で一度だけ実行してください。エージェントが起動し、このページとペアリングされます。`},connection:{title:`接続を追加する`,body:`データベースを選ぶと、適切なデフォルト値で接続フォームが開きます。`},sample:{title:`手元にデータベースがない場合はサンプルをお試しください`,body:`サンプルのウェブショップデータベース(24 テーブル、約 5 万行、ビューとトリガー)をブラウザに読み込み、エディター、グリッド、スキーマツリーを試せます。`,loading:`サンプルを読み込み中…`,button:`サンプルデータベースを試す`}},terms:{title:`はじめる前に`,local:`すべてローカルで動作します。認証情報、クエリ、結果はお使いのコンピュータにのみ保存され、当方へ送信されることはありません。`,asIs:`Planche は現状有姿で提供され、いかなる保証もありません。安全機能(破壊的操作の確認、読み取り専用モード)は補助的なものであり、保証ではありません。`,dataLoss:`Planche を通じて実行されるすべての文の責任はユーザーにあります。破壊的な操作を行う前に必ずデータをバックアップしてください。`,agree:`利用規約を読み、同意します。`,accepted:`利用規約に同意済みです。`,readFull:`規約の全文を読む`}},u={treeLabel:`スキーマ`,unreachableHint:`この接続に紐付いたデータベースではありません。閲覧するにはそのデータベース用のプロファイルを作成してください`,objectType:{table:`テーブル`,view:`ビュー`,procedure:`プロシージャ`,function:`関数`,trigger:`トリガー`,event:`イベント`},menu:{showCreate:`{{type}}の CREATE 文を表示`,alter:`{{type}}を変更`,drop:`{{type}}を削除`,create:`{{type}}を作成`,refresh:`更新`,unreachable:`このデータベースを閲覧するには、これに紐付いたプロファイルで接続してください`,openDatabase:`データベースを開く`,createSchema:`スキーマを作成`,createTable:`テーブルを作成`,dropDatabase:`データベースを削除`,openSchema:`スキーマを開く`,dropSchema:`スキーマを削除`,newQueryTab:`新しいクエリタブ`,generateSql:`SQL を生成`,openTable:`テーブルを開く`,alterTable:`テーブルを変更`,showCreateTable:`CREATE TABLE 文を表示`,duplicateStructure:`構造を複製`,copyTable:`別の場所へテーブルをコピー…`,compare:`{{type}}を比較…`,truncateTable:`テーブルを空にする`,dropTable:`テーブルを削除`,exportCsv:`CSV にエクスポート`,openView:`ビューを開く`,alterView:`ビューを変更`,showCreateView:`CREATE VIEW 文を表示`,dropView:`ビューを削除`,compareData:`データを比較…`},actions:{createStatementUnavailable:`-- {{type}} {{name}} の CREATE 文を取得できませんでした`,getCreateFailed:`CREATE {{type}} の取得に失敗しました: {{message}}`,createTabTitle:`{{type}}を作成`,createSchemaTabTitle:`スキーマを作成`,generateSqlFailed:`SQL を生成できませんでした: {{message}}`,dropTableTitle:`テーブル "{{name}}" を削除しますか?`,dropTableDescription:`{{from}}テーブルとそのすべての行が完全に削除されます。この操作は元に戻せません。`,dropTableConfirm:`テーブルを削除`,dropObjectTitle:`{{type}} "{{name}}" を削除しますか?`,dropObjectDescription:`{{from}}{{type}}の定義が削除されます。この操作は元に戻せません。`,dropObjectConfirm:`{{type}}を削除`,fromDatabase:`データベース "{{database}}" から`,dropped:`{{type}} {{name}} を削除しました`,dropFailed:`{{type}}の削除に失敗しました`,dropDatabaseTitle:`データベース "{{name}}" を削除しますか?`,dropDatabaseDescription:`データベースとそのすべてのテーブルおよびデータが完全に削除されます。この操作は元に戻せません。`,dropDatabaseConfirm:`データベースを削除`,droppedDatabase:`データベース {{name}} を削除しました`,dropDatabaseFailed:`データベースの削除に失敗しました`,dropSchemaTitle:`スキーマ "{{name}}" を削除しますか?`,dropSchemaDescription:`スキーマとそのすべてのテーブルおよびデータが完全に削除されます。この操作は元に戻せません。`,dropSchemaConfirm:`スキーマを削除`,droppedSchema:`スキーマ {{name}} を削除しました`,dropSchemaFailed:`スキーマの削除に失敗しました`,truncateTitle:`テーブル "{{name}}" を空にしますか?`,truncateDescription:`"{{name}}" のすべての行が削除されます。テーブル構造は保持されます。この操作は元に戻せません。`,truncateConfirm:`テーブルを空にする`,truncated:`{{name}} を空にしました`,truncateFailed:`テーブルを空にできませんでした`},tree:{loadDatabasesFailed:`データベースの読み込みに失敗しました: {{message}}`}},d={editor:{destructiveMarker:`破壊的操作: {{action}} {{names}}`,readOnlyMarker:`接続は読み取り専用です。このステートメントはデータまたはスキーマを変更します`,actionExecute:`実行(設定に従う)`,actionExecuteStatement:`カーソル位置 / 選択範囲のステートメントを実行`,actionExecuteScript:`スクリプト全体を実行`},tabs:{newQuery:`新しいクエリ`,queryTitle:`クエリ {{n}}`,erdViewer:`ERD ビューアー`,close:`閉じる`,closeOthers:`他のタブを閉じる`,closeLeft:`左側のタブを閉じる`,closeRight:`右側のタブを閉じる`,closeAll:`すべて閉じる`},executor:{noActiveConnection:`アクティブな接続がありません`,uncommittedTitle:`未コミットのトランザクション`,uncommittedDescription:`この接続には開いているトランザクションがあります。切断するとその変更はロールバックされます。`,uncommittedConfirm:`ロールバックして切断`,unsavedTitle:`未保存の変更`,unsavedDescription:`{{file}} にはファイルに保存されていない変更があります。切断するとそれらは破棄されます(保持するには先に「接続 > データベースファイルを保存」を使用してください)。`,theSqliteDatabase:`SQLite データベース`,unsavedConfirm:`破棄して切断`}},f={tabs:{message:`メッセージ`,info:`情報`,history:`履歴`,result:`結果`,resultN:`結果 {{n}}`},message:{executing:`クエリを実行中...`,error:`エラー: {{message}}`,total:`(合計: {{ms}}ms)`,ready:`準備完了。`,log:`実行ログ`,statementN:`文 {{n}}`,limitedBadge:`上限到達`,insertId:`insert id {{id}}`,failed:`失敗`,failedStatement:`失敗した文`,summary:`成功 {{ok}} · 失敗 {{failed}} · 合計 {{ms}}`,copy:`コピー`,copied:`コピー済み`,showSql:`SQL を表示`,hideSql:`SQL を隠す`},info:{empty:`クエリ情報はありません。`,resultN:`結果 {{n}}`,metadata:`クエリのメタデータ`,executionTime:`実行時間`,notAvailable:`N/A`,affectedRows:`影響を受けた行数`,fields:`フィールド`,fieldDetails:`フィールドの詳細`,colName:`名前`,colType:`型`,colTable:`テーブル`,resultSets:`結果セット`,rowsReturned:`返された行`,insertId:`最後の Insert ID`,lastQuery:`最後に実行した文`,copy:`コピー`,copied:`コピー済み`,colOrigin:`元の名前`,primaryKey:`主キー`,rowsAndFields:`{{rows}}行 × {{fields}}列`,noFields:`この文は列を返しませんでした。`},rowForm:{colColumn:`列`,colValue:`値`,insertTitle:`行を追加`,editTitle:`行を編集`,loading:`列情報を読み込み中...`,preview:`実行される文`,nothingToWrite:`書き込む内容がありません`,insert:`挿入`,update:`更新`,stageInsert:`保留行として追加`,stageEdit:`グリッドに反映`,stageHint:`実行せずにグリッドへ値を置き、後で他の編集と一緒にコミットします。`,inserted:`{{table}} に行を挿入しました`,updated:`{{table}} の行を更新しました`,confirmInsertTitle:`{{table}} に行を挿入しますか?`,confirmUpdateTitle:`{{table}} の行を更新しますか?`,inTransaction:`開いているトランザクション内で実行されます`,pickDate:`日付を選択`,now:`現在時刻`,formatJson:`整形`,binaryUnsupported:`バイナリ列はここでは編集できません。NULL/DEFAULT のままにするか SQL で設定してください。`,generateUuid:`UUID を生成`,defaultValue:`デフォルト値`,clickToChange:`クリックして変更`,empty:`(空)`,autoHint:`サーバーが自動生成`,mode:{keep:`維持`,auto:`自動`,value:`値`},invalid:{integer:`整数を入力してください`,unsigned:`この列は負の数を受け付けません`,number:`数値を入力してください`,json:`不正な JSON`,date:`YYYY-MM-DD 形式で入力してください`,datetime:`YYYY-MM-DD HH:MM:SS 形式で入力してください`,time:`HH:MM:SS 形式で入力してください`,length:`最大 {{max}} 文字`}},history:{copied:`クリップボードにコピーしました`,searchPlaceholder:`履歴を検索...`,all:`すべて`,success:`成功`,failed:`失敗`,thisTab:`このタブのみ`,noMatch:`一致する項目がありません。`,count:`{{count}}件`,clear:`消去`,clearTitle:`クエリ履歴を消去しますか?`,clearDescription:`この接続の {{count}} 件がすべて削除されます。元に戻せません。`,clearConfirm:`履歴を消去`,insert:`エディターに挿入`,inserted:`エディターに挿入しました`,copy:`コピー`,rows:`{{count}}行`,affected:`{{count}}行変更`,today:`今日`,yesterday:`昨日`,empty:`クエリ履歴はありません。`},json:{arrayLength:`Array[{{count}}]`,keys_other:`{{count}} 個のキー`,invalid:`無効な JSON`,clickToView:`クリックして JSON を表示`,expandAll:`すべて展開`,collapseAll:`すべて折りたたむ`,edit:`編集`,view:`表示`,copied:`コピーしました`,copy:`コピー`,shortcutHint:`{{mod}}+Enter で保存 · Esc でキャンセル`,cancel:`キャンセル`,save:`保存`},grid:{readOnlyConnection:`読み取り専用の接続`,readOnlyWal:`読み取り専用: -wal ファイルが読み込まれていません`,readOnlyNoPk:`読み取り専用: テーブルに主キーがありません`,commitTitle:`{{count}} 件の変更を {{table}} にコミットしますか?`,commitDescription:`次のステートメントが実行されます。`,commitConfirm:`コミット`,rowPrefix:`行 {{row}}:`,cancelled:`キャンセルされました`,commitFailed:`コミットに失敗しました: {{message}}`,executedInTransaction:`開いているトランザクション内で {{count}} 件の変更を実行しました — 確定するにはツールバーの「コミット」を押してください(再読み込みするとロールバックされます)`,committed:`{{count}} 件の変更を {{table}} にコミットしました`,noData:`表示するデータがありません。`,commit:`コミット`,discard:`破棄`,addRow:`行を追加`,removeNewRow:`この新しい行を取り消す`,addRowForm:`フォームで追加`,addRowFormHint:`列ごとの入力欄を持つフォームを開きます (INSERT としてコミット)`,editRowForm:`この行をフォームで編集`,addRowHint:`新しい行を追加します(INSERT としてコミット)`,delete:`削除`,deleteCount:`削除 ({{count}})`,deleteHint:`選択した行を削除します(DELETE としてコミット)。行番号の列で行を選択してください。`,field:`フィールド`,searchPlaceholder:`検索...`,orderBy:`並び順`,none:`なし`,refresh:`更新`,dismiss:`閉じる`,clearSelection:`選択を解除`,columns:`列`,showAllColumns:`すべて表示`,hideAllColumns:`すべて非表示`,selectAll:`すべての行を選択`,emptyTable:`このテーブルには行がありません。`,noRows:`行は返されませんでした。`,addARow:`行を追加`,markedForDeletion:`削除予定 — クリックで元に戻す`,newRow:`新しい行`,clickToSelect:`クリックで選択、Shift/Ctrl で複数選択`,rows:`行数: {{count}}`,rowsWithNew:`行数: {{count}} (+{{added}})`,sortedBy:`並び順: {{column}} {{direction}}`,selected:`{{count}} 件選択中`,cellsModified:`{{count}} 個のセルを変更`,newCount:`{{count}} 件追加`,toDelete:`{{count}} 件削除予定`,searchMode:`一致方法`,contains:`含む`,equals:`一致`,followLink:`{{table}} を {{column}} = 値 で開く`,linkColumn:`「{{column}}」を別のテーブルにリンク…`,editLink:`「{{column}}」のリンクを編集…`,removeLink:`リンクを削除`,copyValue:`値をコピー`,filterByValue:`フィルタ: {{column}} = この値`,clearFilter:`フィルタを解除`,copyColumnName:`列名をコピー`,editCell:`セルを編集`,setNull:`NULL に設定`,setEmpty:`空文字列に設定`,restoreRow:`行を復元`,hideColumn:`列「{{column}}」を隠す`,copyRowsTsv_other:`{{count}} 行を TSV としてコピー(ヘッダー付き)`,copyRowsCsv_other:`{{count}} 行を CSV としてコピー`,copyRowsJson_other:`{{count}} 行を JSON としてコピー`,copyRowsInsert_other:`{{count}} 行を INSERT 文としてコピー`,deleteRowsPending_other:`{{count}} 行を削除(コミットまで保留)`,sendRowsToScratchpad_other:`{{count}} 行をスクラッチパッドへ送る`,sendAllToScratchpad:`読み込み済みの {{count}} 行すべてをスクラッチパッドへ送る`,sentToScratchpad:`{{count}} 行をスクラッチパッドのテーブル {{table}} にコピーしました。`,changesSince:`前回の読み込み以降: 変更 {{changed}} · 新規 {{added}} · 消失 {{gone}}`,changesToggle:`前回の読み込みからの変更のハイライトを切り替え`,changesDismiss:`変更表示を消す`,previousValue:`以前の値: {{value}}`},link:{title:`列を別のテーブルにリンク`,source:`列`,hint:`この列の値がリンクになります。クリックすると対象テーブルが一致する行で絞り込まれて開きます。実際の外部キーは自動でリンクされます。`,targetDatabase:`対象データベース`,targetTable:`対象テーブル`,targetColumn:`対象列`,pickTable:`テーブルを選択`,pickColumn:`列を選択`,remove:`リンクを削除`,cancel:`キャンセル`,save:`リンクを保存`,targetConnection:`対象の接続`,targetNotConnected:`リンク先の接続が開いていません。先に接続してください。`}},p={defaultDescription:`この操作は元に戻せません。`,typeToConfirm:`確認のため <name/> を入力してください`,cancel:`キャンセル`,confirm:`確認`,ok:`OK`},m={dialog:{createTitle:`テーブルを作成`,alterTitle:`テーブルを変更`,duplicateTitle:`テーブル構造を複製`,create:`作成`,alter:`変更`,cancel:`キャンセル`,tableName:`テーブル名`,tableNamePlaceholder:`テーブル名を入力...`,loading:`テーブルスキーマを読み込み中...`,tabSchema:`スキーマ`,tabIndexes:`インデックス`,tabProperties:`プロパティ`},schema:{colField:`フィールド名`,colType:`データ型`,colLength:`長さ`,colDefault:`デフォルト`,colPk:`PK`,colNotNull:`Not Null`,colUnsigned:`Unsigned`,colAutoIncrement:`Auto Incr`,colZerofill:`Zerofill`,colComment:`コメント`,empty:`カラムが定義されていません。「カラムを追加」をクリックして追加してください。`,add:`カラムを追加`,remove:`カラムを削除`},indexes:{colName:`インデックス名`,colType:`インデックスの種類`,colColumns:`カラム`,empty:`インデックスが定義されていません。「インデックスを追加」をクリックして追加してください。`,add:`インデックスを追加`,remove:`インデックスを削除`},index:{addTitle:`インデックスを追加`,editTitle:`インデックスを編集`,name:`インデックス名`,namePlaceholder:`インデックス名を入力`,type:`インデックスの種類`,columns:`カラム`,noColumns:`使用できるカラムがありません。先に「スキーマ」タブでカラムを定義してください。`,unnamed:`(名前なし)`,cancel:`キャンセル`,ok:`OK`},properties:{engine:`エンジン`,charset:`文字セット`,collation:`照合順序`,autoIncrement:`Auto Increment`,autoIncrementPlaceholder:`デフォルト`,comment:`コメント`},info:{engine:`エンジン`,version:`バージョン`,rowFormat:`行フォーマット`,rows:`行数`,avgRowLength:`平均行長`,dataLength:`データサイズ`,createTime:`作成日時`,updateTime:`更新日時`,collation:`照合順序`,comment:`コメント`},copy:{title:`テーブルをコピー`,source:`コピー元`,targetConnection:`コピー先の接続`,targetDatabase:`コピー先データベース`,targetTable:`コピー先テーブル名`,what:`コピー内容`,structureAndData:`構造とデータ`,structureOnly:`構造のみ`,ifExists:`コピー先にテーブルがある場合`,abort:`中止(既定)`,dropAndRecreate:`削除して再作成(名前の再入力で確認)`,preview:`コピー先で実行する CREATE TABLE(編集可)`,crossEngineHint:`コピー先は {{engine}} です。下の型を確認してください。MySQL 固有の属性は除外されました。`,readOnly:`読み取り専用`,loading:`読み込み中…`,progressCreate:`テーブルを作成中…`,progressCount:`行数を確認中…`,progressRows:`{{total}} 行中 {{copied}} 行をコピー済み`,progressDone:`完了`,doneTitle:`テーブルをコピーしました`,doneRows:`{{table}} に {{count}} 行をコピーしました。`,doneStructure:`{{table}} の構造を作成しました。`,noColumns:`コピー元テーブルに列がありません。`,exists:`コピー先に {{table}} が既に存在します。別の名前にするか「削除して再作成」を選んでください。`,dropTitle:`既存のテーブル {{table}} を削除しますか?`,dropDescription:`コピーの前にコピー先テーブルとすべての行が削除されます。元に戻せません。`,dropConfirm:`削除してコピー`,cancelled:`コピーを中止しました。`,stop:`停止`,cancel:`キャンセル`,copy:`コピー`}},h={copy:{title:`データベースをコピー`,source:`コピー元データベース`,target:`コピー先データベース名`,targetPlaceholder:`コピー先のデータベース名を入力`,options:`オプション`,structureAndData:`構造とデータ`,structureOnly:`構造のみ`,cancel:`キャンセル`,copy:`コピー`},diff:{title:`スキーマを比較`,source:`比較元`,target:`比較先`,pickConnection:`接続`,pickDatabase:`データベース`,crossEngineHint:`エンジンが異なります。型名は方言ごとに違うため、多くの列が型の変更として表示されます。`,sameSide:`比較元と比較先が同じデータベースです。`,summary:`変更 {{changed}}、比較先にない {{missingTarget}}、比較先のみ {{missingSource}}、同一 {{identical}}`,showIdentical:`同一のテーブルを表示`,identicalAll:`テーブルは同一です。`,column:`列`,index:`インデックス`,object:`オブジェクト`,selectTable:`差分を見るテーブルを選択してください。`,missingInTarget:`{{table}} は比較先にありません。スクリプトが作成します。`,missingInSource:`{{table}} は比較先にのみあります。スクリプトが削除します(DROP を含めない限りコメントアウト)。`,includeDrops:`DROP 文を実行可能な SQL として含める(既定: コメントアウト)`,tabTitle:`同期 {{database}}`,close:`閉じる`,compare:`比較`,comparing:`比較中…`,openScript:`スクリプトをエディタで開く`,noDefinition:`CREATE 文を取得できません`},create:{title:`データベースを作成`,name:`データベース名`,namePlaceholder:`データベース名を入力`,charset:`文字セット`,collation:`照合順序`,cancel:`キャンセル`,create:`作成`},csv:{title:`CSV としてダウンロード`,target:`対象`,targetQueryResult:`現在のクエリ結果`,targetTableData:`テーブルデータ`,tableName:`テーブル名`,tableNamePlaceholder:`テーブル名を入力`,delimiter:`区切り文字`,delimiterComma:`カンマ (,)`,delimiterTab:`タブ (\\t)`,delimiterSemicolon:`セミコロン (;)`,delimiterPipe:`パイプ (|)`,includeHeaders:`ヘッダーを含める`,cancel:`キャンセル`,download:`ダウンロード`,downloading:`ダウンロード中...`,progress:`{{total}} 行中 {{loaded}} 行を書き込み`,progressUnknown:`{{loaded}} 行を書き込み`,stop:`停止`,done:`{{table}} の {{count}} 行を CSV にエクスポートしました。`,database:`データベース`,databasePlaceholder:`データベースを選択`},html:{title:`スキーマを HTML に出力`,database:`データベース`,selectDatabase:`データベースを選択`,tables:`含めるテーブル`,selectAll:`すべて選択`,deselectAll:`すべて解除`,noTables:`使用できるテーブルがありません。`,include:`含める項目`,includeColumns:`カラム`,includeIndexes:`インデックス`,includeProperties:`プロパティ`,cancel:`キャンセル`,generate:`生成`,generating:`生成中...`,sectionColumns:`カラム`,sectionIndexes:`インデックス`,sectionProperties:`プロパティ`,docTitle:`スキーマ: {{database}}`,heading:`データベース: {{database}}`,summary:`テーブル数: {{count}} | 生成日時: {{date}}`,footer:`Planche 2026 により生成`},dataDiff:{title:`データを比較`,pickTable:`テーブル`,hint:`比較元テーブルの主キーで行を対応付け、値をテキストとして比較します。片側あたり最大 {{cap}} 行を読み込むので、大きなテーブルは先にフィルタで絞ってください。`,sameSide:`比較元と比較先が同じテーブルです。`,noPrimaryKey:`{{table}} に主キーがないため、行を対応付けできません。`,keyMissingInTarget:`比較先テーブルにキー列がありません: {{columns}}`,summary:`キー: {{key}} — 比較先にない {{added}}、相違 {{changed}}、比較先のみ {{removed}}、同一 {{identical}}`,capped:`両側とも先頭 {{cap}} 行のみ比較しました。`,ignoredColumns:`比較から除外した列(片側のみ): {{columns}}`,added_other:`比較先にない {{count}}`,changed_other:`相違 {{count}}`,removed_other:`比較先のみ {{count}}`,none:`このグループには何もありません。`,more:`… 他 {{count}} 件`,includeDeletes:`DELETE 文を実行可能な SQL として含める(既定: コメントアウト)`,tabTitle:`データ同期 {{table}}`,loading:`行を読み込み中 — 比較元: {{source}}、比較先: {{target}}`}},g={manager:{title:`ユーザー管理`,addUser:`ユーザーを追加`,removeUser:`ユーザーを削除`,noUsers:`ユーザーが読み込まれていません`,grantScope:`権限の範囲`,apply:`適用`,close:`閉じる`,removed:`ユーザー '{{user}}'@'{{host}}' を削除しました`,selectUserFirst:`先にユーザーを選択してください`,applied:`変更を適用しました`},add:{title:`ユーザーを追加`,username:`ユーザー名`,usernamePlaceholder:`ユーザー名を入力`,host:`ホスト`,password:`パスワード`,passwordPlaceholder:`パスワードを入力`,confirmPassword:`パスワードの確認`,confirmPasswordPlaceholder:`パスワードを再入力`,plugin:`プラグイン`,cancel:`キャンセル`,add:`追加`,usernameRequired:`ユーザー名は必須です`,passwordMismatch:`パスワードが一致しません`,added:`ユーザー '{{user}}'@'{{host}}' を追加しました`},privileges:{globalTitle:`グローバル権限`,databaseTitle:`データベース権限`,tableTitle:`テーブル権限`,checkAll:`すべてチェック`,uncheckAll:`すべて解除`,categoryData:`データ`,categoryStructure:`構造`,categoryAdministration:`管理`},grantTree:{globalPrivileges:`グローバル権限`}},_={close:`閉じる`,noActiveConnection:`アクティブな接続がありません`,variableName:`変数名`,value:`値`,scope:{session:`セッション`,global:`グローバル`},findReplace:{findPlaceholder:`検索`,replacePlaceholder:`置換`,found:`{{count}} 件見つかりました`,noResults:`結果なし`,previous:`前へ`,next:`次へ`,close:`閉じる`,replace:`置換`,all:`すべて`,caseSensitive:`大文字と小文字を区別`,regex:`正規表現`,wholeWord:`単語単位`},flush:{title:`フラッシュ`,executed:`実行しました: {{command}}`,executeError:`{{command}} の実行中にエラーが発生しました: {{message}}`},localHistory:{title:`ローカル履歴`,description:`各実行前およびテンプレートによる上書き前に記録された、このタブのバージョンです。`,empty:`このタブの履歴はまだありません。`,restored:`ローカル履歴からエディターの内容を復元しました`,restore:`このバージョンを復元`,chars:`{{count}} 文字`,reason:{execute:`実行前`,replaced:`上書き前`,restore:`復元前`}},processList:{title:`プロセス一覧`,refresh:`更新`,autoRefresh:`自動更新`,empty:`表示するプロセスがありません`,kill:`強制終了`,killProcess:`プロセスを強制終了`,selectToKill:`強制終了するプロセスを選択してください`,killed:`プロセス {{id}} を強制終了しました`,killError:`プロセスの強制終了中にエラーが発生しました: {{message}}`,loadError:`プロセス一覧の読み込み中にエラーが発生しました: {{message}}`,updatedAt:`{{time}} 更新`,filterPlaceholder:`ユーザー、ホスト、DB、SQL で絞り込み...`,hideIdle:`アイドルを隠す`,noMatch:`条件に一致するプロセスがありません`,self:`自分`,selfHint:`Planche 自身のセッションです`,statementOf:`#{{id}} の実行文`,noStatement:`実行中の文なし`,copy:`コピー`,copied:`コピー済み`,killConfirmTitle:`プロセス {{id}} を終了しますか?`,killConfirmDescription:`{{user}}@{{host}} のセッションが切断され、実行中の文は中断されます。開いているトランザクションはロールバックされます。`,stats:{total:`合計`,active:`アクティブ`,idle:`アイドル`,longest:`最長実行`},columns:{id:`Id`,user:`ユーザー`,host:`ホスト`,db:`db`,command:`コマンド`,time:`時間`,state:`状態`,info:`情報`,action:`操作`}},status:{title:`サーバーステータス`,filterPlaceholder:`ステータス変数を絞り込み...`,empty:`表示するステータス変数がありません`,loadError:`ステータスの読み込み中にエラーが発生しました: {{message}}`},variables:{title:`サーバー変数`,filterPlaceholder:`変数を絞り込み...`,empty:`表示する変数がありません`,loadError:`変数の読み込み中にエラーが発生しました: {{message}}`}},v={empty:{title:`Prisma スキーマファイル (.prisma) を開いて ERD を表示`,description:`モデル、enum、リレーションが自動的に解析されます`,openFile:`.prisma ファイルを開く`,dropHint:`またはこの領域にファイルをドラッグ&ドロップ`},entity:{enumBadge:`ENUM`,modelBadge:`MODEL`,columns:{value:`値`,comment:`コメント`,type:`型`,column:`カラム`},linkBadge:`リンク`,externalTitle:`{{location}} 上のリンク先テーブル(実際の外部キーではなく列リンク)`},toolbar:{refresh:`更新`,zoomIn:`拡大`,zoomOut:`縮小`,resetView:`表示をリセット`,center:`中央に配置`,fitAll:`全体を表示`,spreadAll:`すべて広げる`,resetLayout:`レイアウトをリセット`,legendOneToMany:`1:N (FK)`,tables:`テーブル:`,relations:`リレーション:`,columns:`カラム:`},viewer:{noServerConnection:`アクティブなサーバー接続がありません`,loading:`{{database}} からスキーマを読み込み中...`,loadFailed:`ERD の読み込みに失敗しました`,noDatabase:`データベースが選択されていません。`,selectDatabaseHint:`スキーマツリーでデータベースを選択してから、「ERD を表示」を開いてください。`}},y={runAnyway:`それでも実行`,query:{rowsReturned:`{{count}} 行を返しました`,rowsAffected:`{{count}} 行が影響を受けました`,rowsReturnedLimited:`{{count}} 行を返しました({{limit}} 行に制限。さらに取得するには LIMIT を追加してください)`,notConnected:`接続されていません`,fileNotOpen:`SQLite ファイルがまだ開かれていません — 上の「ファイルを再度開く」をクリックしてアクセスを再度許可してください。`,failed:`クエリが失敗しました`,nothingToExecute:`実行するものがありません`},destructive:{title_other:`{{count}} 件の破壊的なステートメントを実行しますか?`,description:`次の操作はデータを完全に変更または削除します。この操作は元に戻せません。`,unknownTarget:`(不明)`,deleteAll:`{{target}} のすべての行を DELETE`,updateAll:`{{target}} のすべての行を UPDATE`,alterDrop:`{{target}} に対する DROP COLUMN/PARTITION`},readOnly:{refused:`接続 "{{label}}" は読み取り専用です。{{count}} 件のステートメントがデータまたはスキーマを変更しようとしました。`,title:`"{{label}}" は読み取り専用です`,description:`これらのステートメントはデータまたはスキーマを変更します。それでもこの接続で実行しますか?`},transaction:{startFailed:`トランザクションを開始できませんでした`,started:`トランザクションを開始しました — 終了時にコミットまたはロールバックしてください`,implicitCommit:`{{kind}} により、開いていたトランザクションが暗黙的に COMMIT されました`,committed:`トランザクションをコミットしました`,rolledBack:`トランザクションをロールバックしました`,commandFailed:`{{name}} に失敗しました`,commandFailedWith:`{{name}} に失敗しました: {{message}}`},save:{notBrowserSqlite:`ブラウザ SQLite 接続ではありません。`,inMemory:`インメモリデータベース: ダウンロードとしてのみエクスポートできます。`,noFileSystemAccess:`このブラウザには File System Access API がありません(Chrome/Edge のみ対応): データベースはその場に書き込む代わりにダウンロードとしてエクスポートされます。`,noWritableHandle:`ファイルは書き込み可能なハンドルなしで開かれました: ダウンロードとしてエクスポートされます。`},agent:{devProxyUrl:`{{url}}(開発用プロキシ経由)`,notPlanche:`応答はありましたが、Planche エージェントではありません`,unreachable:"{{url}} の Planche エージェントに到達できません — `npx planche` を実行してください({{message}})",httpError:`HTTP エラー: {{status}} {{statusText}}`,emptyResponse:`トンネリングサーバーが空の応答を返しました`,reconnected:`{{name}} に再接続しました — エージェントが接続を破棄していました (再起動またはアイドルタイムアウト)。`},sample:{profileName:`サンプルショップ(ブラウザ内)`,downloadFailed:`サンプルデータベースをダウンロードできませんでした({{status}})`,tabTitle:`クエリ 1`},sqliteFile:{tooSmall:`ファイルが小さすぎるため SQLite データベースではありません。`,notSqlite:`SQLite データベースではありません(または SQLCipher などで暗号化されています)。16 バイトのヘッダーが "SQLite format 3" ではありません。`,badPageSize:`SQLite ヘッダーが破損しています: 無効なページサイズ {{size}}。`,unreadable:`SQLite がファイルを読み取れませんでした: {{message}}`,pickerDescription:`SQLite データベース`,walNotLoaded:`このデータベースは WAL モードですが、-wal ファイルが読み込まれていません。保存する前に読み込むか、バナーで -wal ファイルが存在しないことを確認してください。`,changedOnDisk:`{{name}} は読み込み後にディスク上で変更されました(他のプログラムが書き込みました)。保存するとその変更が上書きされます — ファイルを再度開いて編集をやり直すか、トンネリングサーバーを使用してください。`,walHasChanges:`{{name}}-wal に新しい変更があります。保存する前に読み込んでください。`,walChangedOnDisk:`{{name}}-wal は読み込み後に他のプログラムによって書き込まれました。保存する前にファイルを再度開いてください。`,writeDenied:`{{name}} への書き込みアクセスが許可されませんでした。ブラウザのプロンプトで許可するか、代わりにダウンロードとしてエクスポートしてください。`},environment:{none:`なし`,green:`緑(開発)`,blue:`青`,yellow:`黄(ステージング)`,orange:`オレンジ`,red:`赤(本番)`,purple:`紫`},scratchpad:{profileName:`スクラッチパッド`,namePromptTitle:`スクラッチパッドのテーブル名`,namePromptDescription:`スクラッチパッドに {{table}} という名前のテーブルが既にあります。別の名前を入力してください。`,nameTaken:`テーブル {{table}} は既に存在します。`},federated:{pulling:`{{connection}} から {{table}} を取得中…`,capped:`{{table}}: 先頭 {{limit}} 行のみ取得しました。`,templateLine1:`開いている接続のテーブルを "接続名".database.table として参照します。文の実行前にこのスクラッチパッドへコピーされます。`,templateLine2:`テーブルごとに最大 {{limit}} 行。クエリ自体はブラウザ内の SQLite で実行されます。`,templateConnections:`開いている接続: {{names}}`,templateNone:`まだ他の接続が開いていません。接続してからここで参照してください。`,done:`リモートテーブル {{tables}} 個から {{rows}} 行をスクラッチパッドへ取得しました。`,pullingProgress:`{{connection}} から {{table}} を取得中: {{loaded}} / {{total}} 行…`},paged:{noColumns:`{{table}} に列がありません。`,cancelled:`キャンセルしました。`}},b={title:`利用規約`,version:`バージョン {{version}}`,englishOnly:`規約の全文は英語で提供されます。ようこそ画面の要約はお使いの言語で表示されます。`},x={title:`{{kind}} は {{count}} 行に影響します`,titleUnknown:`{{kind}} — 影響行数は不明`,description:`この文が今触れる行を SELECT で先に読んだものです。まだ何も書き込んでいません。`,previewFailed:`プレビュークエリが失敗しました: {{error}}
|
|
2
|
+
それでも文を実行できます。`,noRows:`一致する行がありません — この文は何も変更しません。`,truncated:`{{count}} 行のうち先頭 {{shown}} 行を表示しています。`,previewQuery:`プレビュークエリ`,run:`{{kind}} を実行({{count}} 行)`,runAnyway:`それでも実行`},S={app:e,language:t,settings:n,menu:r,about:i,connection:a,toolbar:o,footer:s,palette:c,welcome:l,schema:u,query:d,result:f,confirm:p,table:m,database:h,user:g,command:_,erd:v,services:y,terms:b,dryRun:x};export{i as about,e as app,_ as command,p as confirm,a as connection,h as database,S as default,x as dryRun,v as erd,s as footer,t as language,r as menu,c as palette,d as query,f as result,u as schema,y as services,n as settings,m as table,b as terms,o as toolbar,g as user,l as welcome};
|