@adminiumjs/i18n 0.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/LICENSE +661 -0
  2. package/dist/create-i18n.d.ts +48 -0
  3. package/dist/create-i18n.d.ts.map +1 -0
  4. package/dist/create-i18n.js +98 -0
  5. package/dist/create-i18n.js.map +1 -0
  6. package/dist/format/index.d.ts +70 -0
  7. package/dist/format/index.d.ts.map +1 -0
  8. package/dist/format/index.js +217 -0
  9. package/dist/format/index.js.map +1 -0
  10. package/dist/icu-format.d.ts +17 -0
  11. package/dist/icu-format.d.ts.map +1 -0
  12. package/dist/icu-format.js +52 -0
  13. package/dist/icu-format.js.map +1 -0
  14. package/dist/index.d.ts +16 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +12 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/locales.d.ts +99 -0
  19. package/dist/locales.d.ts.map +1 -0
  20. package/dist/locales.js +55 -0
  21. package/dist/locales.js.map +1 -0
  22. package/dist/react.d.ts +26 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +61 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/resources/ar-eg/common.d.ts +1964 -0
  27. package/dist/resources/ar-eg/common.d.ts.map +1 -0
  28. package/dist/resources/ar-eg/common.js +1963 -0
  29. package/dist/resources/ar-eg/common.js.map +1 -0
  30. package/dist/resources/ar-eg/errors.d.ts +45 -0
  31. package/dist/resources/ar-eg/errors.d.ts.map +1 -0
  32. package/dist/resources/ar-eg/errors.js +44 -0
  33. package/dist/resources/ar-eg/errors.js.map +1 -0
  34. package/dist/resources/ar-eg/generated.d.ts +20 -0
  35. package/dist/resources/ar-eg/generated.d.ts.map +1 -0
  36. package/dist/resources/ar-eg/generated.js +19 -0
  37. package/dist/resources/ar-eg/generated.js.map +1 -0
  38. package/dist/resources/ar-eg/studio.d.ts +18 -0
  39. package/dist/resources/ar-eg/studio.d.ts.map +1 -0
  40. package/dist/resources/ar-eg/studio.js +17 -0
  41. package/dist/resources/ar-eg/studio.js.map +1 -0
  42. package/dist/resources/ar-eg/ui.d.ts +996 -0
  43. package/dist/resources/ar-eg/ui.d.ts.map +1 -0
  44. package/dist/resources/ar-eg/ui.js +995 -0
  45. package/dist/resources/ar-eg/ui.js.map +1 -0
  46. package/dist/resources/cs-cz/common.d.ts +1964 -0
  47. package/dist/resources/cs-cz/common.d.ts.map +1 -0
  48. package/dist/resources/cs-cz/common.js +1963 -0
  49. package/dist/resources/cs-cz/common.js.map +1 -0
  50. package/dist/resources/cs-cz/errors.d.ts +45 -0
  51. package/dist/resources/cs-cz/errors.d.ts.map +1 -0
  52. package/dist/resources/cs-cz/errors.js +44 -0
  53. package/dist/resources/cs-cz/errors.js.map +1 -0
  54. package/dist/resources/cs-cz/generated.d.ts +20 -0
  55. package/dist/resources/cs-cz/generated.d.ts.map +1 -0
  56. package/dist/resources/cs-cz/generated.js +19 -0
  57. package/dist/resources/cs-cz/generated.js.map +1 -0
  58. package/dist/resources/cs-cz/studio.d.ts +18 -0
  59. package/dist/resources/cs-cz/studio.d.ts.map +1 -0
  60. package/dist/resources/cs-cz/studio.js +17 -0
  61. package/dist/resources/cs-cz/studio.js.map +1 -0
  62. package/dist/resources/cs-cz/ui.d.ts +996 -0
  63. package/dist/resources/cs-cz/ui.d.ts.map +1 -0
  64. package/dist/resources/cs-cz/ui.js +995 -0
  65. package/dist/resources/cs-cz/ui.js.map +1 -0
  66. package/dist/resources/da-dk/common.d.ts +1964 -0
  67. package/dist/resources/da-dk/common.d.ts.map +1 -0
  68. package/dist/resources/da-dk/common.js +1963 -0
  69. package/dist/resources/da-dk/common.js.map +1 -0
  70. package/dist/resources/da-dk/errors.d.ts +45 -0
  71. package/dist/resources/da-dk/errors.d.ts.map +1 -0
  72. package/dist/resources/da-dk/errors.js +44 -0
  73. package/dist/resources/da-dk/errors.js.map +1 -0
  74. package/dist/resources/da-dk/generated.d.ts +20 -0
  75. package/dist/resources/da-dk/generated.d.ts.map +1 -0
  76. package/dist/resources/da-dk/generated.js +19 -0
  77. package/dist/resources/da-dk/generated.js.map +1 -0
  78. package/dist/resources/da-dk/studio.d.ts +18 -0
  79. package/dist/resources/da-dk/studio.d.ts.map +1 -0
  80. package/dist/resources/da-dk/studio.js +17 -0
  81. package/dist/resources/da-dk/studio.js.map +1 -0
  82. package/dist/resources/da-dk/ui.d.ts +996 -0
  83. package/dist/resources/da-dk/ui.d.ts.map +1 -0
  84. package/dist/resources/da-dk/ui.js +995 -0
  85. package/dist/resources/da-dk/ui.js.map +1 -0
  86. package/dist/resources/de-de/common.d.ts +1964 -0
  87. package/dist/resources/de-de/common.d.ts.map +1 -0
  88. package/dist/resources/de-de/common.js +1963 -0
  89. package/dist/resources/de-de/common.js.map +1 -0
  90. package/dist/resources/de-de/errors.d.ts +45 -0
  91. package/dist/resources/de-de/errors.d.ts.map +1 -0
  92. package/dist/resources/de-de/errors.js +44 -0
  93. package/dist/resources/de-de/errors.js.map +1 -0
  94. package/dist/resources/de-de/generated.d.ts +20 -0
  95. package/dist/resources/de-de/generated.d.ts.map +1 -0
  96. package/dist/resources/de-de/generated.js +19 -0
  97. package/dist/resources/de-de/generated.js.map +1 -0
  98. package/dist/resources/de-de/studio.d.ts +18 -0
  99. package/dist/resources/de-de/studio.d.ts.map +1 -0
  100. package/dist/resources/de-de/studio.js +17 -0
  101. package/dist/resources/de-de/studio.js.map +1 -0
  102. package/dist/resources/de-de/ui.d.ts +996 -0
  103. package/dist/resources/de-de/ui.d.ts.map +1 -0
  104. package/dist/resources/de-de/ui.js +995 -0
  105. package/dist/resources/de-de/ui.js.map +1 -0
  106. package/dist/resources/en-us/common.d.ts +1964 -0
  107. package/dist/resources/en-us/common.d.ts.map +1 -0
  108. package/dist/resources/en-us/common.js +1963 -0
  109. package/dist/resources/en-us/common.js.map +1 -0
  110. package/dist/resources/en-us/errors.d.ts +45 -0
  111. package/dist/resources/en-us/errors.d.ts.map +1 -0
  112. package/dist/resources/en-us/errors.js +44 -0
  113. package/dist/resources/en-us/errors.js.map +1 -0
  114. package/dist/resources/en-us/generated.d.ts +20 -0
  115. package/dist/resources/en-us/generated.d.ts.map +1 -0
  116. package/dist/resources/en-us/generated.js +19 -0
  117. package/dist/resources/en-us/generated.js.map +1 -0
  118. package/dist/resources/en-us/studio.d.ts +18 -0
  119. package/dist/resources/en-us/studio.d.ts.map +1 -0
  120. package/dist/resources/en-us/studio.js +17 -0
  121. package/dist/resources/en-us/studio.js.map +1 -0
  122. package/dist/resources/en-us/ui.d.ts +996 -0
  123. package/dist/resources/en-us/ui.d.ts.map +1 -0
  124. package/dist/resources/en-us/ui.js +995 -0
  125. package/dist/resources/en-us/ui.js.map +1 -0
  126. package/dist/resources/fr-fr/common.d.ts +1964 -0
  127. package/dist/resources/fr-fr/common.d.ts.map +1 -0
  128. package/dist/resources/fr-fr/common.js +1963 -0
  129. package/dist/resources/fr-fr/common.js.map +1 -0
  130. package/dist/resources/fr-fr/errors.d.ts +45 -0
  131. package/dist/resources/fr-fr/errors.d.ts.map +1 -0
  132. package/dist/resources/fr-fr/errors.js +44 -0
  133. package/dist/resources/fr-fr/errors.js.map +1 -0
  134. package/dist/resources/fr-fr/generated.d.ts +20 -0
  135. package/dist/resources/fr-fr/generated.d.ts.map +1 -0
  136. package/dist/resources/fr-fr/generated.js +19 -0
  137. package/dist/resources/fr-fr/generated.js.map +1 -0
  138. package/dist/resources/fr-fr/studio.d.ts +18 -0
  139. package/dist/resources/fr-fr/studio.d.ts.map +1 -0
  140. package/dist/resources/fr-fr/studio.js +17 -0
  141. package/dist/resources/fr-fr/studio.js.map +1 -0
  142. package/dist/resources/fr-fr/ui.d.ts +996 -0
  143. package/dist/resources/fr-fr/ui.d.ts.map +1 -0
  144. package/dist/resources/fr-fr/ui.js +995 -0
  145. package/dist/resources/fr-fr/ui.js.map +1 -0
  146. package/dist/resources/index.d.ts +8 -0
  147. package/dist/resources/index.d.ts.map +1 -0
  148. package/dist/resources/index.js +21 -0
  149. package/dist/resources/index.js.map +1 -0
  150. package/dist/resources/lazy.d.ts +20 -0
  151. package/dist/resources/lazy.d.ts.map +1 -0
  152. package/dist/resources/lazy.js +49 -0
  153. package/dist/resources/lazy.js.map +1 -0
  154. package/dist/resources/zh-cn/common.d.ts +1964 -0
  155. package/dist/resources/zh-cn/common.d.ts.map +1 -0
  156. package/dist/resources/zh-cn/common.js +1963 -0
  157. package/dist/resources/zh-cn/common.js.map +1 -0
  158. package/dist/resources/zh-cn/errors.d.ts +45 -0
  159. package/dist/resources/zh-cn/errors.d.ts.map +1 -0
  160. package/dist/resources/zh-cn/errors.js +44 -0
  161. package/dist/resources/zh-cn/errors.js.map +1 -0
  162. package/dist/resources/zh-cn/generated.d.ts +20 -0
  163. package/dist/resources/zh-cn/generated.d.ts.map +1 -0
  164. package/dist/resources/zh-cn/generated.js +19 -0
  165. package/dist/resources/zh-cn/generated.js.map +1 -0
  166. package/dist/resources/zh-cn/studio.d.ts +18 -0
  167. package/dist/resources/zh-cn/studio.d.ts.map +1 -0
  168. package/dist/resources/zh-cn/studio.js +17 -0
  169. package/dist/resources/zh-cn/studio.js.map +1 -0
  170. package/dist/resources/zh-cn/ui.d.ts +996 -0
  171. package/dist/resources/zh-cn/ui.d.ts.map +1 -0
  172. package/dist/resources/zh-cn/ui.js +995 -0
  173. package/dist/resources/zh-cn/ui.js.map +1 -0
  174. package/dist/resources/zh-tw/common.d.ts +1964 -0
  175. package/dist/resources/zh-tw/common.d.ts.map +1 -0
  176. package/dist/resources/zh-tw/common.js +1963 -0
  177. package/dist/resources/zh-tw/common.js.map +1 -0
  178. package/dist/resources/zh-tw/errors.d.ts +45 -0
  179. package/dist/resources/zh-tw/errors.d.ts.map +1 -0
  180. package/dist/resources/zh-tw/errors.js +44 -0
  181. package/dist/resources/zh-tw/errors.js.map +1 -0
  182. package/dist/resources/zh-tw/generated.d.ts +20 -0
  183. package/dist/resources/zh-tw/generated.d.ts.map +1 -0
  184. package/dist/resources/zh-tw/generated.js +19 -0
  185. package/dist/resources/zh-tw/generated.js.map +1 -0
  186. package/dist/resources/zh-tw/studio.d.ts +18 -0
  187. package/dist/resources/zh-tw/studio.d.ts.map +1 -0
  188. package/dist/resources/zh-tw/studio.js +17 -0
  189. package/dist/resources/zh-tw/studio.js.map +1 -0
  190. package/dist/resources/zh-tw/ui.d.ts +996 -0
  191. package/dist/resources/zh-tw/ui.d.ts.map +1 -0
  192. package/dist/resources/zh-tw/ui.js +995 -0
  193. package/dist/resources/zh-tw/ui.js.map +1 -0
  194. package/locales/ar-EG/common.json +1954 -0
  195. package/locales/ar-EG/errors.json +35 -0
  196. package/locales/ar-EG/generated.json +10 -0
  197. package/locales/ar-EG/studio.json +8 -0
  198. package/locales/ar-EG/ui.json +986 -0
  199. package/locales/cs-CZ/common.json +1954 -0
  200. package/locales/cs-CZ/errors.json +35 -0
  201. package/locales/cs-CZ/generated.json +10 -0
  202. package/locales/cs-CZ/studio.json +8 -0
  203. package/locales/cs-CZ/ui.json +986 -0
  204. package/locales/da-DK/common.json +1954 -0
  205. package/locales/da-DK/errors.json +35 -0
  206. package/locales/da-DK/generated.json +10 -0
  207. package/locales/da-DK/studio.json +8 -0
  208. package/locales/da-DK/ui.json +986 -0
  209. package/locales/de-DE/common.json +1954 -0
  210. package/locales/de-DE/errors.json +35 -0
  211. package/locales/de-DE/generated.json +10 -0
  212. package/locales/de-DE/studio.json +8 -0
  213. package/locales/de-DE/ui.json +986 -0
  214. package/locales/en-US/common.json +1954 -0
  215. package/locales/en-US/errors.json +35 -0
  216. package/locales/en-US/generated.json +10 -0
  217. package/locales/en-US/studio.json +8 -0
  218. package/locales/en-US/ui.json +986 -0
  219. package/locales/fr-FR/common.json +1954 -0
  220. package/locales/fr-FR/errors.json +35 -0
  221. package/locales/fr-FR/generated.json +10 -0
  222. package/locales/fr-FR/studio.json +8 -0
  223. package/locales/fr-FR/ui.json +986 -0
  224. package/locales/zh-CN/common.json +1954 -0
  225. package/locales/zh-CN/errors.json +35 -0
  226. package/locales/zh-CN/generated.json +10 -0
  227. package/locales/zh-CN/studio.json +8 -0
  228. package/locales/zh-CN/ui.json +986 -0
  229. package/locales/zh-TW/common.json +1954 -0
  230. package/locales/zh-TW/errors.json +35 -0
  231. package/locales/zh-TW/generated.json +10 -0
  232. package/locales/zh-TW/studio.json +8 -0
  233. package/locales/zh-TW/ui.json +986 -0
  234. package/package.json +51 -0
@@ -0,0 +1,986 @@
1
+ {
2
+ "action": {
3
+ "close": "Fermer",
4
+ "cancel": "Annuler",
5
+ "confirm": "Confirmer",
6
+ "save": "Enregistrer",
7
+ "apply": "Appliquer",
8
+ "delete": "Supprimer",
9
+ "edit": "Modifier",
10
+ "copy": "Copier",
11
+ "copied": "Copié",
12
+ "undo": "Annuler",
13
+ "retry": "Réessayer",
14
+ "clear": "Effacer",
15
+ "selectAll": "Tout sélectionner",
16
+ "clearSelection": "Effacer la sélection",
17
+ "showPassword": "Afficher le mot de passe",
18
+ "hidePassword": "Masquer le mot de passe",
19
+ "reveal": "Révéler",
20
+ "hide": "Masquer"
21
+ },
22
+ "state": {
23
+ "loading": "Chargement…",
24
+ "empty": "Rien ici pour l’instant",
25
+ "noResults": "Aucun résultat",
26
+ "optional": "Facultatif",
27
+ "required": "Obligatoire",
28
+ "error": "Une erreur s’est produite"
29
+ },
30
+ "pagination": {
31
+ "previous": "Précédent",
32
+ "next": "Suivant",
33
+ "pageOf": "Page {page, number} sur {pages, number}",
34
+ "rowsPerPage": "Lignes par page",
35
+ "range": "{from, number}–{to, number} sur {total, number}"
36
+ },
37
+ "table": {
38
+ "sortAscending": "Trier par ordre croissant",
39
+ "sortDescending": "Trier par ordre décroissant",
40
+ "rowActions": "Actions de ligne",
41
+ "selectRow": "Sélectionner la ligne",
42
+ "selectAllRows": "Sélectionner toutes les lignes"
43
+ },
44
+ "dialog": {
45
+ "close": "Fermer la boîte de dialogue",
46
+ "confirmTitle": "Êtes-vous sûr ?"
47
+ },
48
+ "combobox": {
49
+ "placeholder": "Sélectionner…",
50
+ "search": "Rechercher…",
51
+ "noMatches": "Aucune correspondance"
52
+ },
53
+ "toast": {
54
+ "dismiss": "Fermer la notification"
55
+ },
56
+ "widgets": {
57
+ "kpi": {
58
+ "statCard": {
59
+ "description": "La carte de mesure de référence : un agrégat principal avec pastille de tendance et mini-sparkline en option."
60
+ },
61
+ "usageMeter": {
62
+ "description": "Consommation du quota par rapport à une limite ; la barre passe à l'orange puis au rouge au-delà de vos seuils."
63
+ },
64
+ "statTileCompact": {
65
+ "description": "Une tuile de mesure fine avec micro-libellé, puce de tendance et spark à 6 barres — pour des rangées denses de 4 à 6."
66
+ },
67
+ "metricHero": {
68
+ "description": "Une mesure surdimensionnée qui s'incrémente au chargement, avec pastille de tendance, spark et progression vers l'objectif.",
69
+ "goalLabel": "Objectif"
70
+ },
71
+ "statPairCard": {
72
+ "description": "Deux mesures côte à côte ; la seconde peut être dérivée de la première."
73
+ },
74
+ "gaugeRing": {
75
+ "description": "Une jauge annulaire pour un score ou un pourcentage, teintée selon la plage où tombe la valeur."
76
+ },
77
+ "gaugeArc": {
78
+ "description": "Un arc de compteur avec plages qualitatives et aiguille ; affiche aussi une grille de jauges."
79
+ },
80
+ "periodComparison": {
81
+ "description": "Cette période face à la précédente en deux barres, avec l'écart calculé en dessous.",
82
+ "higherLabel": "de plus",
83
+ "lowerLabel": "de moins",
84
+ "flatLabel": "stable"
85
+ },
86
+ "microKpiSubtitle": {
87
+ "description": "Une statistique d'en-tête sur une ligne, construite à partir d'un modèle et recalculée en direct."
88
+ },
89
+ "autoInsights": {
90
+ "description": "Des constats classés — un chiffre clé, une phrase et un spark — avec rotation par actualisation.",
91
+ "emptyTitle": "Aucun constat pour l'instant",
92
+ "emptyBody": "Les constats apparaissent dès qu'il y a assez de données pour dégager une tendance.",
93
+ "refreshLabel": "Actualiser"
94
+ }
95
+ },
96
+ "charts": {
97
+ "boxplot": {
98
+ "description": "Résumé en boîte à moustaches de la dispersion d'une colonne numérique par catégorie — min, quartiles, médiane et max.",
99
+ "emptyTitle": "Aucune distribution à tracer",
100
+ "emptyBody": "Aucune ligne ne correspond aux filtres pour les boîtes à moustaches."
101
+ },
102
+ "violin": {
103
+ "description": "Courbes de densité en miroir comparant la distribution d'une colonne numérique entre les groupes.",
104
+ "emptyTitle": "Aucune distribution à tracer",
105
+ "emptyBody": "Aucune ligne ne correspond aux filtres pour les profils de densité."
106
+ },
107
+ "ridgeline": {
108
+ "description": "Crêtes de densité superposées comparant une colonne numérique entre groupes ordonnés.",
109
+ "emptyTitle": "Aucune crête à tracer",
110
+ "emptyBody": "Aucune ligne ne correspond aux filtres pour les profils de densité."
111
+ },
112
+ "scatterBubble": {
113
+ "description": "Deux colonnes numériques en points, avec une taille de bulle et une ligne de tendance en option.",
114
+ "emptyTitle": "Aucun point à tracer",
115
+ "emptyBody": "Aucune ligne ne correspond aux filtres pour les colonnes choisies."
116
+ },
117
+ "hexbin": {
118
+ "description": "Densité hexagonale de deux colonnes numériques, teintée selon le nombre de lignes par tuile.",
119
+ "emptyTitle": "Aucune densité à tracer",
120
+ "emptyBody": "Aucune ligne ne correspond aux filtres à regrouper."
121
+ },
122
+ "correlationMatrix": {
123
+ "description": "Corrélation de Pearson entre colonnes numériques choisies, du fortement positif au fortement négatif.",
124
+ "emptyTitle": "Rien à corréler",
125
+ "emptyBody": "Choisissez au moins deux colonnes numériques avec des lignes correspondantes."
126
+ },
127
+ "parallelCoordinates": {
128
+ "description": "Chaque enregistrement en ligne sur plusieurs axes numériques normalisés, coloré par catégorie.",
129
+ "emptyTitle": "Aucun enregistrement à tracer",
130
+ "emptyBody": "Aucune ligne ne correspond aux filtres sur les axes choisis."
131
+ }
132
+ },
133
+ "feeds": {
134
+ "activityFeed": {
135
+ "description": "Un fil continu de qui a fait quoi dans votre espace de travail, du plus récent au plus ancien.",
136
+ "emptyTitle": "Aucune activité récente",
137
+ "emptyBody": "Les actions de votre espace de travail apparaîtront ici."
138
+ },
139
+ "notificationFeed": {
140
+ "description": "Notifications groupées avec état non lu, filtres et actions intégrées.",
141
+ "emptyTitle": "Aucune notification",
142
+ "emptyBody": "Les nouvelles notifications apparaîtront ici."
143
+ },
144
+ "realtimeFeed": {
145
+ "description": "Un flux d’événements en direct qui ajoute les nouveaux éléments en tête.",
146
+ "emptyTitle": "En attente d’événements",
147
+ "emptyBody": "Les événements en direct s’afficheront au fur et à mesure."
148
+ },
149
+ "timelineVertical": {
150
+ "description": "Une chronologie verticale d’événements, de versions, d’incidents ou d’étapes d’exécution.",
151
+ "emptyTitle": "Rien pour l’instant",
152
+ "emptyBody": "Les événements apparaîtront sur cette chronologie au fur et à mesure."
153
+ },
154
+ "unreadBadge": {
155
+ "description": "Une pastille de comptage des éléments non lus, synchronisée avec le fil.",
156
+ "unitLabel": "non lus"
157
+ },
158
+ "loadOlderPaginator": {
159
+ "description": "Un bouton de pied de page qui charge les enregistrements plus anciens par lots jusqu'à épuisement du flux.",
160
+ "label": "Charger plus anciens",
161
+ "loadingLabel": "Chargement…",
162
+ "exhaustedLabel": "Rien de plus ancien",
163
+ "ofLabel": "sur"
164
+ },
165
+ "toastStack": {
166
+ "description": "L'hôte des notifications éphémères : de brèves confirmations avec une annulation en option.",
167
+ "undoLabel": "Annuler",
168
+ "dismissLabel": "Fermer",
169
+ "regionLabel": "Notifications"
170
+ }
171
+ },
172
+ "calendar": {
173
+ "calendarMonth": {
174
+ "description": "Une grille mensuelle des événements planifiés avec des puces par jour et la navigation entre les mois.",
175
+ "emptyTitle": "Rien de planifié",
176
+ "emptyBody": "Les événements planifiés apparaîtront dans ce calendrier."
177
+ },
178
+ "dayAgenda": {
179
+ "description": "Les événements du jour sélectionné sous forme d'agenda chronologique.",
180
+ "emptyTitle": "Rien de planifié",
181
+ "emptyBody": "Les événements du jour sélectionné apparaîtront ici."
182
+ },
183
+ "scheduleMatrix": {
184
+ "description": "Une grille de postes par ressource et par jour avec la couverture quotidienne et une légende.",
185
+ "emptyTitle": "Aucun poste planifié",
186
+ "emptyBody": "Les postes attribués apparaîtront dans ce planning."
187
+ },
188
+ "capacityBoard": {
189
+ "description": "Des barres d'utilisation par membre avec une répartition par projet et un statut de charge.",
190
+ "emptyTitle": "Aucune donnée de charge",
191
+ "emptyBody": "L'utilisation des membres apparaîtra ici une fois les affectations créées."
192
+ },
193
+ "calendarLegendFilter": {
194
+ "description": "Catégories d'événements avec compteur ; cocher filtre le calendrier voisin.",
195
+ "emptyTitle": "Aucune catégorie",
196
+ "emptyBody": "Les catégories d'événements apparaîtront ici dès qu'il y aura des événements.",
197
+ "uncategorizedLabel": "Sans catégorie"
198
+ },
199
+ "upcomingEventsList": {
200
+ "description": "Les prochains événements par ordre de date, avec responsable et statut.",
201
+ "emptyTitle": "Rien à venir",
202
+ "emptyBody": "Les événements planifiés apparaîtront ici au fur et à mesure."
203
+ },
204
+ "dateRangePicker": {
205
+ "description": "Une plage de dates avec raccourcis, qui filtre le reste de la page.",
206
+ "previousLabel": "Mois précédent",
207
+ "nextLabel": "Mois suivant",
208
+ "summaryLabel": "{n} jours sélectionnés",
209
+ "presets": {
210
+ "7d": "7 derniers jours",
211
+ "30d": "30 derniers jours",
212
+ "90d": "90 derniers jours",
213
+ "mtd": "Mois en cours",
214
+ "qtd": "Trimestre en cours",
215
+ "ytd": "Année en cours"
216
+ }
217
+ },
218
+ "scheduledJobsList": {
219
+ "description": "Rapports et exports récurrents avec fréquence, prochaine exécution et interrupteur.",
220
+ "emptyTitle": "Aucune tâche planifiée",
221
+ "emptyBody": "Les rapports et exports récurrents apparaîtront ici une fois planifiés.",
222
+ "nextRunLabel": "Prochaine exécution",
223
+ "toggleLabel": "Activer la planification",
224
+ "recipientsLabel": "Destinataires"
225
+ }
226
+ },
227
+ "tables": {
228
+ "masterList": {
229
+ "description": "Une liste sélectionnable d’enregistrements qui pilote un volet de détail.",
230
+ "emptyTitle": "Aucun élément",
231
+ "emptyBody": "Les éléments apparaîtront ici une fois créés."
232
+ },
233
+ "logTable": {
234
+ "description": "Un journal d’événements avec recherche, filtre d’erreurs et actions par ligne.",
235
+ "emptyTitle": "Aucune entrée de journal",
236
+ "emptyBody": "Les événements seront enregistrés ici au fur et à mesure."
237
+ },
238
+ "cardGallery": {
239
+ "description": "Une galerie responsive de cartes d’entités avec statut et actions rapides.",
240
+ "emptyTitle": "Rien à afficher",
241
+ "emptyBody": "Les éléments apparaîtront ici sous forme de cartes."
242
+ },
243
+ "groupedSummaryTable": {
244
+ "description": "Lignes groupées avec colonnes d’agrégats, détails dépliables et totaux.",
245
+ "emptyTitle": "Aucune donnée de synthèse",
246
+ "emptyBody": "Les totaux groupés apparaîtront ici dès qu’il y aura des données."
247
+ },
248
+ "schemaTree": {
249
+ "description": "Un explorateur de schémas, tables et colonnes avec badges de type et de clé.",
250
+ "emptyTitle": "Aucun schéma analysé",
251
+ "emptyBody": "Connectez une base de données pour explorer son schéma ici."
252
+ },
253
+ "toggleMatrix": {
254
+ "description": "Une grille interactive de bascules booléennes pour rôles, règles ou canaux.",
255
+ "emptyTitle": "Aucune matrice configurée",
256
+ "emptyBody": "Les lignes et colonnes apparaîtront ici une fois configurées."
257
+ },
258
+ "sparklineTable": {
259
+ "description": "Lignes de métriques avec micro-courbe, valeur actuelle et pastille d'évolution positive ou négative.",
260
+ "emptyTitle": "Aucune métrique",
261
+ "emptyBody": "Les métriques apparaîtront ici dès qu'il y aura des données à résumer."
262
+ },
263
+ "topMoversList": {
264
+ "description": "Les métriques qui ont le plus évolué, avec un sens jugé favorable ou défavorable.",
265
+ "emptyTitle": "Aucune évolution",
266
+ "emptyBody": "Les métriques qui évoluent le plus apparaîtront ici."
267
+ },
268
+ "rankedEntityList": {
269
+ "description": "Les meilleures entités selon une métrique, avec rang et barre proportionnelle.",
270
+ "emptyTitle": "Aucun classement",
271
+ "emptyBody": "Les meilleures entités apparaîtront ici dès qu'il y aura des données à classer."
272
+ },
273
+ "accordionList": {
274
+ "description": "Lignes dépliables avec badge et panneau de détail, ouverture simple ou multiple.",
275
+ "emptyTitle": "Rien à déplier",
276
+ "emptyBody": "Les entrées apparaîtront ici dès qu'il y en aura."
277
+ },
278
+ "comparisonMatrix": {
279
+ "description": "Une grille comparant les offres, avec une colonne mise en avant.",
280
+ "includedLabel": "Inclus",
281
+ "notIncludedLabel": "Non inclus",
282
+ "promotedLabel": "Recommandé"
283
+ },
284
+ "chipCloud": {
285
+ "description": "Puces à la ligne pour les tables détectées, les variables ou les suggestions.",
286
+ "emptyTitle": "Rien de détecté",
287
+ "emptyBody": "Les tables et variables apparaîtront ici sous forme de puces une fois détectées.",
288
+ "moreLabel": "+{n} de plus"
289
+ }
290
+ },
291
+ "boards": {
292
+ "kanbanBoard": {
293
+ "description": "Colonnes de statut fixes avec des cartes déplaçables ; faites glisser une carte vers une autre colonne pour changer son statut.",
294
+ "emptyTitle": "Aucune carte pour l'instant",
295
+ "emptyBody": "Les cartes apparaîtront dans leurs colonnes de statut à mesure que des enregistrements sont créés."
296
+ },
297
+ "kanbanSwimlaneGrid": {
298
+ "description": "Une grille couloirs × colonnes ; déplacer une carte réaffecte à la fois son couloir et son statut.",
299
+ "emptyTitle": "Aucun couloir à afficher",
300
+ "emptyBody": "Regroupez les enregistrements par un champ de couloir et un champ de statut pour construire la grille."
301
+ },
302
+ "addCard": "Ajouter une carte",
303
+ "grip": "Glisser pour déplacer la carte",
304
+ "pointsUnit": "pts",
305
+ "laneSummary": "Σ{points} pts · {count}",
306
+ "a11y": {
307
+ "grabbed": "{title} saisie. Utilisez les flèches pour déplacer, Entrée pour déposer, Échap pour annuler.",
308
+ "over": "{title} est au-dessus de {cell}.",
309
+ "moved": "{title} déplacée vers {cell}.",
310
+ "returned": "{title} est revenue à sa position d'origine.",
311
+ "failed": "Impossible de déplacer {title} ; elle est revenue à sa position d'origine."
312
+ },
313
+ "boardCard": {
314
+ "description": "Une carte de tableau : étiquette, titre, progression, responsable et échéance.",
315
+ "emptyTitle": "Aucune carte",
316
+ "emptyBody": "Aucun enregistrement n'est encore associé à cette carte."
317
+ },
318
+ "inlineComposeCard": {
319
+ "description": "Ajout rapide qui crée un enregistrement avec les valeurs par défaut de la colonne.",
320
+ "placeholder": "Titre de la carte…",
321
+ "addLabel": "Ajouter",
322
+ "cancelLabel": "Annuler",
323
+ "openLabel": "Ajouter une carte"
324
+ }
325
+ },
326
+ "communication": {
327
+ "conversationInbox": {
328
+ "description": "Une liste sélectionnable de conversations avec compteurs de non-lus, présence et aperçu du dernier message.",
329
+ "emptyTitle": "Aucune conversation",
330
+ "emptyBody": "Les conversations apparaîtront ici à mesure que des messages arrivent.",
331
+ "noMatchesTitle": "Aucune conversation correspondante",
332
+ "searchLabel": "Rechercher dans les conversations",
333
+ "searchPlaceholder": "Rechercher dans les conversations…"
334
+ },
335
+ "chatThread": {
336
+ "description": "Bulles de messages groupées par auteur et par jour, avec pièces jointes et champ de saisie.",
337
+ "emptyTitle": "Aucun message pour l'instant",
338
+ "emptyBody": "Les messages de cette conversation apparaîtront ici.",
339
+ "composerPlaceholder": "Écrire un message…",
340
+ "sendLabel": "Envoyer",
341
+ "attachLabel": "Ajouter une pièce jointe",
342
+ "typingLabel": "en train d'écrire…"
343
+ },
344
+ "aiChatPanel": {
345
+ "description": "Un panneau d'assistant pour poser des questions sur votre schéma et vos données.",
346
+ "emptyTitle": "Posez une question sur vos données",
347
+ "emptyBody": "Posez une question sur votre schéma, vos tables ou vos métriques pour commencer.",
348
+ "composerPlaceholder": "Poser une question…",
349
+ "sendLabel": "Envoyer",
350
+ "pendingLabel": "Réflexion…",
351
+ "configureTitle": "Aucun fournisseur d'IA configuré",
352
+ "configureBody": "Ajoutez une clé Anthropic ou OpenAI — ou pointez Adminium vers votre propre point de terminaison — pour poser des questions sur votre schéma.",
353
+ "configureCtaLabel": "Configurer un fournisseur"
354
+ },
355
+ "typingIndicator": {
356
+ "description": "Un avatar et une ligne en italique « en train d’écrire… », liée à un booléen actif par conversation.",
357
+ "label": "en train d’écrire…",
358
+ "emptyTitle": "Aucune saisie en cours",
359
+ "emptyBody": "L’état de saisie apparaîtra ici dès que la conversation sera active."
360
+ },
361
+ "callWidget": {
362
+ "description": "Un appel entrant, audio ou vidéo : avatar de l’appelant, état de l’appel et actions pour accepter ou refuser.",
363
+ "voiceLabel": "Appel audio",
364
+ "videoLabel": "Appel vidéo",
365
+ "ringingLabel": "Sonnerie…",
366
+ "connectingLabel": "Connexion…",
367
+ "activeLabel": "En communication",
368
+ "endedLabel": "Appel terminé",
369
+ "acceptLabel": "Accepter",
370
+ "declineLabel": "Refuser",
371
+ "endLabel": "Raccrocher",
372
+ "emptyTitle": "Aucun appel en cours",
373
+ "emptyBody": "Un appel entrant apparaîtra ici."
374
+ }
375
+ },
376
+ "geo": {
377
+ "mapBubble": {
378
+ "description": "Une carte dont les marqueurs circulaires sont dimensionnés selon la métrique choisie, accompagnée d’un classement des principaux lieux.",
379
+ "emptyTitle": "Aucun lieu",
380
+ "emptyBody": "Les lignes comportant une latitude et une longitude apparaissent ici sous forme de marqueurs.",
381
+ "mapUnavailableLabel": "La carte n’a pas pu être chargée. Le classement présente les mêmes données.",
382
+ "regionsLabel": "Principales régions",
383
+ "metricLabel": "Métrique"
384
+ },
385
+ "mapChoroplethGrid": {
386
+ "description": "Des tuiles de régions teintées selon la valeur — pour les tables comportant des codes de région mais pas de coordonnées.",
387
+ "emptyTitle": "Aucune région",
388
+ "emptyBody": "Les lignes comportant un code de région et une valeur numérique apparaissent ici sous forme de tuiles teintées.",
389
+ "legendLowLabel": "Faible",
390
+ "legendHighLabel": "Élevé"
391
+ }
392
+ },
393
+ "domain": {
394
+ "orgChart": {
395
+ "description": "L'arbre hiérarchique construit à partir de la référence au responsable d'une table de personnes, avec branches repliables.",
396
+ "emptyTitle": "Aucune structure hiérarchique",
397
+ "emptyBody": "L'organigramme apparaît dès que les lignes de personnes référencent un responsable.",
398
+ "reportsLabel": "Rattachements · {count}",
399
+ "a11yLabel": "Organigramme"
400
+ },
401
+ "ganttChart": {
402
+ "description": "Barres de tâches sur un axe temporel, groupées par phase, avec avancement, jalons et repère du jour.",
403
+ "emptyTitle": "Rien de planifié",
404
+ "emptyBody": "Les tâches apparaissent ici dès qu'elles ont une date de début et de fin.",
405
+ "ungroupedLabel": "Tâches"
406
+ },
407
+ "documentCanvas": {
408
+ "description": "Un canevas de document au style papier — facture, rapport ou e-mail — dont les blocs peuvent être sélectionnés, réordonnés et supprimés.",
409
+ "emptyTitle": "Ce document est vide",
410
+ "emptyBody": "Ajoutez un bloc depuis la palette pour commencer à composer le document.",
411
+ "addBlockLabel": "Ajouter un bloc",
412
+ "removeBlockLabel": "Supprimer le bloc",
413
+ "moveUpLabel": "Déplacer le bloc vers le haut",
414
+ "moveDownLabel": "Déplacer le bloc vers le bas",
415
+ "blockListLabel": "Blocs du document",
416
+ "billedToLabel": "Facturé à",
417
+ "issuedLabel": "Émis le",
418
+ "dueLabel": "Échéance"
419
+ },
420
+ "blockTotalsSummary": {
421
+ "description": "Les totaux du document — sous-total, remise, taxe et total dû, recalculés à partir des lignes.",
422
+ "emptyTitle": "Pas encore de totaux",
423
+ "emptyBody": "Les totaux apparaissent dès que le document comporte des lignes.",
424
+ "subtotalLabel": "Sous-total",
425
+ "discountLabel": "Remise",
426
+ "taxLabel": "Taxe",
427
+ "totalLabel": "Total dû"
428
+ },
429
+ "blockLineItems": {
430
+ "description": "Lignes modifiables de description, quantité et tarif qui alimentent les totaux du document.",
431
+ "emptyTitle": "Aucune ligne",
432
+ "emptyBody": "Ajoutez une ligne pour facturer une prestation sur ce document.",
433
+ "descHeader": "Description",
434
+ "qtyHeader": "Qté",
435
+ "rateHeader": "Tarif",
436
+ "amountHeader": "Montant"
437
+ },
438
+ "blockKpiRow": {
439
+ "description": "Une rangée de tuiles de statistiques dont la variation est colorée selon son signe.",
440
+ "emptyTitle": "Aucun indicateur",
441
+ "emptyBody": "Les indicateurs apparaissent ici dès que le rapport contient des chiffres."
442
+ },
443
+ "blockBarChart": {
444
+ "description": "Un mini-graphique à barres dans la couleur du document, dimensionné pour un bloc.",
445
+ "emptyTitle": "Aucune donnée à représenter",
446
+ "emptyBody": "Les barres apparaissent dès que le rapport contient une série."
447
+ },
448
+ "blockLineChart": {
449
+ "description": "Un mini-graphique en courbe avec aire remplie facultative, dimensionné pour un bloc.",
450
+ "emptyTitle": "Aucune donnée à représenter",
451
+ "emptyBody": "La courbe apparaît dès que le rapport contient une série."
452
+ },
453
+ "blockTwoColTable": {
454
+ "description": "Un tableau à deux colonnes avec une ligne d'en-tête stylisée et une colonne de valeurs en chasse fixe.",
455
+ "emptyTitle": "Aucune ligne",
456
+ "emptyBody": "Les lignes apparaissent ici dès que le rapport contient des valeurs."
457
+ },
458
+ "blockTaxBreakdown": {
459
+ "description": "Lignes de taxe avec libellé, taux et montant, appliquées au sous-total du document.",
460
+ "emptyTitle": "Aucune ligne de taxe",
461
+ "emptyBody": "Les lignes de taxe apparaissent dès que le document comporte des taux."
462
+ },
463
+ "blockMultiCurrency": {
464
+ "description": "Le total du document converti par devise aux taux indiqués.",
465
+ "emptyTitle": "Aucune conversion",
466
+ "emptyBody": "Les conversions apparaissent dès que le document indique des taux de change.",
467
+ "footnote": "Les taux sont indicatifs et peuvent différer au règlement."
468
+ },
469
+ "blockPaymentHistory": {
470
+ "description": "Paiements passés avec date, moyen masqué, montant et pastille de statut.",
471
+ "emptyTitle": "Aucun paiement",
472
+ "emptyBody": "Les paiements liés à ce document apparaissent ici."
473
+ },
474
+ "blockDiscountCodes": {
475
+ "description": "Codes de remise appliqués avec leur libellé et le montant crédité.",
476
+ "emptyTitle": "Aucune remise appliquée",
477
+ "emptyBody": "Les codes de remise appliqués à ce document apparaissent ici."
478
+ },
479
+ "blockLoyaltyBanner": {
480
+ "description": "Une bannière de fidélité avec le solde de points, le niveau et les points gagnés sur cette commande.",
481
+ "emptyTitle": "Aucun solde de fidélité",
482
+ "emptyBody": "La bannière de fidélité apparaît dès que le client dispose de points.",
483
+ "balanceLabel": "{balance} pts · {tier}",
484
+ "earnedLabel": "+{earned} gagnés sur cette commande"
485
+ },
486
+ "blockRecurringBanner": {
487
+ "description": "Une bannière annonçant la fréquence de facturation, la prochaine échéance et les cycles restants.",
488
+ "emptyTitle": "Non récurrent",
489
+ "emptyBody": "Cette bannière apparaît dès que le document suit un échéancier récurrent.",
490
+ "template": "Récurrent — {freq} · Prochain le {next} · {count} cycles"
491
+ },
492
+ "blockQrPay": {
493
+ "description": "Une tuile à scanner pour payer, avec légende et montant dû.",
494
+ "emptyTitle": "Rien à payer",
495
+ "emptyBody": "Le code de paiement apparaît dès que le document comporte un montant dû.",
496
+ "amountLabel": "Montant dû"
497
+ },
498
+ "blockDeliveryStepper": {
499
+ "description": "Étapes de livraison horizontales marquées comme faites, en cours ou à venir.",
500
+ "emptyTitle": "Aucune étape de livraison",
501
+ "emptyBody": "Les étapes apparaissent dès que la commande a un parcours de livraison."
502
+ },
503
+ "blockSignature": {
504
+ "description": "Lignes de signature pour un nom et une fonction, avec la date de signature.",
505
+ "emptyTitle": "Aucune signature",
506
+ "emptyBody": "Les lignes de signature apparaissent dès que le document désigne un signataire.",
507
+ "namePlaceholder": "Nom complet",
508
+ "titlePlaceholder": "Fonction",
509
+ "dateLabel": "Date"
510
+ },
511
+ "blockTermsCheckbox": {
512
+ "description": "Une case pour les conditions, avec libellé modifiable.",
513
+ "defaultLabel": "J'accepte les conditions générales"
514
+ },
515
+ "blockApproval": {
516
+ "description": "Une carte d'approbateur avec pastille teintée selon le statut et actions facultatives d'approbation ou de rejet.",
517
+ "emptyTitle": "Aucun approbateur",
518
+ "emptyBody": "La carte d'approbation apparaît dès que le document désigne un approbateur.",
519
+ "approveLabel": "Approuver",
520
+ "rejectLabel": "Rejeter",
521
+ "pendingLabel": "En attente",
522
+ "approvedLabel": "Approuvé",
523
+ "rejectedLabel": "Rejeté"
524
+ },
525
+ "blockAttachments": {
526
+ "description": "Fichiers joints avec leur nom et leur taille.",
527
+ "emptyTitle": "Aucune pièce jointe",
528
+ "emptyBody": "Les fichiers joints à ce document apparaissent ici."
529
+ },
530
+ "blockLateFees": {
531
+ "description": "Un encadré d'avertissement indiquant les pénalités de retard et le délai de grâce.",
532
+ "emptyTitle": "Aucune pénalité de retard",
533
+ "emptyBody": "Cet encadré apparaît dès que le document définit une pénalité de retard.",
534
+ "template": "Une pénalité de retard de {rate} s'applique après {days} jours."
535
+ },
536
+ "blockImagePlaceholder": {
537
+ "description": "Un cadre en pointillés tenant lieu d'image, avec une légende.",
538
+ "emptyTitle": "Aucune image",
539
+ "emptyBody": "Le cadre apparaît dès que le bloc comporte une légende."
540
+ },
541
+ "blockContact": {
542
+ "description": "Lignes de contact pour un nom, une adresse e-mail et un numéro de téléphone.",
543
+ "emptyTitle": "Aucun contact",
544
+ "emptyBody": "Les coordonnées apparaissent dès que le document désigne un contact."
545
+ },
546
+ "blockHighlightBox": {
547
+ "description": "Un encadré associant un libellé à une grande valeur en chasse fixe.",
548
+ "emptyTitle": "Rien à mettre en avant",
549
+ "emptyBody": "L'encadré apparaît dès que le bloc comporte une valeur."
550
+ },
551
+ "starterTemplatePicker": {
552
+ "description": "Une grille de modèles prédéfinis avec vignettes générées ; en choisir un initialise un document complet.",
553
+ "emptyTitle": "Aucun modèle",
554
+ "emptyBody": "Définissez des modèles dans la configuration ou liez une table de modèles."
555
+ },
556
+ "sloMonitorCard": {
557
+ "description": "Carte SLA par service avec statut, disponibilité par rapport à la cible, bande de disponibilité quotidienne, budget d'erreur et latence p95.",
558
+ "emptyTitle": "Aucun moniteur",
559
+ "emptyBody": "Liez une table de moniteurs avec une colonne de statut et de disponibilité."
560
+ },
561
+ "uptimeSegmentBar": {
562
+ "description": "Bandes journalières de type page de statut, colorées selon le statut du jour, avec bascule 30/90 jours.",
563
+ "emptyTitle": "Aucun historique de disponibilité",
564
+ "emptyBody": "Les lignes de statut quotidien apparaissent ici sous forme de bande."
565
+ },
566
+ "experimentVariantCompare": {
567
+ "description": "Barres de conversion par variante avec le gain face au témoin et un indicateur de significativité.",
568
+ "emptyTitle": "Aucune variante",
569
+ "emptyBody": "Liez une table de variantes d'expérience avec des chiffres de conversion."
570
+ },
571
+ "creditCardTile": {
572
+ "description": "Un moyen de paiement enregistré sous forme de carte de marque avec numéro masqué, titulaire et expiration.",
573
+ "emptyTitle": "Aucun moyen de paiement",
574
+ "emptyBody": "Ajoutez une carte pour la voir ici."
575
+ },
576
+ "planPricingCards": {
577
+ "description": "Paliers tarifaires avec bascule mensuel/annuel, listes de fonctionnalités et une offre mise en avant.",
578
+ "emptyTitle": "Aucune offre",
579
+ "emptyBody": "Liez une table d'offres avec un nom et un prix mensuel."
580
+ },
581
+ "apiKeysPanel": {
582
+ "description": "Clés d'API avec badges d'environnement, valeurs masquées, portées, dernière utilisation et actions de copie, de renouvellement et de révocation.",
583
+ "emptyTitle": "Aucune clé d'API",
584
+ "emptyBody": "Créez une clé pour commencer à appeler l'API."
585
+ },
586
+ "apiPlayground": {
587
+ "description": "Un compositeur de requête avec paramètres et volet de réponse. Il compose seulement et n'envoie jamais de vraie requête.",
588
+ "emptyTitle": "Aucun point de terminaison sélectionné",
589
+ "emptyBody": "Choisissez un point de terminaison pour composer une requête."
590
+ },
591
+ "codeSnippetBlock": {
592
+ "description": "Un extrait de code copiable avec une puce de langage et des onglets optionnels par langage.",
593
+ "emptyTitle": "Aucun extrait",
594
+ "emptyBody": "Liez une colonne de code ou définissez un extrait statique dans la configuration."
595
+ },
596
+ "webhookEndpointsList": {
597
+ "description": "Points de terminaison webhook avec leur événement, URL cible, dernier déclenchement et interrupteur d'activation.",
598
+ "emptyTitle": "Aucun point de terminaison",
599
+ "emptyBody": "Ajoutez un point de terminaison webhook pour recevoir les événements de table."
600
+ },
601
+ "resourceApiCard": {
602
+ "description": "La surface d'API générée d'une table : nombre de lignes, badge de sécurité, puces de méthode et volume de requêtes.",
603
+ "emptyTitle": "Aucune ressource",
604
+ "emptyBody": "Liez une table pour afficher sa surface d'API générée."
605
+ },
606
+ "liveTimer": {
607
+ "description": "Un chronomètre démarrer/arrêter pour une tâche ; l'arrêter enregistre une entrée de temps.",
608
+ "emptyTitle": "Aucun chronomètre",
609
+ "emptyBody": "Liez une ligne d'entrée de temps avec une tâche et une colonne de durée."
610
+ },
611
+ "syncStatusCard": {
612
+ "description": "Identité de la connexion, latence, lignes synchronisées et planning de synchronisation, avec une action de synchronisation immédiate.",
613
+ "emptyTitle": "Aucune connexion",
614
+ "emptyBody": "Liez une ligne de connexion pour afficher son état de synchronisation."
615
+ },
616
+ "ipAllowlistCard": {
617
+ "description": "Adresses IP de sortie fixes à autoriser dans un pare-feu, chacune avec un bouton de copie.",
618
+ "emptyTitle": "Aucune IP de sortie",
619
+ "emptyBody": "Les adresses de sortie apparaissent ici une fois la connexion provisionnée."
620
+ },
621
+ "onboardingChecklist": {
622
+ "description": "Étapes de configuration avec estimations de durée et actions, au-dessus d'un anneau et d'une barre de progression recalculés en direct.",
623
+ "emptyTitle": "Rien à configurer",
624
+ "emptyBody": "Ajoutez des étapes d'intégration dans la configuration ou liez une table d'étapes."
625
+ },
626
+ "testimonialCard": {
627
+ "description": "Une citation client avec avatar et attribution.",
628
+ "emptyTitle": "Aucun témoignage",
629
+ "emptyBody": "Liez une ligne de citation pour afficher un témoignage client."
630
+ },
631
+ "trustBadges": {
632
+ "description": "Une ligne d'affirmations de conformité et de confiance séparées par des points.",
633
+ "emptyTitle": "Aucun badge",
634
+ "emptyBody": "Ajoutez des affirmations de conformité dans la configuration ou liez une table de badges."
635
+ },
636
+ "policyList": {
637
+ "description": "Politiques de sécurité au niveau des lignes par table, avec leur commande, leur rôle et un interrupteur d'activation.",
638
+ "emptyTitle": "Aucune politique",
639
+ "emptyBody": "Cette table n'a pas encore de politiques de sécurité au niveau des lignes."
640
+ }
641
+ },
642
+ "media": {
643
+ "fileBrowser": {
644
+ "description": "Parcourez fichiers et dossiers sous forme de grille ou de liste, avec fil d'Ariane, icônes de type et favoris.",
645
+ "emptyTitle": "Ce dossier est vide",
646
+ "emptyBody": "Téléversez des fichiers ou créez un dossier pour commencer."
647
+ },
648
+ "uploadDropzone": {
649
+ "description": "Une cible glisser-déposer pour téléverser des fichiers, avec contraintes de format et de taille.",
650
+ "dropTitle": "Déposez les fichiers à téléverser",
651
+ "browsePrefix": "ou",
652
+ "browseLabel": "parcourir"
653
+ },
654
+ "uploadProgressList": {
655
+ "description": "Lignes par fichier avec barre de progression et statut ; pilote aussi les tâches de la file d'export.",
656
+ "emptyTitle": "Aucun téléversement en cours",
657
+ "emptyBody": "Les fichiers que vous téléversez afficheront ici leur progression."
658
+ },
659
+ "attachmentList": {
660
+ "description": "Fichiers joints à un enregistrement, avec icônes de type, tailles et actions de téléchargement ou de suppression.",
661
+ "emptyTitle": "Aucune pièce jointe",
662
+ "emptyBody": "Les fichiers joints à cet enregistrement apparaîtront ici."
663
+ },
664
+ "imageBoard": {
665
+ "description": "Une grille de moodboard avec emplacements d'images et légendes, pour les tables contenant des URL d'images.",
666
+ "emptyTitle": "Aucune image pour l'instant",
667
+ "emptyBody": "Les images de référence apparaîtront sur ce tableau."
668
+ },
669
+ "linkList": {
670
+ "description": "Liens de référence avec titres et URL, ouverts dans un nouvel onglet.",
671
+ "emptyTitle": "Aucun lien pour l'instant",
672
+ "emptyBody": "Les liens de référence apparaîtront ici."
673
+ },
674
+ "root": "Fichiers",
675
+ "breadcrumb": "Fil d'Ariane",
676
+ "gridView": "Vue en grille",
677
+ "listView": "Vue en liste",
678
+ "nameHeader": "Nom",
679
+ "sizeHeader": "Taille",
680
+ "modifiedHeader": "Modifié",
681
+ "star": "Favori",
682
+ "items": "éléments",
683
+ "done": "Terminé",
684
+ "failed": "Échec",
685
+ "queued": "En file d'attente",
686
+ "retry": "Réessayer",
687
+ "download": "Télécharger",
688
+ "cancel": "Annuler",
689
+ "delete": "Supprimer",
690
+ "remove": "Retirer",
691
+ "addImage": "Ajouter une image",
692
+ "caption": "Légende",
693
+ "addLink": "Ajouter un lien",
694
+ "linkTitlePlaceholder": "Titre",
695
+ "linkUrlPlaceholder": "https://…",
696
+ "add": "Ajouter"
697
+ },
698
+ "forms": {
699
+ "modalWizard": {
700
+ "description": "Un formulaire de création en modale avec confirmation — le flux « nouvel enregistrement » standard.",
701
+ "trigger": "Créer",
702
+ "submit": "Créer",
703
+ "cancel": "Annuler",
704
+ "done": "Terminé",
705
+ "successTitle": "Enregistrement créé",
706
+ "successBody": "L’enregistrement a été sauvegardé.",
707
+ "required": "Ce champ est obligatoire."
708
+ },
709
+ "drawerForm": {
710
+ "description": "Un panneau latéral de création ou d’édition pour les enregistrements à nombreux champs.",
711
+ "trigger": "Nouveau",
712
+ "submit": "Enregistrer",
713
+ "cancel": "Annuler"
714
+ },
715
+ "stepper": {
716
+ "description": "Un indicateur d’étapes montrant l’avancement d’un parcours en plusieurs étapes.",
717
+ "a11yLabel": "Progression"
718
+ },
719
+ "progressBar": {
720
+ "description": "Une barre de progression déterminée avec pourcentage.",
721
+ "label": "Progression"
722
+ },
723
+ "otpInput": {
724
+ "description": "Un champ de saisie de code à usage unique.",
725
+ "label": "Code à usage unique"
726
+ },
727
+ "chipInput": {
728
+ "description": "Une saisie de tags : puces supprimables et texte libre validé par Entrée.",
729
+ "remove": "Supprimer",
730
+ "placeholder": "Saisir puis appuyer sur Entrée…"
731
+ },
732
+ "segmentedControl": {
733
+ "description": "Un sélecteur unique pour périodes, environnements et filtres.",
734
+ "a11yLabel": "Choisir une option"
735
+ },
736
+ "filterChipBar": {
737
+ "description": "Des puces de filtre avec compteurs calculés en direct sur la liste filtrée.",
738
+ "all": "Tout",
739
+ "a11yLabel": "Filtrer",
740
+ "meta": "{shown} sur {total}"
741
+ },
742
+ "toggleSwitchList": {
743
+ "description": "Une liste de réglages, chacun avec un interrupteur.",
744
+ "save": "Enregistrer",
745
+ "dirty": "Vous avez des modifications non enregistrées",
746
+ "emptyTitle": "Aucun réglage",
747
+ "emptyBody": "Les réglages apparaîtront ici une fois configurés."
748
+ },
749
+ "optionCards": {
750
+ "description": "Une grille de cartes à choix unique pour sources, modèles et forfaits.",
751
+ "a11yLabel": "Choisir une option"
752
+ },
753
+ "ruleBuilder": {
754
+ "description": "Un éditeur de conditions dont les règles deviennent un filtre — l’éditeur de segments.",
755
+ "add": "Ajouter une condition",
756
+ "remove": "Supprimer la condition",
757
+ "all": "TOUTES",
758
+ "any": "AU MOINS UNE",
759
+ "field": "Champ",
760
+ "operator": "Opérateur",
761
+ "value": "Valeur",
762
+ "valuePlaceholder": "Valeur…",
763
+ "emptyBody": "Aucune condition — ajoutez-en une pour définir ce segment."
764
+ },
765
+ "flowBuilder": {
766
+ "description": "Un canevas vertical de workflow : étapes déclencheur, condition et action.",
767
+ "add": "Ajouter une étape",
768
+ "remove": "Supprimer l’étape",
769
+ "paletteTitle": "Ajouter une étape",
770
+ "stats": "{runs} exécutions · {rate} % de réussite",
771
+ "emptyBody": "Aucune étape — ajoutez un déclencheur pour démarrer ce workflow."
772
+ },
773
+ "connectionStringField": {
774
+ "description": "Un champ de chaîne de connexion qui détecte le moteur de base de données à la saisie.",
775
+ "label": "Chaîne de connexion",
776
+ "helper": "postgres://user:motdepasse@hote:5432/base — mysql:// et sqlite: fonctionnent aussi.",
777
+ "quickFill": "Remplissage rapide :",
778
+ "host": "Hôte : {host}",
779
+ "invalidScheme": "Schéma de chaîne de connexion non reconnu.",
780
+ "incomplete": "Ajoutez un hôte et une base à la chaîne de connexion."
781
+ },
782
+ "tableInclusionChecklist": {
783
+ "description": "Les tables à inclure, avec le nombre de lignes et les alertes de données personnelles.",
784
+ "pii": "DCP",
785
+ "highVolume": "volume élevé",
786
+ "a11yLabel": "Tables à inclure",
787
+ "emptyTitle": "Aucune table trouvée",
788
+ "emptyBody": "Connectez une base de données et ses tables apparaîtront ici."
789
+ },
790
+ "columnMappingTable": {
791
+ "description": "Associe les colonnes d’un fichier importé aux champs d’une table.",
792
+ "skip": "Ne pas importer",
793
+ "sourceHeader": "Colonne source",
794
+ "sampleHeader": "Exemple",
795
+ "targetHeader": "Champ cible",
796
+ "emptyTitle": "Aucune colonne à associer",
797
+ "emptyBody": "Importez un fichier et ses colonnes apparaîtront ici."
798
+ },
799
+ "validationIssuesList": {
800
+ "description": "Problèmes d’import et de validation, du plus grave au moins grave, avec le nombre de lignes.",
801
+ "emptyTitle": "Aucun problème détecté",
802
+ "emptyBody": "Tout est en ordre — vous pouvez importer."
803
+ },
804
+ "exportBuilder": {
805
+ "description": "Configure un export de données : format, période et contenu.",
806
+ "format": "Format",
807
+ "from": "Du",
808
+ "to": "Au",
809
+ "groupBy": "Grouper par",
810
+ "includeCharts": "Inclure les graphiques",
811
+ "email": "M’envoyer l’export par e-mail",
812
+ "submit": "Exporter",
813
+ "running": "Préparation de votre export…",
814
+ "done": "Export prêt",
815
+ "failed": "L’export a échoué. Réessayez.",
816
+ "download": "Télécharger"
817
+ },
818
+ "questionBuilder": {
819
+ "description": "Un éditeur de sondage : ajoutez des types de question et réordonnez-les.",
820
+ "paletteTitle": "Ajouter une question",
821
+ "add": "Ajouter une question",
822
+ "remove": "Supprimer la question",
823
+ "moveUp": "Monter",
824
+ "moveDown": "Descendre",
825
+ "required": "Obligatoire",
826
+ "questionPlaceholder": "Posez une question…",
827
+ "emptyTitle": "Aucune question",
828
+ "emptyBody": "Choisissez un type de question pour commencer votre sondage."
829
+ },
830
+ "inlineEditableField": {
831
+ "description": "Une valeur modifiable d’un clic dans un document ou un canevas.",
832
+ "edit": "Modifier",
833
+ "save": "Enregistrer",
834
+ "cancel": "Annuler",
835
+ "empty": "Vide"
836
+ },
837
+ "passwordStrengthMeter": {
838
+ "description": "Un indicateur en quatre segments de la robustesse du mot de passe.",
839
+ "label": "Robustesse du mot de passe",
840
+ "weak": "Faible",
841
+ "fair": "Moyen",
842
+ "good": "Bon",
843
+ "strong": "Fort"
844
+ }
845
+ },
846
+ "chrome": {
847
+ "sidebarNav": {
848
+ "description": "La barre de navigation groupée de l’application, avec compteurs en direct.",
849
+ "a11yLabel": "Navigation principale",
850
+ "emptyTitle": "Pas encore de navigation",
851
+ "emptyBody": "Les tables incluses apparaîtront ici une fois une connexion générée."
852
+ },
853
+ "commandPalette": {
854
+ "description": "La palette ⌘K : rechercher actions, pages et enregistrements depuis n’importe où.",
855
+ "title": "Palette de commandes",
856
+ "placeholder": "Rechercher actions, pages et enregistrements…",
857
+ "navigate": "Naviguer",
858
+ "select": "Ouvrir",
859
+ "close": "Fermer",
860
+ "emptyTitle": "Aucun résultat",
861
+ "emptyBody": "Commencez à taper pour rechercher.",
862
+ "groupActions": "Actions",
863
+ "groupNavigate": "Naviguer",
864
+ "groupRecent": "Récents",
865
+ "groupPages": "Pages",
866
+ "groupMetrics": "Indicateurs",
867
+ "groupPeople": "Personnes",
868
+ "groupRecords": "Enregistrements"
869
+ },
870
+ "globalSearch": {
871
+ "description": "Recherche sur toutes les entités, avec facettes par type et extraits.",
872
+ "placeholder": "Rechercher partout…",
873
+ "all": "Tout",
874
+ "summary": "{count} résultats pour « {query} »",
875
+ "emptyTitle": "Aucun résultat",
876
+ "emptyBody": "Essayez un autre terme de recherche."
877
+ },
878
+ "breadcrumb": {
879
+ "description": "Le fil d’Ariane de l’enregistrement ou du dossier courant.",
880
+ "a11yLabel": "Fil d’Ariane"
881
+ },
882
+ "tabBar": {
883
+ "description": "Des onglets qui changent de panneau ou naviguent, avec compteurs optionnels.",
884
+ "a11yLabel": "Onglets"
885
+ },
886
+ "navCard": {
887
+ "description": "Une grille de cartes de liens pour les pages d’accueil et de hub.",
888
+ "emptyTitle": "Rien à afficher",
889
+ "emptyBody": "Les liens apparaîtront ici une fois les pages générées."
890
+ },
891
+ "shortcutsPanel": {
892
+ "description": "L’aide-mémoire des raccourcis clavier.",
893
+ "footerHint": "Appuyez sur ? à tout moment",
894
+ "then": "puis",
895
+ "emptyTitle": "Aucun raccourci enregistré."
896
+ },
897
+ "avatarStack": {
898
+ "description": "Des avatars superposés avec débordement « +N » et présence optionnelle.",
899
+ "online": "{count} en ligne"
900
+ }
901
+ },
902
+ "system": {
903
+ "stateHero": {
904
+ "description": "Un écran d’état pleine page pour 404, 500, hors ligne, accès refusé et maintenance.",
905
+ "notFoundTitle": "Cette page s’est perdue en route",
906
+ "notFoundBody": "La page recherchée a été déplacée, renommée, ou n’a jamais existé.",
907
+ "serverErrorTitle": "Quelque chose a cassé de notre côté",
908
+ "serverErrorBody": "L’erreur a été enregistrée et l’équipe notifiée. Réessayer fonctionne souvent.",
909
+ "offlineTitle": "Vous êtes hors ligne",
910
+ "offlineBody": "Vérifiez votre connexion — le tableau de bord se reconnecte automatiquement.",
911
+ "forbiddenTitle": "Vous n’avez pas accès",
912
+ "forbiddenBody": "Demandez à un administrateur de l’espace de travail de vous accorder l’accès.",
913
+ "maintenanceTitle": "Maintenance en cours",
914
+ "maintenanceBody": "Nous améliorons les choses. Cela prend généralement quelques minutes.",
915
+ "connErrorTitle": "Base de données injoignable",
916
+ "connErrorBody": "La connexion a été refusée ou a expiré. Vérifiez les paramètres de connexion.",
917
+ "backToDashboard": "Retour au tableau de bord",
918
+ "tryAgain": "Réessayer",
919
+ "retry": "Réessayer",
920
+ "testConnection": "Tester la connexion"
921
+ },
922
+ "emptyState": {
923
+ "description": "Un panneau centré « rien ici pour l’instant » avec actions optionnelles."
924
+ },
925
+ "statusPill": {
926
+ "description": "Un badge coloré pour une colonne enum — l’affichage de statut universel."
927
+ },
928
+ "alertBanner": {
929
+ "description": "Un encart en ligne pour les alertes de quota, de gel et de planification.",
930
+ "dismiss": "Fermer"
931
+ },
932
+ "statusBannerHero": {
933
+ "description": "Un bandeau de santé des services dont l’état dérive du pire service de la liste.",
934
+ "upTitle": "Tous les systèmes sont opérationnels",
935
+ "upBody": "Tous les services surveillés répondent normalement.",
936
+ "degradedTitle": "Performances dégradées",
937
+ "degradedBody": "Certains services sont plus lents que d’habitude. Nous investiguons.",
938
+ "downTitle": "Panne majeure",
939
+ "downBody": "Un ou plusieurs services sont indisponibles. Nous intervenons."
940
+ },
941
+ "connectionStatus": {
942
+ "description": "Le résultat de connexion ou de test d’une connexion de base de données.",
943
+ "idle": "Non connecté",
944
+ "connecting": "Connexion…",
945
+ "connected": "Connecté",
946
+ "failed": "Échec de la connexion",
947
+ "test": "Tester"
948
+ },
949
+ "autosaveIndicator": {
950
+ "description": "La pastille « non enregistré → enregistrement → enregistré » pour les documents en sauvegarde auto.",
951
+ "dirty": "Modifications non enregistrées",
952
+ "saving": "Enregistrement…",
953
+ "saved": "Toutes les modifications sont enregistrées",
954
+ "error": "Échec de l’enregistrement"
955
+ },
956
+ "progressLogConsole": {
957
+ "description": "Une console de logs en flux avec barre de progression, pour les tâches longues.",
958
+ "a11yLabel": "Journal de progression",
959
+ "progressLabel": "Progression",
960
+ "emptyTitle": "Rien à signaler pour l’instant",
961
+ "emptyBody": "Les lignes de log apparaîtront au démarrage de la tâche."
962
+ },
963
+ "diagnosticsReadout": {
964
+ "description": "Résultats des vérifications de connexion en lignes clé/valeur colorées, avec horodatage.",
965
+ "checkedAt": "Dernière vérification",
966
+ "host": "Hôte",
967
+ "dns": "DNS",
968
+ "tcp": "TCP",
969
+ "tls": "TLS",
970
+ "auth": "Authentification",
971
+ "latency": "Latence"
972
+ }
973
+ }
974
+ },
975
+ "grid": {
976
+ "dragHandle": "Faire glisser pour déplacer {title}",
977
+ "resizeHandle": "Redimensionner {title}",
978
+ "a11y": {
979
+ "grabbed": "{title} saisi. Utilisez les touches fléchées pour déplacer, maintenez Maj pour redimensionner, Entrée pour enregistrer, Échap pour annuler.",
980
+ "moved": "{title} déplacé vers la colonne {col}, ligne {row}.",
981
+ "resized": "{title} redimensionné à {w} colonnes sur {h} lignes.",
982
+ "committed": "{title} placé à la colonne {col}, ligne {row}.",
983
+ "reverted": "{title} remis à sa position initiale."
984
+ }
985
+ }
986
+ }