@adminiumjs/i18n 0.2.2-rc.0 → 0.2.3
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/dist/a11y-keys.d.ts +1 -1
- package/dist/a11y-keys.d.ts.map +1 -1
- package/dist/a11y-keys.js +481 -172
- package/dist/a11y-keys.js.map +1 -1
- package/dist/create-i18n.d.ts +16 -6
- package/dist/create-i18n.d.ts.map +1 -1
- package/dist/create-i18n.js +23 -9
- package/dist/create-i18n.js.map +1 -1
- package/dist/editing.d.ts +1 -1
- package/dist/editing.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -8
- package/dist/index.js.map +1 -1
- package/dist/keys.d.ts +6 -4
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +6 -4
- package/dist/keys.js.map +1 -1
- package/dist/overrides.d.ts +1 -1
- package/dist/overrides.d.ts.map +1 -1
- package/dist/resources/ar-eg/common.d.ts +96 -970
- package/dist/resources/ar-eg/common.d.ts.map +1 -1
- package/dist/resources/ar-eg/common.js +99 -973
- package/dist/resources/ar-eg/common.js.map +1 -1
- package/dist/resources/ar-eg/errors.d.ts +3 -2
- package/dist/resources/ar-eg/errors.d.ts.map +1 -1
- package/dist/resources/ar-eg/errors.js +3 -2
- package/dist/resources/ar-eg/errors.js.map +1 -1
- package/dist/resources/ar-eg/generated.d.ts +3 -2
- package/dist/resources/ar-eg/generated.d.ts.map +1 -1
- package/dist/resources/ar-eg/generated.js +3 -2
- package/dist/resources/ar-eg/generated.js.map +1 -1
- package/dist/resources/ar-eg/studio.d.ts +1282 -2
- package/dist/resources/ar-eg/studio.d.ts.map +1 -1
- package/dist/resources/ar-eg/studio.js +1282 -2
- package/dist/resources/ar-eg/studio.js.map +1 -1
- package/dist/resources/ar-eg/ui.d.ts +60 -2
- package/dist/resources/ar-eg/ui.d.ts.map +1 -1
- package/dist/resources/ar-eg/ui.js +72 -14
- package/dist/resources/ar-eg/ui.js.map +1 -1
- package/dist/resources/cs-cz/common.d.ts +96 -970
- package/dist/resources/cs-cz/common.d.ts.map +1 -1
- package/dist/resources/cs-cz/common.js +99 -973
- package/dist/resources/cs-cz/common.js.map +1 -1
- package/dist/resources/cs-cz/errors.d.ts +3 -2
- package/dist/resources/cs-cz/errors.d.ts.map +1 -1
- package/dist/resources/cs-cz/errors.js +3 -2
- package/dist/resources/cs-cz/errors.js.map +1 -1
- package/dist/resources/cs-cz/generated.d.ts +3 -2
- package/dist/resources/cs-cz/generated.d.ts.map +1 -1
- package/dist/resources/cs-cz/generated.js +3 -2
- package/dist/resources/cs-cz/generated.js.map +1 -1
- package/dist/resources/cs-cz/studio.d.ts +1282 -2
- package/dist/resources/cs-cz/studio.d.ts.map +1 -1
- package/dist/resources/cs-cz/studio.js +1282 -2
- package/dist/resources/cs-cz/studio.js.map +1 -1
- package/dist/resources/cs-cz/ui.d.ts +60 -2
- package/dist/resources/cs-cz/ui.d.ts.map +1 -1
- package/dist/resources/cs-cz/ui.js +72 -14
- package/dist/resources/cs-cz/ui.js.map +1 -1
- package/dist/resources/da-dk/common.d.ts +96 -970
- package/dist/resources/da-dk/common.d.ts.map +1 -1
- package/dist/resources/da-dk/common.js +99 -973
- package/dist/resources/da-dk/common.js.map +1 -1
- package/dist/resources/da-dk/errors.d.ts +3 -2
- package/dist/resources/da-dk/errors.d.ts.map +1 -1
- package/dist/resources/da-dk/errors.js +3 -2
- package/dist/resources/da-dk/errors.js.map +1 -1
- package/dist/resources/da-dk/generated.d.ts +3 -2
- package/dist/resources/da-dk/generated.d.ts.map +1 -1
- package/dist/resources/da-dk/generated.js +3 -2
- package/dist/resources/da-dk/generated.js.map +1 -1
- package/dist/resources/da-dk/studio.d.ts +1282 -2
- package/dist/resources/da-dk/studio.d.ts.map +1 -1
- package/dist/resources/da-dk/studio.js +1282 -2
- package/dist/resources/da-dk/studio.js.map +1 -1
- package/dist/resources/da-dk/ui.d.ts +60 -2
- package/dist/resources/da-dk/ui.d.ts.map +1 -1
- package/dist/resources/da-dk/ui.js +72 -14
- package/dist/resources/da-dk/ui.js.map +1 -1
- package/dist/resources/de-de/common.d.ts +96 -970
- package/dist/resources/de-de/common.d.ts.map +1 -1
- package/dist/resources/de-de/common.js +99 -973
- package/dist/resources/de-de/common.js.map +1 -1
- package/dist/resources/de-de/errors.d.ts +3 -2
- package/dist/resources/de-de/errors.d.ts.map +1 -1
- package/dist/resources/de-de/errors.js +3 -2
- package/dist/resources/de-de/errors.js.map +1 -1
- package/dist/resources/de-de/generated.d.ts +3 -2
- package/dist/resources/de-de/generated.d.ts.map +1 -1
- package/dist/resources/de-de/generated.js +3 -2
- package/dist/resources/de-de/generated.js.map +1 -1
- package/dist/resources/de-de/studio.d.ts +1282 -2
- package/dist/resources/de-de/studio.d.ts.map +1 -1
- package/dist/resources/de-de/studio.js +1282 -2
- package/dist/resources/de-de/studio.js.map +1 -1
- package/dist/resources/de-de/ui.d.ts +60 -2
- package/dist/resources/de-de/ui.d.ts.map +1 -1
- package/dist/resources/de-de/ui.js +72 -14
- package/dist/resources/de-de/ui.js.map +1 -1
- package/dist/resources/eager.d.ts +3 -0
- package/dist/resources/eager.d.ts.map +1 -0
- package/dist/resources/eager.js +25 -0
- package/dist/resources/eager.js.map +1 -0
- package/dist/resources/en-us/common.d.ts +96 -970
- package/dist/resources/en-us/common.d.ts.map +1 -1
- package/dist/resources/en-us/common.js +99 -973
- package/dist/resources/en-us/common.js.map +1 -1
- package/dist/resources/en-us/errors.d.ts +3 -2
- package/dist/resources/en-us/errors.d.ts.map +1 -1
- package/dist/resources/en-us/errors.js +3 -2
- package/dist/resources/en-us/errors.js.map +1 -1
- package/dist/resources/en-us/generated.d.ts +3 -2
- package/dist/resources/en-us/generated.d.ts.map +1 -1
- package/dist/resources/en-us/generated.js +3 -2
- package/dist/resources/en-us/generated.js.map +1 -1
- package/dist/resources/en-us/studio.d.ts +1282 -2
- package/dist/resources/en-us/studio.d.ts.map +1 -1
- package/dist/resources/en-us/studio.js +1282 -2
- package/dist/resources/en-us/studio.js.map +1 -1
- package/dist/resources/en-us/ui.d.ts +60 -2
- package/dist/resources/en-us/ui.d.ts.map +1 -1
- package/dist/resources/en-us/ui.js +72 -14
- package/dist/resources/en-us/ui.js.map +1 -1
- package/dist/resources/fr-fr/common.d.ts +96 -970
- package/dist/resources/fr-fr/common.d.ts.map +1 -1
- package/dist/resources/fr-fr/common.js +99 -973
- package/dist/resources/fr-fr/common.js.map +1 -1
- package/dist/resources/fr-fr/errors.d.ts +3 -2
- package/dist/resources/fr-fr/errors.d.ts.map +1 -1
- package/dist/resources/fr-fr/errors.js +3 -2
- package/dist/resources/fr-fr/errors.js.map +1 -1
- package/dist/resources/fr-fr/generated.d.ts +3 -2
- package/dist/resources/fr-fr/generated.d.ts.map +1 -1
- package/dist/resources/fr-fr/generated.js +3 -2
- package/dist/resources/fr-fr/generated.js.map +1 -1
- package/dist/resources/fr-fr/studio.d.ts +1282 -2
- package/dist/resources/fr-fr/studio.d.ts.map +1 -1
- package/dist/resources/fr-fr/studio.js +1282 -2
- package/dist/resources/fr-fr/studio.js.map +1 -1
- package/dist/resources/fr-fr/ui.d.ts +60 -2
- package/dist/resources/fr-fr/ui.d.ts.map +1 -1
- package/dist/resources/fr-fr/ui.js +72 -14
- package/dist/resources/fr-fr/ui.js.map +1 -1
- package/dist/resources/index.d.ts +3 -6
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +15 -14
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/lazy.d.ts +19 -9
- package/dist/resources/lazy.d.ts.map +1 -1
- package/dist/resources/lazy.js +4 -2
- package/dist/resources/lazy.js.map +1 -1
- package/dist/resources/namespaces.d.ts +43 -0
- package/dist/resources/namespaces.d.ts.map +1 -0
- package/dist/resources/namespaces.js +37 -0
- package/dist/resources/namespaces.js.map +1 -0
- package/dist/resources/zh-cn/common.d.ts +96 -970
- package/dist/resources/zh-cn/common.d.ts.map +1 -1
- package/dist/resources/zh-cn/common.js +99 -973
- package/dist/resources/zh-cn/common.js.map +1 -1
- package/dist/resources/zh-cn/errors.d.ts +3 -2
- package/dist/resources/zh-cn/errors.d.ts.map +1 -1
- package/dist/resources/zh-cn/errors.js +3 -2
- package/dist/resources/zh-cn/errors.js.map +1 -1
- package/dist/resources/zh-cn/generated.d.ts +3 -2
- package/dist/resources/zh-cn/generated.d.ts.map +1 -1
- package/dist/resources/zh-cn/generated.js +3 -2
- package/dist/resources/zh-cn/generated.js.map +1 -1
- package/dist/resources/zh-cn/studio.d.ts +1282 -2
- package/dist/resources/zh-cn/studio.d.ts.map +1 -1
- package/dist/resources/zh-cn/studio.js +1282 -2
- package/dist/resources/zh-cn/studio.js.map +1 -1
- package/dist/resources/zh-cn/ui.d.ts +60 -2
- package/dist/resources/zh-cn/ui.d.ts.map +1 -1
- package/dist/resources/zh-cn/ui.js +72 -14
- package/dist/resources/zh-cn/ui.js.map +1 -1
- package/dist/resources/zh-tw/common.d.ts +96 -970
- package/dist/resources/zh-tw/common.d.ts.map +1 -1
- package/dist/resources/zh-tw/common.js +99 -973
- package/dist/resources/zh-tw/common.js.map +1 -1
- package/dist/resources/zh-tw/errors.d.ts +3 -2
- package/dist/resources/zh-tw/errors.d.ts.map +1 -1
- package/dist/resources/zh-tw/errors.js +3 -2
- package/dist/resources/zh-tw/errors.js.map +1 -1
- package/dist/resources/zh-tw/generated.d.ts +3 -2
- package/dist/resources/zh-tw/generated.d.ts.map +1 -1
- package/dist/resources/zh-tw/generated.js +3 -2
- package/dist/resources/zh-tw/generated.js.map +1 -1
- package/dist/resources/zh-tw/studio.d.ts +1282 -2
- package/dist/resources/zh-tw/studio.d.ts.map +1 -1
- package/dist/resources/zh-tw/studio.js +1282 -2
- package/dist/resources/zh-tw/studio.js.map +1 -1
- package/dist/resources/zh-tw/ui.d.ts +60 -2
- package/dist/resources/zh-tw/ui.d.ts.map +1 -1
- package/dist/resources/zh-tw/ui.js +72 -14
- package/dist/resources/zh-tw/ui.js.map +1 -1
- package/dist/review-status.js +7 -7
- package/locales/ar-EG/.meta.json +3783 -2339
- package/locales/ar-EG/common.json +96 -971
- package/locales/ar-EG/studio.json +1279 -0
- package/locales/ar-EG/ui.json +69 -12
- package/locales/cs-CZ/.meta.json +3849 -2405
- package/locales/cs-CZ/common.json +96 -971
- package/locales/cs-CZ/studio.json +1279 -0
- package/locales/cs-CZ/ui.json +69 -12
- package/locales/da-DK/.meta.json +3935 -2491
- package/locales/da-DK/common.json +96 -971
- package/locales/da-DK/studio.json +1279 -0
- package/locales/da-DK/ui.json +69 -12
- package/locales/de-DE/.meta.json +3895 -2451
- package/locales/de-DE/common.json +96 -971
- package/locales/de-DE/studio.json +1279 -0
- package/locales/de-DE/ui.json +69 -12
- package/locales/en-US/common.json +96 -971
- package/locales/en-US/studio.json +1279 -0
- package/locales/en-US/ui.json +69 -12
- package/locales/fr-FR/.meta.json +3964 -2520
- package/locales/fr-FR/common.json +96 -971
- package/locales/fr-FR/studio.json +1279 -0
- package/locales/fr-FR/ui.json +69 -12
- package/locales/zh-CN/.meta.json +3781 -2337
- package/locales/zh-CN/common.json +96 -971
- package/locales/zh-CN/studio.json +1279 -0
- package/locales/zh-CN/ui.json +69 -12
- package/locales/zh-TW/.meta.json +3785 -2341
- package/locales/zh-TW/common.json +96 -971
- package/locales/zh-TW/studio.json +1279 -0
- package/locales/zh-TW/ui.json +69 -12
- package/package.json +1 -1
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* GENERATED MIRROR of ../../../locales/fr-FR/studio.json — do not edit by hand.
|
|
4
4
|
* The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);
|
|
5
|
-
* this TS mirror exists so the runtime
|
|
6
|
-
*
|
|
5
|
+
* this TS mirror exists so the runtime can bundle a namespace (en-US's eager
|
|
6
|
+
* ones) or chunk-split it (every other locale, and en-US's deferred `studio`)
|
|
7
|
+
* without JSON import attributes (browser + NodeNext safe).
|
|
7
8
|
* Parity is enforced by src/resources/parity.test.ts. Regenerate with
|
|
8
9
|
* scripts/gen-resources.mjs.
|
|
9
10
|
*/
|
|
@@ -13,6 +14,1285 @@ export default {
|
|
|
13
14
|
"title": "Paramètres",
|
|
14
15
|
"workspaceSection": "Espace de travail",
|
|
15
16
|
"globalDefaultsNav": "Valeurs par défaut globales"
|
|
17
|
+
},
|
|
18
|
+
"source": {
|
|
19
|
+
"engine": {
|
|
20
|
+
"label": "Moteur de base de données",
|
|
21
|
+
"postgres": "PostgreSQL",
|
|
22
|
+
"mysql": "MySQL / MariaDB",
|
|
23
|
+
"sqlite": "SQLite"
|
|
24
|
+
},
|
|
25
|
+
"format": {
|
|
26
|
+
"label": "Format du schéma",
|
|
27
|
+
"helper": "Laissez la détection automatique, sauf si elle se trompe.",
|
|
28
|
+
"auto": "Détection automatique",
|
|
29
|
+
"sql": "DDL SQL / pg_dump",
|
|
30
|
+
"prisma": "Schéma Prisma",
|
|
31
|
+
"drizzle": "Drizzle ORM",
|
|
32
|
+
"typeorm": "Entités TypeORM",
|
|
33
|
+
"sequelize": "Modèles Sequelize",
|
|
34
|
+
"rails": "schema.rb Rails",
|
|
35
|
+
"django": "models.py Django",
|
|
36
|
+
"json": "JSON Adminium"
|
|
37
|
+
},
|
|
38
|
+
"sqlite": {
|
|
39
|
+
"file": "Chemin du fichier de base de données",
|
|
40
|
+
"helper": "SQLite est un fichier, pas un serveur — indiquez le chemin absolu sur la machine qui exécute Adminium."
|
|
41
|
+
},
|
|
42
|
+
"file": {
|
|
43
|
+
"detectedAs": "Détecté : {format}",
|
|
44
|
+
"moreWarnings": "+{count} avertissements supplémentaires — la liste complète apparaît à l’étape d’analyse.",
|
|
45
|
+
"dropTitle": "Déposez votre fichier de schéma ici, ou parcourez",
|
|
46
|
+
"dropHint": "SQL DDL / pg_dump, Prisma, Drizzle, TypeORM, Sequelize, Rails schema.rb, modèles Django, Adminium JSON",
|
|
47
|
+
"pitch": "Aucune connexion à la base requise — nous analysons votre fichier de schéma et construisons les mêmes tableaux de bord.",
|
|
48
|
+
"parsing": "Lecture du fichier de schéma téléversé…",
|
|
49
|
+
"tables": "tables",
|
|
50
|
+
"columns": "colonnes",
|
|
51
|
+
"warnings": "avertissements",
|
|
52
|
+
"errorTitle": "Impossible d’analyser le fichier",
|
|
53
|
+
"parseFailed": "Nous n’avons pas pu analyser ce fichier. Si la détection automatique s’est trompée, choisissez le format explicitement et réessayez.",
|
|
54
|
+
"unsupported": "Format non reconnu — SQL DDL, Prisma, Drizzle, TypeORM, Sequelize, Rails schema.rb, modèles Django et Adminium JSON sont pris en charge. Choisissez-en un explicitement et réessayez.",
|
|
55
|
+
"requestFailed": "Échec du téléversement — vérifiez votre connexion et réessayez."
|
|
56
|
+
},
|
|
57
|
+
"title": "Connectez votre base de données",
|
|
58
|
+
"subtitle": "Pointez Adminium vers une base de données et nous générerons un tableau de bord d’administration à partir de son schéma.",
|
|
59
|
+
"name": "Nom de la connexion",
|
|
60
|
+
"namePlaceholder": "Postgres de production",
|
|
61
|
+
"modeLabel": "Mode de saisie de la source",
|
|
62
|
+
"mode": {
|
|
63
|
+
"dsn": "Chaîne de connexion",
|
|
64
|
+
"fields": "Champs individuels",
|
|
65
|
+
"file": "Fichier de schéma"
|
|
66
|
+
},
|
|
67
|
+
"dsn": {
|
|
68
|
+
"label": "Chaîne de connexion",
|
|
69
|
+
"helper": "postgres://utilisateur:motdepasse@hote:5432/base — mysql:// et sqlite: fonctionnent aussi.",
|
|
70
|
+
"incomplete": "Ajoutez l’hôte et la base, p. ex. postgres://user@host:5432/db",
|
|
71
|
+
"invalidScheme": "Schéma non reconnu — attendu : postgres://, mysql://, mariadb:// ou sqlite:",
|
|
72
|
+
"quickFill": "Remplissage rapide :"
|
|
73
|
+
},
|
|
74
|
+
"fields": {
|
|
75
|
+
"host": "Hôte",
|
|
76
|
+
"port": "Port",
|
|
77
|
+
"database": "Base de données",
|
|
78
|
+
"user": "Utilisateur",
|
|
79
|
+
"password": "Mot de passe",
|
|
80
|
+
"ssl": "Mode SSL",
|
|
81
|
+
"preview": "Aperçu de la chaîne de connexion :"
|
|
82
|
+
},
|
|
83
|
+
"readOnlyRole": {
|
|
84
|
+
"title": "Utilisez un rôle en lecture seule",
|
|
85
|
+
"body": "Adminium n’écrit jamais dans votre base — la configuration n’utilise que les métadonnées du schéma. Nous recommandons un utilisateur dédié avec des droits SELECT uniquement ; vous choisirez où Adminium range ses propres tables à l’étape du stockage méta."
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"capability": {
|
|
89
|
+
"mysqlApproxRows": "Les nombres de lignes MySQL sont des estimations du moteur de stockage (dérive possible jusqu’à ±40 %) — affichés avec ≈.",
|
|
90
|
+
"mysqlFkEnum": "Les métadonnées FK/enum de MySQL sont plus limitées : les tables MyISAM ne déclarent pas de clés étrangères, les enums sont des types enum(…) par colonne et les contraintes CHECK requièrent MySQL 8.0.16+ / MariaDB 10.2+.",
|
|
91
|
+
"sqliteCheckEnums": "SQLite n’a pas de type enum natif — les enums sont synthétisés à partir des contraintes CHECK (col IN (…)).",
|
|
92
|
+
"sqliteNoComments": "SQLite n’a pas de commentaires de colonne — utilisez l’éditeur de remappage du schéma pour ajouter des libellés.",
|
|
93
|
+
"importNoRowCounts": "Les fichiers de schéma ne contiennent pas de nombres de lignes — la liste des tables affiche — plutôt que des chiffres inventés.",
|
|
94
|
+
"importNoLiveHealth": "Pas de connexion à une base de données réelle — les contrôles de santé et la détection de dérive du schéma sont indisponibles pour cette source.",
|
|
95
|
+
"rowsUnavailable": "Les fichiers de schéma n’ont pas de base de données réelle — les nombres de lignes restent inconnus tant que vous n’en connectez pas une.",
|
|
96
|
+
"rowsRunAnalyze": "Pas encore d’estimation — exécutez ANALYZE sur la base pour obtenir les nombres de lignes.",
|
|
97
|
+
"rowsNoEstimate": "Le moteur n’a communiqué aucune estimation pour cette table.",
|
|
98
|
+
"rowsApproximate": "Estimation du moteur de stockage — dérive possible jusqu’à ±40 % avec InnoDB."
|
|
99
|
+
},
|
|
100
|
+
"test": {
|
|
101
|
+
"log": {
|
|
102
|
+
"moreWarnings": "+{count} avertissements du parseur supplémentaires",
|
|
103
|
+
"connecting": "Établissement d’une connexion sécurisée…",
|
|
104
|
+
"connected": "Connecté ({latency} ms) · introspection en lecture seule",
|
|
105
|
+
"connectFailed": "Échec de la connexion.",
|
|
106
|
+
"readingSchema": "Lecture du schéma : public",
|
|
107
|
+
"readingFile": "Lecture du fichier de schéma téléversé…",
|
|
108
|
+
"parsingFile": "Analyse de {file}…",
|
|
109
|
+
"detected": "{tables} tables · {columns} colonnes détectées",
|
|
110
|
+
"found": "{tables} tables · {columns} colonnes trouvées",
|
|
111
|
+
"mapping": "Correspondance des types de colonnes → widgets de saisie",
|
|
112
|
+
"relations": "Détection des relations…",
|
|
113
|
+
"piiScan": "Recherche de colonnes PII…",
|
|
114
|
+
"piiDone": "Analyse PII terminée — {count} colonnes masquées par défaut",
|
|
115
|
+
"piiDoneUnknown": "Analyse PII terminée",
|
|
116
|
+
"jobFailed": "Échec de l’introspection.",
|
|
117
|
+
"networkFailed": "Échec de la requête — vérifiez votre connexion et réessayez.",
|
|
118
|
+
"ready": "Prêt"
|
|
119
|
+
},
|
|
120
|
+
"title": "Analyse de votre schéma",
|
|
121
|
+
"subtitle": "Introspection des tables, colonnes et relations. Cela prend quelques secondes.",
|
|
122
|
+
"trust": "Nous ne faisons que lire votre schéma et vos données. Rien n’est modifié.",
|
|
123
|
+
"errorTitle": "Échec de la connexion",
|
|
124
|
+
"retry": "Réessayer",
|
|
125
|
+
"logLabel": "Journal d’introspection",
|
|
126
|
+
"hint": {
|
|
127
|
+
"auth": "Échec de l’authentification — vérifiez le nom d’utilisateur et le mot de passe dans votre DSN.",
|
|
128
|
+
"hostUnreachable": "Hôte injoignable — vérifiez le nom d’hôte et le port, et que la base accepte les connexions depuis cette machine (ajoutez nos IP à la liste d’autorisation).",
|
|
129
|
+
"metaPlacement": "Cette source ne peut pas héberger les tables méta d’Adminium — continuez avec une base méta séparée.",
|
|
130
|
+
"permission": "Le rôle s’est connecté mais n’a pas les droits de lecture du schéma — accordez USAGE sur le schéma à votre rôle d’introspection.",
|
|
131
|
+
"timeout": "La base n’a pas répondu à temps — vérifiez le chemin réseau et la charge, puis réessayez.",
|
|
132
|
+
"tls": "Échec de la négociation TLS — essayez sslmode=require, ou téléversez le certificat CA attendu par votre serveur.",
|
|
133
|
+
"unknown": "Échec de la connexion — vérifiez la DSN et réessayez."
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"tables": {
|
|
137
|
+
"importNoCounts": "Les fichiers de schéma ne contiennent pas de nombres de lignes — la colonne affiche — tant qu’aucune base réelle n’est connectée.",
|
|
138
|
+
"title": "Choisissez vos tables",
|
|
139
|
+
"subtitle": "Choisissez lesquelles inclure. Vous pourrez en changer à tout moment.",
|
|
140
|
+
"search": "Filtrer les tables…",
|
|
141
|
+
"listLabel": "Tables incluables",
|
|
142
|
+
"emptyFilter": "Aucune table ne correspond à votre filtre.",
|
|
143
|
+
"pii": "PII",
|
|
144
|
+
"highVolume": "gros volume",
|
|
145
|
+
"highVolumeNote": "Les tables de plus de 100 000 lignes démarrent décochées — les tables techniques ont rarement leur place dans un tableau de bord.",
|
|
146
|
+
"joinHidden": "{count} tables de jointure/système sont masquées d’avance — elles alimentent toujours les relations plusieurs-à-plusieurs."
|
|
147
|
+
},
|
|
148
|
+
"hub": {
|
|
149
|
+
"title": "Connexions de données",
|
|
150
|
+
"subtitle": "{healthy, number} sur {total, plural, one {# connexion} other {# connexions}} en bonne santé",
|
|
151
|
+
"connectNew": "Nouvelle connexion",
|
|
152
|
+
"stats": {
|
|
153
|
+
"connections": "Connexions",
|
|
154
|
+
"healthy": "En bonne santé",
|
|
155
|
+
"tables": "Tables incluses",
|
|
156
|
+
"pages": "Pages générées"
|
|
157
|
+
},
|
|
158
|
+
"status": {
|
|
159
|
+
"connected": "Connectée",
|
|
160
|
+
"error": "Erreur",
|
|
161
|
+
"unconfigured": "Brouillon",
|
|
162
|
+
"testing": "Test en cours…",
|
|
163
|
+
"paused": "En pause"
|
|
164
|
+
},
|
|
165
|
+
"card": {
|
|
166
|
+
"readOnly": "Lecture seule",
|
|
167
|
+
"tables": "Tables",
|
|
168
|
+
"pages": "Pages",
|
|
169
|
+
"latency": "Latence",
|
|
170
|
+
"latencyMs": "{latency, number} ms",
|
|
171
|
+
"lastIntrospected": "Dernière introspection",
|
|
172
|
+
"never": "Jamais",
|
|
173
|
+
"timezone": "Fuseau horaire",
|
|
174
|
+
"timezoneGuessed": "depuis ce serveur",
|
|
175
|
+
"paused": "Adminium ne se connecte pas à cette base de données. Ses pages se chargeront de nouveau dès que vous la reprendrez.",
|
|
176
|
+
"pausedSince": "En pause {when} — Adminium ne se connecte pas à cette base de données. Ses pages se chargeront de nouveau dès que vous la reprendrez."
|
|
177
|
+
},
|
|
178
|
+
"action": {
|
|
179
|
+
"test": "Tester",
|
|
180
|
+
"reintrospect": "Réintrospecter",
|
|
181
|
+
"reintrospectFile": "Les sources de type fichier de schéma n’ont pas de base de données active — téléversez à nouveau le fichier.",
|
|
182
|
+
"remap": "Remapper le schéma",
|
|
183
|
+
"delete": "Supprimer",
|
|
184
|
+
"regional": "Paramètres régionaux",
|
|
185
|
+
"pause": "Mettre en pause",
|
|
186
|
+
"resume": "Reprendre",
|
|
187
|
+
"pausedHint": "Cette connexion est en pause — reprenez-la pour atteindre la base de données.",
|
|
188
|
+
"rename": "Renommer"
|
|
189
|
+
},
|
|
190
|
+
"regional": {
|
|
191
|
+
"title": "Paramètres régionaux",
|
|
192
|
+
"intro": "Ils décrivent l'entreprise à laquelle appartient cette base de données, et non la personne qui la consulte. Les applications servies par Adminium les lisent ici.",
|
|
193
|
+
"timezone": "Fuseau horaire",
|
|
194
|
+
"timezoneHelper": "Les dates et heures s'affichent dans ce fuseau. Sans fuseau, les applications hébergées par Adminium basculent en UTC et l'indiquent à l'écran.",
|
|
195
|
+
"guessedTitle": "Ce fuseau vient du serveur",
|
|
196
|
+
"guessedBody": "Adminium l'a repris de la machine sur laquelle il tourne ; personne ne l'a choisi ici. Enregistrez pour le confirmer, ou choisissez le fuseau dans lequel cette entreprise travaille réellement.",
|
|
197
|
+
"timezonePlaceholder": "Région/Ville",
|
|
198
|
+
"currency": "Devise",
|
|
199
|
+
"currencyHelper": "Sert à formater les montants. Facultatif : ne pas la définir n'affecte que le formatage.",
|
|
200
|
+
"currencyPlaceholder": "Code ISO-4217",
|
|
201
|
+
"notSet": "Non défini",
|
|
202
|
+
"noMatch": "Aucun fuseau correspondant",
|
|
203
|
+
"noMatchCurrency": "Aucune devise correspondante",
|
|
204
|
+
"save": "Enregistrer",
|
|
205
|
+
"failed": "Impossible d'enregistrer les paramètres régionaux",
|
|
206
|
+
"saved": "Paramètres régionaux mis à jour"
|
|
207
|
+
},
|
|
208
|
+
"test": {
|
|
209
|
+
"ok": "Connexion en bonne santé · {latency, number} ms",
|
|
210
|
+
"failed": "Échec du test de connexion"
|
|
211
|
+
},
|
|
212
|
+
"introspect": {
|
|
213
|
+
"noChanges": "Schéma inchangé — aucun nouvel instantané.",
|
|
214
|
+
"updated": "Schéma réintrospecté",
|
|
215
|
+
"masksProposed": "{count, plural, one {# colonne proposée} other {# colonnes proposées}} au masquage — à vérifier dans l’éditeur de remappage.",
|
|
216
|
+
"failed": "Échec de l’introspection. Réessayez."
|
|
217
|
+
},
|
|
218
|
+
"delete": {
|
|
219
|
+
"title": "Supprimer la connexion",
|
|
220
|
+
"body": "Cette action supprime « {name} » et les pages générées. Votre base de données n’est jamais touchée.",
|
|
221
|
+
"prompt": "Saisissez {name} pour confirmer",
|
|
222
|
+
"confirm": "Supprimer la connexion",
|
|
223
|
+
"cancel": "Annuler",
|
|
224
|
+
"close": "Fermer",
|
|
225
|
+
"success": "Connexion « {name} » supprimée",
|
|
226
|
+
"failed": "Impossible de supprimer la connexion. Réessayez."
|
|
227
|
+
},
|
|
228
|
+
"empty": {
|
|
229
|
+
"title": "Aucune source de données",
|
|
230
|
+
"body": "Connectez une base de données : Adminium génère votre panneau d’administration à partir de son schéma.",
|
|
231
|
+
"cta": "Connecter une base de données"
|
|
232
|
+
},
|
|
233
|
+
"hostedApps": "Apps hébergées",
|
|
234
|
+
"subtitlePaused": "{healthy, number} sur {total, plural, one {# connexion} other {# connexions}} en bonne santé · {paused, number} en pause",
|
|
235
|
+
"pause": {
|
|
236
|
+
"title": "Mettre cette connexion en pause ?",
|
|
237
|
+
"body": "Adminium n’ouvre plus aucune connexion vers « {name} ». Ses {pages, plural, one {# page} other {# pages}}, ses rapports planifiés et ses applications hébergées cessent de charger des données jusqu’à ce que vous la repreniez.",
|
|
238
|
+
"keeps": "Rien n’est supprimé — la connexion, son schéma et ses {pages, plural, one {# page} other {# pages}} sont conservés, et un clic les ramène.",
|
|
239
|
+
"confirm": "Mettre la connexion en pause",
|
|
240
|
+
"pausedToast": "Connexion « {name} » mise en pause",
|
|
241
|
+
"resumedToast": "Connexion « {name} » reprise",
|
|
242
|
+
"pauseFailed": "Impossible de mettre la connexion en pause. Réessayez.",
|
|
243
|
+
"resumeFailed": "Impossible de reprendre la connexion. Réessayez."
|
|
244
|
+
},
|
|
245
|
+
"rename": {
|
|
246
|
+
"title": "Renommer la connexion",
|
|
247
|
+
"label": "Nom",
|
|
248
|
+
"helper": "Le nom de cette base partout dans Adminium — la carte, le groupe de la barre latérale au-dessus de ses pages, et chaque sélecteur qui la propose. La base elle-même n'est pas renommée.",
|
|
249
|
+
"save": "Renommer",
|
|
250
|
+
"saved": "Connexion renommée",
|
|
251
|
+
"failed": "La connexion n'a pas pu être renommée"
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
"settingsHub": {
|
|
255
|
+
"title": "Paramètres de l’espace de travail",
|
|
256
|
+
"subtitle": "Identité, sécurité et actions destructrices pour cet espace de travail.",
|
|
257
|
+
"save": "Enregistrer les modifications",
|
|
258
|
+
"saved": "Paramètres de l’espace de travail mis à jour",
|
|
259
|
+
"saveFailed": "Impossible d’enregistrer les paramètres de l’espace de travail. Réessayez.",
|
|
260
|
+
"superAdminOnlyTitle": "Super administrateur requis",
|
|
261
|
+
"superAdminOnly": "Seul un super administrateur peut modifier l’identité et les paramètres de sécurité de l’espace de travail.",
|
|
262
|
+
"identity": {
|
|
263
|
+
"heading": "Identité de l’espace de travail",
|
|
264
|
+
"appName": {
|
|
265
|
+
"label": "Nom de l’application",
|
|
266
|
+
"helper": "Affiché dans la barre latérale, le titre du navigateur et les e-mails.",
|
|
267
|
+
"error": "Saisissez un nom de 60 caractères maximum."
|
|
268
|
+
},
|
|
269
|
+
"logo": {
|
|
270
|
+
"label": "Logo",
|
|
271
|
+
"drop": "Déposez une image ici",
|
|
272
|
+
"helper": "PNG, JPEG, WebP, GIF ou SVG, jusqu’à 1 Mo. Remplace la marque intégrée partout.",
|
|
273
|
+
"upload": "Importer un logo",
|
|
274
|
+
"replace": "Remplacer le logo",
|
|
275
|
+
"remove": "Supprimer",
|
|
276
|
+
"uploaded": "Logo mis à jour",
|
|
277
|
+
"removed": "Logo supprimé",
|
|
278
|
+
"tooLarge": "Cette image dépasse 1 Mo.",
|
|
279
|
+
"badType": "Choisissez une image PNG, JPEG, WebP, GIF ou SVG.",
|
|
280
|
+
"undo": "Annuler"
|
|
281
|
+
},
|
|
282
|
+
"showVersion": {
|
|
283
|
+
"label": "Version dans la barre latérale",
|
|
284
|
+
"helper": "Le numéro de build à côté du logo. Désactivé, il masque votre version."
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
"security": {
|
|
288
|
+
"heading": "Sécurité",
|
|
289
|
+
"require2fa": {
|
|
290
|
+
"label": "Exiger l’authentification à deux facteurs",
|
|
291
|
+
"desc": "Chaque membre doit activer la 2FA pour se connecter.",
|
|
292
|
+
"note": "Indicatif, pas bloquant : les membres sans 2FA sont dirigés vers sa configuration et ne peuvent plus la désactiver, mais leur connexion n’est jamais bloquée, et les clés API ne sont pas concernées."
|
|
293
|
+
},
|
|
294
|
+
"allowSignup": {
|
|
295
|
+
"label": "Autoriser l’auto-inscription",
|
|
296
|
+
"desc": "N’importe qui peut créer un compte — désactivé, l’espace de travail reste sur invitation uniquement."
|
|
297
|
+
},
|
|
298
|
+
"sessionTtl": {
|
|
299
|
+
"label": "Durée de session (heures)",
|
|
300
|
+
"error": "Entre {min, number} et {max, number} heures."
|
|
301
|
+
},
|
|
302
|
+
"passwordMin": {
|
|
303
|
+
"label": "Longueur minimale du mot de passe",
|
|
304
|
+
"error": "Entre {min, number} et {max, number} caractères."
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
"email": {
|
|
308
|
+
"heading": "E-mail (SMTP)",
|
|
309
|
+
"unconfigured": "Aucun serveur de messagerie n’est configuré, donc Adminium ne peut envoyer ni réinitialisation de mot de passe, ni invitation, ni rapport planifié.",
|
|
310
|
+
"host": {
|
|
311
|
+
"label": "Hôte SMTP",
|
|
312
|
+
"error": "Un nom d’hôte ou une adresse IP uniquement — sans schéma, port ni identifiants."
|
|
313
|
+
},
|
|
314
|
+
"port": {
|
|
315
|
+
"label": "Port",
|
|
316
|
+
"error": "Entre {min, number} et {max, number}."
|
|
317
|
+
},
|
|
318
|
+
"user": {
|
|
319
|
+
"label": "Nom d’utilisateur",
|
|
320
|
+
"helper": "Laissez vide si le relais ne demande pas d’authentification."
|
|
321
|
+
},
|
|
322
|
+
"pass": {
|
|
323
|
+
"label": "Mot de passe",
|
|
324
|
+
"helper": "Chiffré au stockage et jamais réaffiché. Laissez vide pour conserver l’actuel.",
|
|
325
|
+
"error": "Ce nom d’utilisateur exige un mot de passe."
|
|
326
|
+
},
|
|
327
|
+
"from": {
|
|
328
|
+
"label": "Adresse d’expéditeur",
|
|
329
|
+
"helper": "Une adresse seule, ou un nom d’affichage devant.",
|
|
330
|
+
"error": "Saisissez une adresse e-mail."
|
|
331
|
+
},
|
|
332
|
+
"secure": {
|
|
333
|
+
"label": "TLS implicite",
|
|
334
|
+
"helper": "Activé pour le port 465. Désactivé démarre en clair puis passe à STARTTLS, ce qu’attend le port 587."
|
|
335
|
+
},
|
|
336
|
+
"remove": "Supprimer le serveur de messagerie",
|
|
337
|
+
"review": {
|
|
338
|
+
"removed": "Supprimé",
|
|
339
|
+
"password": "Remplacé"
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
"review": {
|
|
343
|
+
"title": "Enregistrer les paramètres de l’espace de travail",
|
|
344
|
+
"subtitle": "Vérifiez vos modifications avant d’enregistrer.",
|
|
345
|
+
"confirm": "Enregistrer les modifications",
|
|
346
|
+
"cancel": "Annuler",
|
|
347
|
+
"close": "Fermer",
|
|
348
|
+
"on": "Activé",
|
|
349
|
+
"off": "Désactivé",
|
|
350
|
+
"shown": "Affiché",
|
|
351
|
+
"hidden": "Masqué",
|
|
352
|
+
"change": "{before} → {after}"
|
|
353
|
+
},
|
|
354
|
+
"defaultsCard": {
|
|
355
|
+
"heading": "Valeurs par défaut d’apparence et de langue",
|
|
356
|
+
"body": "Le thème, la couleur d’accent, la densité et la langue de tout l’espace de travail se trouvent dans les valeurs par défaut globales.",
|
|
357
|
+
"cta": "Ouvrir les valeurs par défaut globales"
|
|
358
|
+
},
|
|
359
|
+
"danger": {
|
|
360
|
+
"heading": "Zone de danger",
|
|
361
|
+
"subtitle": "Actions irréversibles.",
|
|
362
|
+
"empty": "Rien à supprimer — aucune connexion pour l’instant.",
|
|
363
|
+
"deleteDesc": "Supprime la connexion et les pages générées. Votre base de données n’est pas touchée. Irréversible.",
|
|
364
|
+
"deleteCta": "Supprimer la connexion"
|
|
365
|
+
},
|
|
366
|
+
"aiCard": {
|
|
367
|
+
"heading": "Enrichissement par IA",
|
|
368
|
+
"body": "Configurez un fournisseur IA (ou l’aller-retour copier-coller) pour enrichir libellés, groupes et relations.",
|
|
369
|
+
"cta": "Ouvrir les réglages IA"
|
|
370
|
+
},
|
|
371
|
+
"pagesCard": {
|
|
372
|
+
"heading": "Pages",
|
|
373
|
+
"body": "Ajoutez, modifiez et supprimez des pages, changez leur contenu et réordonnez la barre latérale.",
|
|
374
|
+
"cta": "Gérer les pages"
|
|
375
|
+
},
|
|
376
|
+
"translationsCard": {
|
|
377
|
+
"heading": "Langues et traductions",
|
|
378
|
+
"body": "Reformulez n’importe quel texte d’Adminium, choisissez les langues proposées et ajoutez les vôtres.",
|
|
379
|
+
"cta": "Ouvrir les traductions"
|
|
380
|
+
}
|
|
381
|
+
},
|
|
382
|
+
"settingsAi": {
|
|
383
|
+
"title": "Enrichissement par IA",
|
|
384
|
+
"subtitle": "Connectez un modèle pour qu’Adminium suggère des libellés, des groupes, des relations et plus encore — toujours revus sous forme de diff avant toute application.",
|
|
385
|
+
"saved": "Fournisseur IA enregistré",
|
|
386
|
+
"saveFailed": "Impossible d’enregistrer le fournisseur IA. Réessayez.",
|
|
387
|
+
"save": "Enregistrer le fournisseur",
|
|
388
|
+
"test": "Tester la connexion",
|
|
389
|
+
"testHintDirty": "Enregistrez vos modifications avant de tester.",
|
|
390
|
+
"testing": "Test du fournisseur en cours…",
|
|
391
|
+
"testError": "Échec du test",
|
|
392
|
+
"testErrorBody": "Impossible de joindre le fournisseur. Vérifiez la clé et l’URL de base.",
|
|
393
|
+
"testOk": "Connecté à {model} en {latency} ms",
|
|
394
|
+
"testUnknownModel": "le fournisseur",
|
|
395
|
+
"provider": {
|
|
396
|
+
"heading": "Fournisseur IA",
|
|
397
|
+
"subtitle": "Choisissez comment Adminium atteint un modèle pour enrichir votre schéma. Les clés sont stockées chiffrées et ne sont jamais réaffichées.",
|
|
398
|
+
"active": "Actif",
|
|
399
|
+
"anthropic": {
|
|
400
|
+
"label": "Anthropic",
|
|
401
|
+
"desc": "Modèles Claude via l’API Anthropic."
|
|
402
|
+
},
|
|
403
|
+
"openai": {
|
|
404
|
+
"label": "OpenAI",
|
|
405
|
+
"desc": "Modèles GPT via l’API OpenAI."
|
|
406
|
+
},
|
|
407
|
+
"openaiCompatible": {
|
|
408
|
+
"label": "Compatible OpenAI",
|
|
409
|
+
"desc": "Tout point de terminaison au format OpenAI — Groq, Together, vLLM, LM Studio."
|
|
410
|
+
},
|
|
411
|
+
"ollama": {
|
|
412
|
+
"label": "Ollama (local)",
|
|
413
|
+
"desc": "Modèles exécutés localement via Ollama — sans clé, sans cloud."
|
|
414
|
+
},
|
|
415
|
+
"requiresNetwork": "Nécessite Internet et une clé API",
|
|
416
|
+
"networkDisabledTitle": "Les fournisseurs IA directs sont désactivés sur cette installation",
|
|
417
|
+
"networkDisabledBody": "Cet Adminium est configuré sans accès Internet sortant : il ne peut joindre aucune API de fournisseur. Utilisez l'aller-retour copier-coller ci-dessous — ni clé ni réseau requis."
|
|
418
|
+
},
|
|
419
|
+
"configure": {
|
|
420
|
+
"heading": "Configurer {provider}"
|
|
421
|
+
},
|
|
422
|
+
"field": {
|
|
423
|
+
"baseUrl": "URL de base",
|
|
424
|
+
"baseUrlOptional": "Laissez tel quel, sauf si Ollama tourne sur un autre hôte.",
|
|
425
|
+
"baseUrlHelper": "La racine du point de terminaison qui sert /chat/completions.",
|
|
426
|
+
"model": "Modèle",
|
|
427
|
+
"modelFreeText": "Saisissez l’identifiant exact du modèle servi par votre point de terminaison.",
|
|
428
|
+
"modelLive": "Chargé en direct depuis le fournisseur.",
|
|
429
|
+
"modelStatic": "Une liste éprouvée ; saisissez un identifiant personnalisé après l’enregistrement pour l’actualiser.",
|
|
430
|
+
"modelLoading": "Chargement…",
|
|
431
|
+
"modelPlaceholder": "Sélectionner un modèle…",
|
|
432
|
+
"key": "Clé API",
|
|
433
|
+
"keyStored": "Stockée chiffrée. Remplacez-la pour utiliser une autre clé.",
|
|
434
|
+
"keyMask": "sk-…{last4}",
|
|
435
|
+
"keyReplace": "Remplacer la clé",
|
|
436
|
+
"keyOptional": "Facultatif — certains points de terminaison n’exigent aucune clé.",
|
|
437
|
+
"keyWriteOnly": "En écriture seule : une fois enregistrée, elle n’est jamais réaffichée.",
|
|
438
|
+
"noKeyTitle": "Aucune clé API requise",
|
|
439
|
+
"noKeyBody": "Ollama tourne localement, donc rien ne quitte cette machine."
|
|
440
|
+
},
|
|
441
|
+
"runStatus": {
|
|
442
|
+
"draft": "Brouillon",
|
|
443
|
+
"running": "En cours",
|
|
444
|
+
"awaitingResponse": "En attente de réponse",
|
|
445
|
+
"validated": "Validé",
|
|
446
|
+
"applied": "Appliqué",
|
|
447
|
+
"partiallyApplied": "Partiellement appliqué",
|
|
448
|
+
"failed": "Échoué",
|
|
449
|
+
"discarded": "Abandonné"
|
|
450
|
+
},
|
|
451
|
+
"byo": {
|
|
452
|
+
"heading": "Pas de clé ? Utilisez votre propre outil IA",
|
|
453
|
+
"subtitle": "L’aller-retour copier-coller — rien ne quitte cette machine.",
|
|
454
|
+
"body": "Studio peut générer un prompt autonome à partir de votre schéma. Exécutez-le dans Claude Code, ChatGPT ou l’outil de votre choix, puis collez le JSON renvoyé dans l’assistant de connexion. Même validation, même revue, même résultat que la voie directe.",
|
|
455
|
+
"guaranteeTitle": "Garantie sans télémétrie",
|
|
456
|
+
"guarantee1": "Le prompt ne contient que votre schéma et des statistiques agrégées — jamais de données de lignes par défaut.",
|
|
457
|
+
"guarantee2": "Aucun identifiant, URL d’instance ni justificatif n’y est intégré.",
|
|
458
|
+
"guarantee3": "Les exécutions BYO ne font aucun appel réseau.",
|
|
459
|
+
"promptVersion": "Prompt {version}",
|
|
460
|
+
"schemaVersion": "Schéma {version}",
|
|
461
|
+
"headingRecommended": "Utilisez votre propre outil IA — aucune clé requise",
|
|
462
|
+
"recommended": "Recommandé"
|
|
463
|
+
},
|
|
464
|
+
"history": {
|
|
465
|
+
"heading": "Historique des exécutions",
|
|
466
|
+
"subtitle": "Exécutions d’enrichissement passées. Ouvrez-en une pour revoir ses suggestions.",
|
|
467
|
+
"tableLabel": "Exécutions d’enrichissement",
|
|
468
|
+
"colDate": "Date",
|
|
469
|
+
"colSource": "Source",
|
|
470
|
+
"colStatus": "Statut",
|
|
471
|
+
"colChunks": "Blocs",
|
|
472
|
+
"openReview": "Ouvrir la revue de l’exécution du {date}",
|
|
473
|
+
"connection": "Connexion",
|
|
474
|
+
"empty": "Aucune exécution d’enrichissement pour l’instant. Enrichissez un schéma depuis l’assistant de connexion pour voir l’historique ici.",
|
|
475
|
+
"errorTitle": "Impossible de charger les exécutions",
|
|
476
|
+
"errorBody": "Rechargez la page pour réessayer.",
|
|
477
|
+
"noConnections": "Connectez d’abord une base de données — les exécutions d’enrichissement sont enregistrées par connexion.",
|
|
478
|
+
"byo": "BYO",
|
|
479
|
+
"directPath": "Directe"
|
|
480
|
+
}
|
|
481
|
+
},
|
|
482
|
+
"enrich": {
|
|
483
|
+
"title": "Enrichir avec l’IA",
|
|
484
|
+
"subtitle": "Affinez éventuellement les libellés, groupes, énumérations et tableaux de bord générés à l’aide d’un LLM. La base heuristique fonctionne sans cela — ceci ajoute seulement des suggestions que vous vérifiez avant toute application.",
|
|
485
|
+
"intentLabel": "Comment souhaitez-vous enrichir ?",
|
|
486
|
+
"sectionsLegend": "Que doit décider l’IA ?",
|
|
487
|
+
"localesLegend": "Traduire les libellés en",
|
|
488
|
+
"localeLocked": "(requis)",
|
|
489
|
+
"samplingTitle": "Inclure des valeurs d’exemple",
|
|
490
|
+
"samplingHint": "Inclut jusqu’à 20 valeurs réelles par colonne non-PII dans l’invite.",
|
|
491
|
+
"samplingPreviewTitle": "Ce qui quitte cette machine",
|
|
492
|
+
"samplingPreviewBody": "Jusqu’à 20 valeurs les plus fréquentes par colonne non-PII, plus min/max pour les colonnes numériques et de date. Les colonnes marquées PII ne sont jamais échantillonnées. Tout le reste demeure purement agrégé. Vérifiez l’invite exacte avant de copier (BYO) — rien n’est envoyé sans votre action.",
|
|
493
|
+
"noSections": "Sélectionnez au moins un groupe de décisions à enrichir.",
|
|
494
|
+
"generatePrompt": "Générer l’invite",
|
|
495
|
+
"startProvider": "Démarrer l’enrichissement",
|
|
496
|
+
"startOver": "Recommencer",
|
|
497
|
+
"copied": "Copié",
|
|
498
|
+
"createFailed": "Impossible de construire l’invite d’enrichissement — réessayez.",
|
|
499
|
+
"createFailedTitle": "Impossible de démarrer",
|
|
500
|
+
"providerFallback": "votre fournisseur d’IA",
|
|
501
|
+
"fileTitle": "L’enrichissement par IA nécessite une base de données active",
|
|
502
|
+
"fileBody": "Les sources de type fichier de schéma n’ont pas encore d’instantané à enrichir. Connectez une base de données active pour utiliser l’enrichissement par IA, ou continuez — la base heuristique génère tout de même une application complète.",
|
|
503
|
+
"section": {
|
|
504
|
+
"labels": "Libellés et descriptions",
|
|
505
|
+
"groups": "Groupes de navigation",
|
|
506
|
+
"enums": "Sémantique des énumérations",
|
|
507
|
+
"relations": "Relations",
|
|
508
|
+
"keys": "Colonnes clés",
|
|
509
|
+
"templates": "Modèles de page",
|
|
510
|
+
"widgets": "Widgets de tableau de bord",
|
|
511
|
+
"pii": "PII et masquage",
|
|
512
|
+
"icons": "Icônes",
|
|
513
|
+
"microcopy": "Microcopie"
|
|
514
|
+
},
|
|
515
|
+
"provider": {
|
|
516
|
+
"title": "Utiliser mon fournisseur d’IA",
|
|
517
|
+
"description": "Lancez l’enrichissement maintenant avec votre fournisseur configuré. Vous vérifiez chaque suggestion sous forme de diff.",
|
|
518
|
+
"unconfigured": "Aucun fournisseur d’IA n’est encore configuré — copiez une invite dans votre propre outil ci-dessous, ou configurez d’abord un fournisseur.",
|
|
519
|
+
"settingsHint": "Vous voulez le lancer directement ?",
|
|
520
|
+
"settingsLink": "Configurer un fournisseur dans Paramètres → IA",
|
|
521
|
+
"networkDisabled": "Cet Adminium n'a pas d'accès Internet sortant : il ne peut joindre aucune API de fournisseur. Utilisez plutôt l'aller-retour copier-coller — même invite, même revue."
|
|
522
|
+
},
|
|
523
|
+
"byo": {
|
|
524
|
+
"cardTitle": "Copier une invite vers mon propre outil d’IA",
|
|
525
|
+
"cardDescription": "Copiez une invite autonome dans Claude Code, ChatGPT, n’importe quoi — puis recollez le JSON. Aucune clé nécessaire, rien ne quitte cette machine automatiquement.",
|
|
526
|
+
"guidance": "Exécutez ceci dans n’importe quel outil d’IA — Claude Code, ChatGPT, peu importe. Collez le JSON renvoyé ci-dessous.",
|
|
527
|
+
"promptLabel": "Invite d’enrichissement",
|
|
528
|
+
"promptLabelN": "Invite d’enrichissement {index} sur {total}",
|
|
529
|
+
"tokenChip": "≈ {tokens} jetons",
|
|
530
|
+
"copyPrompt": "Copier l’invite",
|
|
531
|
+
"copyPromptDone": "Invite copiée",
|
|
532
|
+
"download": "Télécharger .md",
|
|
533
|
+
"chunkTabs": "Segments d’invite",
|
|
534
|
+
"chunkTab": "Invite {index}",
|
|
535
|
+
"chunkValid": "Segment {index} validé",
|
|
536
|
+
"pasteLabel": "Collez la réponse JSON",
|
|
537
|
+
"pastePlaceholder": "Collez la réponse JSON ici…",
|
|
538
|
+
"validate": "Valider",
|
|
539
|
+
"valid": "Réponse validée",
|
|
540
|
+
"mergedTitle": "Les {count} segments sont validés et fusionnés",
|
|
541
|
+
"mergedTitleSingle": "Réponse validée",
|
|
542
|
+
"mergedBody": "Les suggestions sont prêtes à être vérifiées par rapport à la base heuristique.",
|
|
543
|
+
"errorsTitle": "La validation a trouvé {count} problèmes",
|
|
544
|
+
"copyErrors": "Copier les erreurs pour votre outil d’IA",
|
|
545
|
+
"copyErrorsDone": "Erreurs copiées",
|
|
546
|
+
"copyErrorsHint": "Recollez ceci dans votre outil d’IA pour obtenir une réponse corrigée.",
|
|
547
|
+
"droppedItems": "{count} suggestions ont été écartées lors de la validation — la vérification montre le reste.",
|
|
548
|
+
"pendingTitle": "Validez chaque invite pour continuer",
|
|
549
|
+
"pendingBody": "Collez la réponse JSON ci-dessus et validez-la pour passer à la vérification.",
|
|
550
|
+
"pendingBodyChunked": "Chaque segment doit être validé avant la fusion des suggestions. Collez et validez chaque invite ci-dessus.",
|
|
551
|
+
"requestFailed": "Impossible de joindre le serveur pour valider — réessayez.",
|
|
552
|
+
"continueReview": "Continuer vers la vérification",
|
|
553
|
+
"wholeDocument": "document entier",
|
|
554
|
+
"cardTitleRecommended": "Copier une invite vers mon propre outil IA — recommandé"
|
|
555
|
+
},
|
|
556
|
+
"direct": {
|
|
557
|
+
"title": "Enrichissement par IA",
|
|
558
|
+
"subtitle": "Envoi de votre schéma à",
|
|
559
|
+
"building": "Construction de l’invite…",
|
|
560
|
+
"logLabel": "Journal d’enrichissement",
|
|
561
|
+
"cancel": "Annuler",
|
|
562
|
+
"back": "Retour aux options",
|
|
563
|
+
"retry": "Réessayer",
|
|
564
|
+
"done": "Enrichissement terminé — vérifiez les suggestions.",
|
|
565
|
+
"continueReview": "Continuer vers la vérification",
|
|
566
|
+
"failed": "L’exécution du fournisseur a échoué. Vérifiez vos paramètres d’IA et réessayez.",
|
|
567
|
+
"jobFailed": "L’exécution de l’enrichissement ne s’est pas terminée.",
|
|
568
|
+
"startFailed": "Impossible de démarrer l’exécution — réessayez.",
|
|
569
|
+
"errorTitle": "Échec de l’enrichissement"
|
|
570
|
+
},
|
|
571
|
+
"skip": {
|
|
572
|
+
"title": "Ignorer — utiliser uniquement l’heuristique",
|
|
573
|
+
"description": "Générer à partir de la base heuristique. Vous pourrez enrichir plus tard depuis Paramètres → IA — ignorer n’est jamais pénalisé.",
|
|
574
|
+
"confirmTitle": "Poursuite avec l’heuristique",
|
|
575
|
+
"confirmBody": "L’application générée utilisera les libellés, groupes et tableaux de bord heuristiques. Continuez la génération — vous pouvez lancer l’enrichissement par IA à tout moment depuis Paramètres → IA."
|
|
576
|
+
}
|
|
577
|
+
},
|
|
578
|
+
"review": {
|
|
579
|
+
"unavailableTitle": "Écran de revue indisponible",
|
|
580
|
+
"unavailableBody": "Cette version n’inclut pas encore l’écran de revue d’enrichissement (06-T14). Il arrive avec le flux diff-et-application."
|
|
581
|
+
},
|
|
582
|
+
"llmRuns": {
|
|
583
|
+
"review": {
|
|
584
|
+
"header": {
|
|
585
|
+
"title": "Examiner les suggestions de l’IA",
|
|
586
|
+
"model": "Modèle",
|
|
587
|
+
"snapshot": "Instantané",
|
|
588
|
+
"byo": "BYO",
|
|
589
|
+
"pathDirect": "API directe",
|
|
590
|
+
"pathByo": "Copier-coller",
|
|
591
|
+
"agree": "{n} d’accord",
|
|
592
|
+
"conflict": "{n} en conflit",
|
|
593
|
+
"new": "{n} nouvelles",
|
|
594
|
+
"rejects": "{n} rejets",
|
|
595
|
+
"countsAria": "Nombre de suggestions"
|
|
596
|
+
},
|
|
597
|
+
"bulk": {
|
|
598
|
+
"thresholdLabel": "Seuil de confiance",
|
|
599
|
+
"thresholdAria": "Seuil de confiance pour « Tout accepter »",
|
|
600
|
+
"acceptAll": "Tout accepter ≥ {pct}%",
|
|
601
|
+
"clear": "Effacer la sélection"
|
|
602
|
+
},
|
|
603
|
+
"section": {
|
|
604
|
+
"selectAllAria": "Tout sélectionner dans {group}",
|
|
605
|
+
"acceptedCount": "{n} acceptées"
|
|
606
|
+
},
|
|
607
|
+
"group": {
|
|
608
|
+
"labels": "Libellés et traductions",
|
|
609
|
+
"navigation": "Navigation et domaines",
|
|
610
|
+
"enums": "Sémantique des énumérations",
|
|
611
|
+
"relations": "Relations",
|
|
612
|
+
"keys": "Colonnes clés",
|
|
613
|
+
"templates": "Modèles de page",
|
|
614
|
+
"dashboards": "Tableaux de bord et widgets",
|
|
615
|
+
"pii": "DCP et masquage",
|
|
616
|
+
"icons": "Icônes",
|
|
617
|
+
"microcopy": "Microcopie"
|
|
618
|
+
},
|
|
619
|
+
"status": {
|
|
620
|
+
"agree": "Concorde",
|
|
621
|
+
"conflict": "Conflit",
|
|
622
|
+
"new": "Nouveau",
|
|
623
|
+
"heuristicOnly": "Heuristique seule",
|
|
624
|
+
"rejects": "Rejette l’heuristique",
|
|
625
|
+
"locked": "Verrouillé"
|
|
626
|
+
},
|
|
627
|
+
"row": {
|
|
628
|
+
"acceptAria": "Accepter la suggestion {noun} pour {target}",
|
|
629
|
+
"keptEdited": "conservé — modifié par vous",
|
|
630
|
+
"rejectsCallout": "L’IA rejette une décision heuristique — confirmez avant d’accepter.",
|
|
631
|
+
"showTranslations": "Afficher les traductions",
|
|
632
|
+
"hideTranslations": "Masquer les traductions",
|
|
633
|
+
"confidenceAria": "Confiance {pct}%",
|
|
634
|
+
"noAi": "Aucune suggestion de l’IA"
|
|
635
|
+
},
|
|
636
|
+
"value": {
|
|
637
|
+
"none": "Aucune valeur",
|
|
638
|
+
"absent": "Aucun",
|
|
639
|
+
"dash": "—",
|
|
640
|
+
"display": "Affichage",
|
|
641
|
+
"key": "Clé",
|
|
642
|
+
"rank": "rang {n}",
|
|
643
|
+
"span": "largeur {n}",
|
|
644
|
+
"tableCount": "{n} tables",
|
|
645
|
+
"widgetCount": "{n} widgets",
|
|
646
|
+
"enumWorkflow": "Flux",
|
|
647
|
+
"enumCategory": "Catégorie",
|
|
648
|
+
"notPii": "Pas de DCP",
|
|
649
|
+
"label": "Libellé",
|
|
650
|
+
"description": "Description",
|
|
651
|
+
"subtitle": "Sous-titre de page",
|
|
652
|
+
"headline": "Titre de l’état vide",
|
|
653
|
+
"guidance": "Conseil de l’état vide"
|
|
654
|
+
},
|
|
655
|
+
"apply": {
|
|
656
|
+
"title": "Appliquer {n} suggestions",
|
|
657
|
+
"subtitle": "Ces modifications sont écrites en une seule transaction et peuvent être annulées.",
|
|
658
|
+
"empty": "Rien à appliquer.",
|
|
659
|
+
"confirm": "Appliquer les modifications"
|
|
660
|
+
},
|
|
661
|
+
"footer": {
|
|
662
|
+
"count": "{n} suggestions sélectionnées",
|
|
663
|
+
"apply": "Appliquer {n} suggestions acceptées",
|
|
664
|
+
"failed": "Échec de l’application"
|
|
665
|
+
},
|
|
666
|
+
"toast": {
|
|
667
|
+
"applied": "{n} suggestions appliquées",
|
|
668
|
+
"appliedPartial": "{n} suggestions appliquées (certaines ignorées)",
|
|
669
|
+
"applyFailed": "Impossible d’appliquer les suggestions",
|
|
670
|
+
"undoFailed": "Impossible d’annuler cette modification"
|
|
671
|
+
},
|
|
672
|
+
"error": {
|
|
673
|
+
"title": "Impossible de charger cette exécution"
|
|
674
|
+
},
|
|
675
|
+
"notReady": {
|
|
676
|
+
"title": "Cette exécution n’a pas encore de suggestions à examiner",
|
|
677
|
+
"body": "Une exécution doit être validée avant que ses suggestions puissent être examinées. Générez ou collez d’abord une réponse."
|
|
678
|
+
},
|
|
679
|
+
"applied": {
|
|
680
|
+
"title": "Cette exécution a été appliquée",
|
|
681
|
+
"body": "Les suggestions acceptées ci-dessous sont en lecture seule."
|
|
682
|
+
},
|
|
683
|
+
"empty": {
|
|
684
|
+
"title": "Aucune suggestion",
|
|
685
|
+
"body": "Cette exécution n’a produit aucune suggestion à examiner."
|
|
686
|
+
},
|
|
687
|
+
"cat": {
|
|
688
|
+
"label": "libellé",
|
|
689
|
+
"key": "colonnes clés",
|
|
690
|
+
"enum": "énumération",
|
|
691
|
+
"relation": "relation",
|
|
692
|
+
"pii": "DCP",
|
|
693
|
+
"template": "modèle de page",
|
|
694
|
+
"group": "groupe de navigation",
|
|
695
|
+
"dashboard": "tableau de bord",
|
|
696
|
+
"widget": "widget",
|
|
697
|
+
"copy": "microcopie"
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
},
|
|
701
|
+
"wizard": {
|
|
702
|
+
"title": "Nouvelle connexion",
|
|
703
|
+
"back": "Retour",
|
|
704
|
+
"continue": "Continuer",
|
|
705
|
+
"progress": "Progression de la configuration",
|
|
706
|
+
"persistFailed": "Impossible d’enregistrer votre sélection de tables — réessayez.",
|
|
707
|
+
"persistFailedTitle": "Échec de l’enregistrement",
|
|
708
|
+
"bridgeAppliedTitle": "Chaîne de connexion reçue",
|
|
709
|
+
"bridgeAppliedBody": "Transmise depuis adminium.dev par votre navigateur — elle est allée directement à cette machine et n’a jamais été téléversée. Vérifiez-la ci-dessous, puis continuez.",
|
|
710
|
+
"bridgeFailedTitle": "Ce transfert n’a pas pu être utilisé",
|
|
711
|
+
"bridgeFailedBody": "Il a déjà été utilisé ou a expiré. Collez plutôt votre chaîne de connexion ci-dessous.",
|
|
712
|
+
"step": {
|
|
713
|
+
"source": "Source",
|
|
714
|
+
"test": "Analyser",
|
|
715
|
+
"tables": "Tables",
|
|
716
|
+
"meta": "Stockage méta",
|
|
717
|
+
"intent": "Intention",
|
|
718
|
+
"enrich": "Enrichir",
|
|
719
|
+
"generate": "Générer"
|
|
720
|
+
}
|
|
721
|
+
},
|
|
722
|
+
"meta": {
|
|
723
|
+
"title": "Où Adminium doit-il ranger ses propres tables ?",
|
|
724
|
+
"subtitle": "Pages, rôles, journal d’audit et paramètres vivent dans des tables préfixées adminium_ — jamais mêlés à vos données.",
|
|
725
|
+
"sameDb": {
|
|
726
|
+
"title": "Même base de données",
|
|
727
|
+
"description": "Les tables adminium_* sont créées à côté de vos tables sources. La configuration la plus simple — nécessite un rôle avec droits d’écriture et CREATE TABLE.",
|
|
728
|
+
"disabledReadOnly": "Votre rôle est en lecture seule — Adminium n’écrit jamais dans cette base. Choisissez une base séparée pour les tables d’Adminium.",
|
|
729
|
+
"disabledNoDdl": "Ce rôle ne peut pas exécuter de DDL — les migrations d’Adminium exigent CREATE TABLE. Choisissez une base séparée pour les tables d’Adminium.",
|
|
730
|
+
"disabledFile": "Un fichier de schéma n’a pas de base active — choisissez une base séparée pour les tables d’Adminium."
|
|
731
|
+
},
|
|
732
|
+
"separate": {
|
|
733
|
+
"title": "Base de données séparée",
|
|
734
|
+
"description": "Adminium garde ses tables dans une autre base. Votre source reste intacte — requis pour les sources en lecture seule.",
|
|
735
|
+
"dsn": "Chaîne de connexion de la base méta",
|
|
736
|
+
"helper": "Nécessite des droits d’écriture + DDL — Adminium y exécute ses propres migrations.",
|
|
737
|
+
"test": "Tester la connexion",
|
|
738
|
+
"ok": "Compatible — écriture ✓ · DDL ✓",
|
|
739
|
+
"insufficient": "Ce rôle ne peut pas héberger le magasin méta — Adminium y a besoin des droits d’écriture et CREATE TABLE.",
|
|
740
|
+
"errorTitle": "Magasin méta incompatible"
|
|
741
|
+
},
|
|
742
|
+
"testFailed": "Échec de la connexion.",
|
|
743
|
+
"v1Note": {
|
|
744
|
+
"title": "À propos de cette installation",
|
|
745
|
+
"body": "Ce serveur garde déjà ses propres tables dans une base configurée, et cette étape ne les déplace pas. Elle vérifie que votre choix est compatible avec cette connexion — le serveur applique la même règle indépendamment (409 META_PLACEMENT_INVALID)."
|
|
746
|
+
},
|
|
747
|
+
"move": {
|
|
748
|
+
"title": "Déplacement des tables d’Adminium",
|
|
749
|
+
"copying": "Déplacement des tables d’Adminium…",
|
|
750
|
+
"restarting": "Redémarrage…",
|
|
751
|
+
"copyingBody": "Copie de chaque table adminium_ vers la nouvelle base. Vos données sources ne sont pas touchées, et rien n’est basculé tant que la copie n’est pas vérifiée.",
|
|
752
|
+
"restartingBody": "La copie est terminée. Adminium redémarre sur la nouvelle base — cette page continuera d’elle-même dans quelques secondes.",
|
|
753
|
+
"failed": "Impossible de déplacer les tables d’Adminium — réessayez.",
|
|
754
|
+
"timeout": "Adminium a déplacé ses tables mais n’est pas encore revenu. Vos données sont en sécurité dans la nouvelle base — rechargez cette page dans un instant."
|
|
755
|
+
},
|
|
756
|
+
"willMove": {
|
|
757
|
+
"title": "Cette étape va déplacer les tables d’Adminium",
|
|
758
|
+
"body": "Adminium utilise actuellement son magasin SQLite intégré. « Continuer » copie ce magasin dans la base choisie et redémarre dessus — comptes, pages et paramètres suivent, vous restez connecté."
|
|
759
|
+
}
|
|
760
|
+
},
|
|
761
|
+
"intent": {
|
|
762
|
+
"title": "De quoi avez-vous besoin ?",
|
|
763
|
+
"subtitle": "L’intention détermine quelles pages sont générées. Vous pourrez la changer plus tard — la changer propose une régénération, jamais une réécriture silencieuse.",
|
|
764
|
+
"trust": "Nous ne lisons que votre schéma — jamais vos données de lignes pendant la configuration.",
|
|
765
|
+
"fullAdmin": {
|
|
766
|
+
"title": "Panneau d’administration complet",
|
|
767
|
+
"description": "Tableaux de bord, pages CRUD, recherche, imports et exports — tout ce que votre schéma permet."
|
|
768
|
+
},
|
|
769
|
+
"analytics": {
|
|
770
|
+
"title": "Analytique en lecture seule",
|
|
771
|
+
"description": "Tableaux de bord, graphiques et grilles en lecture seule. Pas de formulaires, pas d’écritures — chaque rôle plafonné à Lecteur."
|
|
772
|
+
},
|
|
773
|
+
"crud": {
|
|
774
|
+
"title": "Tables CRUD",
|
|
775
|
+
"description": "Une page d’édition par table plus recherche et import/export — un accueil minimal, sans tableaux de bord."
|
|
776
|
+
},
|
|
777
|
+
"support": {
|
|
778
|
+
"title": "Console de support",
|
|
779
|
+
"description": "Files d’attente, pages de tickets et de fiches clients d’abord. Suppressions désactivées par défaut. (Les modèles de files arrivent en M7 — l’ensemble de pages v1 correspond à l’admin complet.)"
|
|
780
|
+
}
|
|
781
|
+
},
|
|
782
|
+
"generate": {
|
|
783
|
+
"title": "Générez votre application",
|
|
784
|
+
"subtitle": "Une page par table incluse plus des tableaux de bord par domaine — intention :",
|
|
785
|
+
"run": "Générer le tableau de bord",
|
|
786
|
+
"openApp": "Ouvrir votre application",
|
|
787
|
+
"logLabel": "Journal de génération",
|
|
788
|
+
"log": {
|
|
789
|
+
"classifying": "Classification du schéma…",
|
|
790
|
+
"composing": "Composition des modèles…",
|
|
791
|
+
"writing": "Écriture des pages…",
|
|
792
|
+
"done": "{pages} pages générées dans {groups} groupes de navigation"
|
|
793
|
+
},
|
|
794
|
+
"successTitle": "Votre tableau de bord est prêt",
|
|
795
|
+
"successBody": "{pages} pages dans {groups} groupes de navigation — générées depuis votre schéma, modifiables dans le Studio.",
|
|
796
|
+
"errorTitle": "Échec de la génération",
|
|
797
|
+
"failed": "Échec de la génération — réessayez, ou relancez d’abord l’introspection.",
|
|
798
|
+
"fileTitle": "Fichier de schéma analysé — la génération nécessite une base active",
|
|
799
|
+
"fileBody": "Votre schéma a été analysé proprement et l’aperçu ci-dessus est réel. Générer une application fonctionnelle directement depuis un fichier de schéma (avec des lignes fictives) n’est pas encore disponible — connectez une base active pour générer dès aujourd’hui."
|
|
800
|
+
},
|
|
801
|
+
"remap": {
|
|
802
|
+
"column": {
|
|
803
|
+
"nullable": "nullable",
|
|
804
|
+
"labelOverride": "Libellé d’affichage",
|
|
805
|
+
"labelHelper": "Inféré : {name}",
|
|
806
|
+
"logicalType": "Type logique",
|
|
807
|
+
"logicalTypeHelper": "Inféré : {type} (depuis {dbType}) — mappé par l’adaptateur ; non remplaçable en v1.",
|
|
808
|
+
"semantic": "Type sémantique",
|
|
809
|
+
"unclassified": "Pas encore classifié.",
|
|
810
|
+
"semanticHelper": "Classificateur : {tag} · confiance {confidence}% · source : {source}",
|
|
811
|
+
"semanticInferred": "inféré : {tag}",
|
|
812
|
+
"currency": "Devise",
|
|
813
|
+
"currencyHelper": "Code ISO 4217 appliqué au formatage monétaire.",
|
|
814
|
+
"pii": "Masquer par défaut",
|
|
815
|
+
"piiHelper": "Les valeurs masquées s’affichent caviardées ; le démasquage requiert la permission data.unmask_pii et est consigné dans le journal d’audit.",
|
|
816
|
+
"enum": "Sémantique de l’énumération",
|
|
817
|
+
"enumKind": "Nature de l’énumération",
|
|
818
|
+
"enumWorkflow": "Flux",
|
|
819
|
+
"enumCategory": "Catégorie",
|
|
820
|
+
"enumLabelFor": "Libellé pour {value}",
|
|
821
|
+
"enumToneFor": "Tonalité pour {value}",
|
|
822
|
+
"enumToneAuto": "auto",
|
|
823
|
+
"enumHelper": "Les énumérations de flux pilotent les pastilles de statut et les colonnes de tableau ; les tonalités associent les valeurs à l’échelle de teintes sémantiques."
|
|
824
|
+
},
|
|
825
|
+
"diff": {
|
|
826
|
+
"one": "1 modification",
|
|
827
|
+
"count": "{count} modifications",
|
|
828
|
+
"saved": "Remplacements enregistrés.",
|
|
829
|
+
"revertOne": "Annuler {change}",
|
|
830
|
+
"regenerate": "Régénérer les pages",
|
|
831
|
+
"revertAll": "Tout annuler",
|
|
832
|
+
"save": "Enregistrer les remplacements"
|
|
833
|
+
},
|
|
834
|
+
"table": {
|
|
835
|
+
"iconPicker": "Icône de la table",
|
|
836
|
+
"system": "Système",
|
|
837
|
+
"labelOverride": "Libellé d’affichage",
|
|
838
|
+
"labelHelper": "Inféré : {name}",
|
|
839
|
+
"icon": "Icône",
|
|
840
|
+
"navGroup": "Groupe de navigation",
|
|
841
|
+
"navGroupHelper": "Le placement dans la navigation est décidé par le générateur — un remplacement table.navGroup ne fait pas partie du vocabulaire v1.",
|
|
842
|
+
"include": "Inclure dans l’application générée",
|
|
843
|
+
"includeHelper": "Les tables exclues n’ont aucune page et disparaissent de la navigation.",
|
|
844
|
+
"shape": "Forme de la table (classifiée)",
|
|
845
|
+
"role": "Rôle",
|
|
846
|
+
"unclassified": "Non classifiée",
|
|
847
|
+
"kind": "Nature",
|
|
848
|
+
"hierarchy": "Hiérarchie",
|
|
849
|
+
"selfFk": "Auto-référence via {column}",
|
|
850
|
+
"polymorphic": "Paires polymorphes",
|
|
851
|
+
"rows": "Estimation du nombre de lignes",
|
|
852
|
+
"shapeHelper": "La classification est recalculée à chaque introspection ; les remplacements se superposent et survivent à la régénération."
|
|
853
|
+
},
|
|
854
|
+
"relations": {
|
|
855
|
+
"declared": "Clés étrangères déclarées",
|
|
856
|
+
"noneDeclared": "Aucune clé étrangère déclarée ne touche cette table.",
|
|
857
|
+
"inferred": "Relations inférées",
|
|
858
|
+
"noneInferred": "Rien d’inféré pour cette table.",
|
|
859
|
+
"confidence": "inférée · {pct}%",
|
|
860
|
+
"accepted": "Acceptée",
|
|
861
|
+
"suppressed": "Écartée",
|
|
862
|
+
"accept": "Accepter",
|
|
863
|
+
"suppress": "Écarter",
|
|
864
|
+
"overrides": "Relations de remplacement (appliquées)",
|
|
865
|
+
"overrideBadge": "remplacement",
|
|
866
|
+
"add": "Ajouter une relation virtuelle",
|
|
867
|
+
"fromColumn": "Colonne source",
|
|
868
|
+
"noColumns": "Aucune colonne correspondante",
|
|
869
|
+
"fromPlaceholder": "customer_id",
|
|
870
|
+
"toTable": "Table cible",
|
|
871
|
+
"noTables": "Aucune table correspondante",
|
|
872
|
+
"toColumn": "Colonne cible",
|
|
873
|
+
"cardinality": "Cardinalité",
|
|
874
|
+
"addButton": "Ajouter la relation"
|
|
875
|
+
},
|
|
876
|
+
"toast": {
|
|
877
|
+
"saved": "Remplacements de schéma enregistrés",
|
|
878
|
+
"savedDetail": "Le schéma appliqué ci-dessous reflète vos modifications.",
|
|
879
|
+
"regenerated": "{created} créées · {updated} mises à jour · {unchanged} inchangées",
|
|
880
|
+
"regeneratedDetail": "Les pages que vous avez modifiées à la main sont préservées — seules les pages dont le generated_hash est intact ont été régénérées sur place.",
|
|
881
|
+
"regenerateFailed": "Échec de la régénération"
|
|
882
|
+
},
|
|
883
|
+
"title": "Remappage du schéma",
|
|
884
|
+
"subtitle": "{tables} tables · {applied} remplacements appliqués",
|
|
885
|
+
"saveFailed": "Échec de l’enregistrement : {message}",
|
|
886
|
+
"loadFailed": "Impossible de charger le schéma de cette connexion.",
|
|
887
|
+
"inspector": "Inspecteur",
|
|
888
|
+
"empty": {
|
|
889
|
+
"title": "Choisissez une table ou une colonne",
|
|
890
|
+
"description": "Sélectionnez un élément dans l’arborescence du schéma pour remapper son libellé, son type, ses relations ou son masquage."
|
|
891
|
+
},
|
|
892
|
+
"tabs": {
|
|
893
|
+
"details": "Détails",
|
|
894
|
+
"relations": "Relations"
|
|
895
|
+
},
|
|
896
|
+
"tree": {
|
|
897
|
+
"label": "Schéma",
|
|
898
|
+
"search": "Rechercher des tables et des colonnes",
|
|
899
|
+
"searchPlaceholder": "Rechercher des tables…",
|
|
900
|
+
"noMatches": "Aucune table ne correspond à votre recherche.",
|
|
901
|
+
"collapse": "Replier la table",
|
|
902
|
+
"expand": "Déplier la table",
|
|
903
|
+
"unsaved": "Modification non enregistrée",
|
|
904
|
+
"excluded": "Exclue"
|
|
905
|
+
},
|
|
906
|
+
"badge": {
|
|
907
|
+
"pk": "PK",
|
|
908
|
+
"fk": "FK",
|
|
909
|
+
"unique": "UNIQUE",
|
|
910
|
+
"pii": "PII",
|
|
911
|
+
"masked": "Masquée"
|
|
912
|
+
},
|
|
913
|
+
"unavailableTitle": "Éditeur de remappage du schéma indisponible",
|
|
914
|
+
"unavailableBody": "Cette version n’inclut pas encore l’éditeur de remappage (09-T12). Relancez la génération une fois qu’il sera disponible pour remapper les libellés, les types et les relations."
|
|
915
|
+
},
|
|
916
|
+
"publicApi": {
|
|
917
|
+
"error": "Something went wrong",
|
|
918
|
+
"scopes": {
|
|
919
|
+
"deleteTitle": "Delete this scope",
|
|
920
|
+
"deleteBody": "Any page using a key bound to this scope stops loading data. Keys are not deleted — revoke them first if that is what you meant.",
|
|
921
|
+
"deletePrompt": "Type the scope name to confirm",
|
|
922
|
+
"deleteConfirm": "Delete scope",
|
|
923
|
+
"issuesTitle": "This scope did not compile",
|
|
924
|
+
"title": "Scopes",
|
|
925
|
+
"subtitle": "A scope is the whole of what a key may reach — the tables, the exact columns, and a filter the caller can narrow but never remove.",
|
|
926
|
+
"emptyTitle": "No scopes yet",
|
|
927
|
+
"emptyBody": "Create one below. It is checked against your live schema before it is saved.",
|
|
928
|
+
"keyCount": "{count, plural, =0 {no keys} one {# key} other {# keys}}",
|
|
929
|
+
"delete": "Delete",
|
|
930
|
+
"nameLabel": "Name",
|
|
931
|
+
"connectionLabel": "Connection ID",
|
|
932
|
+
"documentLabel": "Scope document",
|
|
933
|
+
"documentHint": "Compiled against your schema when you save. Every column a caller can reach is listed here and nowhere else.",
|
|
934
|
+
"create": "Create scope",
|
|
935
|
+
"formLabel": "Create a scope"
|
|
936
|
+
},
|
|
937
|
+
"cancel": "Cancel",
|
|
938
|
+
"close": "Close",
|
|
939
|
+
"title": "Public API",
|
|
940
|
+
"subtitle": "Let your own customer- or staff-facing pages read this database, through a scope you define.",
|
|
941
|
+
"notRegistered": {
|
|
942
|
+
"title": "Not enabled on this server",
|
|
943
|
+
"body": "Set ADMINIUM_PUBLIC_API_ORIGINS to the exact origins allowed to call it, then restart. Until then these routes are not served at all."
|
|
944
|
+
},
|
|
945
|
+
"toggle": {
|
|
946
|
+
"label": "Serve the public API",
|
|
947
|
+
"hint": "Turning this off stops every public request immediately. Nothing is deleted — keys, scopes and data all survive."
|
|
948
|
+
},
|
|
949
|
+
"origins": {
|
|
950
|
+
"label": "Origins allowed to call it"
|
|
951
|
+
},
|
|
952
|
+
"keys": {
|
|
953
|
+
"title": "Keys",
|
|
954
|
+
"subtitle": "These go in your page’s JavaScript, so anyone can read them. That is expected — a key can only ever do what its scope allows.",
|
|
955
|
+
"emptyTitle": "No keys yet",
|
|
956
|
+
"emptyBody": "Create a scope first, then mint a key for it.",
|
|
957
|
+
"reveal": "Show key",
|
|
958
|
+
"rotate": "Rotate",
|
|
959
|
+
"revoke": "Revoke",
|
|
960
|
+
"nameLabel": "Name",
|
|
961
|
+
"scopeLabel": "Scope",
|
|
962
|
+
"scopePlaceholder": "Choose a scope",
|
|
963
|
+
"create": "Create key",
|
|
964
|
+
"formLabel": "Create a key",
|
|
965
|
+
"scopeIsAuthTitle": "The scope is the only permission",
|
|
966
|
+
"scopeIsAuthBody": "A key can reach exactly what its scope lists and nothing else. It does not use roles or table permissions, and it cannot read anything through the rest of the API.",
|
|
967
|
+
"appLabel": "Lier à une surface d’app hébergée (facultatif)",
|
|
968
|
+
"appHint": "La surface client de l’app sert alors cette clé elle-même — la faire tourner n’exige aucune recompilation.",
|
|
969
|
+
"appNone": "Non liée"
|
|
970
|
+
},
|
|
971
|
+
"status": {
|
|
972
|
+
"heading": "Status"
|
|
973
|
+
}
|
|
974
|
+
},
|
|
975
|
+
"hostedApps": {
|
|
976
|
+
"title": "Apps hébergées",
|
|
977
|
+
"subtitle": "Les surfaces d’app que cette instance sert — où chacune apparaît, et les domaines qui pointent vers elles.",
|
|
978
|
+
"error": "Un problème est survenu",
|
|
979
|
+
"emptyTitle": "Aucune surface d’app n’est servie",
|
|
980
|
+
"emptyBody": "Pointez ADMINIUM_SURFACES_DIR vers un répertoire de surfaces compilées — un dossier par app et par côté, chacun avec son index.html — puis redémarrez. Elles sont alors servies sous /apps/ et apparaissent ici.",
|
|
981
|
+
"surfaces": {
|
|
982
|
+
"title": "Surfaces",
|
|
983
|
+
"subtitle": "Une surface équipe peut se fondre dans la barre latérale de ce tableau de bord ou rester autonome ; une surface client est publique et lit via sa clé liée.",
|
|
984
|
+
"staff": "Équipe",
|
|
985
|
+
"customer": "Client",
|
|
986
|
+
"noNav": "Placement interne indisponible — recompilez cette surface avec le toolkit actuel pour qu’elle émette surface.json.",
|
|
987
|
+
"noKey": "Aucune clé liée — cette surface ne peut pas lire de données tant qu’une clé n’est pas créée pour elle.",
|
|
988
|
+
"mintLink": "En créer une sous API publique",
|
|
989
|
+
"boundKey": "Sert la clé",
|
|
990
|
+
"placementLabel": "Placement",
|
|
991
|
+
"placementInternal": "Dans la barre latérale (fondue)",
|
|
992
|
+
"placementExternal": "Externe (URL propre uniquement)",
|
|
993
|
+
"connectionLabel": "Lit",
|
|
994
|
+
"connectionUnset": "Celle qui est active"
|
|
995
|
+
},
|
|
996
|
+
"domains": {
|
|
997
|
+
"title": "Domaines",
|
|
998
|
+
"subtitle": "Pointez le DNS d’un domaine vers votre proxy, transmettez l’en-tête Host à Adminium, puis attachez-le ici — cet hôte sert alors la surface au lieu de ce tableau de bord. Les certificats restent sur votre proxy.",
|
|
999
|
+
"issuesTitle": "La carte des domaines a été refusée",
|
|
1000
|
+
"savedTitle": "Enregistré",
|
|
1001
|
+
"savedBody": "Les attributions prennent effet en quelques secondes. Un hôte ne répond que lorsque son DNS et votre proxy atteignent réellement cette instance.",
|
|
1002
|
+
"none": "Aucun domaine attaché.",
|
|
1003
|
+
"hostLabel": "Hôte",
|
|
1004
|
+
"surfaceLabel": "Surface",
|
|
1005
|
+
"remove": "Retirer",
|
|
1006
|
+
"add": "Attacher un domaine",
|
|
1007
|
+
"save": "Enregistrer les domaines",
|
|
1008
|
+
"instanceLabel": "Instance",
|
|
1009
|
+
"instanceOwn": "L'application elle-même"
|
|
1010
|
+
},
|
|
1011
|
+
"instances": {
|
|
1012
|
+
"title": "Instances",
|
|
1013
|
+
"body": "Servir la même application sur plusieurs bases. Chaque instance est accessible à /apps/<app>/<segment>/<côté>/ et ne lit que la connexion que vous lui donnez.",
|
|
1014
|
+
"appLabel": "Application",
|
|
1015
|
+
"slugLabel": "Segment d'URL",
|
|
1016
|
+
"readsLabel": "Lit",
|
|
1017
|
+
"add": "Ajouter une instance",
|
|
1018
|
+
"save": "Enregistrer les instances",
|
|
1019
|
+
"remove": "Retirer",
|
|
1020
|
+
"empty": "Aucune instance supplémentaire.",
|
|
1021
|
+
"failed": "Les instances n'ont pas été enregistrées"
|
|
1022
|
+
}
|
|
1023
|
+
},
|
|
1024
|
+
"addOns": {
|
|
1025
|
+
"plan": {
|
|
1026
|
+
"blocked": "Impossible d’installer ici",
|
|
1027
|
+
"needsColumns": "Ce module a besoin de colonnes que vous n’avez pas",
|
|
1028
|
+
"needsColumnsBody": "Adminium n’ajoute pas de colonnes aux tables qui vous appartiennent déjà. Ajoutez-les vous-même, puis installez.",
|
|
1029
|
+
"willCreate": "Cela créera des tables dans votre base de données",
|
|
1030
|
+
"willCreateBody": "L’installation crée ces tables. Une désinstallation ultérieure les laisse intactes, ainsi que leurs données.",
|
|
1031
|
+
"noData": "Ce module ne lit ni n’écrit de tables qui lui soient propres.",
|
|
1032
|
+
"reuse": "Ce module utilisera des tables que vous avez déjà :"
|
|
1033
|
+
},
|
|
1034
|
+
"consent": {
|
|
1035
|
+
"title": "Installer {name}",
|
|
1036
|
+
"subtitle": "Ce que ce module fera, avant qu’il puisse le faire.",
|
|
1037
|
+
"close": "Fermer",
|
|
1038
|
+
"loading": "Analyse de ce que cela ferait…",
|
|
1039
|
+
"hosts": "Attacher à",
|
|
1040
|
+
"cancel": "Annuler",
|
|
1041
|
+
"confirm": "Installer"
|
|
1042
|
+
},
|
|
1043
|
+
"connect": {
|
|
1044
|
+
"apiKey": "Clé API",
|
|
1045
|
+
"submit": "Connecter"
|
|
1046
|
+
},
|
|
1047
|
+
"title": "Modules",
|
|
1048
|
+
"subtitle": "Des capacités supplémentaires pour vos applications — expédition, graphisme, données. Chacune indique ce dont elle a besoin avant l’installation.",
|
|
1049
|
+
"error": "Une erreur est survenue",
|
|
1050
|
+
"browse": {
|
|
1051
|
+
"title": "Disponibles",
|
|
1052
|
+
"online": "Inclut les modules du catalogue en ligne. Rechercher des versions plus récentes est une action distincte.",
|
|
1053
|
+
"offline": "Affiche les modules livrés avec cette version. La navigation en ligne est désactivée et rien ici n’a contacté Internet.",
|
|
1054
|
+
"refresh": "Rechercher des nouveautés",
|
|
1055
|
+
"emptyTitle": "Aucun module disponible",
|
|
1056
|
+
"emptyBody": "Cette version n’en contient aucun et le catalogue en ligne est désactivé.",
|
|
1057
|
+
"bundled": "Inclus",
|
|
1058
|
+
"upgrade": "v{version} disponible",
|
|
1059
|
+
"download": "Télécharger",
|
|
1060
|
+
"install": "Installer",
|
|
1061
|
+
"discard": "Supprimer",
|
|
1062
|
+
"upgradeAction": "Mettre à jour",
|
|
1063
|
+
"toggle": "Parcourir le catalogue en ligne"
|
|
1064
|
+
},
|
|
1065
|
+
"installed": {
|
|
1066
|
+
"title": "Installés",
|
|
1067
|
+
"emptyTitle": "Rien d’installé pour l’instant",
|
|
1068
|
+
"emptyBody": "Installez un module ci-dessus et il apparaîtra ici avec ses hôtes et sa connexion.",
|
|
1069
|
+
"connected": "Connecté",
|
|
1070
|
+
"notConnected": "Non connecté",
|
|
1071
|
+
"egress": "Peut contacter : {hosts}",
|
|
1072
|
+
"on": "activé",
|
|
1073
|
+
"off": "désactivé",
|
|
1074
|
+
"disconnect": "Déconnecter",
|
|
1075
|
+
"uninstall": "Désinstaller"
|
|
1076
|
+
},
|
|
1077
|
+
"confirm": {
|
|
1078
|
+
"close": "Fermer",
|
|
1079
|
+
"disconnectTitle": "Déconnecter ce module",
|
|
1080
|
+
"uninstallTitle": "Désinstaller ce module",
|
|
1081
|
+
"discardTitle": "Supprimer ce téléchargement",
|
|
1082
|
+
"disconnectBody": "Ses clés sont supprimées et il cesse ses appels. Chaque table et chaque ligne qu’il a créées restent telles quelles, et vous pouvez le reconnecter à tout moment.",
|
|
1083
|
+
"uninstallBody": "Ses clés sont supprimées et ses fichiers retirés de ce serveur. Chaque table et chaque ligne qu’il a créées restent telles quelles. Vous pourrez le réinstaller plus tard.",
|
|
1084
|
+
"discardBody": "Les fichiers téléchargés sont supprimés. Rien n’a été installé, donc rien d’autre ne change — vous pouvez le retélécharger quand vous voulez.",
|
|
1085
|
+
"cancel": "Annuler",
|
|
1086
|
+
"disconnect": "Déconnecter",
|
|
1087
|
+
"uninstall": "Désinstaller",
|
|
1088
|
+
"discard": "Supprimer"
|
|
1089
|
+
},
|
|
1090
|
+
"upgradeNote": "La mise à jour conserve les hôtes auxquels un module est attaché ainsi que sa connexion existante.",
|
|
1091
|
+
"job": {
|
|
1092
|
+
"title": "Téléchargement",
|
|
1093
|
+
"body": "Récupération et vérification. Rien n’est installé sans votre accord.",
|
|
1094
|
+
"failed": "Le téléchargement ne s’est pas terminé. Rien n’a été installé."
|
|
1095
|
+
},
|
|
1096
|
+
"veto": {
|
|
1097
|
+
"title": "Ce déploiement ne peut pas consulter le catalogue en ligne",
|
|
1098
|
+
"body": "Le réglage est enregistré, mais les fonctions réseau sont coupées sur ce serveur et cela prime. Les modules déjà téléchargés fonctionnent, et vous pouvez en téléverser un."
|
|
1099
|
+
},
|
|
1100
|
+
"sideload": {
|
|
1101
|
+
"title": "Téléverser un paquet",
|
|
1102
|
+
"hint": "Pour un serveur sans internet. Vérifié exactement comme un téléchargement, il lui faut donc l’empreinte fournie.",
|
|
1103
|
+
"file": "Fichier du paquet (.tgz)",
|
|
1104
|
+
"key": "Clé du module",
|
|
1105
|
+
"version": "Version",
|
|
1106
|
+
"sha": "Intégrité (sha512-…)",
|
|
1107
|
+
"shaHint": "La valeur `integrity` affichée par `npm pack --json`. Refusé si les octets n’y correspondent pas.",
|
|
1108
|
+
"submit": "Téléverser"
|
|
1109
|
+
}
|
|
1110
|
+
},
|
|
1111
|
+
"pages": {
|
|
1112
|
+
"title": "Pages",
|
|
1113
|
+
"subtitle": "Ajoutez, modifiez et organisez les pages de votre application, ainsi que leur ordre dans la barre latérale.",
|
|
1114
|
+
"createButton": "Nouvelle page",
|
|
1115
|
+
"loadFailed": {
|
|
1116
|
+
"title": "Impossible de charger les pages",
|
|
1117
|
+
"body": "La gestion des pages requiert l’autorisation « Gérer les pages ». Demandez à un administrateur de l’attribuer à l’un de vos rôles."
|
|
1118
|
+
},
|
|
1119
|
+
"tab": {
|
|
1120
|
+
"pages": "Toutes les pages",
|
|
1121
|
+
"sidebar": "Ordre de la barre latérale"
|
|
1122
|
+
},
|
|
1123
|
+
"list": {
|
|
1124
|
+
"title": "Pages",
|
|
1125
|
+
"count": "{count, plural, one {# page} other {# pages}}"
|
|
1126
|
+
},
|
|
1127
|
+
"empty": {
|
|
1128
|
+
"title": "Aucune page pour l’instant",
|
|
1129
|
+
"body": "Connectez une base de données pour générer des pages automatiquement, ou créez-en une à la main."
|
|
1130
|
+
},
|
|
1131
|
+
"status": {
|
|
1132
|
+
"live": "Active",
|
|
1133
|
+
"hidden": "Masquée"
|
|
1134
|
+
},
|
|
1135
|
+
"origin": {
|
|
1136
|
+
"generated": "Générée",
|
|
1137
|
+
"manifest": "Extension",
|
|
1138
|
+
"llm": "Assistant",
|
|
1139
|
+
"system": "Système",
|
|
1140
|
+
"user": "Personnalisée"
|
|
1141
|
+
},
|
|
1142
|
+
"row": {
|
|
1143
|
+
"menu": "Actions pour {title}"
|
|
1144
|
+
},
|
|
1145
|
+
"action": {
|
|
1146
|
+
"edit": "Modifier la page",
|
|
1147
|
+
"duplicate": "Dupliquer",
|
|
1148
|
+
"hide": "Masquer dans la barre latérale",
|
|
1149
|
+
"show": "Afficher dans la barre latérale",
|
|
1150
|
+
"delete": "Supprimer la page"
|
|
1151
|
+
},
|
|
1152
|
+
"create": {
|
|
1153
|
+
"title": "Nouvelle page",
|
|
1154
|
+
"failed": "Impossible de créer la page",
|
|
1155
|
+
"submit": "Créer la page",
|
|
1156
|
+
"subtitle": "Choisissez ce que cette page affiche et son apparence. L’aperçu suit vos choix."
|
|
1157
|
+
},
|
|
1158
|
+
"duplicate": {
|
|
1159
|
+
"title": "Dupliquer la page",
|
|
1160
|
+
"failed": "Impossible de dupliquer la page",
|
|
1161
|
+
"submit": "Dupliquer"
|
|
1162
|
+
},
|
|
1163
|
+
"delete": {
|
|
1164
|
+
"title": "Supprimer cette page ?",
|
|
1165
|
+
"body": "Cette action est irréversible. Les vues enregistrées et les dispositions personnelles de cette page sont supprimées pour tout le monde.",
|
|
1166
|
+
"bodyGenerated": "Cette page provient de la génération du schéma : elle réapparaîtra à la prochaine génération. Les vues enregistrées et les dispositions personnelles sont supprimées pour tout le monde.",
|
|
1167
|
+
"prompt": "Saisissez {slug} pour confirmer",
|
|
1168
|
+
"confirm": "Supprimer la page"
|
|
1169
|
+
},
|
|
1170
|
+
"field": {
|
|
1171
|
+
"title": "Titre",
|
|
1172
|
+
"titleHint": "Affiché dans la barre latérale et dans l’en-tête de la page.",
|
|
1173
|
+
"slug": "Adresse de la page",
|
|
1174
|
+
"slugHint": "Minuscules, chiffres et tirets. Seulement la dernière partie — le reste de l’adresse est ajouté pour vous.",
|
|
1175
|
+
"slugTaken": "Une autre page utilise déjà cette adresse.",
|
|
1176
|
+
"slugWarning": "Modifier l’adresse casse les liens et les favoris existants vers cette page.",
|
|
1177
|
+
"template": "Modèle",
|
|
1178
|
+
"templateHint": "Détermine ce que la page peut contenir. Modifiable par la suite.",
|
|
1179
|
+
"group": "Groupe de la barre latérale",
|
|
1180
|
+
"groupHint": "La section de la barre latérale où elle apparaît.",
|
|
1181
|
+
"icon": "Icône",
|
|
1182
|
+
"iconHint": "Affichée à côté du nom de la page dans la barre latérale.",
|
|
1183
|
+
"visible": "Afficher dans la barre latérale",
|
|
1184
|
+
"visibleHint": "Une page masquée reste accessible à son URL pour qui possède le lien.",
|
|
1185
|
+
"table": "Table",
|
|
1186
|
+
"tableCreateHint": "La table que cette page lit. Choisissez-en une maintenant et la page est prête à l’emploi ; laissez vide pour la lier plus tard.",
|
|
1187
|
+
"tableNone": "Non liée",
|
|
1188
|
+
"tableNeedsConnection": "Choisissez d’abord une source de données.",
|
|
1189
|
+
"connection": "Source de données",
|
|
1190
|
+
"connectionNone": "Aucune",
|
|
1191
|
+
"iconPick": "Choisir l’icône de la page",
|
|
1192
|
+
"padding": "Marge de la page",
|
|
1193
|
+
"width": "Largeur du contenu",
|
|
1194
|
+
"widthHint": "Largeur maximale de la colonne de contenu de la page sur un grand écran."
|
|
1195
|
+
},
|
|
1196
|
+
"editor": {
|
|
1197
|
+
"title": "Modifier la page",
|
|
1198
|
+
"save": "Enregistrer les modifications",
|
|
1199
|
+
"saveFailed": "Impossible d’enregistrer les modifications",
|
|
1200
|
+
"openPage": "Ouvrir la page",
|
|
1201
|
+
"generated": {
|
|
1202
|
+
"title": "Cette page a été générée à partir de votre schéma",
|
|
1203
|
+
"body": "Vos modifications sont conservées lors d’une nouvelle génération : la page est marquée comme modifiée et laissée intacte. En revanche, une suppression ne tient que jusqu’à ce que la génération suivante la recrée."
|
|
1204
|
+
},
|
|
1205
|
+
"contentUnavailable": "Impossible de charger le contenu de la page",
|
|
1206
|
+
"contentUnavailableBody": "Les informations ci-dessus peuvent tout de même être enregistrées.",
|
|
1207
|
+
"contentInvalid": "La configuration de cette page est illisible",
|
|
1208
|
+
"contentInvalidBody": "Elle provient d’une version plus récente, ou elle est corrompue. Régénérez la page ou supprimez-la.",
|
|
1209
|
+
"data": "Données",
|
|
1210
|
+
"schemaFailed": "Impossible de lister les tables",
|
|
1211
|
+
"schemaFailedBody": "Cette connexion n’a peut-être pas encore été analysée. Lancez l’introspection depuis Studio → Connexions de données.",
|
|
1212
|
+
"notBindable": "Ce modèle n’est pas lié à une seule table",
|
|
1213
|
+
"notBindableBody": "Son contenu se construit widget par widget. Ouvrez la page et utilisez « Modifier » pour les ajouter.",
|
|
1214
|
+
"recompose": "Cette page va être reconstruite",
|
|
1215
|
+
"recomposeBody": "L’enregistrement remplace son contenu par une nouvelle disposition pour le modèle et la table ci-dessus. Les ajustements de colonnes et les modifications de widgets de cette page seront perdus.",
|
|
1216
|
+
"missing": "Cette page n’existe plus",
|
|
1217
|
+
"missingBody": "Elle a peut-être été supprimée, ou retirée par une génération.",
|
|
1218
|
+
"details": "Détails",
|
|
1219
|
+
"itemsPending": "Enregistrez d’abord la modification ci-dessus — le contenu de la page est reconstruit à partir du nouveau modèle et de la nouvelle table.",
|
|
1220
|
+
"columns": "Colonnes",
|
|
1221
|
+
"appearance": "Apparence"
|
|
1222
|
+
},
|
|
1223
|
+
"sidebar": {
|
|
1224
|
+
"help": "Réordonnez les pages au sein d’un groupe, ou déplacez-en une vers un autre groupe. Les changements s’appliquent à tout le monde.",
|
|
1225
|
+
"discard": "Abandonner",
|
|
1226
|
+
"save": "Enregistrer l’ordre",
|
|
1227
|
+
"saveFailed": "Impossible d’enregistrer le nouvel ordre",
|
|
1228
|
+
"emptyGroup": "Aucune page dans ce groupe.",
|
|
1229
|
+
"moveUp": "Monter {title}",
|
|
1230
|
+
"moveDown": "Descendre {title}",
|
|
1231
|
+
"moveTo": "Déplacer {title} vers un groupe",
|
|
1232
|
+
"ungrouped": {
|
|
1233
|
+
"title": "Certaines pages n’appartiennent à aucun groupe",
|
|
1234
|
+
"body": "Ces pages fonctionnent à leur URL mais n’apparaissent nulle part dans la barre latérale. Ouvrez chacune d’elles et choisissez un groupe."
|
|
1235
|
+
}
|
|
1236
|
+
},
|
|
1237
|
+
"columns": {
|
|
1238
|
+
"help": "Glissez pour réordonner les colonnes, renommez leurs en-têtes et choisissez celles qui apparaissent dans le tableau.",
|
|
1239
|
+
"empty": "Pas encore de colonnes — ajoutez-en ci-dessous.",
|
|
1240
|
+
"pk": "Clé",
|
|
1241
|
+
"pii": "PII",
|
|
1242
|
+
"header": "En-tête de {name}",
|
|
1243
|
+
"shown": "Affichée",
|
|
1244
|
+
"toggle": "Afficher {name} dans le tableau",
|
|
1245
|
+
"dragHandle": "Réordonner {name}",
|
|
1246
|
+
"remove": "Retirer {name}",
|
|
1247
|
+
"addOpen": "Ajouter une colonne",
|
|
1248
|
+
"addTitle": "Ajouter une colonne",
|
|
1249
|
+
"addSearch": "Rechercher des colonnes…",
|
|
1250
|
+
"addFromTable": "Depuis {table}",
|
|
1251
|
+
"addFromLinked": "Depuis les tables liées",
|
|
1252
|
+
"addLinkedHelp": "Affiche une valeur de la table vers laquelle pointe une colonne de liaison.",
|
|
1253
|
+
"addVia": "via {column}",
|
|
1254
|
+
"addNoMatches": "Aucune colonne ne correspond à « {query} ».",
|
|
1255
|
+
"followColumn": "Suivre {name}",
|
|
1256
|
+
"addLinkedFrom": "Tables qui pointent ici",
|
|
1257
|
+
"addLinkedFromHelp": "Ajoute le nombre de lignes qui pointent vers chaque enregistrement.",
|
|
1258
|
+
"countBadge": "Nombre",
|
|
1259
|
+
"lookupBadge": "Liée",
|
|
1260
|
+
"lookupBack": "Retour",
|
|
1261
|
+
"lookupBrowse": "Choisissez quoi afficher depuis {table}",
|
|
1262
|
+
"lookupBroken": "Ce lien ne se résout plus",
|
|
1263
|
+
"lookupBrokenBody": "Le schéma a changé pendant votre navigation. Recommencez le lien.",
|
|
1264
|
+
"schemaUnavailable": "Les colonnes de la base n’ont pas pu être listées ; impossible d’ajouter des colonnes ici.",
|
|
1265
|
+
"none": {
|
|
1266
|
+
"title": "Cette page n’a pas encore de colonnes",
|
|
1267
|
+
"body": "Les colonnes sont lues dans la table lors de la génération de la page. Liez cette page à une table puis régénérez pour les renseigner."
|
|
1268
|
+
}
|
|
1269
|
+
},
|
|
1270
|
+
"icon": {
|
|
1271
|
+
"none": "Choisir une icône",
|
|
1272
|
+
"search": "Rechercher des icônes",
|
|
1273
|
+
"noMatches": "Aucune icône ne correspond à cette recherche."
|
|
1274
|
+
},
|
|
1275
|
+
"preview": {
|
|
1276
|
+
"untitled": "Page sans titre",
|
|
1277
|
+
"note": "Une illustration de la disposition, pas de vos données. La vraie page se remplit une fois enregistrée."
|
|
1278
|
+
},
|
|
1279
|
+
"padding": {
|
|
1280
|
+
"default": "Par défaut pour ce modèle",
|
|
1281
|
+
"none": "Aucune",
|
|
1282
|
+
"standard": "Standard (28 × 24)",
|
|
1283
|
+
"custom": "Personnalisée…",
|
|
1284
|
+
"x": "Côtés (px)",
|
|
1285
|
+
"y": "Haut et bas (px)"
|
|
1286
|
+
},
|
|
1287
|
+
"width": {
|
|
1288
|
+
"default": "Valeur par défaut de ce modèle",
|
|
1289
|
+
"narrow": "Étroite (720 px)",
|
|
1290
|
+
"content": "Contenu (900 px)",
|
|
1291
|
+
"page": "Page (1080 px)",
|
|
1292
|
+
"dash": "Tableau de bord (1320 px)",
|
|
1293
|
+
"wide": "Large (1800 px)",
|
|
1294
|
+
"full": "Pleine largeur (sans limite)"
|
|
1295
|
+
}
|
|
16
1296
|
}
|
|
17
1297
|
};
|
|
18
1298
|
//# sourceMappingURL=studio.js.map
|