inicontent 1.0.0

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.
Files changed (205) hide show
  1. package/.github/pull_request.yml +18 -0
  2. package/CONTRIBUTING.md +67 -0
  3. package/LICENSE +21 -0
  4. package/README.md +142 -0
  5. package/app/app.vue +106 -0
  6. package/app/assets/main.css +974 -0
  7. package/app/components/Api/EndpointCard.vue +169 -0
  8. package/app/components/Api/SchemaDocsTable.vue +208 -0
  9. package/app/components/Asset/Card.vue +1363 -0
  10. package/app/components/Asset/Grid.vue +295 -0
  11. package/app/components/Asset/Icon.vue +38 -0
  12. package/app/components/Asset/Preview.vue +486 -0
  13. package/app/components/Asset/Scanner.vue +700 -0
  14. package/app/components/Asset/Thumb.vue +708 -0
  15. package/app/components/Auth/Reset.vue +99 -0
  16. package/app/components/Auth/index.vue +346 -0
  17. package/app/components/ChatInterface.vue +2326 -0
  18. package/app/components/ChatPagePreview.vue +34 -0
  19. package/app/components/Column/Array.vue +29 -0
  20. package/app/components/Column/Asset.vue +21 -0
  21. package/app/components/Column/Boolean.vue +12 -0
  22. package/app/components/Column/Color.vue +9 -0
  23. package/app/components/Column/Date.vue +57 -0
  24. package/app/components/Column/Edit.vue +215 -0
  25. package/app/components/Column/Email.vue +9 -0
  26. package/app/components/Column/Html.vue +27 -0
  27. package/app/components/Column/Id.vue +20 -0
  28. package/app/components/Column/Locale.vue +32 -0
  29. package/app/components/Column/Object.vue +18 -0
  30. package/app/components/Column/Password.vue +7 -0
  31. package/app/components/Column/Role.vue +15 -0
  32. package/app/components/Column/S.vue +14 -0
  33. package/app/components/Column/Table/Single.vue +49 -0
  34. package/app/components/Column/Table/index.vue +42 -0
  35. package/app/components/Column/Tags.vue +31 -0
  36. package/app/components/Column/Text.vue +9 -0
  37. package/app/components/Column/Url.vue +9 -0
  38. package/app/components/Column/index.vue +41 -0
  39. package/app/components/Dashboard/Editor.vue +221 -0
  40. package/app/components/Dashboard/Grid.vue +270 -0
  41. package/app/components/Dashboard/View.vue +131 -0
  42. package/app/components/Dashboard/Widget/BarChart.vue +73 -0
  43. package/app/components/Dashboard/Widget/Counter.vue +51 -0
  44. package/app/components/Dashboard/Widget/LineChart.vue +76 -0
  45. package/app/components/Dashboard/Widget/PieChart.vue +75 -0
  46. package/app/components/Dashboard/Widget/Table.vue +94 -0
  47. package/app/components/Dashboard/WidgetEditor.vue +274 -0
  48. package/app/components/Data/Array.vue +102 -0
  49. package/app/components/Data/Html.vue +9 -0
  50. package/app/components/Data/Icon.vue +9 -0
  51. package/app/components/Data/Object.vue +10 -0
  52. package/app/components/Data/S.vue +16 -0
  53. package/app/components/Data/Table.vue +53 -0
  54. package/app/components/Data/Value.vue +34 -0
  55. package/app/components/Data/index.vue +14 -0
  56. package/app/components/Field/Array.vue +324 -0
  57. package/app/components/Field/Asset/Actions.vue +97 -0
  58. package/app/components/Field/Asset/index.vue +639 -0
  59. package/app/components/Field/Boolean.vue +26 -0
  60. package/app/components/Field/Checkbox.vue +48 -0
  61. package/app/components/Field/Color.vue +27 -0
  62. package/app/components/Field/Date.vue +30 -0
  63. package/app/components/Field/Email.vue +51 -0
  64. package/app/components/Field/EmailTemplate.vue +420 -0
  65. package/app/components/Field/Html/ColorPicker.vue +127 -0
  66. package/app/components/Field/Html/Editor.vue +544 -0
  67. package/app/components/Field/Html/index.vue +25 -0
  68. package/app/components/Field/Icon.vue +114 -0
  69. package/app/components/Field/JSON.vue +113 -0
  70. package/app/components/Field/Mention.vue +36 -0
  71. package/app/components/Field/Number.vue +27 -0
  72. package/app/components/Field/Object.vue +92 -0
  73. package/app/components/Field/Password.vue +55 -0
  74. package/app/components/Field/Radio.vue +47 -0
  75. package/app/components/Field/S.vue +44 -0
  76. package/app/components/Field/Select.vue +49 -0
  77. package/app/components/Field/Table.vue +348 -0
  78. package/app/components/Field/Tags.vue +113 -0
  79. package/app/components/Field/Text.vue +31 -0
  80. package/app/components/Field/Textarea.vue +33 -0
  81. package/app/components/Field/Url.vue +40 -0
  82. package/app/components/Field/Wrapper.vue +128 -0
  83. package/app/components/Field/index.vue +68 -0
  84. package/app/components/FloatingChatbot.vue +73 -0
  85. package/app/components/Form/Card.vue +151 -0
  86. package/app/components/Form/Drawer.vue +195 -0
  87. package/app/components/Form/index.vue +621 -0
  88. package/app/components/Header.vue +328 -0
  89. package/app/components/Offline/ConflictModal.vue +200 -0
  90. package/app/components/Offline/SyncStatus.vue +249 -0
  91. package/app/components/PlatformFeatureLanding.vue +65 -0
  92. package/app/components/Table/Backups.vue +638 -0
  93. package/app/components/Table/Flows.vue +814 -0
  94. package/app/components/Table/Grid.vue +296 -0
  95. package/app/components/Table/Icon.vue +36 -0
  96. package/app/components/Table/Logs.vue +181 -0
  97. package/app/components/Table/Schedules.vue +722 -0
  98. package/app/components/Table/Search/Button.vue +256 -0
  99. package/app/components/Table/Search/Items.vue +286 -0
  100. package/app/components/Table/Search/index.vue +87 -0
  101. package/app/components/Table/Settings/Schema.vue +801 -0
  102. package/app/components/Table/Settings/index.vue +631 -0
  103. package/app/components/Table/TranslateDrawer.vue +526 -0
  104. package/app/components/Table/Views/Kanban.vue +289 -0
  105. package/app/components/Table/Views/Table.vue +1273 -0
  106. package/app/components/Table/index.vue +890 -0
  107. package/app/composables/Translation/define.ts +41 -0
  108. package/app/composables/Translation/fetch.ts +107 -0
  109. package/app/composables/Translation/languages.ts +1 -0
  110. package/app/composables/Translation/loadCoreTranslations.ts +38 -0
  111. package/app/composables/Translation/translate.ts +250 -0
  112. package/app/composables/databaseCookies.ts +79 -0
  113. package/app/composables/fieldValidator.ts +72 -0
  114. package/app/composables/fieldsList.ts +301 -0
  115. package/app/composables/formatDatabase.ts +101 -0
  116. package/app/composables/index.ts +444 -0
  117. package/app/composables/openDrawer.ts +118 -0
  118. package/app/composables/optimizeFile.ts +287 -0
  119. package/app/composables/renderLabel.ts +88 -0
  120. package/app/composables/schemaClipboard.ts +95 -0
  121. package/app/composables/search.ts +353 -0
  122. package/app/composables/setThemeConfig.ts +48 -0
  123. package/app/composables/translationValue.ts +169 -0
  124. package/app/composables/useAssetPreview.ts +84 -0
  125. package/app/composables/useAssetUploader.ts +56 -0
  126. package/app/composables/useDashboardData.ts +310 -0
  127. package/app/composables/useDocumentThumbnail.ts +351 -0
  128. package/app/composables/useEcharts.ts +33 -0
  129. package/app/composables/useLocalDatabaseConfig.ts +51 -0
  130. package/app/composables/useOcr.ts +300 -0
  131. package/app/composables/useOfflineFetch.ts +194 -0
  132. package/app/composables/useOfflineItem.ts +107 -0
  133. package/app/composables/useOfflineQueue.ts +302 -0
  134. package/app/composables/useOfflineSync.ts +235 -0
  135. package/app/composables/usePasskeyAuth.ts +156 -0
  136. package/app/composables/usePdfCompressor.ts +180 -0
  137. package/app/composables/usePlatformRedirect.ts +72 -0
  138. package/app/composables/useRealtimeSync.ts +233 -0
  139. package/app/composables/useReferencedItems.ts +180 -0
  140. package/app/composables/useScanner.ts +664 -0
  141. package/app/composables/useSubscription.ts +650 -0
  142. package/app/composables/useThumbnailCache.ts +136 -0
  143. package/app/composables/useVideoCompressor.ts +194 -0
  144. package/app/error.vue +112 -0
  145. package/app/layouts/api.vue +188 -0
  146. package/app/layouts/dashboard.vue +91 -0
  147. package/app/layouts/default.vue +228 -0
  148. package/app/layouts/table.vue +471 -0
  149. package/app/locales/ar.ts +996 -0
  150. package/app/locales/en.ts +655 -0
  151. package/app/locales/es.ts +996 -0
  152. package/app/locales/fr.ts +997 -0
  153. package/app/middleware/dashboard.ts +33 -0
  154. package/app/middleware/database.ts +83 -0
  155. package/app/middleware/global.ts +1 -0
  156. package/app/middleware/sid-ingest.global.ts +29 -0
  157. package/app/middleware/table.ts +54 -0
  158. package/app/middleware/user.ts +26 -0
  159. package/app/pages/[[database]]/admin/api/auth/index.vue +306 -0
  160. package/app/pages/[[database]]/admin/api/index.vue +18 -0
  161. package/app/pages/[[database]]/admin/api/tables/[table]/index.vue +497 -0
  162. package/app/pages/[[database]]/admin/api/tables/index.vue +87 -0
  163. package/app/pages/[[database]]/admin/billing/index.vue +16 -0
  164. package/app/pages/[[database]]/admin/dashboards/[id]/edit.vue +66 -0
  165. package/app/pages/[[database]]/admin/dashboards/[id]/index.vue +117 -0
  166. package/app/pages/[[database]]/admin/dashboards/index.vue +20 -0
  167. package/app/pages/[[database]]/admin/index.vue +28 -0
  168. package/app/pages/[[database]]/admin/settings.vue +526 -0
  169. package/app/pages/[[database]]/admin/tables/[table]/[id]/edit.vue +143 -0
  170. package/app/pages/[[database]]/admin/tables/[table]/[id]/index.vue +146 -0
  171. package/app/pages/[[database]]/admin/tables/[table]/flows.vue +10 -0
  172. package/app/pages/[[database]]/admin/tables/[table]/index.vue +10 -0
  173. package/app/pages/[[database]]/admin/tables/[table]/new.vue +12 -0
  174. package/app/pages/[[database]]/admin/tables/[table]/schedules.vue +10 -0
  175. package/app/pages/[[database]]/admin/tables/[table]/settings.vue +30 -0
  176. package/app/pages/[[database]]/admin/tables/assets/[...path].vue +24 -0
  177. package/app/pages/[[database]]/admin/tables/assets/flows.vue +10 -0
  178. package/app/pages/[[database]]/admin/tables/backups/index.vue +10 -0
  179. package/app/pages/[[database]]/admin/tables/blocks/index.vue +16 -0
  180. package/app/pages/[[database]]/admin/tables/index.vue +20 -0
  181. package/app/pages/[[database]]/admin/tables/pages/index.vue +16 -0
  182. package/app/pages/[[database]]/admin/tables/templates/index.vue +16 -0
  183. package/app/pages/[[database]]/api/index.vue +120 -0
  184. package/app/pages/[[database]]/auth/index.vue +12 -0
  185. package/app/pages/[[database]]/auth/reset.vue +10 -0
  186. package/app/pages/[[database]]/index.vue +10 -0
  187. package/app/plugins/offline-warmup.client.ts +53 -0
  188. package/app/plugins/template-globals.ts +9 -0
  189. package/app/spa-loading-template.html +93 -0
  190. package/biome.json +53 -0
  191. package/index.d.ts +380 -0
  192. package/modules/naiveui.ts +41 -0
  193. package/nuxt.config.ts +269 -0
  194. package/package.json +56 -0
  195. package/pnpm-workspace.yaml +5 -0
  196. package/public/apple-touch-icon.png +0 -0
  197. package/public/favicon-16x16.png +0 -0
  198. package/public/favicon-32x32.png +0 -0
  199. package/public/favicon.ico +0 -0
  200. package/public/pwa-192x192.png +0 -0
  201. package/public/pwa-512x512.png +0 -0
  202. package/public/pwa-maskable-192x192.png +0 -0
  203. package/public/pwa-maskable-512x512.png +0 -0
  204. package/public/vendor/opencv.js +48 -0
  205. package/tsconfig.json +9 -0
@@ -0,0 +1,997 @@
1
+ export default {
2
+ fr: {
3
+ // Actions
4
+ edit: "Modifier",
5
+ create: "Créer",
6
+ cancel: "Annuler",
7
+ save: "Enregistrer",
8
+ submit: "Soumettre",
9
+ update: "Mettre à jour",
10
+ search: "Rechercher",
11
+ filter: "Filtrer",
12
+ billing: "Facturation",
13
+ reset: "Réinitialiser",
14
+ close: "Fermer",
15
+ confirm: "Confirmer",
16
+ add: "Ajouter",
17
+ remove: "Retirer",
18
+ upload: "Télécharger",
19
+ download: "Télécharger",
20
+ export: "Exporter",
21
+ import: "Importer",
22
+ refresh: "Actualiser",
23
+ set: "Définir",
24
+ unset: "Effacer",
25
+ replace: "Remplacer",
26
+ rename: "Renommer",
27
+ new: "Nouveau",
28
+ flows: "Flux",
29
+ actions: "Actions",
30
+ createFromClipboard: "Créer à partir du presse-papiers",
31
+ view: "Vue",
32
+ rightClickToEdit: "Clic droit pour modifier",
33
+ pressAndHoldToEdit: "Appuyer longuement pour modifier",
34
+ copyItem: "Copier l'élément",
35
+ pasteItem: "Coller l'élément",
36
+ copyFields: "Copier les champs",
37
+ pasteFields: "Coller les champs depuis le presse-papiers",
38
+ noFieldsInClipboard: "Aucun champ dans le presse-papiers",
39
+ noFieldsToCopy: "Aucun champ à copier",
40
+ cutSuccessfully: "Couper avec succès",
41
+ clipboardItemIsNotCorrect: "L'élément du presse-papiers n'est pas correct",
42
+ publish: "Publier",
43
+ selectAll: "Tout sélectionner",
44
+ clearAll: "Tout désélectionner",
45
+
46
+ // Status messages
47
+ success: "Succès",
48
+ error: "Erreur",
49
+ warning: "Avertissement",
50
+ info: "Info",
51
+ loading: "Chargement",
52
+
53
+ // Common nouns
54
+ name: "Nom",
55
+ slug: "Identifiant de texte",
56
+ description: "Description",
57
+ title: "Titre",
58
+ content: "Contenu",
59
+ type: "Type",
60
+ status: "Statut",
61
+ date: "Date",
62
+ time: "Heure",
63
+ size: "Taille",
64
+ link: "Lien",
65
+ label: "Label",
66
+ icon: "Icône",
67
+ username: "Nom d'utilisateur",
68
+ email: "Email",
69
+ password: "Mot de passe",
70
+ role: "Rôle",
71
+ item: "Élément",
72
+ anItem: "Un élément",
73
+
74
+ // Navigation
75
+ home: "Accueil",
76
+ back: "Retour",
77
+ next: "Suivant",
78
+ previous: "Précédent",
79
+
80
+ // Validation messages
81
+ isRequired: "Requis",
82
+ required: "Obligatoire",
83
+ optional: "Facultatif",
84
+ isInvalidFormat: "Format invalide",
85
+ isNotValid: "Non valide",
86
+ inputsAreInvalid: "Les entrées sont invalides",
87
+
88
+ // Confirmation messages
89
+ theFollowingActionIsIrreversible: "Cette action est irréversible",
90
+ areYouSure: "Êtes-vous sûr?",
91
+ deleteSelectedAssetsConfirm:
92
+ "Supprimer {count} élément(s) sélectionné(s) ? Cette action est irréversible.",
93
+ deleteAssetConfirm: "Supprimer ce fichier ? Cette action est irréversible.",
94
+ deleteFolderConfirm:
95
+ "Supprimer le dossier « {name} » et tout son contenu ? Cette action est irréversible.",
96
+ deletedSuccessfully: "Supprimé avec succès",
97
+ savedSuccessfully: "Enregistré avec succès",
98
+ updatedSuccessfully: "Mis à jour avec succès",
99
+ createdSuccessfully: "Créé avec succès",
100
+ uploadFailed: "Échec du téléchargement",
101
+ folderCreatedSuccessfully: "Dossier créé avec succès",
102
+ folderNameRequired: "Le nom du dossier est requis",
103
+ contractBody:
104
+ "Non. Tous les plans sont mensuels sans engagement à long terme. Vous pouvez résilier à tout moment.",
105
+ filterLoaded: "Filtre chargé",
106
+
107
+ // Methods
108
+ get: "Afficher",
109
+ post: "Créer",
110
+ put: "Mettre à jour",
111
+ delete: "Supprimer",
112
+ deleteSelectedItems: "Supprimer les éléments sélectionnés",
113
+
114
+ // API
115
+ apiDocumentation: "Documentation de l'API",
116
+ apiDocs: {
117
+ availableMethods: "Méthodes disponibles",
118
+ sessionNoticeTitle: "Authentification par session",
119
+ sessionNoticeDescription:
120
+ "Fournissez l'identifiant de session via le paramètre {param} dans la requête ou en cookie.",
121
+ sessionAsQuery: "Envoyez-le comme paramètre de requête :",
122
+ sessionAsCookie: "Ou envoyez-le comme cookie sur chaque requête.",
123
+ sessionAuthLinkPrefix: "Besoin d'un ID de session ? Consultez",
124
+ viewAuthDocs: "la documentation d'authentification",
125
+ schemaTitle: "Champs du schéma",
126
+ assetsUploadTitle: "Téléverser des fichiers",
127
+ assetsUploadIntro:
128
+ "Envoyez une requête POST vers /assets ou /assets/<dossier> avec un ou plusieurs objets décrivant les fichiers.",
129
+ assetsUploadStep1:
130
+ "Chaque objet doit contenir name, size, type et extension. Vous pouvez envoyer un tableau pour plusieurs fichiers.",
131
+ assetsUploadStep2:
132
+ "La réponse ajoute id, createdAt, publicURL et uploadURL pour chaque élément.",
133
+ assetsUploadStep3:
134
+ "Téléversez ensuite le fichier binaire vers l'uploadURL retournée.",
135
+ assetsUploadCustomEndpoint:
136
+ "Si vous utilisez un endpoint de téléversement personnalisé, fournissez publicURL dans la première requête /assets et aucun uploadURL ne sera renvoyé.",
137
+ noSchemaFields: "Aucun champ de schéma trouvé pour cette table.",
138
+ tableNotFoundTitle: "Table introuvable",
139
+ tableNotFoundDescription:
140
+ "Vérifiez le slug ou choisissez une autre table.",
141
+ backToTables: "Retour aux tables API",
142
+ auth: {
143
+ title: "Endpoints d'authentification",
144
+ description:
145
+ "Utilisez ces endpoints pour créer des sessions et alimenter le paramètre {param}.",
146
+ signinDescription:
147
+ "Authentifie un utilisateur existant. POST crée une session, PUT la rafraîchit.",
148
+ usernameField: "username — identifiant unique de l'utilisateur",
149
+ passwordField: "password — mot de passe en clair (haché côté serveur)",
150
+ signupDescription:
151
+ "Crée un nouvel utilisateur. Le payload suit le schéma de la table users ci-dessous.",
152
+ currentDescription:
153
+ "Retourne l'objet utilisateur lié au cookie {param}.",
154
+ signoutDescription:
155
+ "Met fin à la session active et supprime le cookie correspondant.",
156
+ signupSchemaTitle: "Schéma des utilisateurs",
157
+ cookieHint:
158
+ "Une connexion réussie stocke l'ID de session dans le cookie {param}. Vous pouvez aussi l'envoyer manuellement.",
159
+ },
160
+ },
161
+
162
+ // Units
163
+ units: {
164
+ kB: "ko",
165
+ MB: "Mo",
166
+ GB: "Go",
167
+ TB: "To",
168
+ },
169
+
170
+ // Plural examples
171
+ items: {
172
+ contractBody:
173
+ "Non. Tous les plans sont mensuels sans engagement à long terme. Vous pouvez résilier à tout moment.",
174
+ },
175
+
176
+ compression: {
177
+ label: "Compression des données",
178
+ videoLarge:
179
+ "Vidéo volumineuse détectée ({size}). Nous l'optimiserons localement avant l'envoi.",
180
+ videoHuge:
181
+ "Vidéo très volumineuse détectée ({size}). La compression a lieu en local et peut prendre un moment.",
182
+ pdfLarge:
183
+ "PDF volumineux détecté ({size}). Nous le reconstruirons dans votre navigateur avant l'upload.",
184
+ pdfHuge:
185
+ "PDF très volumineux détecté ({size}). Le rendu local des pages peut prendre un certain temps.",
186
+ },
187
+
188
+ // Dashboard
189
+ settings: "Paramètres",
190
+ toggleTheme: "Changer le thème",
191
+ adminPanel: "Panneau d'administration",
192
+ allRightsReserved: "Tous droits réservés",
193
+ logout: "Déconnexion",
194
+ profile: "Profil",
195
+ sessions: "Sessions",
196
+ blocks: "Blocs",
197
+ pages: "Pages",
198
+ users: "Utilisateurs",
199
+ admin: "Administrateur",
200
+ user: "Utilisateur",
201
+ guest: "Invité",
202
+ translations: "Traductions",
203
+ assets: "Fichiers",
204
+ databases: "Bases de données",
205
+ createDatabase: "Créer une base de données",
206
+ basicInformation: "Informations de base",
207
+ basicInformationDescription:
208
+ "Définissez les détails de la base et la langue par défaut.",
209
+ buildTables: "Construire les tables",
210
+ buildTablesDescription:
211
+ "Décrivez vos tables et nous générerons un schéma de départ.",
212
+ tables: "Tables",
213
+ table: "Table",
214
+ totalDatabaseSize: "Taille totale de la base de données",
215
+ showAll: "Tout afficher",
216
+ roles: "Rôles",
217
+ quickSettings: "Réglages rapides",
218
+ makeItPrivate: "Rendre privée",
219
+ read: "Lire",
220
+ primaryLanguage: "Langue principale",
221
+ secondaryLanguages: "Langues secondaires",
222
+ languages: {
223
+ ar: "Arabe",
224
+ en: "Anglais",
225
+ fr: "Français",
226
+ es: "Espagnol",
227
+ },
228
+ tableSettings: "Paramètres de table",
229
+ primaryColor: "Couleur principale",
230
+ primaryDarkColor: "Couleur principale sombre",
231
+ auth: "Authentification",
232
+ createdAt: "Créé le",
233
+ updatedAt: "Modifié le",
234
+ createdBy: "Créé par",
235
+ id: "ID",
236
+ copiedSuccessfully: "Copié avec succès",
237
+ skipCompression: "Ignorer la compression",
238
+ print: "Imprimer",
239
+
240
+ // Auth
241
+ signin: "Connexion",
242
+ signup: "S'inscrire",
243
+ authentication: "Page de connexion",
244
+ forgotPassword: "Mot de passe oublié ?",
245
+ sendResetLink: "Envoyer le lien de réinitialisation",
246
+ resetPassword: "Réinitialiser le mot de passe",
247
+ newPassword: "Nouveau mot de passe",
248
+ confirmPassword: "Confirmer le mot de passe",
249
+ passwordMinimumLength:
250
+ "Le mot de passe doit contenir au moins 8 caractères.",
251
+ passwordsDoNotMatch: "Les mots de passe ne correspondent pas.",
252
+ invalidResetLink: "Ce lien de réinitialisation est invalide ou expiré.",
253
+ backToSignIn: "Retour à la connexion",
254
+
255
+ // Table actions
256
+ tools: "Outils",
257
+ clearTable: "Vider la table",
258
+ exportCurrentData: "Exporter les données actuelles",
259
+ exportAllData: "Exporter toutes les données",
260
+ databaseExport: "Exportation de la base de données",
261
+ databaseExportDescription:
262
+ "Crée une archive privée de tous les schémas et enregistrements. Les fichiers multimédias ne sont pas inclus.",
263
+ startDatabaseExport: "Créer l'exportation",
264
+ databaseExportFailed: "L'exportation de la base de données a échoué",
265
+ databaseExportExpires: "Disponible jusqu'au {date}",
266
+ databaseExportState: {
267
+ queued: "Exportation en attente",
268
+ running: "Exportation de la base de données",
269
+ completed: "Exportation prête",
270
+ failed: "Échec de l'exportation",
271
+ expired: "Exportation expirée",
272
+ },
273
+ columns: "Colonnes",
274
+ an_export_job_is_running_in_background: "Une exportation est en cours",
275
+ an_export_job_is_done: "L'exportation est terminée",
276
+ uploadingImportFile: "Téléversement du fichier d'importation",
277
+ an_import_job_is_running_in_background: "Une importation est en cours",
278
+ an_import_job_is_done: "L'importation est terminée",
279
+ an_import_job_failed: "L'importation a échoué",
280
+ importedRows: "{count} lignes importées",
281
+ kanban: "Kanban",
282
+ small: "Petit",
283
+ medium: "Moyen",
284
+ large: "Grand",
285
+ newTable: "Nouvelle table",
286
+ newItem: "Nouvel élément",
287
+ schedules: "Planifications",
288
+ tableSchedules: "Planifications de table",
289
+ runNow: "Exécuter maintenant",
290
+ runAllActiveSchedules: "Exécuter toutes les planifications actives",
291
+ noActiveSchedules: "Aucune planification active à exécuter",
292
+ allActiveSchedulesRan:
293
+ "Toutes les planifications actives ont été exécutées",
294
+ someSchedulesFailed: "{count} planification(s) ont échoué",
295
+ tableSlug: "Identifiant de table",
296
+ clickToToggleDate: "Cliquez pour changer la date",
297
+
298
+ // Table settings
299
+ generalSettings: "Paramètres généraux",
300
+ schemaSettings: "Paramètres de colonnes",
301
+ changeOrder: "Changer l'ordre",
302
+ deleteTable: "Supprimer la table",
303
+ defaultSearchableColumns: "Colonnes de recherche par défaut",
304
+ disableIdEncryption: "Désactiver le chiffrement de l'ID",
305
+ decodeID: "Décoder l'ID",
306
+ prepend: "Préfixer",
307
+ recentItemsAppearAtTheTop: "Les éléments récents apparaissent en haut",
308
+ cache: "Cache",
309
+ clearCache: "Effacer le cache",
310
+ log: "Journal",
311
+ enableActivityLog: "Activer le journal d'activité",
312
+ realtime: "Synchronisation en temps réel",
313
+ enableRealtimeSync: "Activer la synchronisation en temps réel des données",
314
+ realtimeEnabled: "Synchronisation en temps réel activée",
315
+ connectingToRealtime: "Connexion à la synchronisation en temps réel...",
316
+ defaultTableColumns: "Colonnes de table par défaut",
317
+ displayAs: "Afficher comme",
318
+ tableItemLabel: "Étiquette des éléments de la table",
319
+ cards: "Cartes",
320
+ list: "Liste",
321
+ urlSuffix: "Suffixe d'URL",
322
+ config: "Configuration",
323
+
324
+ // Schema fields
325
+ fieldName: "Nom du champ",
326
+ fieldDescription: "Description du champ",
327
+ allowedFiles: "Fichiers autorisés",
328
+ options: "Options",
329
+ valuesType: "Type de valeurs",
330
+ tableName: "Nom de la table",
331
+ expandByDefault: "Développer par défaut",
332
+ dragToMove: "Glisser pour déplacer",
333
+ fileType: {
334
+ image: "Image",
335
+ video: "Vidéo",
336
+ audio: "Audio",
337
+ document: "Document",
338
+ archive: "Archive",
339
+ },
340
+ allowCustomValues: "Autoriser les valeurs personnalisées",
341
+ unique: "Unique",
342
+ uniqueGroup: "Groupe unique",
343
+ regex: "Expression régulière",
344
+ uploadParams: "Paramètres de téléchargement",
345
+ minimumItems: "Nombre minimum d'éléments",
346
+ maximumItems: "Nombre maximum d'éléments",
347
+ ie: "par exemple",
348
+ useInison: "Utiliser Inison",
349
+ extendWhere: "Étendre la recherche",
350
+ labelsColoring: "Coloration des étiquettes",
351
+ optionLabel: "Nom de l'option",
352
+ optionColor: "Couleur de l'option",
353
+ optimizeAssets: "Optimiser les fichiers",
354
+ optimizeAssetsDescription:
355
+ "Compresser et optimiser automatiquement les fichiers téléchargés pour de meilleures performances",
356
+ fieldTypeNotExisting: "Le type de champ n'existe pas",
357
+
358
+ // Activity log
359
+ latestActivities: "Activités récentes",
360
+ updated: "A mis à jour",
361
+ deleted: "A supprimé",
362
+ removed: "Supprimé",
363
+ created: "A créé",
364
+ asFollow: "comme suit",
365
+ in: "dans",
366
+ to: "à",
367
+ from: "de",
368
+ as: "comme",
369
+
370
+ // Assets
371
+ uploadFiles: "Envoyer des fichiers",
372
+ uploadFolder: "Envoyer un dossier",
373
+ createFolder: "Créer un dossier",
374
+ dropFilesHere: "Déposez les fichiers ici",
375
+ folderName: "Nom du dossier",
376
+ image: "Image",
377
+ video: "Vidéo",
378
+ gallery: "Galerie",
379
+ assetLink: "Lien du fichier",
380
+
381
+ // Search / Filters
382
+ convert_to_and_group: "Convertir en groupe ET",
383
+ convert_to_or_group: "Convertir en groupe OU",
384
+ andGroup: "Groupe ET",
385
+ orGroup: "Groupe OU",
386
+ favoriteFilters: "Filtres favoris",
387
+ filterName: "Nom du filtre",
388
+ filterNameCannotBeEmpty: "Le nom du filtre ne peut pas être vide",
389
+ filterNameAlreadyExists: "Le nom du filtre existe déjà",
390
+ noFavoriteFilters: "Aucun filtre favori enregistré",
391
+ relativeGroup: "Relatif",
392
+ relativePlaceholder: "par ex. il y a 3 jours",
393
+
394
+ // Comparison operators
395
+ ComparisonOperator: {
396
+ equalTo: "Égal à",
397
+ notEqualTo: "Différent de",
398
+ greaterThan: "Supérieur à",
399
+ greaterOrEqualTo: "Supérieur ou égal à",
400
+ lessThan: "Inférieur à",
401
+ lessOrEqualTo: "Inférieur ou égal à",
402
+ contains: "Contient",
403
+ doesNotContain: "Ne contient pas",
404
+ isOneOf: "Est l'un de",
405
+ isNotOneOf: "N'est pas l'un de",
406
+ },
407
+
408
+ // Field types
409
+ fields: {
410
+ string: "Texte",
411
+ shortText: "Texte court",
412
+ longText: "Texte long",
413
+ html: "Éditeur HTML",
414
+ number: "Nombre",
415
+ password: "Mot de passe",
416
+ link: "Lien",
417
+ email: "Email",
418
+ color: "Couleur",
419
+ asset: "Fichier",
420
+ assets: "Fichiers",
421
+ tags: "Étiquettes",
422
+ date: "Date",
423
+ dateTime: "Date et heure",
424
+ dateRange: "Plage de dates",
425
+ dateTimeRange: "Plage date et heure",
426
+ month: "Mois",
427
+ monthRange: "Plage de mois",
428
+ year: "Année",
429
+ yearRange: "Plage d'années",
430
+ quarter: "Trimestre",
431
+ quarterRange: "Plage de trimestres",
432
+ week: "Semaine",
433
+ toggle: "Basculer",
434
+ select: "Sélectionner",
435
+ checkbox: "Case à cocher",
436
+ radio: "Bouton radio",
437
+ array: "Tableau",
438
+ object: "Objet",
439
+ objects: "Objets",
440
+ table: "Table",
441
+ tableItems: "Éléments de table",
442
+ role: "Rôle",
443
+ mention: "Mention",
444
+ id: "Identifiant",
445
+ multiple: "Multiple",
446
+ range: "Plage",
447
+ slider: "Curseur",
448
+ ip: "Adresse IP",
449
+ json: "JSON",
450
+ custom: "Personnalisé",
451
+ },
452
+
453
+ // Email settings
454
+ emailSettings: "Paramètres e-mail",
455
+ emailConfig: {
456
+ use_custom_smtp: "Utiliser un SMTP personnalisé",
457
+ from_email: "Adresse d'expéditeur",
458
+ from_name: "Nom de l'expéditeur",
459
+ smtp_host: "Hôte SMTP",
460
+ smtp_port: "Port SMTP",
461
+ smtp_user: "Identifiant SMTP",
462
+ smtp_pass: "Mot de passe SMTP",
463
+ smtp_secure: "Connexion sécurisée (TLS)",
464
+ },
465
+ smtpPasswordUnchanged: "Laissez vide pour conserver le mot de passe actuel",
466
+ testEmailRecipient: "Adresse e-mail de test",
467
+ sendTestEmail: "Envoyer un e-mail de test",
468
+ emailSendFailed:
469
+ "L'e-mail n'a pas pu être envoyé. Vérifiez les paramètres.",
470
+
471
+ // Email template editor
472
+ emailTemplates: {
473
+ variables: "Variables",
474
+ variableName: "Nom de la variable (ex. booking_date)",
475
+ add: "Ajouter",
476
+ contentPlaceholder:
477
+ "Balises <mjml>…</mjml> (ou texte brut) — les variables comme {{@user.email}} et {{@data.field}} sont remplacées à l'envoi.",
478
+ preview: "Aperçu avec données d'exemple",
479
+ previewLoading: "Rendu de l'aperçu…",
480
+ previewSubject: "Objet",
481
+ previewEmpty: "Commencez à écrire pour voir l'aperçu.",
482
+ recordFieldsHint:
483
+ "Tous les champs de l'enregistrement déclencheur sont disponibles en {{field}} ou {{@data.field}} ; l'utilisateur actuel en {{@user.field}}.",
484
+ sendTest: "Envoyer un test",
485
+ sendTestHint:
486
+ "Envoie le modèle actuel (même non enregistré) à l'adresse ci-dessous.",
487
+ testRecipient: "E-mail du destinataire",
488
+ },
489
+
490
+ // Database settings
491
+ translationSettings: "Paramètres de Traduction",
492
+ deleteDatabase: "Supprimer la Base de Données",
493
+
494
+ // Tables
495
+ templates: "Modèles d'e-mail",
496
+
497
+ // Flows
498
+ accessDenied: "Accès refusé",
499
+ throwError: "Erreur",
500
+ if: "Si",
501
+ or: "Ou",
502
+ newCard: "Nouvelle carte",
503
+ onRequest: "Sur demande",
504
+ onResponse: "Sur réponse",
505
+ condition: "Condition",
506
+ addSchedule: "Ajouter une planification",
507
+ editSchedule: "Modifier la planification",
508
+ cronExpression: "Expression cron",
509
+ payloadTemplate: "Modèle de charge utile",
510
+ nextRunAt: "Prochaine exécution",
511
+ lastRunAt: "Dernière exécution",
512
+ lastError: "Dernière erreur",
513
+ active: "Actif",
514
+ inactive: "Inactif",
515
+ preset: "Préréglage",
516
+ excludeDays: "Jours exclus",
517
+ excludeDaysHelp:
518
+ "Les jours cochés seront ignorés même si l'expression cron correspond.",
519
+ excludedDays: "Jours exclus",
520
+ noExcludedDays: "Aucun",
521
+ payloadHelp:
522
+ "Utilisez un objet JSON ou un objet Inison sérialisé pour la ligne à créer.",
523
+ payloadTemplateVariablesHelp:
524
+ "Modèles: {{ now }}, {{ now + 2h }}, {{ now|iso }}, {{ today|date }}, {{ schedule.id }}, {{ database.slug }}, {{ table.slug }}, {{ run.iso }}.",
525
+ previewResolvedPayload: "Prévisualiser la charge résolue",
526
+ resolvedPayloadPreview: "Aperçu de la charge résolue",
527
+ formatJSON: "Convertir et formater en JSON",
528
+ fillExample: "Remplir un exemple",
529
+ customCronHint: "Utilisez une expression cron UTC standard en 5 parties.",
530
+ presetDescriptionHourly: "S'exécute une fois par heure.",
531
+ presetDescriptionDaily: "S'exécute chaque jour à minuit UTC.",
532
+ presetDescriptionWeekly: "S'exécute chaque lundi à minuit UTC.",
533
+ presetDescriptionMonthly:
534
+ "S'exécute le premier jour de chaque mois à minuit UTC.",
535
+ presetDescriptionCustom:
536
+ "Utilisez votre propre expression cron pour des planifications avancées.",
537
+ scheduleSummaryNoExcluded:
538
+ "Cette planification s'exécutera tous les jours correspondants.",
539
+ scheduleSummaryWithExcluded: "Cette planification ignorera : {days}.",
540
+ sunday: "Dimanche",
541
+ monday: "Lundi",
542
+ tuesday: "Mardi",
543
+ wednesday: "Mercredi",
544
+ thursday: "Jeudi",
545
+ friday: "Vendredi",
546
+ saturday: "Samedi",
547
+ hourly: "Toutes les heures",
548
+ daily: "Quotidien",
549
+ weekly: "Hebdomadaire",
550
+ monthly: "Mensuel",
551
+ custom: "Personnalisé",
552
+ reorderFlows: "Réorganiser les flux",
553
+ reorderFields: "Réorganiser les champs",
554
+
555
+ // Chatbot IA
556
+ chatbot: "Assistant IA",
557
+ chatWelcomeDefault:
558
+ "Bonjour ! Je peux vous aider à créer de nouvelles tables de base de données ou à modifier celles qui existent. Décrivez ce dont vous avez besoin et je générerai les schémas pour vous.",
559
+ chatWelcomeScopedDatabase:
560
+ "Bonjour ! Je peux vous aider à créer et mettre à jour des tables dans cette base de données. Pour créer une nouvelle base de données, utilisez l'espace de travail de base de données Inicontent.",
561
+ chatWelcomeTables:
562
+ "Je suis prêt à vous aider à concevoir et gérer vos tables de base de données. Vous pouvez me demander de créer de nouvelles tables ou d'en modifier.",
563
+ chatWelcomePages:
564
+ "Je peux vous aider à créer des pages web. Décrivez la page souhaitée et je générerai la structure.",
565
+ chatPlaceholder: "Décrivez la base de données que vous souhaitez créer...",
566
+ chatPlaceholderScopedDatabase:
567
+ "Décrivez les tables que vous souhaitez créer ou mettre à jour dans cette base de données...",
568
+ chatPlaceholderShort: "Écrivez un message...",
569
+ applied: "Appliqué",
570
+ chatPaidPlanRequired:
571
+ "Cet assistant IA est disponible uniquement avec un plan payant actif.",
572
+ continue: "Continuer",
573
+ continued: "Continué",
574
+ dataPreview: "Aperçu des données",
575
+ generatingMoreTables: "Génération des tables restantes...",
576
+ homePage: "Page d'accueil",
577
+ namesUpdated: "Noms mis à jour",
578
+ newChat: "Nouvelle discussion",
579
+ pagePreviewUnavailable:
580
+ "L'aperçu en direct de la page est disponible dans le créateur de site Inicontent.",
581
+ published: "Publié",
582
+ applyChanges: "Appliquer les modifications",
583
+ skipAiHelp: "Ignorer l'aide IA",
584
+ publishData: "Publier les données",
585
+ tableDemo: "Aperçu de la table",
586
+
587
+ billingUi: {
588
+ title: "Facturation et abonnement",
589
+ subtitle: "Gérez votre plan, vos factures et vos paramètres de paiement.",
590
+ tabs: {
591
+ subscription: "Abonnement",
592
+ invoices: "Factures",
593
+ settings: "Paramètres",
594
+ },
595
+ noSubscriptionTitle: "Aucun abonnement actif",
596
+ noSubscriptionBody:
597
+ "Choisissez un plan pour activer la facturation et débloquer les fonctions de stockage.",
598
+ choosePlanTitle: "Choisissez votre plan",
599
+ currentPlanTitle: "Plan actuel",
600
+ planType: "Type de plan",
601
+ planTypes: {
602
+ base: "Base",
603
+ enterprise: "Entreprise",
604
+ },
605
+ status: "Statut",
606
+ statusLabels: {
607
+ active: "Actif",
608
+ canceled: "Annulé",
609
+ past_due: "En retard",
610
+ paid: "Payé",
611
+ open: "Ouvert",
612
+ void: "Annulé",
613
+ uncollectible: "Irrécouvrable",
614
+ unknown: "Inconnu",
615
+ },
616
+ databaseStorage: "Stockage de la base de données",
617
+ assetStorage: "Stockage des fichiers",
618
+ changePlan: "Changer de plan",
619
+ hidePlanPicker: "Masquer le sélecteur",
620
+ cancelSubscription: "Annuler l'abonnement",
621
+ upgradePlanTitle: "Mettre à niveau ou changer de plan",
622
+ storageUsageTitle: "Utilisation du stockage",
623
+ storageLimitExceededTitle: "Limite de stockage dépassée",
624
+ storageLimitExceededBody:
625
+ "Vous dépassez votre quota de stockage. Pensez à mettre à niveau votre plan ou à supprimer les données inutilisées.",
626
+ invoicesEmpty: "Aucune facture pour le moment.",
627
+ paymentSettingsTitle: "Paramètres de paiement",
628
+ paymentMethodTitle: "Moyen de paiement",
629
+ paymentMethodSubtitle: "Gérez votre moyen de paiement sur PayPal",
630
+ managePayment: "Gérer le paiement",
631
+ billingEmailTitle: "Email de facturation",
632
+ updateEmail: "Mettre à jour l'email",
633
+ autoRenewalTitle: "Renouvellement automatique",
634
+ autoRenewalMessage:
635
+ "{{status}} - Votre abonnement {{action}} à la fin de la période de facturation.",
636
+ autoRenew: {
637
+ enabled: "Activé",
638
+ disabled: "Désactivé",
639
+ renew: "se renouvellera automatiquement",
640
+ notRenew: "ne se renouvellera pas",
641
+ enable: "Activer le renouvellement automatique",
642
+ disable: "Désactiver le renouvellement automatique",
643
+ },
644
+ cancelModalTitle: "Annuler l'abonnement",
645
+ cancelModalBody:
646
+ "Êtes-vous sûr de vouloir annuler votre abonnement ? Vous perdrez l'accès aux fonctionnalités payantes à la fin de la période en cours.",
647
+ cancelModalKeep: "Conserver l'abonnement",
648
+ cancelModalConfirm: "Oui, annuler",
649
+ invoiceId: "ID de transaction",
650
+ period: "Période",
651
+ description: "Description",
652
+ date: "Date",
653
+ amount: "Montant",
654
+ invoice: "Facture",
655
+ downloadPdf: "Télécharger le PDF",
656
+ checkoutSuccess: {
657
+ processingPayment: "Traitement de votre paiement...",
658
+ paymentFailed: "Paiement échoué",
659
+ returnToBilling: "Retour à la facturation",
660
+ subscriptionActivated: "Abonnement activé !",
661
+ thankYou: "Merci d'avoir choisi Inicontent.",
662
+ goToDashboard: "Aller au tableau de bord",
663
+ viewBillingDetails: "Voir les détails de facturation",
664
+ subscriptionStatus: "Statut de l'abonnement",
665
+ active: "Actif",
666
+ orderId: "ID de commande",
667
+ databaseStorage: "Stockage de la base de données",
668
+ assetStorage: "Stockage des fichiers",
669
+ validUntil: "Valide jusqu'au",
670
+ nextSteps: "Prochaines étapes",
671
+ firstProject: "Vous pouvez maintenant créer votre premier projet.",
672
+ confirmationEmail:
673
+ "Un email de confirmation a été envoyé à votre adresse PayPal. Pour commencer, accédez à votre tableau de bord et créez votre première base de données CMS.",
674
+ errors: {
675
+ noPaymentToken: "Aucun jeton de paiement trouvé. Veuillez réessayer.",
676
+ failedToProcess:
677
+ "Impossible de traiter le paiement. Veuillez contacter le support.",
678
+ paymentProcessingFailed: "Échec du traitement du paiement",
679
+ },
680
+ },
681
+ checkoutCanceled: {
682
+ title: "Paiement annulé",
683
+ description:
684
+ "Votre abonnement n'a pas été finalisé. Aucun frais n'a été facturé.",
685
+ returnToBilling: "Retour à la facturation",
686
+ backToHome: "Retour à l'accueil",
687
+ supportMessage:
688
+ "Si vous avez rencontré des problèmes pendant le paiement, contactez notre équipe support :",
689
+ },
690
+ credit: {
691
+ balance: "Solde de crédit",
692
+ balanceSubtitle: "Votre crédit utilisé pour les frais mensuels.",
693
+ addCredit: "Ajouter du crédit",
694
+ requestBankTransfer: "Demande de virement bancaire",
695
+ topupTitle: "Recharger le compte",
696
+ topupDescription:
697
+ "Ajoutez du crédit via PayPal. Votre crédit sera utilisé pour payer les frais mensuels automatiquement.",
698
+ amount: "Montant (USD)",
699
+ amountPlaceholder: "Entrez le montant",
700
+ youWillAdd: "Vous allez ajouter",
701
+ payWithPayPal: "Payer avec PayPal",
702
+ amountTooLow: "Le montant minimum est de 1 $",
703
+ amountTooHigh: "Le montant maximum est de 1 000 $",
704
+ topupFailed: "Échec de la recharge. Veuillez réessayer.",
705
+ topupSuccess: "Crédit ajouté avec succès",
706
+ topupSuccessDescription: "Votre solde a été mis à jour.",
707
+ topupCanceled: "Recharge annulée",
708
+ topupCanceledDescription:
709
+ "Votre paiement PayPal a été annulé. Aucun frais n'a été effectué.",
710
+ processingTopup: "Traitement du paiement en cours…",
711
+ orderId: "ID de commande",
712
+ amountAdded: "Montant ajouté",
713
+ newBalance: "Nouveau solde",
714
+ requestTitle: "Demande de crédit par virement",
715
+ requestDescription:
716
+ "Soumettez une demande de virement. Un administrateur vérifiera et appliquera le crédit.",
717
+ note: "Référence de virement / Note",
718
+ notePlaceholder: "Référence du virement ou notes supplémentaires",
719
+ noteRequired: "Veuillez fournir une référence de virement ou une note",
720
+ submitRequest: "Soumettre la demande",
721
+ requestSubmitted:
722
+ "Votre demande de crédit a été soumise. Un administrateur la traitera bientôt.",
723
+ requestFailed: "Échec de la demande de crédit. Veuillez réessayer.",
724
+ pendingRequests: "Demandes de crédit en attente",
725
+ noPendingRequests: "Aucune demande en attente",
726
+ refreshRequests: "Actualiser",
727
+ approve: "Approuver",
728
+ reject: "Rejeter",
729
+ requestUser: "Utilisateur",
730
+ requestAmount: "Montant",
731
+ requestNote: "Note",
732
+ requestStatus: "Statut",
733
+ graceWarning:
734
+ "Votre abonnement est en période de grâce. Ajoutez du crédit avant l'expiration pour éviter la suspension.",
735
+ },
736
+ autoCharge: {
737
+ title: "Prélèvement automatique PayPal",
738
+ subtitle:
739
+ "Prélever automatiquement votre compte PayPal lorsque le crédit est insuffisant.",
740
+ statusEnabled: "Activé",
741
+ enable: "Activer le prélèvement automatique",
742
+ disable: "Désactiver le prélèvement automatique",
743
+ activating: "Activation du prélèvement automatique…",
744
+ activatedTitle: "Prélèvement automatique activé",
745
+ activatedDescription:
746
+ "Votre compte PayPal a été enregistré. Les frais mensuels seront prélevés automatiquement.",
747
+ activationFailed: "Échec de l'activation du prélèvement automatique",
748
+ missingApprovalSession:
749
+ "Session d'approbation manquante. Veuillez réessayer.",
750
+ setupCanceled: "Configuration annulée",
751
+ setupCanceledDescription:
752
+ "Vous avez annulé l'autorisation PayPal. Le prélèvement automatique n'a pas été activé.",
753
+ },
754
+ },
755
+
756
+ pricingUi: {
757
+ title: "Choisissez votre plan",
758
+ subtitle: "Des prix simples et transparents, sans frais cachés.",
759
+ databaseStorageLabel: "Stockage de la base de données (GB)",
760
+ assetStorageLabel: "Stockage des fichiers (GB)",
761
+ basePlan: "Plan de base",
762
+ additionalStorage: "Stockage supplémentaire",
763
+ totalMonthly: "Total mensuel",
764
+ subscribeNow: "S'abonner",
765
+ upgradePlan: "Mettre à niveau",
766
+ requestQuote: "Demander un devis",
767
+ currentUsage: "Utilisation actuelle du stockage",
768
+ usageWarning:
769
+ "Vous dépassez votre quota de stockage. Pensez à mettre à niveau votre plan.",
770
+ faqTitle: "Questions fréquentes",
771
+ faq: {
772
+ changePlanTitle: "Puis-je changer mon plan de stockage à tout moment ?",
773
+ changePlanBody:
774
+ "Oui. Vous pouvez augmenter ou réduire votre plan de stockage à tout moment. Les changements prennent effet au prochain cycle de facturation.",
775
+ exceedQuotaTitle: "Que se passe-t-il si je dépasse mon quota ?",
776
+ exceedQuotaBody:
777
+ "Nous vous avertirons lorsque vous approcherez de la limite. Si vous la dépassez, nous facturerons le stockage supplémentaire selon nos tarifs.",
778
+ contractTitle: "Y a-t-il un contrat à long terme ?",
779
+ contractBody:
780
+ "Non. Tous les plans sont mensuels sans engagement à long terme. Vous შეგიძლიათ résilier à tout moment.",
781
+ annualDiscountTitle: "Proposez-vous des réductions annuelles ?",
782
+ annualDiscountBody:
783
+ "Contactez notre équipe commerciale pour des tarifs entreprise personnalisés et des remises volume.",
784
+ },
785
+ },
786
+
787
+ pricingPageUi: {
788
+ headerTitle: "Plans tarifaires",
789
+ headerSubtitle:
790
+ "Des tarifs simples et transparents, sans frais cachés. Payez seulement ce que vous utilisez.",
791
+ ctaTitle: "Prêt à commencer ?",
792
+ ctaSubtitle:
793
+ "Rejoignez des milliers de développeurs qui utilisent Inicontent pour gérer leur contenu.",
794
+ viewSubscription: "Voir votre abonnement",
795
+ },
796
+
797
+ // JSON Field
798
+ format: "Formater",
799
+ invalidJSON: "JSON invalide",
800
+
801
+ // Dashboards
802
+ dashboards: "Tableaux de bord",
803
+ dashboard: "Tableau de bord",
804
+ dashboardName: "Nom du tableau de bord",
805
+ dashboardSettings: "Paramètres du tableau de bord",
806
+ editDashboard: "Modifier le tableau de bord",
807
+ createDashboard: "Créer un tableau de bord",
808
+ widgets: "Widgets",
809
+ widget: "Widget",
810
+ addWidget: "Ajouter un widget",
811
+ editWidget: "Modifier le widget",
812
+ widgetTitle: "Titre du widget",
813
+ untitledWidget: "Widget sans titre",
814
+ noWidgets: "Aucun widget. Ajoutez-en un pour commencer.",
815
+ widgetCount: {
816
+ one: "{count} widget",
817
+ other: "{count} widgets",
818
+ },
819
+ counter: "Compteur",
820
+ line: "Graphique linéaire",
821
+ bar: "Graphique en barres",
822
+ pie: "Graphique circulaire",
823
+ lineChart: "Graphique linéaire",
824
+ barChart: "Graphique en barres",
825
+ pieChart: "Graphique circulaire",
826
+ sourceTable: "Table source",
827
+ selectTable: "Sélectionner une table",
828
+ selectField: "Sélectionner un champ",
829
+ selectType: "Sélectionner un type",
830
+ operation: "Opération",
831
+ count: "Nombre",
832
+ sum: "Somme",
833
+ max: "Max",
834
+ min: "Min",
835
+ groupBy: "Grouper par",
836
+ dateField: "Champ de date",
837
+ dateRange: "Plage de dates",
838
+ last7Days: "7 derniers jours",
839
+ last30Days: "30 derniers jours",
840
+ last90Days: "90 derniers jours",
841
+ lastYear: "Dernière année",
842
+ allTime: "Tout le temps",
843
+ limit: "Limite",
844
+ noData: "Aucune donnée",
845
+ columnsToDisplay: "Colonnes à afficher",
846
+ sortField: "Trier par",
847
+ sortOrder: "Ordre de tri",
848
+ asc: "Croissant",
849
+ desc: "Décroissant",
850
+
851
+ // Translation drawer
852
+ translateItem: "Traduire l'élément",
853
+ translateData: "Traduire",
854
+ original: "Original",
855
+ noSecondaryLanguages:
856
+ "Aucune langue secondaire n'est configurée pour cette base de données.",
857
+ noTranslatableFields:
858
+ "Aucun champ texte traduisible trouvé dans cette table.",
859
+ translationPlaceholder: "Saisir la traduction…",
860
+ translationsSaved: "Traductions enregistrées",
861
+ translated: "Traduit",
862
+
863
+ passkey: {
864
+ securityTitle: "Sécurité par clé d'accès",
865
+ description:
866
+ "Enregistrez une clé d'accès pour vous connecter via la vérification de votre appareil.",
867
+ register: "Enregistrer la clé d'accès",
868
+ enrollmentTitle: "Configurer une clé d'accès",
869
+ enrollmentPrompt:
870
+ "Souhaitez-vous configurer une clé d'accès pour une connexion plus rapide et plus sécurisée sur cet appareil ?",
871
+ notNow: "Pas maintenant",
872
+ notSupported: "Ce navigateur ne prend pas en charge les clés d'accès.",
873
+ hint: "Vous pouvez utiliser Face ID, Touch ID ou une clé de sécurité après l'enregistrement.",
874
+ registeredSuccessfully: "Clé d'accès enregistrée avec succès.",
875
+ registrationFailed: "Échec de l'enregistrement de la clé d'accès.",
876
+ signin: "Se connecter avec une clé d'accès",
877
+ signinHintUsername:
878
+ "Entrez votre nom d'utilisateur ou e-mail, puis continuez avec la clé d'accès.",
879
+ signinHintDevice:
880
+ "Utilisez la vérification de votre appareil (Face ID, Touch ID ou clé de sécurité).",
881
+ signinFailed: "Échec de la connexion avec la clé d'accès.",
882
+ },
883
+
884
+ // Offline / sync
885
+ online: "En ligne",
886
+ offline: "Hors ligne",
887
+ onlineTooltip: "Connecté au serveur",
888
+ offlineTooltip:
889
+ "Vous êtes hors ligne. Vous pouvez continuer à consulter et modifier — les modifications sont enregistrées localement et synchronisées à la reconnexion.",
890
+ syncingPending: "Synchronisation…",
891
+ pendingChanges: "{count} modification(s) en attente",
892
+ syncNow: "Synchroniser",
893
+ conflictsPending: "{count} conflit(s) à résoudre",
894
+ updateAvailable: "Mise à jour disponible",
895
+ installApp: "Installer l'application",
896
+ resolveConflicts: "Résoudre les conflits",
897
+ conflictModalIntro:
898
+ "Votre modification hors ligne entre en conflit avec une version plus récente sur le serveur. Choisissez la version à conserver.",
899
+ noConflicts: "Aucun conflit à résoudre",
900
+ discardAll: "Tout annuler",
901
+ localVersion: "Votre version",
902
+ serverVersion: "Version du serveur",
903
+ keepLocal: "Garder la mienne",
904
+ keepServer: "Garder celle du serveur",
905
+ changeQueuedForSync: "Modification ajoutée à la file de synchronisation",
906
+ localChangeDiscarded: "Modification locale annulée",
907
+ allLocalChangesDiscarded:
908
+ "Toutes les modifications locales ont été annulées",
909
+ queuedOfflineToast:
910
+ "Vous êtes hors ligne — votre modification a été enregistrée localement et sera synchronisée à la reconnexion.",
911
+ createFailed: "Impossible de créer l'élément.",
912
+ updateFailed: "Impossible de mettre à jour l'élément.",
913
+ deleteFailed: "Impossible de supprimer l'élément.",
914
+ errorFetchingSchema: "Impossible de récupérer le schéma de la table.",
915
+
916
+ // Document scanner
917
+ documentScanner: "Scanner de documents",
918
+ camera: "Caméra",
919
+ uploadImage: "Importer une image",
920
+ openCamera: "Ouvrir la caméra",
921
+ capture: "Capturer",
922
+ retake: "Reprendre",
923
+ cameraUnavailable: "Caméra indisponible",
924
+ loadingScanner: "Chargement du scanner de documents",
925
+ retry: "Réessayer",
926
+ dropImageOrClick: "Déposez une image ici, ou cliquez pour parcourir",
927
+ preview: "Aperçu",
928
+ extractingDocument: "Extraction du document",
929
+ ocr: "OCR",
930
+ language: "Langue",
931
+ extractedText: "Texte extrait",
932
+ copy: "Copier",
933
+ insertAsText: "Insérer comme texte",
934
+ insertAsImage: "Insérer comme image",
935
+ useThisScan: "Utiliser ce scan",
936
+ documentNotDetected: "Document non détecté",
937
+ adjustCorners: "Ajuster les coins",
938
+ dragHandlesToAdjust:
939
+ "Faites glisser les poignées vertes pour délimiter la carte, puis appliquez.",
940
+ applyCrop: "Appliquer le recadrage",
941
+ scanDocument: "Scanner un document",
942
+
943
+ // Espaces de travail de la plateforme (pages, blocs, modèles, facturation)
944
+ openInPlatform: "Ouvrir dans Inicontent",
945
+ platformFeatureIntro:
946
+ "L'espace de travail {{feature}} fait partie de la plateforme Inicontent.",
947
+ platformFeatureAt: "Ouvrir à :",
948
+ platformFeatureHint:
949
+ "Vous serez connecté automatiquement avec votre session actuelle.",
950
+
951
+ // Sauvegardes
952
+ backups: "Sauvegardes",
953
+ backupsAdminOnly:
954
+ "Seul le propriétaire (admin) de la base peut gérer les sauvegardes.",
955
+ createBackup: "Créer une sauvegarde",
956
+ backupName: "Nom de la sauvegarde",
957
+ backupNamePlaceholder: "ex. Avant le lancement",
958
+ backupNameHelp: "Laissez vide pour générer un nom avec la date et l'heure.",
959
+ backupType: "Type de sauvegarde",
960
+ fullBackup: "Base complète",
961
+ tableBackup: "Table",
962
+ fullBackupHelp:
963
+ "Capture de tout le dossier de la base (tables et métadonnées) en archive brute.",
964
+ tableBackupHelp: "Capture d'un seul dossier de table en archive brute.",
965
+ backupCreatedSuccessfully:
966
+ "Sauvegarde démarrée. Elle apparaîtra ici une fois terminée.",
967
+ backupDeletedSuccessfully: "Sauvegarde supprimée",
968
+ backupOrigin: "Origine",
969
+ automaticBackup: "Automatique",
970
+ manualBackup: "Manuelle",
971
+ backupSize: "Taille",
972
+ backupState: "État",
973
+ queued: "En attente",
974
+ running: "En cours",
975
+ completed: "Terminée",
976
+ failed: "Échouée",
977
+ restoring: "Restauration",
978
+ restoreBackup: "Restaurer la sauvegarde",
979
+ restoreScope: "Portée de restauration",
980
+ restoreWarning:
981
+ "La restauration remplace les données existantes par le contenu de cette sauvegarde. Cette action est irréversible.",
982
+ restoreConfirmation: "Confirmation",
983
+ restoreConfirmationHelp:
984
+ "Je comprends que cela remplacera les données existantes.",
985
+ restoreStarted: "Restauration démarrée. Vous serez notifié à la fin.",
986
+ restore: "Restaurer",
987
+ backupScopeTable: "Table (dossier complet)",
988
+ backupScopeTableSchema: "Schéma de table uniquement",
989
+ backupScopeTableData: "Données de table uniquement",
990
+ backupScopeDatabaseSchema: "Tous les schémas de tables",
991
+ backupScopeDatabaseData: "Toutes les données de tables",
992
+ backupScopeDatabaseFull: "Base entière (schémas + données)",
993
+ folder: "Dossier",
994
+ deleteBackupConfirm:
995
+ 'Supprimer la sauvegarde "{name}" ? Cette action est irréversible.',
996
+ },
997
+ } as const;